From 819d98d929dd4c76436abfb66e7993cd57b4fbc3 Mon Sep 17 00:00:00 2001 From: Jamey Huffnagle Date: Fri, 25 Oct 2024 12:17:16 -0400 Subject: [PATCH 01/81] feat(app, app-shell-odd): add Flex resource monitor (#16599) Closes EXEC-789 This PR adds a resource monitor to the ODD for select processes and general system metrics, dispatched hourly to Mixpanel if the user has opted-in. The shape of the data reported is the ResourceMonitorDetails interface. --- app-shell-odd/src/main.ts | 2 + app-shell-odd/src/monitor/ResourceMonitor.ts | 305 ++++++++++++++++++ .../monitor/__tests__/ResourceMonitor.test.ts | 162 ++++++++++ app-shell-odd/src/monitor/index.ts | 8 + .../analytics/__tests__/make-event.test.ts | 19 ++ app/src/redux/analytics/constants.ts | 6 + app/src/redux/analytics/make-event.ts | 9 + app/src/redux/analytics/mixpanel.ts | 7 +- app/src/redux/analytics/types.ts | 11 + 9 files changed, 527 insertions(+), 2 deletions(-) create mode 100644 app-shell-odd/src/monitor/ResourceMonitor.ts create mode 100644 app-shell-odd/src/monitor/__tests__/ResourceMonitor.test.ts create mode 100644 app-shell-odd/src/monitor/index.ts diff --git a/app-shell-odd/src/main.ts b/app-shell-odd/src/main.ts index b0f285fa194..ccb9ff61aa2 100644 --- a/app-shell-odd/src/main.ts +++ b/app-shell-odd/src/main.ts @@ -24,6 +24,7 @@ import { closeBrokerConnection, } from './notifications' import { setUserDataPath } from './early' +import { registerResourceMonitor } from './monitor' import type { OTLogger } from './log' import type { BrowserWindow } from 'electron' @@ -135,6 +136,7 @@ function startUp(): void { registerConfig(dispatch), registerDiscovery(dispatch), registerRobotSystemUpdate(dispatch), + registerResourceMonitor(dispatch), registerAppRestart(), registerUpdateBrightness(), registerNotify(dispatch, mainWindow), diff --git a/app-shell-odd/src/monitor/ResourceMonitor.ts b/app-shell-odd/src/monitor/ResourceMonitor.ts new file mode 100644 index 00000000000..e093ccbb716 --- /dev/null +++ b/app-shell-odd/src/monitor/ResourceMonitor.ts @@ -0,0 +1,305 @@ +import { exec } from 'child_process' +import { promises as fs } from 'fs' +import path from 'path' + +import { createLogger } from '../log' +import { UI_INITIALIZED } from '../constants' + +import type { Action, Dispatch } from '../types' + +export const PARENT_PROCESSES = [ + 'opentrons-robot-server.service', + 'opentrons-robot-app.service', +] as const +const REPORTING_INTERVAL_MS = 3600000 // 1 hour +const MAX_CMD_STR_LENGTH = 100 +const MAX_REPORTED_PROCESSES = 15 + +interface ProcessTreeNode { + pid: number + cmd: string + children: ProcessTreeNode[] +} + +interface ProcessDetails { + name: string + memRssMb: string +} + +interface ResourceMonitorDetails { + systemAvailMemMb: string + systemUptimeHrs: string + processesDetails: ProcessDetails[] +} + +interface ResourceMonitorOptions { + procPath?: string +} + +// Scrapes system and select process resource metrics, reporting those metrics to the browser layer. +// Note that only MAX_REPORTED_PROCESSES are actually dispatched. +export class ResourceMonitor { + private readonly monitoredProcesses: Set + private readonly log: ReturnType + private readonly procPath: string + private intervalId: NodeJS.Timeout | null + + constructor(options: ResourceMonitorOptions = {}) { + this.monitoredProcesses = new Set(PARENT_PROCESSES) + this.log = createLogger('monitor') + this.intervalId = null + this.procPath = options.procPath ?? '/proc' // Override used for testing purposes. + } + + start(dispatch: Dispatch): Dispatch { + // Scrape and report metrics on an interval. + const beginMonitor = (): void => { + if (this.intervalId == null) { + this.intervalId = setInterval(() => { + this.getResourceDetails() + .then(resourceDetails => { + this.log.debug('resource monitor report', { + resourceDetails, + }) + this.dispatchResourceDetails(resourceDetails, dispatch) + }) + .catch(error => { + this.log.error('Error monitoring process: ', error) + }) + }, REPORTING_INTERVAL_MS) + } else { + this.log.warn( + 'Attempted to start an already started instance of ResourceMonitor.' + ) + } + } + + return function handleAction(action: Action) { + switch (action.type) { + case UI_INITIALIZED: + beginMonitor() + } + } + } + + // Manually stop reporting, clearing internal state. + stop(): void { + if (this.intervalId != null) { + clearInterval(this.intervalId) + this.intervalId = null + this.monitoredProcesses.clear() + } + } + + private dispatchResourceDetails( + details: ResourceMonitorDetails, + dispatch: Dispatch + ): void { + const { processesDetails, systemUptimeHrs, systemAvailMemMb } = details + dispatch({ + type: 'analytics:RESOURCE_MONITOR_REPORT', + payload: { + systemUptimeHrs, + systemAvailMemMb, + processesDetails: processesDetails.slice(0, MAX_REPORTED_PROCESSES), // don't accidentally send too many items to mixpanel. + }, + }) + } + + private getResourceDetails(): Promise { + return Promise.all([ + this.getSystemAvailableMemory(), + this.getSystemUptimeHrs(), + this.getProcessDetails(), + ]).then(([systemAvailMemMb, systemUptimeHrs, processesDetails]) => ({ + systemAvailMemMb, + systemUptimeHrs, + processesDetails, + })) + } + + // Scrape system uptime from /proc/uptime. + private getSystemUptimeHrs(): Promise { + return fs + .readFile(path.join(this.procPath, 'uptime'), 'utf8') + .then(uptime => { + // First value is uptime in seconds, second is idle time + const uptimeSeconds = Math.floor(parseFloat(uptime.split(' ')[0])) + return (uptimeSeconds / 3600).toFixed(2) + }) + .catch(error => { + throw new Error( + `Failed to read system uptime: ${ + error instanceof Error ? error.message : String(error) + }` + ) + }) + } + + // Scrape system available memory from /proc/meminfo. + private getSystemAvailableMemory(): Promise { + return fs + .readFile(path.join(this.procPath, 'meminfo'), 'utf8') + .then(meminfo => { + const match = meminfo.match(/MemAvailable:\s+(\d+)\s+kB/) + if (match == null) { + throw new Error('Could not find MemAvailable in meminfo file') + } else { + const memInKb = parseInt(match[1], 10) + return (memInKb / 1024).toFixed(2) + } + }) + .catch(error => { + throw new Error( + `Failed to read available memory info: ${ + error instanceof Error ? error.message : String(error) + }` + ) + }) + } + + // Given parent process names, get metrics for parent and all spawned processes. + private getProcessDetails(): Promise { + return Promise.all( + Array.from(this.monitoredProcesses).map(parentProcess => + this.getProcessTree(parentProcess) + .then(processTree => { + if (processTree == null) { + return [] + } else { + return this.getProcessDetailsFlattened(processTree) + } + }) + .catch(error => { + this.log.error('Failed to get process tree', { + parentProcess, + error, + }) + return [] + }) + ) + ).then(detailsArrays => detailsArrays.flat()) + } + + private getProcessTree( + parentProcess: string + ): Promise { + return this.getProcessPid(parentProcess).then(parentPid => { + if (parentPid == null) { + return null + } else { + return this.buildProcessTree(parentPid) + } + }) + } + + private getProcessPid(serviceName: string): Promise { + return new Promise((resolve, reject) => { + exec(`systemctl show ${serviceName} -p MainPID`, (error, stdout) => { + if (error != null) { + reject( + new Error(`Failed to get PID for ${serviceName}: ${error.message}`) + ) + } else { + const match = stdout.match(/MainPID=(\d+)/) + + if (match == null) { + resolve(null) + } else { + const pid = parseInt(match[1], 10) + resolve(pid > 1 ? pid : null) + } + } + }) + }) + } + + // Recursively build the process tree, scraping the cmdline string for each pid. + private buildProcessTree(pid: number): Promise { + return Promise.all([ + this.getProcessCmdline(pid), + this.getChildProcessesFrom(pid), + ]).then(([cmd, childPids]) => { + return Promise.all( + childPids.map(childPid => this.buildProcessTree(childPid)) + ).then(children => ({ + pid, + cmd, + children, + })) + }) + } + + // Get the exact cmdline string for the given pid, truncating if necessary. + private getProcessCmdline(pid: number): Promise { + return fs + .readFile(path.join(this.procPath, String(pid), 'cmdline'), 'utf8') + .then(cmdline => { + const cmd = cmdline.replace(/\0/g, ' ').trim() + return cmd.length > MAX_CMD_STR_LENGTH + ? `${cmd.substring(0, MAX_CMD_STR_LENGTH)}...` + : cmd + }) + .catch(error => { + this.log.error(`Failed to read cmdline for PID ${pid}`, error) + return `PID ${pid}` + }) + } + + private getChildProcessesFrom(parentPid: number): Promise { + return new Promise((resolve, reject) => { + exec(`pgrep -P ${parentPid}`, (error, stdout) => { + // code 1 means no children found + if (error != null && error.code !== 1) { + reject(error) + } else { + const children = stdout + .trim() + .split('\n') + .filter(line => line.length > 0) + .map(pid => parseInt(pid, 10)) + + resolve(children) + } + }) + }) + } + + // Get the actual metric(s) for a given node and recursively get metric(s) for all child nodes. + private getProcessDetailsFlattened( + node: ProcessTreeNode + ): Promise { + return this.getProcessMemory(node.pid).then(memRssMb => { + const currentNodeDetails: ProcessDetails = { + name: node.cmd, + memRssMb, + } + + return Promise.all( + node.children.map(child => this.getProcessDetailsFlattened(child)) + ).then(childDetailsArrays => { + return [currentNodeDetails, ...childDetailsArrays.flat()] + }) + }) + } + + // Scrape VmRSS from /proc/pid/status for a given pid. + private getProcessMemory(pid: number): Promise { + return fs + .readFile(path.join(this.procPath, String(pid), 'status'), 'utf8') + .then(status => { + const match = status.match(/VmRSS:\s+(\d+)\s+kB/) + if (match == null) { + throw new Error('Could not find VmRSS in status file') + } else { + const memInKb = parseInt(match[1], 10) + return (memInKb / 1024).toFixed(2) + } + }) + .catch(error => { + throw new Error( + `Failed to read memory info for PID ${pid}: ${error.message}` + ) + }) + } +} diff --git a/app-shell-odd/src/monitor/__tests__/ResourceMonitor.test.ts b/app-shell-odd/src/monitor/__tests__/ResourceMonitor.test.ts new file mode 100644 index 00000000000..416ddd15204 --- /dev/null +++ b/app-shell-odd/src/monitor/__tests__/ResourceMonitor.test.ts @@ -0,0 +1,162 @@ +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-nocheck -- Get around private method access warnings. + +import path from 'path' +import fs from 'fs-extra' +import tempy from 'tempy' +import { + vi, + describe, + beforeEach, + afterEach, + afterAll, + it, + expect, +} from 'vitest' +import { exec } from 'child_process' + +import { ResourceMonitor, PARENT_PROCESSES } from '../ResourceMonitor' +import { UI_INITIALIZED } from '../../constants' + +vi.mock('child_process') +vi.mock('../../log', async importOriginal => { + const actual = await importOriginal() + return { + ...actual, + createLogger: () => ({ + debug: vi.fn(), + error: vi.fn(), + }), + } +}) + +describe('ResourceMonitor', () => { + let procDir: string + let monitor: ResourceMonitor + const tempDirs: string[] = [] + + beforeEach(async () => { + procDir = tempy.directory() + tempDirs.push(procDir) + + vi.mocked(exec).mockImplementation((cmd, callback) => { + if (cmd.startsWith('systemctl')) { + callback(null, 'MainPID=1234\n') + } else if (cmd.startsWith('pgrep')) { + callback({ code: 1 } as any, '') + } + return {} as any + }) + + // Populate mock files with some mock data. + await fs.writeFile(path.join(procDir, 'uptime'), '3600.00 7200.00\n') + await fs.writeFile( + path.join(procDir, 'meminfo'), + 'MemTotal: 8192000 kB\nMemAvailable: 4096000 kB\n' + ) + + const parentPidDir = path.join(procDir, '1234') + await fs.ensureDir(parentPidDir) + await fs.writeFile( + path.join(parentPidDir, 'cmdline'), + 'process1234\0arg1\0arg2' + ) + await fs.writeFile( + path.join(parentPidDir, 'status'), + 'Name:\tprocess\nVmRSS:\t2048 kB\n' + ) + + monitor = new ResourceMonitor({ procPath: procDir }) + }) + + afterEach(() => { + monitor.stop() + }) + + afterAll(() => { + vi.resetAllMocks() + return Promise.all(tempDirs.map(d => fs.remove(d))) + }) + + describe('getSystemUptimeHrs', () => { + it('reads and parses system uptime', () => { + return monitor.getResourceDetails().then(details => { + expect(details.systemUptimeHrs).toBe('1.00') + }) + }) + + it('handles error reading uptime file', async () => { + await fs.remove(path.join(procDir, 'uptime')) + await expect(monitor.getResourceDetails()).rejects.toThrow( + 'Failed to read system uptime' + ) + }) + }) + + describe('getSystemAvailableMemory', () => { + it('reads and parses available memory', () => { + return monitor.getResourceDetails().then(details => { + expect(details.systemAvailMemMb).toBe('4000.00') + }) + }) + + it('handles missing MemAvailable in meminfo', async () => { + await fs.writeFile( + path.join(procDir, 'meminfo'), + 'MemTotal: 8192000 kB\n' + ) + + await expect(monitor.getResourceDetails()).rejects.toThrow( + 'Could not find MemAvailable in meminfo file' + ) + }) + }) + + describe('getProcessDetails', () => { + it('collects process details for parent process', () => { + return monitor.getResourceDetails().then(details => { + expect(details.processesDetails).toHaveLength(PARENT_PROCESSES.length) + expect(details.processesDetails[0]).toEqual({ + name: 'process1234 arg1 arg2', + memRssMb: '2.00', + }) + }) + }) + + it('handles missing process', () => { + // Mock exec to return non-existent PID + vi.mocked(exec).mockImplementation((cmd, callback) => { + if (cmd.startsWith('systemctl')) { + callback(null, 'MainPID=9999\n') + } else { + callback({ code: 1 } as any, '') + } + return {} as any + }) + + return monitor.getResourceDetails().then(details => { + expect(details.processesDetails).toHaveLength(0) + }) + }) + + it('handles errors reading process details', async () => { + await fs.remove(path.join(procDir, '1234', 'status')) + await monitor.getResourceDetails().then(details => { + expect(details.processesDetails).toHaveLength(0) + }) + }) + }) + + describe('start', () => { + it(`handler correctly updates internal state when ${UI_INITIALIZED} is dispatched`, () => { + const dispatch = vi.fn() + const handler = monitor.start(dispatch) + + expect(typeof handler).toBe('function') + + handler({ type: UI_INITIALIZED }) + + expect(monitor.intervalId).not.toBeNull() + }) + }) +}) diff --git a/app-shell-odd/src/monitor/index.ts b/app-shell-odd/src/monitor/index.ts new file mode 100644 index 00000000000..8f257b19aa1 --- /dev/null +++ b/app-shell-odd/src/monitor/index.ts @@ -0,0 +1,8 @@ +import { ResourceMonitor } from './ResourceMonitor' + +import type { Dispatch } from '../types' + +export function registerResourceMonitor(dispatch: Dispatch): Dispatch { + const resourceMonitor = new ResourceMonitor() + return resourceMonitor.start(dispatch) +} diff --git a/app/src/redux/analytics/__tests__/make-event.test.ts b/app/src/redux/analytics/__tests__/make-event.test.ts index bd938292d5a..70506dc162a 100644 --- a/app/src/redux/analytics/__tests__/make-event.test.ts +++ b/app/src/redux/analytics/__tests__/make-event.test.ts @@ -121,4 +121,23 @@ describe('analytics events map', () => { }) }) }) + + describe('events with calibration data', () => { + it('analytics:RESOURCE_MONITOR_REPORT -> resourceMonitorReport event', () => { + const state = {} as any + const action = { + type: 'analytics:RESOURCE_MONITOR_REPORT', + payload: { + systemAvailMemMb: '500', + systemUptimeHrs: '111', + processesDetails: [], + }, + } as any + + return expect(makeEvent(action, state)).resolves.toEqual({ + name: 'resourceMonitorReport', + properties: { ...action.payload }, + }) + }) + }) }) diff --git a/app/src/redux/analytics/constants.ts b/app/src/redux/analytics/constants.ts index cf99bfad9ea..cde9b0a1d59 100644 --- a/app/src/redux/analytics/constants.ts +++ b/app/src/redux/analytics/constants.ts @@ -97,3 +97,9 @@ export const ANALYTICS_QUICK_TRANSFER_DETAILS_PAGE = 'quickTransferDetailsPage' export const ANALYTICS_QUICK_TRANSFER_RUN_FROM_DETAILS = 'quickTransferRunFromDetails' export const ANALYTICS_QUICK_TRANSFER_RERUN = 'quickTransferReRunFromSummary' + +/** + * Resource Monitor Analytics + */ +export const ANALYTICS_RESOURCE_MONITOR_REPORT: 'analytics:RESOURCE_MONITOR_REPORT' = + 'analytics:RESOURCE_MONITOR_REPORT' diff --git a/app/src/redux/analytics/make-event.ts b/app/src/redux/analytics/make-event.ts index da3a812fbdc..bc5c8955104 100644 --- a/app/src/redux/analytics/make-event.ts +++ b/app/src/redux/analytics/make-event.ts @@ -247,6 +247,15 @@ export function makeEvent( }) } + case Constants.ANALYTICS_RESOURCE_MONITOR_REPORT: { + return Promise.resolve({ + name: 'resourceMonitorReport', + properties: { + ...action.payload, + }, + }) + } + case RobotAdmin.RESET_CONFIG: { const { resets } = action.payload return Promise.resolve({ diff --git a/app/src/redux/analytics/mixpanel.ts b/app/src/redux/analytics/mixpanel.ts index 20a5a2ed170..aa5ad5a7893 100644 --- a/app/src/redux/analytics/mixpanel.ts +++ b/app/src/redux/analytics/mixpanel.ts @@ -43,9 +43,12 @@ export function trackEvent( log.debug('Trackable event', { event, optedIn }) if (MIXPANEL_ID != null && optedIn) { - if (event.superProperties != null) mixpanel.register(event.superProperties) - if ('name' in event && event.name != null) + if (event.superProperties != null) { + mixpanel.register(event.superProperties) + } + if ('name' in event && event.name != null) { mixpanel.track(event.name, event.properties) + } } } diff --git a/app/src/redux/analytics/types.ts b/app/src/redux/analytics/types.ts index dfb3e374ad9..d27c2955fe2 100644 --- a/app/src/redux/analytics/types.ts +++ b/app/src/redux/analytics/types.ts @@ -5,6 +5,7 @@ import type { Config } from '../config/types' import type { ANALYTICS_PIPETTE_OFFSET_STARTED, ANALYTICS_TIP_LENGTH_STARTED, + ANALYTICS_RESOURCE_MONITOR_REPORT, } from './constants' export type AnalyticsConfig = Config['analytics'] @@ -118,9 +119,19 @@ export interface TipLengthStartedAnalyticsAction { } } +export interface ResourceMonitorAnalyticsAction { + type: typeof ANALYTICS_RESOURCE_MONITOR_REPORT + payload: { + systemAvailMemMb: string + systemUptimeHrs: string + processesDetails: Array> + } +} + export type AnalyticsTriggerAction = | PipetteOffsetStartedAnalyticsAction | TipLengthStartedAnalyticsAction + | ResourceMonitorAnalyticsAction export interface SessionInstrumentAnalyticsData { sessionType: string From 025d5e116d53c0cfe22bc9cf10db6bf5dfc558a9 Mon Sep 17 00:00:00 2001 From: Brent Hagen Date: Fri, 25 Oct 2024 12:51:26 -0400 Subject: [PATCH 02/81] feat(app): add 8.0 release translations (#16605) adds a set of translation keys corresponding roughly to copy added in 8.0 release development re PLAT-576 --- app/src/assets/localization/zh/anonymous.json | 6 ++ .../assets/localization/zh/app_settings.json | 8 +- app/src/assets/localization/zh/branded.json | 6 ++ .../localization/zh/device_details.json | 2 + .../localization/zh/device_settings.json | 1 + .../localization/zh/devices_landing.json | 5 +- .../localization/zh/drop_tip_wizard.json | 17 +++- .../localization/zh/error_recovery.json | 44 ++++++++- .../zh/labware_position_check.json | 2 +- .../zh/protocol_command_text.json | 15 +++ .../localization/zh/protocol_details.json | 6 +- .../assets/localization/zh/protocol_info.json | 7 +- .../localization/zh/protocol_setup.json | 38 +++++++- .../localization/zh/quick_transfer.json | 95 +++++++++++++++++-- .../localization/zh/robot_calibration.json | 2 + .../assets/localization/zh/run_details.json | 22 ++++- app/src/assets/localization/zh/shared.json | 3 +- .../localization/zh/top_navigation.json | 1 + 18 files changed, 251 insertions(+), 29 deletions(-) diff --git a/app/src/assets/localization/zh/anonymous.json b/app/src/assets/localization/zh/anonymous.json index 696dff65751..045245c84f7 100644 --- a/app/src/assets/localization/zh/anonymous.json +++ b/app/src/assets/localization/zh/anonymous.json @@ -2,6 +2,8 @@ "a_robot_software_update_is_available": "需要更新工作站软件版本才能使用该版本的桌面应用程序运行协议。转到工作站这个金属块是一个特制的工具,完美适配您的甲板,有助于校准。如果您没有校准块,请发送电子邮件给支持团队,以便我们寄送一个给您。在您提供的信息中,请确保包括您的姓名、公司或机构名称和寄送地址。在等待校准块到达过程中,您可以暂时利用工作站里垃圾桶上的平面进行校准。", "calibration_on_opentrons_tips_is_important": "使用上述吸头和吸头盒进行校准非常重要,因为工作站的准确性是基于这些吸头的已知尺寸来确定的。", "choose_what_data_to_share": "选择要共享的工作站数据。", @@ -15,6 +17,7 @@ "contact_support_for_connection_help": "如果以上方法都无法解决问题,请联系支持人员寻求帮助(通过此应用程序中的问号链接,或发送电子邮件至{{support_email}}。)", "deck_fixture_setup_modal_bottom_description": "有关安装不同类型固定装置的详细信息,请与支持人员联系。", "delete_protocol_from_app": "删除协议,针对错误进行修改,然后从桌面应用程序将协议重新发送到此工作站。", + "delete_transfer_from_app": "删除快速移液,修改并解决错误,在工作站显示屏幕上重新创建此移液。", "error_boundary_description": "您需要重新启动触摸屏。联系支持人员以获取帮助。", "estop_pressed_description": "首先,安全清理甲板上的任何实验耗材和洒出的液体。然后,顺时针旋转急停开关。最后,让工作站将龙门架移动到其原位。", "find_your_robot": "在应用程序的“设备”栏找到您的工作站,以安装软件更新。", @@ -34,6 +37,7 @@ "module_calibration_get_started": "开始前,请从工作台上移除实验耗材并清理工作区,以便于校准。还需准备好右侧显示的所需设备。校准适配器随模块一起提供。移液器探头随移液器一起提供。", "module_error_contact_support": "尝试关闭模块电源,然后再打开。如果报错仍然存在,请与支持人员联系。", "network_setup_menu_description": "您将使用此连接来运行软件更新,并将协议加载到您的工作站上。", + "new_robot_instructions": "设置新工作站时,请遵循触摸屏上的指示。有关更多信息,请参阅您的工作站快速入门指南。", "oem_mode_description": "启用OEM模式,以从Flex触摸屏中移除Opentrons的相关信息。", "opentrons_app_successfully_updated": "应用程序已成功更新。", "opentrons_app_update": "应用程序更新", @@ -42,6 +46,7 @@ "opentrons_app_will_use_interpreter": "在指定路径后,应用程序将使用此路径的Python解释器,而不是默认绑定的Python解释器。", "opentrons_cares_about_privacy": "我们注重您的隐私。我们匿名化所有数据,仅用于改进我们的产品。", "opentrons_def": "已验证的数据", + "opentrons_flex_quickstart_guide": "快速入门指南", "opentrons_labware_def": "已验证的实验耗材数据", "opentrons_tip_racks_recommended": "建议使用Opentrons吸头盒。其他吸头盒无法保证精度。", "opentrons_tip_rack_name": "opentrons", @@ -62,6 +67,7 @@ "share_logs_with_opentrons_description": "通过自动发送匿名的工作站日志来帮助改进此产品。这些日志用于解决工作站问题和发现错误趋势。", "show_labware_offset_snippets_description": "仅适用于需要在应用程序之外应用耗材校准数据的用户。启用后,在设置协议过程中可访问Jupyter Notebook和SSH的代码片段。", "something_seems_wrong": "您的移液器可能有问题。退出设置并联系支持人员以获取帮助。", + "storage_limit_reached_description": "您的工作站已达到可存储的快速移液数量上限。在创建新的快速移液之前,您必须删除一个现有的快速移液。", "these_are_advanced_settings": "这些是高级设置。请勿在没有支持团队帮助的情况下尝试调整这些设置。更改这些设置可能会影响您的移液器寿命。这些设置不会覆盖协议中定义的任何移液器设置。", "update_requires_restarting_app": "更新需要重新启动应用程序。", "update_robot_software_description": "绕过自动更新过程并手动更新工作站软件", diff --git a/app/src/assets/localization/zh/app_settings.json b/app/src/assets/localization/zh/app_settings.json index 9e4a9f1bbc7..3405d5edbfd 100644 --- a/app/src/assets/localization/zh/app_settings.json +++ b/app/src/assets/localization/zh/app_settings.json @@ -1,10 +1,10 @@ { + "__dev_internal__enableLabwareCreator": "启用应用实验耗材创建器", + "__dev_internal__enableLocalization": "Enable App Localization", "__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", + "__dev_internal__protocolStats": "协议统计", + "__dev_internal__protocolTimeline": "协议时间线", "add_folder_button": "添加实验耗材源文件夹", "add_ip_button": "添加", "add_ip_error": "输入IP地址或主机名", diff --git a/app/src/assets/localization/zh/branded.json b/app/src/assets/localization/zh/branded.json index 4bff5f976d4..c38888398f1 100644 --- a/app/src/assets/localization/zh/branded.json +++ b/app/src/assets/localization/zh/branded.json @@ -2,6 +2,8 @@ "a_robot_software_update_is_available": "需要更新工作站软件才能使用此版本的Opentrons应用程序运行协议。转到工作站", "about_flex_gripper": "关于Flex转板抓手", "alternative_security_types_description": "Opentrons应用程序支持将Flex连接到各种企业接入点。通过USB连接并在应用程序中完成设置。", + "attach_a_pipette_for_quick_transfer": "要创建快速移液,您需要将移液器安装到您的Opentrons Flex上。", + "attach_a_pipette": "将移液器连接到Flex", "calibration_block_description": "这个金属块是一个特制的工具,完美适配您的甲板,有助于校准。如果您没有校准块,请发送电子邮件至support@opentrons.com,以便我们寄送一个给您。在您提供的信息中,请确保包括您的姓名、公司或机构名称和寄送地址。在等待校准块到达过程中,您可以暂时利用工作站里垃圾桶上的平面进行校准。", "calibration_on_opentrons_tips_is_important": "使用上述Opentrons吸头和吸头盒进行校准非常重要,因为工作站的准确性是基于这些吸头的已知尺寸来确定的。", "choose_what_data_to_share": "选择要与Opentrons共享的数据。", @@ -15,6 +17,7 @@ "contact_support_for_connection_help": "如果以上方法都无法解决问题,请联系Opentrons支持人员寻求帮助(通过此应用程序中的问号链接,或发送电子邮件至{{support_email}}。)", "deck_fixture_setup_modal_bottom_description": "有关安装不同类型固定装置的详细信息,请扫描二维码或在support.opentrons.com上搜索“deck configuration”", "delete_protocol_from_app": "删除协议,针对错误进行修改,然后从Opentrons应用程序将协议重新发送到此工作站。", + "delete_transfer_from_app": "删除快速移液,修改并解决错误,在Flex显示屏幕上重新创建此移液。", "error_boundary_description": "您需要重新启动触摸屏。然后从Opentrons应用程序下载工作站日志并将其发送到support@opentrons.com寻求帮助。", "estop_pressed_description": "首先,安全清理甲板上的任何实验耗材或洒出液体。然后,顺时针旋转急停开关。最后,让Flex将龙门架移动到其原位。", "find_your_robot": "在Opentrons应用程序中找到您的工作站以安装软件更新。", @@ -34,6 +37,7 @@ "module_calibration_get_started": "开始前,请从工作台上移除实验耗材并清理工作区,以便于校准。还需准备好右侧显示的所需设备。校准适配器随模块一起提供。移液器探头随Flex移液器一起提供。", "module_error_contact_support": "尝试关闭模块电源,然后再打开。如果报错仍然存在,请与Opentrons支持人员联系。", "network_setup_menu_description": "您将使用此连接来运行软件更新,并将协议加载到您的Opentrons Flex上。", + "new_robot_instructions": "设置新的Flex时,请遵循触摸屏上的指示。有关更多信息,请参阅您的工作站快速入门指南。", "oem_mode_description": "启用OEM模式,以从Flex触摸屏中移除Opentrons的所有信息。", "opentrons_app_successfully_updated": "Opentrons应用程序已成功更新。.", "opentrons_app_update": "Opentrons应用程序更新", @@ -42,6 +46,7 @@ "opentrons_app_will_use_interpreter": "如果指定,Opentrons应用程序将在此路径使用Python解释器,而不是默认绑定的Python解释器。", "opentrons_cares_about_privacy": "Opentrons关心您的隐私。我们匿名化所有数据,仅用于改进我们的产品。", "opentrons_def": "已验证的Opentrons数据", + "opentrons_flex_quickstart_guide": "Opentrons Flex 快速入门指南", "opentrons_labware_def": "已验证的Opentrons实验耗材数据", "opentrons_tip_rack_name": "opentrons", "opentrons_tip_racks_recommended": "建议使用Opentrons吸头盒。其他吸头盒无法保证精度。", @@ -62,6 +67,7 @@ "share_logs_with_opentrons_description": "通过自动发送匿名的工作站日志,帮助Opentrons改进产品和服务。Opentrons使用这些日志来解决工作站问题并发现错误趋势。", "show_labware_offset_snippets_description": "仅适用于需要在Opentrons应用程序之外应用耗材校准数据的用户。启用后,在设置协议过程中可访问Jupyter Notebook和SSH的代码片段。", "something_seems_wrong": "您的移液器可能有问题。退出设置并联系Opentrons支持人员以获取帮助。", + "storage_limit_reached_description": "您的 Opentrons Flex 已达到可存储的快速移液数量上限。在创建新的快速移液之前,您必须删除一个现有的快速移液。", "these_are_advanced_settings": "这些是高级设置。请勿在没有Opentrons支持团队帮助的情况下尝试调整这些设置。更改这些设置可能会影响您的移液器寿命。这些设置不会覆盖协议中定义的任何移液器设置。", "update_requires_restarting_app": "更新需要重新启动Opentrons应用程序。", "update_robot_software_description": "绕过Opentrons应用程序自动更新过程并手动更新工作站软件", diff --git a/app/src/assets/localization/zh/device_details.json b/app/src/assets/localization/zh/device_details.json index 39115321f99..a19e61a365b 100644 --- a/app/src/assets/localization/zh/device_details.json +++ b/app/src/assets/localization/zh/device_details.json @@ -3,6 +3,7 @@ "about_module": "关于{{name}}", "about_pipette_name": "关于{{name}}移液器", "about_pipette": "关于移液器", + "abs_reader_status": "吸光度读板器状态", "add_fixture_description": "将此硬件添加至甲板配置。它在协议分析期间将会被引用。", "add_to_slot": "添加到板位{{slotName}}", "add": "添加", @@ -137,6 +138,7 @@ "recalibrate_pipette_offset": "重新校准移液器偏移", "recalibrate_pipette": "重新校准移液器", "recent_protocol_runs": "最近的协议运行", + "rerun_loading": "数据完全加载前,禁止协议重新运行", "rerun_now": "立即重新运行协议", "reset_all": "重置全部", "reset_estop": "重置急停", diff --git a/app/src/assets/localization/zh/device_settings.json b/app/src/assets/localization/zh/device_settings.json index c69e9e46131..ecd81c941dd 100644 --- a/app/src/assets/localization/zh/device_settings.json +++ b/app/src/assets/localization/zh/device_settings.json @@ -319,6 +319,7 @@ "wpa2_personal": "WPA2个人", "wpa2_personal_description": "大多数实验室都使用此方法", "yes_clear_data_and_restart_robot": "是,清除数据并重新启动工作站", + "you_should_not_downgrade": "您不应降级到工作站制造日期之前的软件版本。", "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 index 587959751e9..8e6af9d5ba9 100644 --- a/app/src/assets/localization/zh/devices_landing.json +++ b/app/src/assets/localization/zh/devices_landing.json @@ -8,8 +8,8 @@ "devices": "设备", "disconnect_from_network": "断开网络连接", "empty": "空", - "forget_unavailable_robot": "忘记无法使用的工作站", - "go_to_run": "去运行", + "forget_unavailable_robot": "删除无法使用的工作站", + "go_to_run": "返回运行界面", "home_gantry": "龙门架归位", "how_to_setup_a_robot": "如何设置新工作站", "idle": "空闲", @@ -28,6 +28,7 @@ "modules": "模块", "no_robots_found": "未找到工作站", "not_available": "不可用({{count}})", + "ot2_quickstart_guide": "OT-2 快速入门指南", "refresh": "刷新", "restart_the_app": "重启应用程序", "restart_the_robot": "重启工作站", diff --git a/app/src/assets/localization/zh/drop_tip_wizard.json b/app/src/assets/localization/zh/drop_tip_wizard.json index 8984387755e..a5ae8faebfc 100644 --- a/app/src/assets/localization/zh/drop_tip_wizard.json +++ b/app/src/assets/localization/zh/drop_tip_wizard.json @@ -5,22 +5,31 @@ "blowout_liquid": "吹出液体", "cant_safely_drop_tips": "无法安全丢弃吸头", "choose_blowout_location": "选择吹液位置", + "choose_deck_location": "选择甲板位置", "choose_drop_tip_location": "选择吸头丢弃位置", "confirm_blowout_location": "移液器是否位于应吹出液体的位置?", "confirm_drop_tip_location": "移液器是否位于应丢弃吸头的位置?", + "confirm_position": "确认位置", "confirm_removal_and_home": "确认移除并回到原点", + "continue": "继续", "drop_tip_complete": "吸头丢弃完成", "drop_tip_failed": "丢弃吸头操作未能完成,请联系技术支持获取帮助。", "drop_tips": "丢弃吸头", "error_dropping_tips": "丢弃吸头时发生错误", + "exit_and_home_pipette": "退出并归位移液器", "exit_screen_title": "在完成吸头丢弃前退出?", + "exit": "退出", "getting_ready": "正在准备…", "go_back": "返回", + "jog_too_far": "移动过远?", + "liquid_damages_pipette": "如果移液器中有液体,将移液器归位可能会损坏它。您必须在使用移液器之前取下所有吸头。", + "liquid_damages_this_pipette": "如果{{mount}}移液器的移液器中有液体,将其归位可能会损坏它。您必须在使用移液器之前取下所有吸头。", "move_to_slot": "移至板位", "no_proceed_to_drop_tip": "否,继续进行吸头移除", "position_and_blowout": "确保移液器吸头尖端位于指定位置的正上方并保持水平。如果不是,请使用下面的控制键或键盘微调移液器直到正确位置。", "position_and_drop_tip": "确保移液器吸头尖端位于指定位置的正上方并保持水平。如果不是,请使用下面的控制键或键盘微调移液器直到正确位置。", "position_the_pipette": "调整移液器位置", + "remove_any_attached_tips": "移除任何已安装的吸头", "remove_the_tips": "在协议中再次使用前,您可能需要从{{mount}}移液器上移除吸头。", "remove_the_tips_from_pipette": "在协议中再次使用前,您可能需要从移液器上移除吸头。", "remove_the_tips_manually": "手动移除吸头,然后使龙门架回原点。在拾取吸头的状态下归位可能导致移液器吸入液体并损坏。", @@ -29,11 +38,15 @@ "select_blowout_slot_odd": "您可以将液体吹入耗材中。
龙门架移动到选定的板位后,使用位置控制按键将移液器移动到吹出液体的确切位置。", "select_drop_tip_slot": "您可以将吸头返回吸头架或丢弃它们。在右侧的甲板图上选择您想丢弃吸头的板位。确认后龙门架将移动到选定的板位。", "select_drop_tip_slot_odd": "您可以将吸头放回吸头架或丢弃它们。
龙门架移动到选定的板位后,使用位置控制按键将移液器移动到丢弃吸头的确切位置。", + "skip_and_home_pipette": "跳过并归位移液器", "skip": "跳过", "stand_back_blowing_out": "请远离,工作站正在吹出液体", "stand_back_dropping_tips": "请远离,工作站正在丢弃吸头", "stand_back_robot_in_motion": "请远离,工作站正在移动", - "tips_are_attached": "吸头已拾取", - "tips_may_be_attached": "可能已拾取吸头。", + "start_over": "重新开始", + "trash_bin_in_slot": "垃圾桶在 {{slot}}", + "waste_chute_in_slot": "外置垃圾槽在 {{slot}}", + "where_to_blowout": "您希望在哪里吹出液体?", + "where_to_drop_tips": "您希望在哪里丢弃吸头?", "yes_blow_out_liquid": "是的,将液体吹入耗材中" } diff --git a/app/src/assets/localization/zh/error_recovery.json b/app/src/assets/localization/zh/error_recovery.json index 2383ca8f850..dddf7923d4b 100644 --- a/app/src/assets/localization/zh/error_recovery.json +++ b/app/src/assets/localization/zh/error_recovery.json @@ -1,4 +1,5 @@ { + "another_app_controlling_robot": "工作站的触摸屏或另一台装有应用程序的电脑正在控制这个工作站。", "are_you_sure_you_want_to_cancel": "您确定要取消吗?", "at_step": "在步骤", "back_to_menu": "返回菜单", @@ -11,25 +12,44 @@ "change_location": "更改位置", "change_tip_pickup_location": "更换拾取吸头的位置", "choose_a_recovery_action": "选择恢复操作", + "close_door_to_resume": "关闭工作站门以继续", + "close_robot_door": "关闭移液工作站前门", + "close_the_robot_door": "关闭工作站门,然后继续恢复操作。", "confirm": "确认", "continue": "继续", "continue_run_now": "现在继续运行", "continue_to_drop_tip": "继续丢弃吸头", + "ensure_lw_is_accurately_placed": "确保实验耗材已准确放置在甲板槽中,防止进一步出现错误", + "error_details": "错误详情", + "error_on_robot": "{{robot}}上的错误", "error": "错误", "failed_dispense_step_not_completed": "中断运行的最后一步液体排出失败,恢复程序将不会继续运行这一步骤,请手动完成这一步的移液操作。运行将继续从下一步开始。继续之前,请关闭工作站门。", "failed_step": "失败步骤", + "first_is_gripper_holding_labware": "首先,抓扳手是否夹着实验耗材?", "go_back": "返回", + "gripper_error": "抓扳手错误", + "gripper_errors_occur_when": "当抓扳手停滞或与甲板上另一物体碰撞时,会发生抓扳手错误,这通常是由于实验耗材放置不当或实验耗材偏移不准确所致", + "gripper_releasing_labware": "抓扳手正在释放实验耗材", + "gripper_will_release_in_s": "抓扳手将在{{seconds}}秒后释放实验耗材", + "homing_pipette_dangerous": "如果移液器中有液体,将{{mount}}移液器归位可能会损坏它。您必须在使用移液器之前取下所有吸头。", + "if_issue_persists_gripper_error": "如果问题持续存在,请取消运行并重新运行抓扳手校准", + "if_issue_persists_overpressure": "如果问题持续存在,请取消运行并对协议进行必要的更改", + "if_issue_persists_tip_not_detected": "如果问题持续存在,请取消运行并启动实验耗材位置检查", "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": "要在后续的运行中忽略类似错误吗?", + "labware_released_from_current_height": "将从当前高度释放实验耗材", "launch_recovery_mode": "启动恢复模式", "manually_fill_liquid_in_well": "手动填充孔位{{well}}中的液体", "manually_fill_well_and_skip": "手动填充孔位并跳到下一步", + "manually_move_lw_and_skip": "手动移动实验耗材并跳至下一步", + "manually_move_lw_on_deck": "手动移动实验耗材", + "manually_replace_lw_and_retry": "手动更换实验耗材并重试此步骤", + "manually_replace_lw_on_deck": "手动更换实验耗材", "next_step": "下一步", + "next_try_another_action": "接下来,您可以尝试另一个恢复操作或取消运行。", "no_liquid_detected": "未检测到液体", "pick_up_tips": "取吸头", "pipette_overpressure": "移液器超压", @@ -39,23 +59,32 @@ "recovery_action_failed": "{{action}}失败", "recovery_mode": "恢复模式", "recovery_mode_explanation": "恢复模式为您提供运行错误后的手动处理引导。
您可以进行调整以确保发生错误时正在进行的步骤可以完成,或者选择取消协议。当做出调整且未检测到后续错误时,该模式操作完成。根据导致错误的条件,系统将提供相应的调整选项。", + "release_labware_from_gripper": "从抓板手中释放实验耗材", + "release": "释放", + "remove_any_attached_tips": "移除任何已安装的吸头", "replace_tips_and_select_location": "建议更换吸头并选择最后一次取吸头的位置。", "replace_used_tips_in_rack_location": "在吸头板位{{location}}更换已使用的吸头", "replace_with_new_tip_rack": "更换新的吸头盒", - "first_take_any_necessary_actions": "首先,采取必要的准备操作,工作站将从失败的步骤开始继续运行。然后,在工作站继续运行之前关闭前门。", + "resume": "继续", + "retrying_step_succeeded": "重试步骤{{step}}成功", "retry_now": "现在重试", "retry_step": "重试步骤", "retry_with_new_tips": "使用新吸头重试", "retry_with_same_tips": "使用相同吸头重试", "return_to_menu": "返回菜单", - "return_to_the_menu": "返回菜单以选择如何继续。", + "robot_door_is_open": "工作站前门已打开", + "robot_is_canceling_run": "工作站正在取消运行", + "robot_is_in_recovery_mode": "工作站正在恢复模式", + "robot_not_attempt_to_move_lw": "工作站将不再尝试移动实验耗材。运行将从下一步继续。在继续之前,请关闭工作站门。", + "robot_retry_failed_lw_movement": "工作站将会从更换耗材的位置重新尝试失败的移液步骤。在继续之前,请关闭工作站门。", "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": "跳过", + "skipping_to_step_succeeded": "跳转到步骤{{step}}成功", + "skip_and_home_pipette": "跳过并归位移液器", "skip_to_next_step": "跳到下一步", "skip_to_next_step_new_tips": "使用新吸头跳到下一步", "skip_to_next_step_same_tips": "使用相同吸头跳到下一步", @@ -64,8 +93,13 @@ "stand_back_resuming": "请远离,正在恢复当前步骤", "stand_back_retrying": "请远离,正在重试失败步骤", "stand_back_skipping_to_next_step": "请远离,正在跳到下一步骤", + "take_any_necessary_precautions": "在接住实验耗材之前,请采取必要的预防措施。确认后,夹爪将开始倒计时再释放。", + "take_necessary_actions_failed_pickup": "首先,采取任何必要的行动,让工作站重新尝试移液器拾取。然后,在继续之前关闭工作站门。", + "take_necessary_actions": "首先,采取任何必要的行动,让工作站重新尝试失败的步骤。然后,在继续之前关闭工作站门。", + "terminate_remote_activity": "终止远程活动", "tip_drop_failed": "丢弃吸头失败", "tip_not_detected": "未检测到吸头", + "tip_presence_errors_are_caused": "吸头识别错误通常是由实验器皿放置不当或器皿偏移不准确引起的。", "view_error_details": "查看错误详情", "view_recovery_options": "查看恢复选项", "you_can_still_drop_tips": "在继续选择吸头之前,您仍然可以丢弃移液器上现存的吸头。", diff --git a/app/src/assets/localization/zh/labware_position_check.json b/app/src/assets/localization/zh/labware_position_check.json index fb92623de2e..cb27f78e66c 100644 --- a/app/src/assets/localization/zh/labware_position_check.json +++ b/app/src/assets/localization/zh/labware_position_check.json @@ -95,7 +95,7 @@ "return_tip_section": "放回吸头", "returning_tip_title": "正在板位{{slot}}放回吸头", "reveal_jog_controls": "显示调整面板", - "robot_has_no_offsets_from_previous_runs": "耗材校准数据引用自之前运行的协议,以节省您的时间。如果本协议中的所有耗材已在之前的运行中检查过,这些数据将应用于本次运行。 您可以使用耗材位置校准程序的后续步骤来添加耗材校准数据。", + "robot_has_no_offsets_from_previous_runs": "耗材校准数据引用自之前运行的协议,以节省您的时间。如果本协议中的所有耗材已在之前的运行中检查过,这些数据将应用于本次运行。 您可以在后面的步骤中使用耗材位置校准添加新的偏移量。", "robot_has_offsets_from_previous_runs": "此工作站具有本协议中所用耗材的校准数据。如果您应用了这些校准数据,仍可通过耗材位置校准程序进行调整。", "robot_in_motion": "工作站正在运行,请远离。", "run_labware_position_check": "运行耗材位置校准程序", diff --git a/app/src/assets/localization/zh/protocol_command_text.json b/app/src/assets/localization/zh/protocol_command_text.json index 81fff4fd220..74ab15b69b7 100644 --- a/app/src/assets/localization/zh/protocol_command_text.json +++ b/app/src/assets/localization/zh/protocol_command_text.json @@ -16,6 +16,7 @@ "deactivating_tc_block": "停用热循环仪温控功能", "deactivating_tc_lid": "停用热循环仪热盖功能", "degrees_c": "{{temp}}°C", + "detect_liquid_presence": "正在检测{{labware}}在{{labware_location}}中的{{well_name}}孔中的液体存在", "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}}孔中", @@ -26,6 +27,16 @@ "fixed_trash": "垃圾桶", "home_gantry": "复位所有龙门架、移液器和柱塞轴", "latching_hs_latch": "在热震荡模块上锁定实验耗材", + "left": "左", + "load_labware_info_protocol_setup_adapter_module": "在{{module_name}}的甲板槽{{slot_name}}上加载适配器{{adapter_name}}中的{{labware}}", + "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": "在{{module_name}}的甲板槽{{slot_name}}中加载{{labware}}", + "load_liquids_info_protocol_setup": "将{{liquid}}加载到{{labware}}中", + "load_module_protocol_setup": "在甲板槽{{slot_name}}中加载模块{{module}}", + "load_pipette_protocol_setup": "在{{mount_name}}支架上加载{{pipette_name}}", "module_in_slot_plural": "{{module}}", "module_in_slot": "{{module}}在{{slot_name}}号板位", "move_labware_manually": "手动将{{labware}}从{{old_location}}移动到{{new_location}}", @@ -46,7 +57,9 @@ "pause": "暂停", "pickup_tip": "从{{labware_location}}的{{labware}}的{{well_range}}孔中拾取吸头", "prepare_to_aspirate": "准备使用{{pipette}}吸液", + "reloading_labware": "正在重新加载{{labware}}", "return_tip": "将吸头返回到{{labware_location}}的{{labware}}的{{well_name}}孔中", + "right": "右", "save_position": "保存位置", "set_and_await_hs_shake": "设置热震荡模块以{{rpm}}rpm 震动并等待达到该转速", "setting_hs_temp": "将热震荡模块的目标温度设置为{{temp}}", @@ -60,6 +73,8 @@ "tc_starting_profile": "热循环仪开始进行由以下步骤组成的{{repetitions}}次循环:", "trash_bin_in_slot": "垃圾桶在{{slot_name}}", "touch_tip": "吸头接触内壁", + "turning_rail_lights_off": "正在关闭导轨灯", + "turning_rail_lights_on": "正在打开导轨灯", "unlatching_hs_latch": "解锁热震荡模块上的实验耗材", "wait_for_duration": "暂停{{seconds}}秒。{{message}}", "wait_for_resume": "暂停协议", diff --git a/app/src/assets/localization/zh/protocol_details.json b/app/src/assets/localization/zh/protocol_details.json index b62bc2bb89a..22f4c0566fc 100644 --- a/app/src/assets/localization/zh/protocol_details.json +++ b/app/src/assets/localization/zh/protocol_details.json @@ -4,7 +4,7 @@ "both_mounts": "两个移液器支架", "choices": "{{count}}个选择", "choose_file": "选择文件", - "choose_robot_to_run": "选择要运行的工作站\n{{protocol_name}}", + "choose_robot_to_run": "选择要运行{{protocol_name}}的工作站", "clear_and_proceed_to_setup": "清除并继续设置", "connect_modules_to_see_controls": "连接模块以查看控制", "connected": "已连接", @@ -21,6 +21,8 @@ "description": "描述", "extension_mount": "扩展安装支架", "file_required": "需要文件", + "go_to_labware_definition": "转到实验耗材定义", + "go_to_timeline": "转到时间线", "gripper_pick_up_count_description": "使用转板抓手移动单个耗材的指令。", "gripper_pick_up_count": "转板次数", "hardware": "硬件", @@ -28,6 +30,7 @@ "labware": "耗材", "last_analyzed": "上一次分析", "last_updated": "上一次更新", + "left_and_right_mounts": "左+右安装架", "left_mount": "左移液器安装位", "left_right": "左,右", "liquid_name": "液体名称", @@ -40,6 +43,7 @@ "name": "名称", "no_available_robots_found": "未找到可用的工作站", "no_custom_values": "未指定任何自定义值", + "no_labware_specified": "此协议中未指定实验耗材", "no_parameters": "该协议未指定任何参数", "no_summary": "没有为此协议指定摘要。", "not_connected": "未连接", diff --git a/app/src/assets/localization/zh/protocol_info.json b/app/src/assets/localization/zh/protocol_info.json index e279383c495..073b4fd6319 100644 --- a/app/src/assets/localization/zh/protocol_info.json +++ b/app/src/assets/localization/zh/protocol_info.json @@ -25,6 +25,7 @@ "import_a_file": "导入协议以开始", "import_new_protocol": "导入协议", "import": "导入", + "incompatible_file_type": "不兼容的文件类型", "instrument_cal_data_title": "校准数据", "instrument_not_attached": "未连接", "instruments_title": "所需移液器", @@ -44,12 +45,12 @@ "launch_protocol_designer": "打开在线协议编辑器", "manual_steps_learn_more": "了解更多关于手动步骤的信息", "modules_title": "所需模块", - "most_recent_updates": "最新更新", + "most_recent_updates": "按时间排序", "no_history": "无运行历史", "no_labware_offset_data": "无耗材校准数据", "no_protocol_yet": "还没有协议?", "nothing_here_yet": "没有可显示的协议!", - "oldest_updates": "最早的更新", + "oldest_updates": "按时间倒序排序", "open_a_protocol": "打开一个协议以开始", "open_api_docs": "打开Python API文档", "organization_and_author": "组织/作者", @@ -64,10 +65,10 @@ "protocol_title": "协议 -{{protocol_name}}", "protocol_upload_failed": "协议上传失败。请修复错误后重试", "protocols": "协议", - "quick_transfer": "快速移液", "required_cal_data_title": "校准数据", "required_quantity_title": "数量", "required_type_title": "类型", + "requires_csv": "需要CSV", "robot_name_last_run": "{{robot_name}}的上次运行", "robot_type_first": "{{robotType}}协议优先", "run_again": "再次运行", diff --git a/app/src/assets/localization/zh/protocol_setup.json b/app/src/assets/localization/zh/protocol_setup.json index 7e5007e8a2c..40a5c8c00f9 100644 --- a/app/src/assets/localization/zh/protocol_setup.json +++ b/app/src/assets/localization/zh/protocol_setup.json @@ -8,6 +8,10 @@ "add_to_slot": "添加到{{slotName}}号板位", "additional_labware": "{{count}}个额外的耗材", "additional_off_deck_labware": "额外的甲板外耗材", + "all_files_associated": "与协议运行相关文件的所有详细信息均可在工作站屏幕上获得。", + "applied_labware_offset_data": "已应用的实验耗材偏移数据", + "applied_labware_offsets": "已应用的实验耗材偏移", + "are_you_sure_you_want_to_proceed": "您确定要继续运行吗?", "attach_gripper_failure_reason": "连接所需的转板抓手以继续", "attach_gripper": "连接转板抓手", "attach_module": "校准前连接模块", @@ -39,6 +43,7 @@ "calibration_status": "校准状态", "calibration": "校准", "cancel_and_restart_to_edit": "取消运行并重新启动设置以进行编辑", + "choose_csv_file": "选择CSV文件", "choose_enum": "选择{{displayName}}", "closing": "关闭中...", "complete_setup_before_proceeding": "完成设置后继续运行", @@ -46,12 +51,19 @@ "configured": "已配置", "confirm_heater_shaker_module_modal_description": "在开始运行之前,应使模块的两个锚固件完全伸出,以确保牢固连接。导热适配器应连接到模块上。", "confirm_heater_shaker_module_modal_title": "确认已连接热震荡模块", + "confirm_liquids": "确认液体", + "confirm_locations_and_volumes": "确认位置和体积", + "confirm_offsets": "确认偏移校准数据", + "confirm_placements": "确认放置位置", + "confirm_selection": "确认选择", "confirm_values": "确认这些值", "connect_all_hardware": "首先连接并校准所有硬件", "connect_all_mod": "首先连接所有模块", "connect_modules_for_controls": "连接模块以查看控制", "connection_info_not_available": "一旦运行开始,连接信息不可用", "connection_status": "连接状态", + "csv_files_on_robot": "工作站上的CSV文件", + "csv_files_on_usb": "USB上的CSV文件", "csv_file": "CSV 文件", "currently_configured": "当前已配置", "currently_unavailable": "当前不可用", @@ -63,9 +75,11 @@ "deck_conflict_info_thermocycler": "通过移除位置 A1 和 B1 中的固定装置来更新甲板配置。从甲板配置中移除对应装置或更新协议。", "deck_conflict_info": "通过移除位置 {{cutout}} 中的 {{currentFixture}} 来更新甲板配置。从甲板配置中移除对应装置或更新协议。", "deck_conflict": "甲板位置冲突", + "deck_hardware_ready": "甲板硬件准备", "deck_hardware": "甲板硬件", "deck_map": "甲板布局图", "default_values": "默认值", + "download_files": "下载文件", "example": "示例", "exit_to_deck_configuration": "退出到甲板配置", "extension_mount": "扩展安装支架", @@ -81,6 +95,7 @@ "heater_shaker_extra_attention": "使用闩锁控制,便于放置耗材。", "heater_shaker_labware_list_view": "要添加耗材,请使用切换键来控制闩锁", "how_offset_data_works": "耗材校准数据如何工作", + "individiual_well_volume": "单个孔体积", "initial_liquids_num_plural": "{{count}}种初始液体", "initial_liquids_num": "{{count}}种初始液体", "initial_location": "初始位置", @@ -96,6 +111,7 @@ "labware_latch": "耗材闩锁", "labware_location": "耗材位置", "labware_name": "耗材名称", + "labware_placement": "实验耗材放置", "labware_position_check_not_available_analyzing_on_robot": "在工作站上分析协议时,耗材位置校准不可用", "labware_position_check_not_available_empty_protocol": "耗材位置校准需要协议加载耗材和移液器", "labware_position_check_not_available": "运行开始后,耗材位置校准不可用", @@ -111,10 +127,14 @@ "learn_more_about_offset_data": "了解更多关于耗材校准数据的信息", "learn_more_about_robot_cal_link": "了解更多关于工作站校准的信息", "learn_more": "了解更多", + "liquid_information": "液体信息", + "liquid_name": "液体名称", "liquid_setup_step_description": "查看液体的起始位置和体积", "liquid_setup_step_title": "液体", + "liquids_confirmed": "液体已确认", "liquids_not_in_setup": "此协议未使用液体", "liquids_not_in_the_protocol": "此协议未指定液体。", + "liquids_ready": "液体准备", "liquids": "液体", "list_view": "列表视图", "loading_data": "加载数据...", @@ -141,6 +161,7 @@ "module_mismatch_body": "检查连接到该工作站的模块型号是否正确", "module_name": "模块", "module_not_connected": "未连接", + "module_setup_step_ready": "校准准备", "module_setup_step_title": "甲板硬件", "module_slot_location": "{{slotName}}号板位,{{moduleName}}", "module": "模块", @@ -184,6 +205,8 @@ "offset_data": "偏移校准数据", "offsets_applied_plural": "应用了{{count}}个偏移校准数据", "offsets_applied": "应用了{{count}}个偏移校准数据", + "offsets_confirmed": "偏移校准数据已确认", + "offsets_ready": "偏移校准数据准备", "on_adapter_in_mod": "在{{moduleName}}中的{{adapterName}}上", "on_adapter": "在{{adapterName}}上", "on_deck": "在甲板上", @@ -198,6 +221,8 @@ "pipette_offset_cal_description_bullet_3": "对用于校准移液器的吸头执行吸头长度校准后,重新进行移液器偏移校准。", "pipette_offset_cal_description": "这会测量移液器相对于移液器安装支架和甲板的X、Y和Z值。移液器偏移校准依赖于甲板校准和吸头长度校准。 ", "pipette_offset_cal": "移液器偏移校准", + "placements_confirmed": "位置已确认", + "placements_ready": "位置准备", "placement": "放置", "plug_in_module_to_configure": "插入{{module}}以将其添加到板位", "plug_in_required_module_plural": "插入并启动所需模块以继续", @@ -210,10 +235,12 @@ "proceed_to_run": "继续运行", "protocol_analysis_failed": "协议分析失败", "protocol_can_be_closed": "该协议现在可以关闭。", + "protocol_requires_csv": "此协议需要一个CSV文件。点击下面的CSV文件进行选择。", "protocol_run_canceled": "协议运行已取消。", "protocol_run_complete": "协议运行完成。", "protocol_run_failed": "协议运行失败。", "protocol_run_started": "协议运行已开始。", + "protocol_run_stopped": "协议运行已停止。", "protocol_specifies": "协议指定", "protocol_upload_revamp_feedback": "对此体验有反馈吗?", "quantity": "数量", @@ -237,10 +264,12 @@ "robot_cal_help_title": "工作站校准的工作原理", "robot_calibration_step_description_pipettes_only": "查看该协议所需的硬件和校准。", "robot_calibration_step_description": "查看该协议所需的移液器和吸头长度校准。", + "robot_calibration_step_ready": "校准准备", "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_to_get_offsets": "运行实验室位置检查以获取实验室偏移数据。", "run_labware_position_check": "运行耗材位置校准", "run_never_started": "运行未开始", "run": "运行", @@ -252,6 +281,8 @@ "setup_is_view_only": "运行开始后设置仅供查看", "slot_location": "{{slotName}}号板位", "slot_number": "板位编号", + "stacked_slot": "堆叠槽", + "start_run": "开始运行", "status": "状态", "step": "步骤{{index}}", "there_are_no_unconfigured_modules": "没有连接{{module}}。请连接一个模块并放置在{{slot}}号板位中。", @@ -260,20 +291,25 @@ "tip_length_cal_description": "这将测量吸头底部与移液器喷嘴之间的Z轴距离。如果对用于校准移液器的吸头重新进行吸头长度校准,也需要重新进行移液器偏移校准。", "tip_length_cal_title": "吸头长度校准", "tip_length_calibration": "吸头长度校准", + "total_liquid_volume": "总体积", "update_deck_config": "更新甲板配置", "update_deck": "更新甲板", + "update_offsets": "更新偏移校准数据", "updated": "已更新", "usb_connected_no_port_info": "USB端口已连接", + "usb_drive_notification": "在运行开始前,请保持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": "值仅供查看", + "variable_well_amount": "可变孔数", "view_current_offsets": "查看当前偏移量", "view_moam": "查看工作站中放置同类型模块的设置说明。", "view_setup_instructions": "查看设置说明", "volume": "体积", "what_labware_offset_is": "耗材偏移校准是一种位置调整类型,用于补偿甲板上耗材整体位置的微小实际差异。耗材偏移校准数据是耗材、甲板位和工作站的特定组合。", - "with_the_chosen_value": "使用选定的值时,发生以下错误:" + "with_the_chosen_value": "使用选定的值时,发生以下错误:", + "you_havent_confirmed": "您尚未确认 {{missingSteps}}。在继续运行协议之前,请确保这些步骤正确无误。" } diff --git a/app/src/assets/localization/zh/quick_transfer.json b/app/src/assets/localization/zh/quick_transfer.json index 651ace8ef4b..4a1e2779d52 100644 --- a/app/src/assets/localization/zh/quick_transfer.json +++ b/app/src/assets/localization/zh/quick_transfer.json @@ -1,46 +1,114 @@ { + "a_way_to_move_liquid": "一种将单一液体从一个实验耗材移动到另一个实验耗材的方法。", "add_or_remove_columns": "添加或移除列", "add_or_remove": "添加或移除", + "advanced_setting_disabled": "此移液的高级设置已禁用", "advanced_settings": "高级设置", + "air_gap_before_aspirating": "在吸液前设置空气间隙", + "air_gap_before_dispensing": "在分液前设置空气间隙", + "air_gap_capacity_error": "移液器空间已满,无法添加空气间隙。", + "air_gap_value": "{{volume}} µL", + "air_gap_volume_µL": "空气间隙体积(µL)", + "air_gap": "空气间隙", "all": "所有实验耗材", "always": "每次吸液前", + "aspirate_flow_rate_µL": "吸取流速(µL/s)", + "aspirate_flow_rate": "吸取流速", + "aspirate_settings": "吸取设置", + "aspirate_tip_position": "吸取移液器位置", "aspirate_volume": "每孔吸液体积", "aspirate_volume_µL": "每孔吸液体积(µL)", + "attach_pipette": "连接移液器", + "blow_out_after_dispensing": "分液后吹出", + "blow_out_destination_well": "目标孔", + "blow_out_into_destination_well": "到目标孔", + "blow_out_into_source_well": "到吸液孔", + "blow_out_into_trash_bin": "到垃圾桶", + "blow_out_into_waste_chute": "到外置垃圾槽", + "blow_out_source_well": "源孔", + "blow_out_trash_bin": "垃圾桶", + "blow_out_waste_chute": "外置垃圾槽", + "blow_out": "吹出", "both_mounts": "左侧+右侧支架", "change_tip": "更换吸头", "character_limit_error": "字数超出限制", "column": "列", "columns": "列", + "consolidate_volume_error": "所选的目标孔太小,无法合并。请尝试从更少的孔中合并。", + "create_new_to_edit": "创建新的快速移液以进行编辑", "create_new_transfer": "创建新的快速移液命令", + "create_to_get_started": "创建新的快速移液以开始操作。", "create_transfer": "创建移液命令", + "delay_before_aspirating": "吸取前的延迟", + "delay_before_dispensing": "分液前的延迟", + "delay_duration_s": "延迟时长(秒)", + "delay_position_mm": "距孔底延迟时的位置(mm)", + "delay_value": "{{delay}}秒,距离孔底{{position}}mm", + "delay": "延迟", + "delete_this_transfer": "确定删除此这个快速移液?", + "delete_transfer": "删除快速移液", + "deleted_transfer": "已删除快速移液", "destination": "目标", "destination_labware": "目标实验耗材", - "dispense_volume": "每孔排液体积", + "disabled": "已禁用", + "dispense_flow_rate_µL": "分液流速(µL/s)", + "dispense_flow_rate": "分液流速", + "dispense_settings": "分液设置", + "dispense_tip_position": "分液吸头位置", "dispense_volume_µL": "每孔排液体积(µL)", + "dispense_volume": "每孔排液体积", + "disposal_volume_µL": "废液量(µL)", + "distance_bottom_of_well_mm": "距离孔底的高度(mm)", + "distribute_volume_error": "所选源孔太小,无法从中分液。请尝试向更少的孔中分液。", "enter_characters": "输入最多60个字符", + "error_analyzing": "在尝试分析{{transferName}}时发生错误。", "exit_quick_transfer": "退出快速移液?", + "failed_analysis": "分析失败", + "flow_rate_value": "{{flow_rate}} µL/s", + "got_it": "明白了", "grid": "网格", "grids": "网格", + "labware": "实验耗材", "learn_more": "了解更多", "left_mount": "左侧支架", "lose_all_progress": "您将失去所有此快速移液流程进度.", + "mix_before_aspirating": "在吸液前混匀", + "mix_before_dispensing": "在分液前混匀", + "mix_repetitions": "混匀重复次数", + "mix_value": "{{volume}} µL,混匀{{reps}}次", + "mix_volume_µL": "混匀体积(µL)", + "mix": "混匀", "name_your_transfer": "为您的快速移液流程命名", + "none_to_show": "没有快速移液可显示!", "number_wells_selected_error_learn_more": "具有多个源孔{{selectionUnits}}的快速移液是可以进行一对一或者多对多移液的(为此移液流程同样选择{{wellCount}}个目标孔位{{selectionUnits}})或进行多对一移液,即合并为单个孔位(选择1个目标孔{{selectionUnit}})。", "number_wells_selected_error_message": "选择1个或{{wellCount}}个{{selectionUnits}}来进行此移液操作.", "once": "在移液开始时", + "option_disabled": "已禁用", + "option_enabled": "已启用", "overview": "概览", "perDest": "每个目标孔位", "perSource": "每个源孔位", + "pin_transfer": "快速移液", + "pinned_transfer": "固定快速移液", + "pinned_transfers": "固定快速移液", + "pipette_path_multi_aspirate": "多次吸取", + "pipette_path_multi_dispense_volume_blowout": "多次分液,{{volume}} 微升废弃量,在{{blowOutLocation}}吹出", + "pipette_path_multi_dispense": "多次分液", + "pipette_path_single": "单次转移", + "pipette_path": "移液器路径", + "pipette_currently_attached": "快速移液移液器选项取决于当前您工作站上安装的移液器.", "pipette": "移液器", + "pre_wet_tip": "润湿吸头", "quick_transfer_volume": "快速移液{{volume}}µL", + "quick_transfer": "快速移液", "right_mount": "右侧支架", "reservoir": "储液槽", "run_now": "立即运行", "run_quick_transfer_now": "您想立即运行快速移液流程吗?", + "run_transfer": "运行快速移液", "save": "保存", "save_to_run_later": "保存您的快速移液流程以备后续运行.", "save_for_later": "保存备用", - "source": "源", "select_attached_pipette": "选择已连接的移液器", "select_by": "按...选择", "select_dest_labware": "选择目标实验耗材", @@ -52,25 +120,40 @@ "set_dispense_volume": "设置排液体积", "set_transfer_volume": "设置移液体积", "source_labware": "源实验耗材", - "source_labware_d2": "D2位置的源实验耗材", + "source_labware_c2": "C2 中的源实验耗材", + "source": "源", "starting_well": "起始孔", + "storage_limit_reached": "已达到存储限制", "use_deck_slots": "快速移液将使用板位B2-D2。这些板位将用于放置吸头盒、源实验耗材和目标实验耗材。请确保使用最新的甲板配置,避免碰撞。", "tip_drop_location": "吸头丢弃位置", "tip_management": "吸头管理", + "tip_position_value": "距底部 {{position}} mm", + "tip_position": "移液器位置", "tip_rack": "吸头盒", + "too_many_pins_body": "删除一个快速移液,以便向您的固定列表中添加更多传输。", + "too_many_pins_header": "您已达到上限!", + "touch_tip_before_aspirating": "在吸液前做碰壁动作", + "touch_tip_before_dispensing": "在分液前做碰壁动作", + "touch_tip_position_mm": "在孔底部做碰壁动作的高度(mm)", + "touch_tip_value": "距底部 {{position}} mm", + "touch_tip": "碰壁动作", + "transfer_analysis_failed": "快速移液分析失败", + "transfer_name": "移液名称", "trashBin": "垃圾桶", "trashBin_location": "位于{{slotName}}的垃圾桶", "tubeRack": "试管架", + "unpin_transfer": "取消固定的快速移液", + "unpinned_transfer": "已取消固定的快速移液", "volume_per_well": "每孔体积", "volume_per_well_µL": "每孔体积(µL)", "value_out_of_range": "值必须在{{min}}-{{max}}之间", - "labware": "实验耗材", - "pipette_currently_attached": "快速移液移液器选项取决于当前您工作站上安装的移液器.", "wasteChute": "外置垃圾槽", "wasteChute_location": "位于{{slotName}}的外置垃圾槽", + "welcome_to_quick_transfer": "欢迎使用快速移液!", "wellPlate": "孔板", "well_selection": "孔位选择", "well_ratio": "快速移液可以一对一或者多对多进行移液的(为此移液操作选择同样数量的{{wells}})或可以多对一,也就是合并为单孔(选择1个目标孔位)。", "well": "孔", - "wells": "孔" + "wells": "孔", + "will_be_deleted": "{{transferName}} 将被永久删除。" } diff --git a/app/src/assets/localization/zh/robot_calibration.json b/app/src/assets/localization/zh/robot_calibration.json index 8f83fb649f8..d5959a113c6 100644 --- a/app/src/assets/localization/zh/robot_calibration.json +++ b/app/src/assets/localization/zh/robot_calibration.json @@ -53,6 +53,8 @@ "download_calibration_data_unavailable": "无校准数据可用。", "download_calibration_title": "下载校准数据", "download_details": "下载详情JSON校准文件查看摘要", + "error": "错误", + "exit": "退出", "finish": "完成", "get_started": "开始", "good_calibration": "良好校准", diff --git a/app/src/assets/localization/zh/run_details.json b/app/src/assets/localization/zh/run_details.json index 648df8a66e2..00d584bb4ba 100644 --- a/app/src/assets/localization/zh/run_details.json +++ b/app/src/assets/localization/zh/run_details.json @@ -17,6 +17,7 @@ "canceling_run": "正在取消运行", "clear_protocol_to_make_available": "清除工作站的协议以使其可用", "clear_protocol": "清除协议", + "close_door_to_resume_run": "关闭工作站门以继续运行", "close_door_to_resume": "关闭移液工作站的前门以继续运行", "close_door": "关闭移液工作站前门", "closing_protocol": "正在关闭协议", @@ -32,6 +33,7 @@ "date": "日期", "door_is_open": "工作站前门已打开", "door_open_pause": "当前步骤 - 暂停 - 前门已打开", + "download_files": "下载文件", "download": "下载", "download_run_log": "下载运行日志", "downloading_run_log": "正在下载运行日志", @@ -40,6 +42,7 @@ "end_of_protocol": "协议结束", "end_step_time": "结束", "end": "结束", + "error_details": "错误详情", "error_info": "错误{{errorCode}}:{{errorType}}", "error_type": "错误:{{errorType}}", "failed_step": "步骤失败", @@ -49,7 +52,6 @@ "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}}", @@ -68,6 +70,10 @@ "move_labware": "移动耗材", "name": "名称", "no_files_included": "未包含协议文件", + "no_of_error": "{{count}}个错误", + "no_of_errors": "{{count}}个错误", + "no_of_warning": "{{count}}个警告", + "no_of_warnings": "{{count}}个警告", "no_offsets_available": "无耗材校准数据可用", "not_available_for_a_completed_run": "不适用于已完成的运行", "not_available_for_a_run_in_progress": "不适用于正在进行的运行", @@ -96,15 +102,21 @@ "protocol_title": "协议 -{{protocol_name}}", "resume_run": "恢复运行", "return_to_dashboard": "返回控制面板", + "return_to_quick_transfer": "返回快速移液", "right": "右", "robot_has_previous_offsets": "该移液工作站已存储了之前运行协议的耗材校准数据。您想将这些数据应用于此协议的运行吗?您仍然可以通过实验器具位置检查调整校准数据。", "robot_was_recalibrated": "在储存此耗材校准数据后,移液工作站已重新校准", "run_again": "再次运行", "run_canceled_splash": "运行已取消", + "run_canceled_with_errors_splash": "因错误取消运行。", + "run_canceled_with_errors": "因错误取消运行。", "run_canceled": "运行已取消。", + "run_completed_splash": "运行完成", + "run_completed_with_warnings_splash": "运行完成,并伴有警告。", + "run_completed_with_warnings": "运行完成,并伴有警告。", + "run_completed": "运行已完成。", "run_complete_splash": "运行已完成", "run_complete": "运行已完成", - "run_completed": "运行已完成。", "run_cta_disabled": "在开始运行之前,请完成协议选项卡上的所有必要步骤。", "run_failed_modal_body": "在协议执行{{command}}时发生错误。", "run_failed_modal_header": "{{errorName}}:{{errorCode}}协议步骤{{count}}", @@ -124,6 +136,8 @@ "start_step_time": "开始", "start_time": "开始时间", "start": "开始", + "status_awaiting-recovery-blocked-by-open-door": "暂停 - 门已打开", + "status_awaiting-recovery-paused": "暂停", "status_awaiting-recovery": "等待恢复", "status_blocked-by-open-door": "暂停 - 前门打开", "status_failed": "失败", @@ -150,5 +164,7 @@ "view_analysis_error_details": "查看 错误详情", "view_current_step": "查看当前步骤", "view_error_details": "查看错误详情", - "view_error": "查看错误" + "view_error": "查看错误", + "view_warning_details": "查看警告详情", + "warning_details": "警告详情" } diff --git a/app/src/assets/localization/zh/shared.json b/app/src/assets/localization/zh/shared.json index f9b0aa47cca..90b597b2820 100644 --- a/app/src/assets/localization/zh/shared.json +++ b/app/src/assets/localization/zh/shared.json @@ -2,6 +2,7 @@ "a_software_update_is_available": "此工作站有可用的软件更新。更新以运行协议。", "add": "添加", "alphabetical": "按字母排序", + "another_app_controlling_robot": "工作站的触摸屏或另一台装有应用程序的电脑正在控制这个工作站。", "back": "返回", "before_you_begin": "在您开始之前", "browse": "浏览", @@ -26,7 +27,7 @@ "disabled_protocol_is_running": "协议正在运行", "dont_show_me_again": "不再显示", "drag_and_drop": "拖放或 浏览 您的文件", - "empty": "清空", + "empty": "空闲", "ending": "结束中", "error_encountered": "遇到错误", "error": "错误", diff --git a/app/src/assets/localization/zh/top_navigation.json b/app/src/assets/localization/zh/top_navigation.json index c3906955266..cb831731be9 100644 --- a/app/src/assets/localization/zh/top_navigation.json +++ b/app/src/assets/localization/zh/top_navigation.json @@ -13,6 +13,7 @@ "please_load_a_protocol": "请加载协议以继续", "protocol_runs": "协议运行", "protocols": "协议", + "quick_transfer": "快速移液", "robot_settings": "工作站设置", "run": "运行", "settings": "设置" From d96e2b6814fc4d83e9cd7af52cb8b014726b7fc2 Mon Sep 17 00:00:00 2001 From: Brent Hagen Date: Fri, 25 Oct 2024 13:08:56 -0400 Subject: [PATCH 03/81] feat(app): implement ODD choose language screen, app language toggles (#16573) # Overview implements the choose language screen that will be the first step of the ODD unboxing flow. migration of the unboxing flow route config value from '/welcome' to '/choose-langauge' will happen in a future PR removing the localization feature flag. the screen can be tested locally by manually editing `unfinishedUnboxingFlowRoute` in `config.json` and commenting out the line `dev-shell-odd: export OT_APP_ON_DEVICE_DISPLAY_SETTINGS__UNFINISHED_UNBOXING_FLOW_ROUTE := 0` in the app makefile. implements the language setting hi-fi designs on desktop and ODD. closes PLAT-537, PLAT-506 Screen Shot 2024-10-22 at 5 06 03 PM Screen Shot 2024-10-22 at 5 06 15 PM Screen Shot 2024-10-24 at 3 05 24 PM Screen Shot 2024-10-24 at 3 05 29 PM ## Test Plan and Hands on Testing added unit tests for the screen and toggles, verified all behavior ## Changelog - Implements ODD Choose Language screen - Implements ODD language setting toggle ## Review requests check out the screens and toggles ## Risk assessment low, screen not active until config migrated, toggles behind feature flag --- app/src/App/OnDeviceDisplayApp.tsx | 4 + .../App/__tests__/OnDeviceDisplayApp.test.tsx | 6 ++ .../assets/localization/en/app_settings.json | 5 + app/src/i18n.ts | 14 +++ .../SystemLanguagePreferenceModal.test.tsx | 4 +- .../SystemLanguagePreferenceModal/index.tsx | 17 ++-- .../LanguageSetting.tsx | 92 +++++++++++++++++++ .../__tests__/LanguageSetting.test.tsx | 60 ++++++++++++ .../ODD/RobotSettingsDashboard/index.ts | 1 + .../ODD/RobotSettingsDashboard/types.ts | 1 + .../Desktop/AppSettings/AdvancedSettings.tsx | 54 +---------- .../Desktop/AppSettings/GeneralSettings.tsx | 45 +++++++++ .../__test__/GeneralSettings.test.tsx | 72 +++++++++++---- .../__tests__/ChooseLanguage.test.tsx | 59 ++++++++++++ app/src/pages/ODD/ChooseLanguage/index.tsx | 79 ++++++++++++++++ .../RobotSettingsList.tsx | 43 ++++----- .../__tests__/RobotSettingsDashboard.test.tsx | 25 ++++- .../ODD/RobotSettingsDashboard/index.tsx | 4 + app/src/redux/config/schema-types.ts | 3 +- app/src/redux/config/selectors.ts | 2 +- components/src/icons/icon-data.ts | 10 +- 21 files changed, 486 insertions(+), 114 deletions(-) create mode 100644 app/src/organisms/ODD/RobotSettingsDashboard/LanguageSetting.tsx create mode 100644 app/src/organisms/ODD/RobotSettingsDashboard/__tests__/LanguageSetting.test.tsx create mode 100644 app/src/pages/ODD/ChooseLanguage/__tests__/ChooseLanguage.test.tsx create mode 100644 app/src/pages/ODD/ChooseLanguage/index.tsx diff --git a/app/src/App/OnDeviceDisplayApp.tsx b/app/src/App/OnDeviceDisplayApp.tsx index 42335754432..7be1070ca12 100644 --- a/app/src/App/OnDeviceDisplayApp.tsx +++ b/app/src/App/OnDeviceDisplayApp.tsx @@ -22,6 +22,7 @@ import { MaintenanceRunTakeover } from '/app/organisms/TakeoverModal' import { FirmwareUpdateTakeover } from '/app/organisms/FirmwareUpdateModal/FirmwareUpdateTakeover' import { IncompatibleModuleTakeover } from '/app/organisms/IncompatibleModule' import { EstopTakeover } from '/app/organisms/EmergencyStop' +import { ChooseLanguage } from '/app/pages/ODD/ChooseLanguage' import { ConnectViaEthernet } from '/app/pages/ODD/ConnectViaEthernet' import { ConnectViaUSB } from '/app/pages/ODD/ConnectViaUSB' import { ConnectViaWifi } from '/app/pages/ODD/ConnectViaWifi' @@ -66,6 +67,7 @@ import type { Dispatch } from '/app/redux/types' hackWindowNavigatorOnLine() export const ON_DEVICE_DISPLAY_PATHS = [ + '/choose-language', '/dashboard', '/deck-configuration', '/emergency-stop', @@ -94,6 +96,8 @@ function getPathComponent( path: typeof ON_DEVICE_DISPLAY_PATHS[number] ): JSX.Element { switch (path) { + case '/choose-language': + return case '/dashboard': return case '/deck-configuration': diff --git a/app/src/App/__tests__/OnDeviceDisplayApp.test.tsx b/app/src/App/__tests__/OnDeviceDisplayApp.test.tsx index 662b2523436..2d2d09ca15e 100644 --- a/app/src/App/__tests__/OnDeviceDisplayApp.test.tsx +++ b/app/src/App/__tests__/OnDeviceDisplayApp.test.tsx @@ -5,6 +5,7 @@ import { MemoryRouter } from 'react-router-dom' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' import { LocalizationProvider } from '../../LocalizationProvider' +import { ChooseLanguage } from '/app/pages/ODD/ChooseLanguage' import { ConnectViaEthernet } from '/app/pages/ODD/ConnectViaEthernet' import { ConnectViaUSB } from '/app/pages/ODD/ConnectViaUSB' import { ConnectViaWifi } from '/app/pages/ODD/ConnectViaWifi' @@ -48,6 +49,7 @@ vi.mock('@opentrons/react-api-client', async () => { vi.mock('../../LocalizationProvider') vi.mock('/app/pages/ODD/Welcome') vi.mock('/app/pages/ODD/NetworkSetupMenu') +vi.mock('/app/pages/ODD/ChooseLanguage') vi.mock('/app/pages/ODD/ConnectViaEthernet') vi.mock('/app/pages/ODD/ConnectViaUSB') vi.mock('/app/pages/ODD/ConnectViaWifi') @@ -109,6 +111,10 @@ describe('OnDeviceDisplayApp', () => { vi.resetAllMocks() }) + it('renders ChooseLanguage component from /choose-language', () => { + render('/choose-language') + expect(vi.mocked(ChooseLanguage)).toHaveBeenCalled() + }) it('renders Welcome component from /welcome', () => { render('/welcome') expect(vi.mocked(Welcome)).toHaveBeenCalled() diff --git a/app/src/assets/localization/en/app_settings.json b/app/src/assets/localization/en/app_settings.json index 5f6354da6c5..3f957ebe608 100644 --- a/app/src/assets/localization/en/app_settings.json +++ b/app/src/assets/localization/en/app_settings.json @@ -15,11 +15,14 @@ "additional_labware_folder_title": "Additional Custom Labware Source Folder", "advanced": "Advanced", "app_changes": "App Changes in ", + "app_language_description": "All app features use this language. Protocols and other user content will not change language.", + "app_language_preferences": "App Language Preferences", "app_settings": "App Settings", "bug_fixes": "Bug Fixes", "cal_block": "Always use calibration block to calibrate", "change_folder_button": "Change labware source folder", "channel": "Channel", + "choose_your_language": "Choose your language", "clear_confirm": "Clear unavailable robots", "clear_robots_button": "Clear unavailable robots list", "clear_robots_description": "Clear the list of unavailable robots on the Devices page. This action cannot be undone.", @@ -48,6 +51,7 @@ "ip_available": "Available", "ip_description_first": "Enter an IP address or hostname to connect to a robot.", "language_preference": "Language preference", + "language": "Language", "manage_versions": "It is very important for the robot and app software to be on the same version. Manage the robot software versions via Robot Settings > Advanced.", "new_features": "New Features", "no_folder": "No additional source folder specified", @@ -73,6 +77,7 @@ "restarting_app": "Download complete, restarting the app...", "restore_previous": "See how to restore a previous software version", "searching": "Searching for 30s", + "select_a_language": "Select a language to personalize your experience.", "select_language": "Select language", "setup_connection": "Set up connection", "share_display_usage": "Share display usage", diff --git a/app/src/i18n.ts b/app/src/i18n.ts index 0a9701a8e87..e1c772cb582 100644 --- a/app/src/i18n.ts +++ b/app/src/i18n.ts @@ -7,6 +7,20 @@ import { titleCase } from '@opentrons/shared-data' import type { InitOptions } from 'i18next' +export const US_ENGLISH = 'en-US' +export const SIMPLIFIED_CHINESE = 'zh-CN' + +// these strings will not be translated so should not be localized +export const US_ENGLISH_DISPLAY_NAME = 'English (US)' +export const SIMPLIFIED_CHINESE_DISPLAY_NAME = '中文' + +export type Language = typeof US_ENGLISH | typeof SIMPLIFIED_CHINESE + +export const LANGUAGES: Array<{ name: string; value: Language }> = [ + { name: US_ENGLISH_DISPLAY_NAME, value: US_ENGLISH }, + { name: SIMPLIFIED_CHINESE_DISPLAY_NAME, value: SIMPLIFIED_CHINESE }, +] + const i18nConfig: InitOptions = { resources, lng: 'en', diff --git a/app/src/organisms/Desktop/SystemLanguagePreferenceModal/__tests__/SystemLanguagePreferenceModal.test.tsx b/app/src/organisms/Desktop/SystemLanguagePreferenceModal/__tests__/SystemLanguagePreferenceModal.test.tsx index 3a378d5f04f..a91d7389072 100644 --- a/app/src/organisms/Desktop/SystemLanguagePreferenceModal/__tests__/SystemLanguagePreferenceModal.test.tsx +++ b/app/src/organisms/Desktop/SystemLanguagePreferenceModal/__tests__/SystemLanguagePreferenceModal.test.tsx @@ -99,7 +99,7 @@ describe('SystemLanguagePreferenceModal', () => { it('should set a supported app language when system language is an unsupported locale of the same language', () => { vi.mocked(getAppLanguage).mockReturnValue(null) - vi.mocked(getSystemLanguage).mockReturnValue('en-UK') + vi.mocked(getSystemLanguage).mockReturnValue('en-GB') render() @@ -116,7 +116,7 @@ describe('SystemLanguagePreferenceModal', () => { 'language.appLanguage', MOCK_DEFAULT_LANGUAGE ) - expect(updateConfigValue).toBeCalledWith('language.systemLanguage', 'en-UK') + expect(updateConfigValue).toBeCalledWith('language.systemLanguage', 'en-GB') }) it('should render the correct header, description, and buttons when system language changes', () => { diff --git a/app/src/organisms/Desktop/SystemLanguagePreferenceModal/index.tsx b/app/src/organisms/Desktop/SystemLanguagePreferenceModal/index.tsx index 42ff74a0eb8..59ae8640f92 100644 --- a/app/src/organisms/Desktop/SystemLanguagePreferenceModal/index.tsx +++ b/app/src/organisms/Desktop/SystemLanguagePreferenceModal/index.tsx @@ -15,6 +15,7 @@ import { StyledText, } from '@opentrons/components' +import { LANGUAGES } from '/app/i18n' import { getAppLanguage, getStoredSystemLanguage, @@ -26,18 +27,12 @@ import { getSystemLanguage } from '/app/redux/shell' import type { DropdownOption } from '@opentrons/components' import type { Dispatch } from '/app/redux/types' -// these strings will not be translated so should not be localized -const languageOptions: DropdownOption[] = [ - { name: 'English (US)', value: 'en-US' }, - { name: '中文', value: 'zh-CN' }, -] - export function SystemLanguagePreferenceModal(): JSX.Element | null { const { i18n, t } = useTranslation(['app_settings', 'shared', 'branded']) const enableLocalization = useFeatureFlag('enableLocalization') const [currentOption, setCurrentOption] = useState( - languageOptions[0] + LANGUAGES[0] ) const dispatch = useDispatch() @@ -76,7 +71,7 @@ export function SystemLanguagePreferenceModal(): JSX.Element | null { } const handleDropdownClick = (value: string): void => { - const selectedOption = languageOptions.find(lng => lng.value === value) + const selectedOption = LANGUAGES.find(lng => lng.value === value) if (selectedOption != null) { setCurrentOption(selectedOption) @@ -89,8 +84,8 @@ export function SystemLanguagePreferenceModal(): JSX.Element | null { if (systemLanguage != null) { // prefer match entire locale, then match just language e.g. zh-Hant and zh-CN const matchedSystemLanguageOption = - languageOptions.find(lng => lng.value === systemLanguage) ?? - languageOptions.find( + LANGUAGES.find(lng => lng.value === systemLanguage) ?? + LANGUAGES.find( lng => new Intl.Locale(lng.value).language === new Intl.Locale(systemLanguage).language @@ -115,7 +110,7 @@ export function SystemLanguagePreferenceModal(): JSX.Element | null { {showBootModal ? ( ` + padding: ${SPACING.spacing24}; + border-radius: ${BORDERS.borderRadius16}; + cursor: ${CURSOR_POINTER}; + background: ${({ isSelected }) => + isSelected === true ? COLORS.blue50 : COLORS.blue35}; + color: ${({ isSelected }) => isSelected === true && COLORS.white}; +` + +interface LanguageSettingProps { + setCurrentOption: SetSettingOption +} + +export function LanguageSetting({ + setCurrentOption, +}: LanguageSettingProps): JSX.Element { + const { t } = useTranslation('app_settings') + const dispatch = useDispatch() + + const appLanguage = useSelector(getAppLanguage) + + const handleChange = (event: React.ChangeEvent): void => { + dispatch(updateConfigValue('language.appLanguage', event.target.value)) + } + + return ( + + { + setCurrentOption(null) + }} + /> + + {LANGUAGES.map(lng => ( + + + + + {lng.name} + + + + ))} + + + ) +} diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/LanguageSetting.test.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/LanguageSetting.test.tsx new file mode 100644 index 00000000000..80d35ebea15 --- /dev/null +++ b/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/LanguageSetting.test.tsx @@ -0,0 +1,60 @@ +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' + +import { + i18n, + US_ENGLISH_DISPLAY_NAME, + US_ENGLISH, + SIMPLIFIED_CHINESE_DISPLAY_NAME, + SIMPLIFIED_CHINESE, +} from '/app/i18n' +import { getAppLanguage, updateConfigValue } from '/app/redux/config' +import { renderWithProviders } from '/app/__testing-utils__' + +import { LanguageSetting } from '../LanguageSetting' + +vi.mock('/app/redux/config') + +const mockSetCurrentOption = vi.fn() + +const render = (props: React.ComponentProps) => { + return renderWithProviders(, { + i18nInstance: i18n, + }) +} + +describe('LanguageSetting', () => { + let props: React.ComponentProps + beforeEach(() => { + props = { + setCurrentOption: mockSetCurrentOption, + } + vi.mocked(getAppLanguage).mockReturnValue(US_ENGLISH) + }) + + it('should render text and buttons', () => { + render(props) + screen.getByText('Language') + screen.getByText(US_ENGLISH_DISPLAY_NAME) + screen.getByText(SIMPLIFIED_CHINESE_DISPLAY_NAME) + }) + + it('should call mock function when tapping a language button', () => { + render(props) + const button = screen.getByText(SIMPLIFIED_CHINESE_DISPLAY_NAME) + fireEvent.click(button) + expect(updateConfigValue).toHaveBeenCalledWith( + 'language.appLanguage', + SIMPLIFIED_CHINESE + ) + }) + + it('should call mock function when tapping back button', () => { + render(props) + const button = screen.getByRole('button') + fireEvent.click(button) + expect(props.setCurrentOption).toHaveBeenCalled() + }) +}) diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/index.ts b/app/src/organisms/ODD/RobotSettingsDashboard/index.ts index 30933095135..a468c86829b 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/index.ts +++ b/app/src/organisms/ODD/RobotSettingsDashboard/index.ts @@ -1,4 +1,5 @@ export * from './DeviceReset' +export * from './LanguageSetting' export * from './NetworkSettings/RobotSettingsJoinOtherNetwork' export * from './NetworkSettings/RobotSettingsSelectAuthenticationType' export * from './NetworkSettings/RobotSettingsSetWifiCred' diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/types.ts b/app/src/organisms/ODD/RobotSettingsDashboard/types.ts index 231d26c837b..78e1f552daa 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/types.ts +++ b/app/src/organisms/ODD/RobotSettingsDashboard/types.ts @@ -17,5 +17,6 @@ export type SettingOption = | 'RobotSettingsSetWifiCred' | 'RobotSettingsWifi' | 'RobotSettingsWifiConnect' + | 'LanguageSetting' export type SetSettingOption = (option: SettingOption | null) => void diff --git a/app/src/pages/Desktop/AppSettings/AdvancedSettings.tsx b/app/src/pages/Desktop/AppSettings/AdvancedSettings.tsx index 4eda66f68e1..e8f3724299b 100644 --- a/app/src/pages/Desktop/AppSettings/AdvancedSettings.tsx +++ b/app/src/pages/Desktop/AppSettings/AdvancedSettings.tsx @@ -1,16 +1,4 @@ -import { useContext } from 'react' -import { I18nContext } from 'react-i18next' -import { useDispatch } from 'react-redux' -import { css } from 'styled-components' - -import { - Box, - DIRECTION_COLUMN, - Flex, - RadioGroup, - SPACING, - TYPOGRAPHY, -} from '@opentrons/components' +import { Box, SPACING } from '@opentrons/components' import { Divider } from '/app/atoms/structure' import { @@ -25,9 +13,6 @@ import { UpdatedChannel, AdditionalCustomLabwareSourceFolder, } from '/app/organisms/Desktop/AdvancedSettings' -import { updateConfigValue, useFeatureFlag } from '/app/redux/config' - -import type { Dispatch } from '/app/redux/types' export function AdvancedSettings(): JSX.Element { return ( @@ -52,44 +37,7 @@ 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') - const dispatch = useDispatch() - - const { i18n } = useContext(I18nContext) - - return enableLocalization ? ( - <> - - - ) => { - dispatch( - updateConfigValue( - 'language.appLanguage', - 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 82960177c9b..db948403fd0 100644 --- a/app/src/pages/Desktop/AppSettings/GeneralSettings.tsx +++ b/app/src/pages/Desktop/AppSettings/GeneralSettings.tsx @@ -12,6 +12,7 @@ import { COLORS, DIRECTION_COLUMN, DIRECTION_ROW, + DropdownMenu, Flex, JUSTIFY_SPACE_BETWEEN, Link, @@ -25,6 +26,7 @@ import { import { TertiaryButton, ToggleButton } from '/app/atoms/buttons' import { ExternalLink } from '/app/atoms/Link/ExternalLink' import { Divider } from '/app/atoms/structure' +import { LANGUAGES } from '/app/i18n' import { CURRENT_VERSION, getAvailableShellUpdate, @@ -40,6 +42,11 @@ import { useTrackEvent, ANALYTICS_APP_UPDATE_NOTIFICATIONS_TOGGLED, } from '/app/redux/analytics' +import { + getAppLanguage, + updateConfigValue, + useFeatureFlag, +} from '/app/redux/config' import { UpdateAppModal } from '/app/organisms/Desktop/UpdateAppModal' import { PreviousVersionModal } from '/app/organisms/Desktop/AppSettings/PreviousVersionModal' import { ConnectRobotSlideout } from '/app/organisms/Desktop/AppSettings/ConnectRobotSlideout' @@ -62,6 +69,15 @@ export function GeneralSettings(): JSX.Element { setShowPreviousVersionModal, ] = useState(false) const updateAvailable = Boolean(useSelector(getAvailableShellUpdate)) + + const enableLocalization = useFeatureFlag('enableLocalization') + const appLanguage = useSelector(getAppLanguage) + const currentLanguageOption = LANGUAGES.find(lng => lng.value === appLanguage) + + const handleDropdownClick = (value: string): void => { + dispatch(updateConfigValue('language.appLanguage', value)) + } + const [showUpdateBanner, setShowUpdateBanner] = useState( updateAvailable ) @@ -260,6 +276,35 @@ export function GeneralSettings(): JSX.Element { {t('setup_connection')} + + {enableLocalization && currentLanguageOption != null ? ( + <> + + + + {t('app_language_preferences')} + + + {t('app_language_description')} + + + + + + + ) : null} {showUpdateModal ? createPortal( diff --git a/app/src/pages/Desktop/AppSettings/__test__/GeneralSettings.test.tsx b/app/src/pages/Desktop/AppSettings/__test__/GeneralSettings.test.tsx index 5cfd02e09a8..539c5899e8a 100644 --- a/app/src/pages/Desktop/AppSettings/__test__/GeneralSettings.test.tsx +++ b/app/src/pages/Desktop/AppSettings/__test__/GeneralSettings.test.tsx @@ -1,11 +1,23 @@ import { MemoryRouter } from 'react-router-dom' import { vi, it, describe, expect, beforeEach, afterEach } from 'vitest' -import { screen } from '@testing-library/react' +import { fireEvent, screen } from '@testing-library/react' +import { when } from 'vitest-when' import { renderWithProviders } from '/app/__testing-utils__' -import { i18n } from '/app/i18n' +import { + i18n, + SIMPLIFIED_CHINESE, + SIMPLIFIED_CHINESE_DISPLAY_NAME, + US_ENGLISH, + US_ENGLISH_DISPLAY_NAME, +} from '/app/i18n' import { getAlertIsPermanentlyIgnored } from '/app/redux/alerts' +import { + getAppLanguage, + updateConfigValue, + useFeatureFlag, +} from '/app/redux/config' import * as Shell from '/app/redux/shell' import { GeneralSettings } from '../GeneralSettings' @@ -29,34 +41,38 @@ describe('GeneralSettings', () => { beforeEach(() => { vi.mocked(Shell.getAvailableShellUpdate).mockReturnValue(null) vi.mocked(getAlertIsPermanentlyIgnored).mockReturnValue(false) + vi.mocked(getAppLanguage).mockReturnValue(US_ENGLISH) + when(vi.mocked(useFeatureFlag)) + .calledWith('enableLocalization') + .thenReturn(true) }) afterEach(() => { vi.resetAllMocks() }) it('renders correct titles', () => { - const [{ getByText }] = render() - getByText('App Software Version') - getByText('Software Update Alerts') - getByText('Connect to a Robot via IP Address') + render() + screen.getByText('App Software Version') + screen.getByText('Software Update Alerts') + screen.getByText('Connect to a Robot via IP Address') }) it('renders software version section with no update available', () => { - const [{ getByText, getByRole }] = render() - getByText('Up to date') - getByText('View latest release notes on') - expect(getByRole('link', { name: 'GitHub' })).toHaveAttribute( + render() + screen.getByText('Up to date') + screen.getByText('View latest release notes on') + expect(screen.getByRole('link', { name: 'GitHub' })).toHaveAttribute( 'href', 'https://github.com/Opentrons/opentrons/blob/edge/app-shell/build/release-notes.md' ) - getByRole('button', { + screen.getByRole('button', { name: 'See how to restore a previous software version', }) expect( 'It is very important for the robot and app software to be on the same version. Manage the robot software versions via Robot Settings > Advanced.' ).toBeTruthy() expect( - getByRole('link', { + screen.getByRole('link', { name: 'Learn more about keeping the Opentrons App and robot software in sync', }) @@ -65,8 +81,8 @@ describe('GeneralSettings', () => { it('renders correct info if there is update available', () => { vi.mocked(Shell.getAvailableShellUpdate).mockReturnValue('5.0.0-beta.8') - const [{ getByRole }] = render() - getByRole('button', { name: 'View software update' }) + render() + screen.getByRole('button', { name: 'View software update' }) }) it('renders correct info if there is no update available', () => { @@ -80,17 +96,35 @@ describe('GeneralSettings', () => { }) it('renders the text and toggle for update alert section', () => { - const [{ getByText, getByRole }] = render() - getByText( + render() + screen.getByText( 'Receive an alert when an Opentrons software update is available.' ) - getByRole('switch', { + screen.getByRole('switch', { name: 'Enable app update notifications', }) }) it('renders the ip address button', () => { - const [{ getByRole }] = render() - getByRole('button', { name: 'Set up connection' }) + render() + screen.getByRole('button', { name: 'Set up connection' }) + }) + + it('renders the text and dropdown for the app language preferences section', () => { + render() + screen.getByText('App Language Preferences') + screen.getByText( + 'All app features use this language. Protocols and other user content will not change language.' + ) + fireEvent.click(screen.getByText(US_ENGLISH_DISPLAY_NAME)) + fireEvent.click( + screen.getByRole('button', { + name: SIMPLIFIED_CHINESE_DISPLAY_NAME, + }) + ) + expect(updateConfigValue).toBeCalledWith( + 'language.appLanguage', + SIMPLIFIED_CHINESE + ) }) }) diff --git a/app/src/pages/ODD/ChooseLanguage/__tests__/ChooseLanguage.test.tsx b/app/src/pages/ODD/ChooseLanguage/__tests__/ChooseLanguage.test.tsx new file mode 100644 index 00000000000..8508a7b4d08 --- /dev/null +++ b/app/src/pages/ODD/ChooseLanguage/__tests__/ChooseLanguage.test.tsx @@ -0,0 +1,59 @@ +import { vi, it, describe, expect } from 'vitest' +import { fireEvent, screen } from '@testing-library/react' +import { MemoryRouter } from 'react-router-dom' + +import { renderWithProviders } from '/app/__testing-utils__' +import { i18n } from '/app/i18n' +import { updateConfigValue } from '/app/redux/config' +import { ChooseLanguage } from '..' + +import type { NavigateFunction } from 'react-router-dom' + +const mockNavigate = vi.fn() +vi.mock('react-router-dom', async importOriginal => { + const actual = await importOriginal() + return { + ...actual, + useNavigate: () => mockNavigate, + } +}) +vi.mock('/app/redux/config') + +const render = () => { + return renderWithProviders( + + + , + { + i18nInstance: i18n, + } + ) +} + +describe('ChooseLanguage', () => { + it('should render text, language options, and continue button', () => { + render() + screen.getByText('Choose your language') + screen.getByText('Select a language to personalize your experience.') + screen.getByRole('label', { name: 'English (US)' }) + screen.getByRole('label', { name: '中文' }) + screen.getByRole('button', { name: 'Continue' }) + }) + + it('should initialize english', () => { + render() + expect(updateConfigValue).toBeCalledWith('language.appLanguage', 'en-US') + }) + + it('should change language when language option selected', () => { + render() + fireEvent.click(screen.getByRole('label', { name: '中文' })) + expect(updateConfigValue).toBeCalledWith('language.appLanguage', 'zh-CN') + }) + + it('should call mockNavigate when tapping continue', () => { + render() + fireEvent.click(screen.getByRole('button', { name: 'Continue' })) + expect(mockNavigate).toHaveBeenCalledWith('/welcome') + }) +}) diff --git a/app/src/pages/ODD/ChooseLanguage/index.tsx b/app/src/pages/ODD/ChooseLanguage/index.tsx new file mode 100644 index 00000000000..d0110e68591 --- /dev/null +++ b/app/src/pages/ODD/ChooseLanguage/index.tsx @@ -0,0 +1,79 @@ +import { useEffect } from 'react' +import { useTranslation } from 'react-i18next' +import { useDispatch, useSelector } from 'react-redux' +import { useNavigate } from 'react-router-dom' + +import { + DIRECTION_COLUMN, + Flex, + JUSTIFY_SPACE_BETWEEN, + RadioButton, + SPACING, + StyledText, + TYPOGRAPHY, +} from '@opentrons/components' + +import { MediumButton } from '/app/atoms/buttons' +import { LANGUAGES, US_ENGLISH } from '/app/i18n' +import { RobotSetupHeader } from '/app/organisms/ODD/RobotSetupHeader' +import { getAppLanguage, updateConfigValue } from '/app/redux/config' + +import type { Dispatch } from '/app/redux/types' + +export function ChooseLanguage(): JSX.Element { + const { i18n, t } = useTranslation(['app_settings', 'shared']) + const navigate = useNavigate() + const dispatch = useDispatch() + + const appLanguage = useSelector(getAppLanguage) + + useEffect(() => { + // initialize en-US language on mount + dispatch(updateConfigValue('language.appLanguage', US_ENGLISH)) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []) + + return ( + + + + + + {t('select_a_language')} + + + {LANGUAGES.map(lng => ( + { + dispatch(updateConfigValue('language.appLanguage', lng.value)) + }} + > + ))} + + + { + navigate('/welcome') + }} + width="100%" + /> + + + ) +} diff --git a/app/src/pages/ODD/RobotSettingsDashboard/RobotSettingsList.tsx b/app/src/pages/ODD/RobotSettingsDashboard/RobotSettingsList.tsx index a649a65e40c..043b2b8b843 100644 --- a/app/src/pages/ODD/RobotSettingsDashboard/RobotSettingsList.tsx +++ b/app/src/pages/ODD/RobotSettingsDashboard/RobotSettingsList.tsx @@ -1,6 +1,5 @@ -import { useContext } from 'react' import { useDispatch, useSelector } from 'react-redux' -import { I18nContext, useTranslation } from 'react-i18next' +import { useTranslation } from 'react-i18next' import { Link } from 'react-router-dom' import { @@ -21,18 +20,19 @@ import { TYPOGRAPHY, } from '@opentrons/components' +import { LANGUAGES } from '/app/i18n' import { getLocalRobot, getRobotApiVersion } from '/app/redux/discovery' import { getRobotUpdateAvailable } from '/app/redux/robot-update' import { useErrorRecoverySettingsToggle } from '/app/resources/errorRecovery' import { DEV_INTERNAL_FLAGS, + getAppLanguage, getApplyHistoricOffsets, getDevtoolsEnabled, getFeatureFlags, toggleDevInternalFlag, toggleDevtools, toggleHistoricOffsets, - updateConfigValue, useFeatureFlag, } from '/app/redux/config' import { InlineNotification } from '/app/atoms/InlineNotification' @@ -88,6 +88,10 @@ export function RobotSettingsList(props: RobotSettingsListProps): JSX.Element { const { lightsEnabled, toggleLights } = useLEDLights(robotName) const { toggleERSettings, isEREnabled } = useErrorRecoverySettingsToggle() + const appLanguage = useSelector(getAppLanguage) + const currentLanguageOption = LANGUAGES.find(lng => lng.value === appLanguage) + const enableLocalization = useFeatureFlag('enableLocalization') + return ( @@ -139,6 +143,18 @@ export function RobotSettingsList(props: RobotSettingsListProps): JSX.Element { } /> + {enableLocalization ? ( + { + setCurrentOption('LanguageSetting') + }} + iconName="language" + /> + ) : null} dispatch(toggleDevtools())} /> {devToolsOn ? : null} - {/* TODO(bh, 2024-09-23): remove when localization setting designs implemented */} - ) @@ -282,22 +296,3 @@ function FeatureFlags(): JSX.Element { ) } - -function LanguageToggle(): JSX.Element | null { - const enableLocalization = useFeatureFlag('enableLocalization') - const dispatch = useDispatch() - - const { i18n } = useContext(I18nContext) - - return enableLocalization ? ( - { - i18n.language === 'en' - ? dispatch(updateConfigValue('language.appLanguage', 'zh')) - : dispatch(updateConfigValue('language.appLanguage', 'en')) - }} - rightElement={<>} - /> - ) : null -} diff --git a/app/src/pages/ODD/RobotSettingsDashboard/__tests__/RobotSettingsDashboard.test.tsx b/app/src/pages/ODD/RobotSettingsDashboard/__tests__/RobotSettingsDashboard.test.tsx index 07fdb119ee4..00b70120809 100644 --- a/app/src/pages/ODD/RobotSettingsDashboard/__tests__/RobotSettingsDashboard.test.tsx +++ b/app/src/pages/ODD/RobotSettingsDashboard/__tests__/RobotSettingsDashboard.test.tsx @@ -1,19 +1,26 @@ import { vi, it, describe, expect, beforeEach, afterEach } from 'vitest' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' +import { when } from 'vitest-when' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' import { getRobotSettings } from '/app/redux/robot-settings' import { getLocalRobot } from '/app/redux/discovery' -import { toggleDevtools, toggleHistoricOffsets } from '/app/redux/config' +import { + getAppLanguage, + toggleDevtools, + toggleHistoricOffsets, + useFeatureFlag, +} from '/app/redux/config' import { mockConnectedRobot } from '/app/redux/discovery/__fixtures__' import { Navigation } from '/app/organisms/ODD/Navigation' import { DeviceReset, TouchScreenSleep, TouchscreenBrightness, + LanguageSetting, NetworkSettings, Privacy, RobotSystemVersion, @@ -44,6 +51,7 @@ vi.mock('/app/organisms/ODD/RobotSettingsDashboard/RobotSystemVersion') vi.mock('/app/organisms/ODD/RobotSettingsDashboard/TouchscreenBrightness') vi.mock('/app/organisms/ODD/RobotSettingsDashboard/UpdateChannel') vi.mock('/app/organisms/ODD/RobotSettingsDashboard/Privacy') +vi.mock('/app/organisms/ODD/RobotSettingsDashboard/LanguageSetting') const mockToggleLights = vi.fn() const mockToggleER = vi.fn() @@ -59,6 +67,8 @@ const render = () => { ) } +const MOCK_DEFAULT_LANGUAGE = 'en-US' + // Note kj 01/25/2023 Currently test cases only check text since this PR is bare-bones for RobotSettings Dashboard describe('RobotSettingsDashboard', () => { beforeEach(() => { @@ -81,6 +91,10 @@ describe('RobotSettingsDashboard', () => { isEREnabled: true, toggleERSettings: mockToggleER, }) + vi.mocked(getAppLanguage).mockReturnValue(MOCK_DEFAULT_LANGUAGE) + when(vi.mocked(useFeatureFlag)) + .calledWith('enableLocalization') + .thenReturn(true) }) afterEach(() => { @@ -249,4 +263,13 @@ describe('RobotSettingsDashboard', () => { render() screen.getByText('Update available') }) + + it('should render component when tapping Language', () => { + render() + + screen.getByText('English (US)') + const button = screen.getByText('Language') + fireEvent.click(button) + expect(vi.mocked(LanguageSetting)).toHaveBeenCalled() + }) }) diff --git a/app/src/pages/ODD/RobotSettingsDashboard/index.tsx b/app/src/pages/ODD/RobotSettingsDashboard/index.tsx index 30925f1ae44..401c4815aac 100644 --- a/app/src/pages/ODD/RobotSettingsDashboard/index.tsx +++ b/app/src/pages/ODD/RobotSettingsDashboard/index.tsx @@ -8,6 +8,7 @@ import { DeviceReset, TouchscreenBrightness, TouchScreenSleep, + LanguageSetting, NetworkSettings, Privacy, RobotName, @@ -200,6 +201,9 @@ export function RobotSettingsDashboard(): JSX.Element { /> ) + case 'LanguageSetting': + return + // fallthrough option: render the robot settings list of buttons default: return diff --git a/app/src/redux/config/schema-types.ts b/app/src/redux/config/schema-types.ts index ce4af4ddaeb..a38ed931ec9 100644 --- a/app/src/redux/config/schema-types.ts +++ b/app/src/redux/config/schema-types.ts @@ -1,4 +1,5 @@ import type { LogLevel } from '../../logger' +import type { Language } from '/app/i18n' import type { ProtocolSort } from '/app/redux/protocol-storage' export type UrlProtocol = 'file:' | 'http:' @@ -31,8 +32,6 @@ export type QuickTransfersOnDeviceSortKey = | 'recentCreated' | 'oldCreated' -export type Language = 'en-US' | 'zh-CN' - export interface OnDeviceDisplaySettings { sleepMs: number brightness: number diff --git a/app/src/redux/config/selectors.ts b/app/src/redux/config/selectors.ts index 4069aa7320b..dbac2cd3c05 100644 --- a/app/src/redux/config/selectors.ts +++ b/app/src/redux/config/selectors.ts @@ -8,8 +8,8 @@ import type { ProtocolsOnDeviceSortKey, QuickTransfersOnDeviceSortKey, OnDeviceDisplaySettings, - Language, } from './types' +import type { Language } from '/app/i18n' import type { ProtocolSort } from '/app/redux/protocol-storage' export interface SelectOption { diff --git a/components/src/icons/icon-data.ts b/components/src/icons/icon-data.ts index edf90a1512c..9f8338c7e87 100644 --- a/components/src/icons/icon-data.ts +++ b/components/src/icons/icon-data.ts @@ -1,5 +1,8 @@ // icon data -export const ICON_DATA_BY_NAME = { +export const ICON_DATA_BY_NAME: Record< + string, + { path: string; viewBox: string } +> = { add: { path: 'M24 48C37.2548 48 48 37.2548 48 24C48 10.7452 37.2548 0 24 0C10.7452 0 0 10.7452 0 24C0 37.2548 10.7452 48 24 48ZM21 21V12H27V21H36V27H27V36H21V27H12V21H21Z', @@ -272,6 +275,11 @@ export const ICON_DATA_BY_NAME = { 'M8.63355 14.215C8.6365 14.5124 8.63911 14.7764 8.63911 15H7.36528C7.36528 14.8447 7.36714 14.6621 7.36924 14.4568C7.38181 13.225 7.40273 11.1766 7.07922 9.31768C6.89019 8.23151 6.59339 7.27753 6.15429 6.60988C5.73178 5.96745 5.2075 5.625 4.50024 5.625C3.79297 5.625 3.2687 5.96745 2.84618 6.60988C2.40708 7.27753 2.11028 8.23151 1.92125 9.31768C1.59774 11.1766 1.61866 13.225 1.63124 14.4568C1.63333 14.6621 1.6352 14.8447 1.6352 15H0.385197C0.385197 14.8588 0.383339 14.6876 0.38121 14.4914C0.367987 13.273 0.344279 11.0886 0.689764 9.10337C0.890012 7.95271 1.2241 6.80142 1.80181 5.92302C2.39611 5.01939 3.27456 4.375 4.50024 4.375C5.72592 4.375 6.60437 5.01939 7.19867 5.92301C7.40983 6.24409 7.58845 6.60162 7.73987 6.98226C7.75025 6.91343 7.76092 6.84476 7.77188 6.77626C8.02647 5.18496 8.4487 3.62176 9.16765 2.44065C9.89976 1.23791 10.9823 0.375 12.5141 0.375C14.0321 0.375 15.1148 1.19161 15.852 2.35243C16.5736 3.48863 16.9954 4.99227 17.2488 6.52295C17.6344 8.85309 17.6513 11.4038 17.6372 13.1367L19.1208 12.0031L19.8797 12.9963L17.0169 15.1838L14.1235 12.9984L14.8769 12.001L16.3866 13.1413C16.4006 11.422 16.3863 8.96723 16.0155 6.72705C15.7724 5.25773 15.3851 3.94887 14.7968 3.02257C14.2242 2.12089 13.4961 1.625 12.5141 1.625C11.5458 1.625 10.8158 2.13709 10.2354 3.0906C9.64181 4.06574 9.25156 5.44004 9.00618 6.97374C8.58775 9.58904 8.61631 12.4739 8.63355 14.215Z', viewBox: '0 0 20 16', }, + language: { + path: + 'M10 18.3333C8.83335 18.3333 7.74308 18.1146 6.72919 17.6771C5.7153 17.2396 4.83335 16.6458 4.08335 15.8958C3.33335 15.1458 2.74308 14.2604 2.31252 13.2396C1.88196 12.2187 1.66669 11.125 1.66669 9.95832C1.66669 8.79166 1.88196 7.70485 2.31252 6.69791C2.74308 5.69096 3.33335 4.81249 4.08335 4.06249C4.83335 3.31249 5.7153 2.72568 6.72919 2.30207C7.74308 1.87846 8.83335 1.66666 10 1.66666C11.1667 1.66666 12.257 1.87846 13.2709 2.30207C14.2847 2.72568 15.1667 3.31249 15.9167 4.06249C16.6667 4.81249 17.257 5.69096 17.6875 6.69791C18.1181 7.70485 18.3334 8.79166 18.3334 9.95832C18.3334 11.125 18.1181 12.2187 17.6875 13.2396C17.257 14.2604 16.6667 15.1458 15.9167 15.8958C15.1667 16.6458 14.2847 17.2396 13.2709 17.6771C12.257 18.1146 11.1667 18.3333 10 18.3333ZM10 17.125C10.4861 16.625 10.8924 16.0521 11.2188 15.4062C11.5452 14.7604 11.8125 13.993 12.0209 13.1042H8.00002C8.19446 13.9375 8.45488 14.6875 8.78127 15.3542C9.10766 16.0208 9.51391 16.6111 10 17.125ZM8.22919 16.875C7.88196 16.3472 7.58335 15.7778 7.33335 15.1667C7.08335 14.5555 6.87502 13.868 6.70835 13.1042H3.58335C4.11113 14.0903 4.72224 14.8646 5.41669 15.4271C6.11113 15.9896 7.04863 16.4722 8.22919 16.875ZM11.7917 16.8542C12.7917 16.5347 13.691 16.0555 14.4896 15.4167C15.2882 14.7778 15.9306 14.0069 16.4167 13.1042H13.3125C13.132 13.8542 12.9202 14.5347 12.6771 15.1458C12.434 15.7569 12.1389 16.3264 11.7917 16.8542ZM3.16669 11.8542H6.47919C6.43752 11.4792 6.41321 11.1424 6.40627 10.8437C6.39933 10.5451 6.39585 10.25 6.39585 9.95832C6.39585 9.6111 6.4028 9.30207 6.41669 9.03124C6.43058 8.76041 6.45835 8.45832 6.50002 8.12499H3.16669C3.06946 8.45832 3.00349 8.75693 2.96877 9.02082C2.93405 9.28471 2.91669 9.59721 2.91669 9.95832C2.91669 10.3194 2.93405 10.6424 2.96877 10.9271C3.00349 11.2118 3.06946 11.5208 3.16669 11.8542ZM7.77085 11.8542H12.25C12.3056 11.4236 12.3403 11.0729 12.3542 10.8021C12.3681 10.5312 12.375 10.25 12.375 9.95832C12.375 9.68054 12.3681 9.41318 12.3542 9.15624C12.3403 8.89929 12.3056 8.55554 12.25 8.12499H7.77085C7.7153 8.55554 7.68058 8.89929 7.66669 9.15624C7.6528 9.41318 7.64585 9.68054 7.64585 9.95832C7.64585 10.25 7.6528 10.5312 7.66669 10.8021C7.68058 11.0729 7.7153 11.4236 7.77085 11.8542ZM13.5 11.8542H16.8334C16.9306 11.5208 16.9965 11.2118 17.0313 10.9271C17.066 10.6424 17.0834 10.3194 17.0834 9.95832C17.0834 9.59721 17.066 9.28471 17.0313 9.02082C16.9965 8.75693 16.9306 8.45832 16.8334 8.12499H13.5209C13.5625 8.6111 13.5903 8.98263 13.6042 9.23957C13.6181 9.49652 13.625 9.7361 13.625 9.95832C13.625 10.2639 13.6146 10.5521 13.5938 10.8229C13.5729 11.0937 13.5417 11.4375 13.5 11.8542ZM13.2917 6.87499H16.4167C15.9584 5.91666 15.3299 5.11805 14.5313 4.47916C13.7327 3.84027 12.8125 3.38888 11.7709 3.12499C12.1181 3.63888 12.4132 4.19443 12.6563 4.79166C12.8993 5.38888 13.1111 6.08332 13.2917 6.87499ZM8.00002 6.87499H12.0417C11.8889 6.13888 11.632 5.42707 11.2709 4.73957C10.9097 4.05207 10.4861 3.44443 10 2.91666C9.55558 3.29166 9.18058 3.78471 8.87502 4.39582C8.56946 5.00693 8.2778 5.83332 8.00002 6.87499ZM3.58335 6.87499H6.72919C6.88196 6.12499 7.07641 5.45485 7.31252 4.86457C7.54863 4.2743 7.84724 3.70138 8.20835 3.14582C7.16669 3.40971 6.25696 3.85416 5.47919 4.47916C4.70141 5.10416 4.06946 5.90277 3.58335 6.87499Z', + viewBox: '0 0 20 20', + }, 'latch-closed': { path: 'M33.6663 10H6.33301V17H10.333V14H14.167V19.166H26.667V14H29.6663V17H33.6663V10Z', From 6c16cd3d79a570809361a22693b4a23635d307b3 Mon Sep 17 00:00:00 2001 From: koji Date: Fri, 25 Oct 2024 16:02:14 -0400 Subject: [PATCH 04/81] feat(protocol-designer): add Error Boundary (#16607) * feat(protocol-designer): add Error Boundary --- protocol-designer/package.json | 3 +- protocol-designer/src/ProtocolEditor.tsx | 1 - protocol-designer/src/ProtocolRoutes.tsx | 17 +++++-- .../src/assets/localization/en/shared.json | 3 ++ .../resources/ProtocolDesignerAppFallback.tsx | 47 +++++++++++++++++++ .../ProtocolDesignerAppFallback.test.tsx | 46 ++++++++++++++++++ yarn.lock | 22 +-------- 7 files changed, 112 insertions(+), 27 deletions(-) create mode 100644 protocol-designer/src/resources/ProtocolDesignerAppFallback.tsx create mode 100644 protocol-designer/src/resources/__tests__/ProtocolDesignerAppFallback.test.tsx diff --git a/protocol-designer/package.json b/protocol-designer/package.json index 045082d63be..547b15de023 100755 --- a/protocol-designer/package.json +++ b/protocol-designer/package.json @@ -27,7 +27,6 @@ "@opentrons/components": "link:../components", "@opentrons/step-generation": "link:../step-generation", "@opentrons/shared-data": "link:../shared-data", - "@types/react-lottie": "^1.2.10", "@types/redux-actions": "2.6.1", "@types/styled-components": "^5.1.26", "@types/ua-parser-js": "0.7.36", @@ -50,9 +49,9 @@ "react-dnd": "16.0.1", "react-dnd-html5-backend": "16.0.1", "react-dom": "18.2.0", + "react-error-boundary": "^4.0.10", "react-hook-form": "7.49.3", "react-i18next": "14.0.0", - "react-lottie": "^1.2.4", "react-redux": "8.1.2", "redux": "4.0.5", "redux-actions": "2.2.1", diff --git a/protocol-designer/src/ProtocolEditor.tsx b/protocol-designer/src/ProtocolEditor.tsx index d03e1b1d2a5..9bd7ef9cb48 100644 --- a/protocol-designer/src/ProtocolEditor.tsx +++ b/protocol-designer/src/ProtocolEditor.tsx @@ -32,7 +32,6 @@ const showGateModal = function ProtocolEditorComponent(): JSX.Element { const enableRedesign = useSelector(getEnableRedesign) const isValidSize = useScreenSizeCheck() - return (
{ + navigate('/', { replace: true }) + } + return ( - <> + + {showGateModal ? : null} @@ -76,6 +87,6 @@ export function ProtocolRoutes(): JSX.Element { - + ) } diff --git a/protocol-designer/src/assets/localization/en/shared.json b/protocol-designer/src/assets/localization/en/shared.json index 01bdcc9169f..b98f29e6beb 100644 --- a/protocol-designer/src/assets/localization/en/shared.json +++ b/protocol-designer/src/assets/localization/en/shared.json @@ -23,6 +23,8 @@ "edit_protocol_metadata": "Edit protocol metadata", "edit": "edit", "eight_channel": "8-Channel", + "error_boundary_pd_app_description": "You need to reload the app. Contact support with the following error message:", + "error_boundary_title": "An unknown error has occurred", "exact_labware_match": "Duplicate labware definition", "exit": "exit", "fixtures": "Fixtures", @@ -105,6 +107,7 @@ "re_export": "To use this definition, use Labware Creator to give it a unique load name and display name.", "remove": "remove", "reject": "Reject", + "reload_app": "Reload app", "reset_hints_and_tips": "Reset all hints and tips notifications", "reset_hints": "Reset hints", "resize_your_browser": "Resize your browser to at least 600px wide and 650px tall to continue editing your protocol", diff --git a/protocol-designer/src/resources/ProtocolDesignerAppFallback.tsx b/protocol-designer/src/resources/ProtocolDesignerAppFallback.tsx new file mode 100644 index 00000000000..32eabb78a30 --- /dev/null +++ b/protocol-designer/src/resources/ProtocolDesignerAppFallback.tsx @@ -0,0 +1,47 @@ +import { useTranslation } from 'react-i18next' + +// ToDo need to add analytics + +import type { FallbackProps } from 'react-error-boundary' + +import { + AlertPrimaryButton, + ALIGN_FLEX_END, + DIRECTION_COLUMN, + Flex, + Modal, + SPACING, + StyledText, +} from '@opentrons/components' + +export function ProtocolDesignerAppFallback({ + error, + resetErrorBoundary, +}: FallbackProps): JSX.Element { + const { t } = useTranslation('shared') + + const handleReloadClick = (): void => { + resetErrorBoundary() + } + + return ( + + + + + {t('error_boundary_pd_app_description')} + + + {error.message} + + + + {t('reload_app')} + + + + ) +} diff --git a/protocol-designer/src/resources/__tests__/ProtocolDesignerAppFallback.test.tsx b/protocol-designer/src/resources/__tests__/ProtocolDesignerAppFallback.test.tsx new file mode 100644 index 00000000000..20c32526e63 --- /dev/null +++ b/protocol-designer/src/resources/__tests__/ProtocolDesignerAppFallback.test.tsx @@ -0,0 +1,46 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest' +import { fireEvent, screen } from '@testing-library/react' + +import { i18n } from '../../assets/localization' +import { renderWithProviders } from '../../__testing-utils__' +import { ProtocolDesignerAppFallback } from '../ProtocolDesignerAppFallback' + +import type { FallbackProps } from 'react-error-boundary' + +const mockError = { + message: 'mock error', +} as Error + +const mockFunc = vi.fn() + +const render = (props: FallbackProps) => { + return renderWithProviders(, { + i18nInstance: i18n, + }) +} + +describe('ProtocolDesignerAppFallback', () => { + let props: FallbackProps + + beforeEach(() => { + props = { + error: mockError, + resetErrorBoundary: mockFunc, + } as FallbackProps + }) + + it('should render text and button', () => { + render(props) + screen.getByText('An unknown error has occurred') + screen.getByText( + 'You need to reload the app. Contact support with the following error message:' + ) + screen.getByText('Reload app') + }) + + it('should call mock function when clicking the button', () => { + render(props) + fireEvent.click(screen.getByText('Reload app')) + expect(mockFunc).toHaveBeenCalled() + }) +}) diff --git a/yarn.lock b/yarn.lock index 29b6725a35f..9fecdf8fa95 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5692,13 +5692,6 @@ dependencies: "@types/react" "*" -"@types/react-lottie@^1.2.10": - version "1.2.10" - resolved "https://registry.yarnpkg.com/@types/react-lottie/-/react-lottie-1.2.10.tgz#220f68a2dfa0d4b131ab4930e8bf166b9442c68c" - integrity sha512-rCd1p3US4ELKJlqwVnP0h5b24zt5p9OCvKUoNpYExLqwbFZMWEiJ6EGLMmH7nmq5V7KomBIbWO2X/XRFsL0vCA== - dependencies: - "@types/react" "*" - "@types/react-redux@7.1.32": version "7.1.32" resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.32.tgz#bf162289e0c69e44a649dfcadb30f7f7c4cb00e4" @@ -7182,7 +7175,7 @@ babel-plugin-unassert@^3.0.1: resolved "https://registry.yarnpkg.com/babel-plugin-unassert/-/babel-plugin-unassert-3.2.0.tgz#4ea8f65709905cc540627baf4ce4c837281a317d" integrity sha512-dNeuFtaJ1zNDr59r24NjjIm4SsXXm409iNOVMIERp6ePciII+rTrdwsWcHDqDFUKpOoBNT4ZS63nPEbrANW7DQ== -babel-runtime@6.x.x, babel-runtime@^6.26.0: +babel-runtime@6.x.x: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" integrity sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g== @@ -14957,11 +14950,6 @@ lost@^8.3.1: object-assign "^4.1.1" postcss "7.0.14" -lottie-web@^5.1.3: - version "5.12.2" - resolved "https://registry.yarnpkg.com/lottie-web/-/lottie-web-5.12.2.tgz#579ca9fe6d3fd9e352571edd3c0be162492f68e5" - integrity sha512-uvhvYPC8kGPjXT3MyKMrL3JitEAmDMp30lVkuq/590Mw9ok6pWcFCwXJveo0t5uqYw1UREQHofD+jVpdjBv8wg== - loud-rejection@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" @@ -18592,14 +18580,6 @@ react-is@^18.0.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -react-lottie@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/react-lottie/-/react-lottie-1.2.4.tgz#999ccabff8afc82074588bc50bd75be6f8945161" - integrity sha512-kBGxI+MIZGBf4wZhNCWwHkMcVP+kbpmrLWH/SkO0qCKc7D7eSPcxQbfpsmsCo8v2KCBYjuGSou+xTqK44D/jMg== - dependencies: - babel-runtime "^6.26.0" - lottie-web "^5.1.3" - react-markdown@9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-9.0.1.tgz#c05ddbff67fd3b3f839f8c648e6fb35d022397d1" From 6ae579cd8bd9e7509ad5f49fe99c81be2d1d9c86 Mon Sep 17 00:00:00 2001 From: Jethary Alcid <66035149+jerader@users.noreply.github.com> Date: Fri, 25 Oct 2024 16:09:12 -0400 Subject: [PATCH 05/81] fix(protocol-designer): temporarily filter out TC auto-sealer lid (#16597) closes RQA-3428 AUTH-988 --- shared-data/js/getLabware.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/shared-data/js/getLabware.ts b/shared-data/js/getLabware.ts index be1daebb7ea..6fd22f1f5d4 100644 --- a/shared-data/js/getLabware.ts +++ b/shared-data/js/getLabware.ts @@ -57,6 +57,8 @@ export const PD_DO_NOT_LIST = [ 'opentrons_96_flat_bottom_adapter_nest_wellplate_200ul_flat', 'opentrons_96_deep_well_adapter_nest_wellplate_2ml_deep', 'opentrons_96_pcr_adapter_armadillo_wellplate_200ul', + // temporarily blocking TC lid adapter until it is supported in PD + 'opentrons_tough_pcr_auto_sealing_lid', ] export function getIsLabwareV1Tiprack(def: LabwareDefinition1): boolean { From cebe51a706d852b98a5f6a8a6c10910e91d7902b Mon Sep 17 00:00:00 2001 From: fbelginetw <167361860+fbelginetw@users.noreply.github.com> Date: Mon, 28 Oct 2024 09:50:13 -0400 Subject: [PATCH 06/81] feat: opentrons ai client Create New Protocol - Application Section (#16578) # Overview This PR adds the first part of the Create New Protocol flow for the Opentrons AI Client It also refactors the renderWithProviders test util to use Jotai provider ![image](https://github.com/user-attachments/assets/6b478303-be53-4790-9d21-90952024096d) ## Test Plan and Hands on Testing - On the landing page click Create a new protocol button, you will be redirected to the new page - You can select a Scientific application and describe it. You can also select other and a new input will be displayed. - The Prompt Preview component is updated with the data entered. - ## Changelog - Add Create New Protocol page - Add first section Application functionality - Header is now sticky - Updated renderWithProviders to use Jotai provider ## Review requests - Verify new page. ## Risk assessment - low --- opentrons-ai-client/src/OpentronsAI.test.tsx | 40 ++++--- opentrons-ai-client/src/OpentronsAI.tsx | 44 +++++-- opentrons-ai-client/src/OpentronsAIRoutes.tsx | 4 +- .../__testing-utils__/renderWithProviders.tsx | 56 ++++++--- opentrons-ai-client/src/analytics/mixpanel.ts | 7 +- .../src/analytics/selectors.ts | 4 +- .../localization/en/create_protocol.json | 17 +++ .../src/assets/localization/en/index.ts | 2 + .../atoms/ControlledDropdownMenu/index.tsx | 55 +++++++++ .../src/atoms/ControlledInputField/index.tsx | 37 ++++++ .../molecules/Accordion/Accordion.stories.tsx | 1 + .../src/molecules/Accordion/index.tsx | 110 ++++++++---------- .../src/molecules/PromptPreview/index.tsx | 1 + .../__tests__/ApplicationSection.test.tsx | 81 +++++++++++++ .../organisms/ApplicationSection/index.tsx | 98 ++++++++++++++++ .../ProtocolSectionsContainer.test.tsx | 101 ++++++++++++++++ .../ProtocolSectionsContainer/index.tsx | 87 ++++++++++++++ .../__tests__/CreateProtocol.test.tsx | 84 +++++++++++++ .../src/pages/CreateProtocol/index.tsx | 101 ++++++++++++++++ .../src/pages/Landing/index.tsx | 4 - opentrons-ai-client/src/resources/atoms.ts | 21 +++- .../hooks/__tests__/useTrackEvent.test.tsx | 35 +++--- opentrons-ai-client/src/resources/types.ts | 27 +++++ .../utils/createProtocolTestUtils.tsx | 19 +++ .../src/resources/utils/testUtils.tsx | 29 ----- 25 files changed, 896 insertions(+), 169 deletions(-) create mode 100644 opentrons-ai-client/src/assets/localization/en/create_protocol.json create mode 100644 opentrons-ai-client/src/atoms/ControlledDropdownMenu/index.tsx create mode 100644 opentrons-ai-client/src/atoms/ControlledInputField/index.tsx create mode 100644 opentrons-ai-client/src/organisms/ApplicationSection/__tests__/ApplicationSection.test.tsx create mode 100644 opentrons-ai-client/src/organisms/ApplicationSection/index.tsx create mode 100644 opentrons-ai-client/src/organisms/ProtocolSectionsContainer/__tests__/ProtocolSectionsContainer.test.tsx create mode 100644 opentrons-ai-client/src/organisms/ProtocolSectionsContainer/index.tsx create mode 100644 opentrons-ai-client/src/pages/CreateProtocol/__tests__/CreateProtocol.test.tsx create mode 100644 opentrons-ai-client/src/pages/CreateProtocol/index.tsx create mode 100644 opentrons-ai-client/src/resources/utils/createProtocolTestUtils.tsx delete mode 100644 opentrons-ai-client/src/resources/utils/testUtils.tsx diff --git a/opentrons-ai-client/src/OpentronsAI.test.tsx b/opentrons-ai-client/src/OpentronsAI.test.tsx index 68d604edf07..ba069ca3081 100644 --- a/opentrons-ai-client/src/OpentronsAI.test.tsx +++ b/opentrons-ai-client/src/OpentronsAI.test.tsx @@ -1,21 +1,22 @@ import { screen } from '@testing-library/react' import { describe, it, vi, beforeEach } from 'vitest' import * as auth0 from '@auth0/auth0-react' - import { renderWithProviders } from './__testing-utils__' import { i18n } from './i18n' import { Loading } from './molecules/Loading' - import { OpentronsAI } from './OpentronsAI' import { Landing } from './pages/Landing' import { useGetAccessToken } from './resources/hooks' import { Header } from './molecules/Header' import { Footer } from './molecules/Footer' +import { HeaderWithMeter } from './molecules/HeaderWithMeter' +import { headerWithMeterAtom } from './resources/atoms' vi.mock('@auth0/auth0-react') vi.mock('./pages/Landing') vi.mock('./molecules/Header') +vi.mock('./molecules/HeaderWithMeter') vi.mock('./molecules/Footer') vi.mock('./molecules/Loading') vi.mock('./resources/hooks/useGetAccessToken') @@ -27,9 +28,14 @@ vi.mock('./resources/hooks/useTrackEvent', () => ({ useTrackEvent: () => mockUseTrackEvent, })) +const initialValues: Array<[any, any]> = [ + [headerWithMeterAtom, { displayHeaderWithMeter: false, progress: 0 }], +] + const render = (): ReturnType => { return renderWithProviders(, { i18nInstance: i18n, + initialValues, }) } @@ -41,7 +47,14 @@ describe('OpentronsAI', () => { vi.mocked(Landing).mockReturnValue(
mock Landing page
) vi.mocked(Loading).mockReturnValue(
mock Loading
) vi.mocked(Header).mockReturnValue(
mock Header component
) + vi.mocked(HeaderWithMeter).mockReturnValue( +
mock Header With Meter component
+ ) vi.mocked(Footer).mockReturnValue(
mock Footer component
) + ;(auth0 as any).useAuth0 = vi.fn().mockReturnValue({ + isAuthenticated: true, + isLoading: false, + }) }) it('should render loading screen when isLoading is true', () => { @@ -54,28 +67,25 @@ describe('OpentronsAI', () => { }) it('should render text', () => { - ;(auth0 as any).useAuth0 = vi.fn().mockReturnValue({ - isAuthenticated: true, - isLoading: false, - }) render() screen.getByText('mock Landing page') }) - it('should render Header component', () => { - ;(auth0 as any).useAuth0 = vi.fn().mockReturnValue({ - isAuthenticated: true, - isLoading: false, - }) + it('should render the default Header component if displayHeaderWithMeter is false', () => { render() + screen.getByText('mock Header component') }) + it('should render Header with meter component if displayHeaderWithMeter is true', () => { + initialValues[0][1].displayHeaderWithMeter = true + + render() + + screen.getByText('mock Header With Meter component') + }) + it('should render Footer component', () => { - ;(auth0 as any).useAuth0 = vi.fn().mockReturnValue({ - isAuthenticated: true, - isLoading: false, - }) render() screen.getByText('mock Footer component') }) diff --git a/opentrons-ai-client/src/OpentronsAI.tsx b/opentrons-ai-client/src/OpentronsAI.tsx index 621c2453e50..1f91faf0eed 100644 --- a/opentrons-ai-client/src/OpentronsAI.tsx +++ b/opentrons-ai-client/src/OpentronsAI.tsx @@ -11,23 +11,24 @@ import { useAuth0 } from '@auth0/auth0-react' import { useAtom } from 'jotai' import { useEffect } from 'react' import { Loading } from './molecules/Loading' -import { mixpanelAtom, tokenAtom } from './resources/atoms' +import { headerWithMeterAtom, mixpanelAtom, tokenAtom } from './resources/atoms' import { useGetAccessToken } from './resources/hooks' import { initializeMixpanel } from './analytics/mixpanel' import { useTrackEvent } from './resources/hooks/useTrackEvent' import { Header } from './molecules/Header' import { CLIENT_MAX_WIDTH } from './resources/constants' import { Footer } from './molecules/Footer' +import { HeaderWithMeter } from './molecules/HeaderWithMeter' +import styled from 'styled-components' export function OpentronsAI(): JSX.Element | null { const { isAuthenticated, isLoading, loginWithRedirect } = useAuth0() const [, setToken] = useAtom(tokenAtom) - const [mixpanel] = useAtom(mixpanelAtom) + const [{ displayHeaderWithMeter, progress }] = useAtom(headerWithMeterAtom) + const [mixpanelState, setMixpanelState] = useAtom(mixpanelAtom) const { getAccessToken } = useGetAccessToken() const trackEvent = useTrackEvent() - initializeMixpanel(mixpanel) - const fetchAccessToken = async (): Promise => { try { const accessToken = await getAccessToken() @@ -37,6 +38,11 @@ export function OpentronsAI(): JSX.Element | null { } } + if (mixpanelState?.isInitialized === false) { + setMixpanelState({ ...mixpanelState, isInitialized: true }) + initializeMixpanel(mixpanelState) + } + useEffect(() => { if (!isAuthenticated && !isLoading) { void loginWithRedirect() @@ -61,30 +67,44 @@ export function OpentronsAI(): JSX.Element | null { } return ( -
+ + {displayHeaderWithMeter ? ( + + ) : ( +
+ )} + + -
- -
-
+ ) } + +const StickyHeader = styled.div` + position: sticky; + top: 0; + z-index: 100; +` diff --git a/opentrons-ai-client/src/OpentronsAIRoutes.tsx b/opentrons-ai-client/src/OpentronsAIRoutes.tsx index 630429c2aa1..b790b262ebe 100644 --- a/opentrons-ai-client/src/OpentronsAIRoutes.tsx +++ b/opentrons-ai-client/src/OpentronsAIRoutes.tsx @@ -2,11 +2,11 @@ import { Route, Navigate, Routes } from 'react-router-dom' import { Landing } from './pages/Landing' import type { RouteProps } from './resources/types' +import { CreateProtocol } from './pages/CreateProtocol' const opentronsAIRoutes: RouteProps[] = [ - // replace Landing with the correct component { - Component: Landing, + Component: CreateProtocol, name: 'Create A New Protocol', navLinkTo: '/new-protocol', path: '/new-protocol', diff --git a/opentrons-ai-client/src/__testing-utils__/renderWithProviders.tsx b/opentrons-ai-client/src/__testing-utils__/renderWithProviders.tsx index f551c875d9c..4f442fa42b9 100644 --- a/opentrons-ai-client/src/__testing-utils__/renderWithProviders.tsx +++ b/opentrons-ai-client/src/__testing-utils__/renderWithProviders.tsx @@ -3,31 +3,49 @@ import type * as React from 'react' import { QueryClient, QueryClientProvider } from 'react-query' import { I18nextProvider } from 'react-i18next' -import { Provider } from 'react-redux' -import { vi } from 'vitest' import { render } from '@testing-library/react' -import { createStore } from 'redux' -import type { PreloadedState, Store } from 'redux' import type { RenderOptions, RenderResult } from '@testing-library/react' +import { useHydrateAtoms } from 'jotai/utils' +import { Provider } from 'jotai' -export interface RenderWithProvidersOptions extends RenderOptions { - initialState?: State +interface HydrateAtomsProps { + initialValues: Array<[any, any]> + children: React.ReactNode +} + +interface TestProviderProps { + initialValues: Array<[any, any]> + children: React.ReactNode +} + +const HydrateAtoms = ({ + initialValues, + children, +}: HydrateAtomsProps): React.ReactNode => { + useHydrateAtoms(initialValues) + return children +} + +export const TestProvider = ({ + initialValues, + children, +}: TestProviderProps): React.ReactNode => ( + + {children} + +) + +export interface RenderWithProvidersOptions extends RenderOptions { + initialValues?: Array<[any, any]> i18nInstance: React.ComponentProps['i18n'] } -export function renderWithProviders( +export function renderWithProviders( Component: React.ReactElement, - options?: RenderWithProvidersOptions -): [RenderResult, Store] { - const { initialState = {}, i18nInstance = null } = options ?? {} - - const store: Store = createStore( - vi.fn(), - initialState as PreloadedState - ) - store.dispatch = vi.fn() - store.getState = vi.fn(() => initialState) as () => State + options?: RenderWithProvidersOptions +): RenderResult { + const { i18nInstance = null, initialValues = [] } = options ?? {} const queryClient = new QueryClient() @@ -36,7 +54,7 @@ export function renderWithProviders( > = ({ children }) => { const BaseWrapper = ( - {children} + {children} ) if (i18nInstance != null) { @@ -48,5 +66,5 @@ export function renderWithProviders( } } - return [render(Component, { wrapper: ProviderWrapper }), store] + return render(Component, { wrapper: ProviderWrapper, ...options }) } diff --git a/opentrons-ai-client/src/analytics/mixpanel.ts b/opentrons-ai-client/src/analytics/mixpanel.ts index eb81b72e6e3..6d617dae876 100644 --- a/opentrons-ai-client/src/analytics/mixpanel.ts +++ b/opentrons-ai-client/src/analytics/mixpanel.ts @@ -1,8 +1,6 @@ import mixpanel from 'mixpanel-browser' import { getHasOptedIn } from './selectors' - -export const getIsProduction = (): boolean => - global.location.host === 'designer.opentrons.com' // UPDATE THIS TO CORRECT URL +import type { Mixpanel } from '../resources/types' export type AnalyticsEvent = | { @@ -20,7 +18,7 @@ const MIXPANEL_OPTS = { opt_out_tracking_by_default: true, } -export function initializeMixpanel(state: any): void { +export function initializeMixpanel(state: Mixpanel): void { const optedIn = getHasOptedIn(state) ?? false if (MIXPANEL_ID != null) { console.debug('Initializing Mixpanel', { optedIn }) @@ -53,7 +51,6 @@ export function setMixpanelTracking(optedIn: boolean): void { // Register "super properties" which are included with all events mixpanel.register({ appVersion: 'test', // TODO update this? - // NOTE(IL, 2020): Since PD may be in the same Mixpanel project as other OT web apps, this 'appName' property is intended to distinguish it appName: 'opentronsAIClient', }) } else { diff --git a/opentrons-ai-client/src/analytics/selectors.ts b/opentrons-ai-client/src/analytics/selectors.ts index b55165f3049..19baf7c8ec2 100644 --- a/opentrons-ai-client/src/analytics/selectors.ts +++ b/opentrons-ai-client/src/analytics/selectors.ts @@ -1,2 +1,4 @@ -export const getHasOptedIn = (state: any): boolean | null => +import type { Mixpanel } from '../resources/types' + +export const getHasOptedIn = (state: Mixpanel): boolean | null => state.analytics.hasOptedIn diff --git a/opentrons-ai-client/src/assets/localization/en/create_protocol.json b/opentrons-ai-client/src/assets/localization/en/create_protocol.json new file mode 100644 index 00000000000..5bf2d5d6e23 --- /dev/null +++ b/opentrons-ai-client/src/assets/localization/en/create_protocol.json @@ -0,0 +1,17 @@ +{ + "application_title": "Application", + "application_scientific_dropdown_title": "What's your scientific application?", + "application_scientific_dropdown_placeholder": "Select an option", + "basic_aliquoting": "Basic aliquoting", + "pcr": "PCR", + "other": "Other", + "application_other_title": "Other application", + "application_other_caption": "Example: “cherrypicking” or “serial dilution”", + "application_describe_title": "Describe what you are trying to do", + "application_describe_caption": "Example: “The protocol performs automated liquid handling for Pierce BCA Protein Assay Kit to determine protein concentrations in various sample types, such as cell lysates and eluates of purification process.", + "section_confirm_button": "Confirm", + "instruments_title": "Instruments", + "modules_title": "Modules", + "labware_liquids_title": "Labware & Liquids", + "steps_title": "Steps" +} diff --git a/opentrons-ai-client/src/assets/localization/en/index.ts b/opentrons-ai-client/src/assets/localization/en/index.ts index b5aa26621dd..078684c8548 100644 --- a/opentrons-ai-client/src/assets/localization/en/index.ts +++ b/opentrons-ai-client/src/assets/localization/en/index.ts @@ -1,7 +1,9 @@ import shared from './shared.json' import protocol_generator from './protocol_generator.json' +import create_protocol from './create_protocol.json' export const en = { shared, protocol_generator, + create_protocol, } diff --git a/opentrons-ai-client/src/atoms/ControlledDropdownMenu/index.tsx b/opentrons-ai-client/src/atoms/ControlledDropdownMenu/index.tsx new file mode 100644 index 00000000000..5f2463081a6 --- /dev/null +++ b/opentrons-ai-client/src/atoms/ControlledDropdownMenu/index.tsx @@ -0,0 +1,55 @@ +import { DropdownMenu } from '@opentrons/components' +import type { DropdownBorder, DropdownOption } from '@opentrons/components' +import { Controller } from 'react-hook-form' + +interface ControlledDropdownMenuProps { + id?: string + name: string + rules?: any + options: DropdownOption[] + width?: string + dropdownType?: DropdownBorder | undefined + title?: string + defaultOption?: string + placeholder?: string +} + +export function ControlledDropdownMenu({ + name, + rules, + options, + width, + dropdownType, + title, + defaultOption, + placeholder = '', +}: ControlledDropdownMenuProps): JSX.Element { + return ( + { + const fieldValueName = options.find( + option => option.value === field.value + )?.name + + return ( + { + field.onChange(e) + }} + /> + ) + }} + /> + ) +} diff --git a/opentrons-ai-client/src/atoms/ControlledInputField/index.tsx b/opentrons-ai-client/src/atoms/ControlledInputField/index.tsx new file mode 100644 index 00000000000..064fee48573 --- /dev/null +++ b/opentrons-ai-client/src/atoms/ControlledInputField/index.tsx @@ -0,0 +1,37 @@ +import { InputField } from '@opentrons/components' +import { Controller } from 'react-hook-form' + +interface ControlledInputFieldProps { + id?: string + name: string + rules?: any + title?: string + caption?: string +} + +export function ControlledInputField({ + id, + name, + rules, + title, + caption, +}: ControlledInputFieldProps): JSX.Element { + return ( + ( + + )} + /> + ) +} diff --git a/opentrons-ai-client/src/molecules/Accordion/Accordion.stories.tsx b/opentrons-ai-client/src/molecules/Accordion/Accordion.stories.tsx index 388267061b0..a96f5e56cf1 100644 --- a/opentrons-ai-client/src/molecules/Accordion/Accordion.stories.tsx +++ b/opentrons-ai-client/src/molecules/Accordion/Accordion.stories.tsx @@ -36,6 +36,7 @@ type Story = StoryObj export const AccordionCollapsed: Story = { args: { id: 'accordion', + isOpen: false, handleClick: () => { alert('Accordion clicked') }, diff --git a/opentrons-ai-client/src/molecules/Accordion/index.tsx b/opentrons-ai-client/src/molecules/Accordion/index.tsx index 885f6af1745..4bb611d618d 100644 --- a/opentrons-ai-client/src/molecules/Accordion/index.tsx +++ b/opentrons-ai-client/src/molecules/Accordion/index.tsx @@ -1,7 +1,6 @@ -import { useRef, useState, useEffect } from 'react' +import { useRef } from 'react' import styled from 'styled-components' import { - Flex, Icon, StyledText, COLORS, @@ -14,17 +13,16 @@ import { CURSOR_POINTER, TEXT_ALIGN_LEFT, DISPLAY_FLEX, - OVERFLOW_HIDDEN, CURSOR_DEFAULT, } from '@opentrons/components' interface AccordionProps { id?: string handleClick: () => void - heading: string isOpen?: boolean isCompleted?: boolean disabled?: boolean + heading?: string children: React.ReactNode } @@ -33,54 +31,6 @@ const BUTTON = 'button' const CONTENT = 'content' const OT_CHECK = 'ot-check' -const AccordionContainer = styled(Flex)<{ - isOpen: boolean - disabled: boolean -}>` - flex-direction: ${DIRECTION_COLUMN}; - width: 100%; - height: ${SIZE_AUTO}; - padding: ${SPACING.spacing24} ${SPACING.spacing32}; - border-radius: ${BORDERS.borderRadius16}; - background-color: ${COLORS.white}; - cursor: ${props => - props.isOpen || props.disabled ? `${CURSOR_DEFAULT}` : `${CURSOR_POINTER}`}; -` - -const AccordionButton = styled.button<{ isOpen: boolean; disabled: boolean }>` - display: ${DISPLAY_FLEX}; - justify-content: ${JUSTIFY_SPACE_BETWEEN}; - align-items: ${ALIGN_CENTER}; - width: 100%; - background: none; - border: none; - cursor: ${props => - props.isOpen || props.disabled ? `${CURSOR_DEFAULT}` : `${CURSOR_POINTER}`}; - text-align: ${TEXT_ALIGN_LEFT}; - - &:focus-visible { - outline: 2px solid ${COLORS.blue50}; - } -` - -const HeadingText = styled(StyledText)` - flex: 1; - margin-right: ${SPACING.spacing8}; -` - -const AccordionContent = styled.div<{ - id: string - isOpen: boolean - contentHeight: number -}>` - transition: height 0.3s ease, margin-top 0.3s ease, visibility 0.3s ease; - overflow: ${OVERFLOW_HIDDEN}; - height: ${props => (props.isOpen ? `${props.contentHeight}px` : '0')}; - margin-top: ${props => (props.isOpen ? `${SPACING.spacing16}` : '0')}; - pointer-events: ${props => (props.isOpen ? 'auto' : 'none')}; - visibility: ${props => (props.isOpen ? 'unset' : 'hidden')}; -` - export function Accordion({ id = ACCORDION, handleClick, @@ -91,16 +41,8 @@ export function Accordion({ children, }: AccordionProps): JSX.Element { const contentRef = useRef(null) - const [contentHeight, setContentHeight] = useState(0) - - useEffect(() => { - if (contentRef.current != null) { - setContentHeight(contentRef.current.scrollHeight) - } - }, [isOpen]) const handleContainerClick = (e: React.MouseEvent): void => { - // Prevent the click event from propagating to the button if ( (e.target as HTMLElement).tagName !== 'BUTTON' && !disabled && @@ -111,7 +53,6 @@ export function Accordion({ } const handleButtonClick = (e: React.MouseEvent): void => { - // Stop the event from propagating to the container if (!isOpen && !disabled) { e.stopPropagation() handleClick() @@ -148,7 +89,6 @@ export function Accordion({ role="region" aria-labelledby={`${id}-${BUTTON}`} isOpen={isOpen} - contentHeight={contentHeight} ref={contentRef} > {children} @@ -156,3 +96,49 @@ export function Accordion({ ) } + +const AccordionContainer = styled.div<{ + isOpen: boolean + disabled: boolean +}>` + display: ${DISPLAY_FLEX}; + flex-direction: ${DIRECTION_COLUMN}; + width: 100%; + height: ${SIZE_AUTO}; + padding: ${SPACING.spacing24} ${SPACING.spacing32}; + border-radius: ${BORDERS.borderRadius16}; + background-color: ${COLORS.white}; + cursor: ${props => + props.isOpen || props.disabled ? `${CURSOR_DEFAULT}` : `${CURSOR_POINTER}`}; +` + +const AccordionButton = styled.button<{ isOpen: boolean; disabled: boolean }>` + display: ${DISPLAY_FLEX}; + justify-content: ${JUSTIFY_SPACE_BETWEEN}; + align-items: ${ALIGN_CENTER}; + width: 100%; + background: none; + border: none; + cursor: ${props => + props.isOpen || props.disabled ? `${CURSOR_DEFAULT}` : `${CURSOR_POINTER}`}; + text-align: ${TEXT_ALIGN_LEFT}; + + &:focus-visible { + outline: 2px solid ${COLORS.blue50}; + } +` + +const HeadingText = styled(StyledText)` + flex: 1; + margin-right: ${SPACING.spacing8}; +` + +const AccordionContent = styled.div<{ + id: string + isOpen: boolean +}>` + max-height: ${props => (props.isOpen ? `auto` : '0')}; + margin-top: ${props => (props.isOpen ? `${SPACING.spacing16}` : '0')}; + pointer-events: ${props => (props.isOpen ? 'auto' : 'none')}; + visibility: ${props => (props.isOpen ? 'visible' : 'hidden')}; +` diff --git a/opentrons-ai-client/src/molecules/PromptPreview/index.tsx b/opentrons-ai-client/src/molecules/PromptPreview/index.tsx index b789cfbb4c7..d74884ad1ae 100644 --- a/opentrons-ai-client/src/molecules/PromptPreview/index.tsx +++ b/opentrons-ai-client/src/molecules/PromptPreview/index.tsx @@ -30,6 +30,7 @@ const PromptPreviewContainer = styled(Flex)` ` const PromptPreviewHeading = styled(Flex)` + width: 100%; flex-direction: ${DIRECTION_ROW}; justify-content: ${JUSTIFY_SPACE_BETWEEN}; align-items: ${ALIGN_CENTER}; diff --git a/opentrons-ai-client/src/organisms/ApplicationSection/__tests__/ApplicationSection.test.tsx b/opentrons-ai-client/src/organisms/ApplicationSection/__tests__/ApplicationSection.test.tsx new file mode 100644 index 00000000000..aff027425e2 --- /dev/null +++ b/opentrons-ai-client/src/organisms/ApplicationSection/__tests__/ApplicationSection.test.tsx @@ -0,0 +1,81 @@ +import { fireEvent, screen, waitFor } from '@testing-library/react' +import { describe, it, expect } from 'vitest' +import { renderWithProviders } from '../../../__testing-utils__' +import { i18n } from '../../../i18n' +import { ApplicationSection } from '..' +import { FormProvider, useForm } from 'react-hook-form' + +const TestFormProviderComponent = () => { + const methods = useForm({ + defaultValues: {}, + }) + + return ( + + + + ) +} + +const render = (): ReturnType => { + return renderWithProviders(, { + i18nInstance: i18n, + }) +} + +describe('ApplicationSection', () => { + it('should render scientific application dropdown, describe input and confirm button', () => { + render() + + expect( + screen.getByText("What's your scientific application?") + ).toBeInTheDocument() + expect( + screen.getByText('Describe what you are trying to do') + ).toBeInTheDocument() + expect(screen.getByText('Confirm')).toBeInTheDocument() + }) + + it('should not render other application dropdown if Other option is not selected', () => { + render() + + expect(screen.queryByText('Other application')).not.toBeInTheDocument() + }) + + it('should render other application dropdown if Other option is selected', () => { + render() + + const applicationDropdown = screen.getByText('Select an option') + fireEvent.click(applicationDropdown) + + const otherOption = screen.getByText('Other') + fireEvent.click(otherOption) + + expect(screen.getByText('Other application')).toBeInTheDocument() + }) + + it('should enable confirm button when all fields are filled', async () => { + render() + + const applicationDropdown = screen.getByText('Select an option') + fireEvent.click(applicationDropdown) + + const basicAliquotingOption = screen.getByText('Basic aliquoting') + fireEvent.click(basicAliquotingOption) + + const describeInput = screen.getByRole('textbox') + fireEvent.change(describeInput, { target: { value: 'Test description' } }) + + const confirmButton = screen.getByRole('button') + await waitFor(() => { + expect(confirmButton).toBeEnabled() + }) + }) + + it('should disable confirm button when all fields are not filled', () => { + render() + + const confirmButton = screen.getByRole('button') + expect(confirmButton).toBeDisabled() + }) +}) diff --git a/opentrons-ai-client/src/organisms/ApplicationSection/index.tsx b/opentrons-ai-client/src/organisms/ApplicationSection/index.tsx new file mode 100644 index 00000000000..5e3cc523f68 --- /dev/null +++ b/opentrons-ai-client/src/organisms/ApplicationSection/index.tsx @@ -0,0 +1,98 @@ +import { + DIRECTION_COLUMN, + DISPLAY_FLEX, + Flex, + JUSTIFY_FLEX_END, + LargeButton, + SPACING, +} from '@opentrons/components' +import { useFormContext } from 'react-hook-form' +import { useTranslation } from 'react-i18next' +import styled from 'styled-components' +import { ControlledDropdownMenu } from '../../atoms/ControlledDropdownMenu' +import { ControlledInputField } from '../../atoms/ControlledInputField' +import { useAtom } from 'jotai' +import { createProtocolAtom } from '../../resources/atoms' +import { APPLICATION_STEP } from '../ProtocolSectionsContainer' + +export const BASIC_ALIQUOTING = 'basic_aliquoting' +export const PCR = 'pcr' +export const OTHER = 'other' +export const APPLICATION_SCIENTIFIC_APPLICATION = + 'application.scientificApplication' +export const APPLICATION_OTHER_APPLICATION = 'application.otherApplication' +export const APPLICATION_DESCRIBE = 'application.description' + +export function ApplicationSection(): JSX.Element | null { + const { t } = useTranslation('create_protocol') + const { + watch, + formState: { isValid }, + } = useFormContext() + const [{ currentStep }, setCreateProtocolAtom] = useAtom(createProtocolAtom) + + const options = [ + { name: t(BASIC_ALIQUOTING), value: BASIC_ALIQUOTING }, + { name: t(PCR), value: PCR }, + { name: t(OTHER), value: OTHER }, + ] + + const isOtherSelected = watch(APPLICATION_SCIENTIFIC_APPLICATION) === OTHER + + function handleConfirmButtonClick(): void { + const step = + currentStep > APPLICATION_STEP ? currentStep : APPLICATION_STEP + 1 + + setCreateProtocolAtom({ + currentStep: step, + focusStep: step, + }) + } + + return ( + + + + {isOtherSelected && ( + + )} + + + + + + + + ) +} + +const ButtonContainer = styled.div` + display: ${DISPLAY_FLEX}; + justify-content: ${JUSTIFY_FLEX_END}; +` diff --git a/opentrons-ai-client/src/organisms/ProtocolSectionsContainer/__tests__/ProtocolSectionsContainer.test.tsx b/opentrons-ai-client/src/organisms/ProtocolSectionsContainer/__tests__/ProtocolSectionsContainer.test.tsx new file mode 100644 index 00000000000..b438b2c9af6 --- /dev/null +++ b/opentrons-ai-client/src/organisms/ProtocolSectionsContainer/__tests__/ProtocolSectionsContainer.test.tsx @@ -0,0 +1,101 @@ +import { fireEvent, screen, waitFor } from '@testing-library/react' +import { describe, it, expect } from 'vitest' +import { renderWithProviders } from '../../../__testing-utils__' +import { i18n } from '../../../i18n' +import { ProtocolSectionsContainer } from '..' +import { FormProvider, useForm } from 'react-hook-form' +import { fillApplicationSectionAndClickConfirm } from '../../../resources/utils/createProtocolTestUtils' + +const TestFormProviderComponent = () => { + const methods = useForm({ + defaultValues: {}, + }) + + return ( + + + + ) +} + +const render = (): ReturnType => { + return renderWithProviders(, { + i18nInstance: i18n, + }) +} + +describe('ProtocolSectionsContainer', () => { + it('should render all five accordions for each step of Protocol Creation', () => { + render() + + expect(screen.getByText('Application')).toBeInTheDocument() + expect(screen.getByText('Instruments')).toBeInTheDocument() + expect(screen.getByText('Modules')).toBeInTheDocument() + expect(screen.getByText('Labware & Liquids')).toBeInTheDocument() + expect(screen.getByText('Steps')).toBeInTheDocument() + }) + + it('should render the ApplicationSection opened by default', () => { + render() + + expect(screen.getByRole('button', { name: 'Application' })).toHaveAttribute( + 'aria-expanded', + 'true' + ) + }) + + it('should render all the other sections closed by default', () => { + render() + + expect(screen.getByRole('button', { name: 'Instruments' })).toHaveAttribute( + 'aria-expanded', + 'false' + ) + expect(screen.getByRole('button', { name: 'Modules' })).toHaveAttribute( + 'aria-expanded', + 'false' + ) + expect( + screen.getByRole('button', { name: 'Labware & Liquids' }) + ).toHaveAttribute('aria-expanded', 'false') + expect(screen.getByRole('button', { name: 'Steps' })).toHaveAttribute( + 'aria-expanded', + 'false' + ) + }) + + it('should go back to previous section when clicking on the previous section', async () => { + render() + + const applicationButton = screen.getByRole('button', { + name: 'Application', + }) + expect(applicationButton).toHaveAttribute('aria-expanded', 'true') + + await fillApplicationSectionAndClickConfirm() + + await waitFor(() => { + expect(applicationButton).toHaveAttribute('aria-expanded', 'false') + }) + fireEvent.click(applicationButton) + + await waitFor(() => { + expect(applicationButton).toHaveAttribute('aria-expanded', 'true') + }) + }) + + it('should not allow user to go to a future section', async () => { + render() + + const instrumentsButton = screen.getByRole('button', { + name: 'Instruments', + }) + expect(instrumentsButton).toHaveAttribute('aria-expanded', 'false') + + fireEvent.click(instrumentsButton) + + await waitFor(() => { + expect(instrumentsButton).toHaveAttribute('aria-expanded', 'false') + }) + }) +}) diff --git a/opentrons-ai-client/src/organisms/ProtocolSectionsContainer/index.tsx b/opentrons-ai-client/src/organisms/ProtocolSectionsContainer/index.tsx new file mode 100644 index 00000000000..49314c1a143 --- /dev/null +++ b/opentrons-ai-client/src/organisms/ProtocolSectionsContainer/index.tsx @@ -0,0 +1,87 @@ +import { DIRECTION_COLUMN, Flex, SPACING } from '@opentrons/components' +import { useTranslation } from 'react-i18next' +import { Accordion } from '../../molecules/Accordion' +import styled from 'styled-components' +import { ApplicationSection } from '../../organisms/ApplicationSection' +import { createProtocolAtom } from '../../resources/atoms' +import { useAtom } from 'jotai' +import { useFormContext } from 'react-hook-form' + +export const APPLICATION_STEP = 0 +export const INSTRUMENTS_STEP = 1 +export const MODULES_STEP = 2 +export const LABWARE_LIQUIDS_STEP = 3 +export const STEPS_STEP = 4 + +export function ProtocolSectionsContainer(): JSX.Element | null { + const { t } = useTranslation('create_protocol') + const { + formState: { isValid }, + } = useFormContext() + const [{ currentStep, focusStep }, setCreateProtocolAtom] = useAtom( + createProtocolAtom + ) + + function handleSectionClick(stepNumber: number): void { + currentStep >= stepNumber && + isValid && + setCreateProtocolAtom({ + currentStep, + focusStep: stepNumber, + }) + } + + function displayCheckmark(stepNumber: number): boolean { + return currentStep > stepNumber && focusStep !== stepNumber + } + + return ( + + {[ + { + stepNumber: APPLICATION_STEP, + title: 'application_title', + Component: ApplicationSection, + }, + { + stepNumber: INSTRUMENTS_STEP, + title: 'instruments_title', + Component: () => Content, + }, + { + stepNumber: MODULES_STEP, + title: 'modules_title', + Component: () => Content, + }, + { + stepNumber: LABWARE_LIQUIDS_STEP, + title: 'labware_liquids_title', + Component: () => Content, + }, + { + stepNumber: STEPS_STEP, + title: 'steps_title', + Component: () => Content, + }, + ].map(({ stepNumber, title, Component }) => ( + { + handleSectionClick(stepNumber) + }} + isCompleted={displayCheckmark(stepNumber)} + > + + + ))} + + ) +} + +const ProtocolSections = styled(Flex)` + flex-direction: ${DIRECTION_COLUMN}; + width: 100%; + gap: ${SPACING.spacing16}; +` diff --git a/opentrons-ai-client/src/pages/CreateProtocol/__tests__/CreateProtocol.test.tsx b/opentrons-ai-client/src/pages/CreateProtocol/__tests__/CreateProtocol.test.tsx new file mode 100644 index 00000000000..871bab07a7b --- /dev/null +++ b/opentrons-ai-client/src/pages/CreateProtocol/__tests__/CreateProtocol.test.tsx @@ -0,0 +1,84 @@ +import { fireEvent, screen, waitFor } from '@testing-library/react' +import { describe, it, expect } from 'vitest' +import { renderWithProviders } from '../../../__testing-utils__' +import { i18n } from '../../../i18n' +import { CreateProtocol } from '..' +import { Provider } from 'jotai' +import { fillApplicationSectionAndClickConfirm } from '../../../resources/utils/createProtocolTestUtils' + +const render = (): ReturnType => { + return renderWithProviders( + + + , + { + i18nInstance: i18n, + } + ) +} + +describe('CreateProtocol', () => { + it('should update the active section when user fills the section information and clicks the confirm button', async () => { + render() + + const buttonsAndAccordions = screen.getAllByRole('button') + expect(buttonsAndAccordions[0]).toHaveAttribute('aria-expanded', 'true') + + await fillApplicationSectionAndClickConfirm() + + await waitFor(() => { + expect(buttonsAndAccordions[0]).toHaveAttribute('aria-expanded', 'false') + }) + }) + + it('should display the Prompt preview correctly for Application section', async () => { + render() + + await fillApplicationSectionAndClickConfirm() + + const previewItems = screen.getAllByTestId('Tag_default') + + expect(previewItems).toHaveLength(2) + expect(previewItems[0]).toHaveTextContent('Basic aliquoting') + expect(previewItems[1]).toHaveTextContent('Test description') + }) + + it('should display the Prompt preview correctly for Application section if Other application is selected', () => { + render() + + const applicationDropdown = screen.getByText('Select an option') + fireEvent.click(applicationDropdown) + + const basicAliquotingOption = screen.getByText('Other') + fireEvent.click(basicAliquotingOption) + + const [otherInput, describeInput] = screen.getAllByRole('textbox') + + fireEvent.change(otherInput, { target: { value: 'Test Application' } }) + fireEvent.change(describeInput, { target: { value: 'Test description' } }) + + const confirmButton = screen.getByText('Confirm') + fireEvent.click(confirmButton) + + const promptPreview = screen.getByText('Prompt') + expect(promptPreview).toBeInTheDocument() + + const previewItems = screen.getAllByTestId('Tag_default') + expect(previewItems).toHaveLength(2) + expect(previewItems[0]).toHaveTextContent('Test Application') + expect(previewItems[1]).toHaveTextContent('Test description') + }) + + it('should display a completed checkmark if the section is completed', async () => { + render() + + expect(screen.queryByTestId('accordion-ot-check')).not.toBeInTheDocument() + + const buttonsAndAccordions = screen.getAllByRole('button') + expect(buttonsAndAccordions[0]).toHaveAttribute('aria-expanded', 'true') + + await fillApplicationSectionAndClickConfirm() + + expect(screen.getByTestId('accordion-ot-check')).toBeInTheDocument() + }) +}) diff --git a/opentrons-ai-client/src/pages/CreateProtocol/index.tsx b/opentrons-ai-client/src/pages/CreateProtocol/index.tsx new file mode 100644 index 00000000000..346e43c879a --- /dev/null +++ b/opentrons-ai-client/src/pages/CreateProtocol/index.tsx @@ -0,0 +1,101 @@ +import { + Flex, + JUSTIFY_SPACE_EVENLY, + POSITION_RELATIVE, + SPACING, +} from '@opentrons/components' +import { useTranslation } from 'react-i18next' +import { useEffect } from 'react' +import { PromptPreview } from '../../molecules/PromptPreview' +import { useForm, FormProvider } from 'react-hook-form' +import { createProtocolAtom, headerWithMeterAtom } from '../../resources/atoms' +import { useAtom } from 'jotai' +import { ProtocolSectionsContainer } from '../../organisms/ProtocolSectionsContainer' +import { OTHER } from '../../organisms/ApplicationSection' + +interface CreateProtocolFormData { + application: { + scientificApplication: string + otherApplication?: string + description: string + } +} + +const TOTAL_STEPS = 5 + +export function CreateProtocol(): JSX.Element | null { + const { t } = useTranslation('create_protocol') + const [, setHeaderWithMeterAtom] = useAtom(headerWithMeterAtom) + const [{ currentStep }] = useAtom(createProtocolAtom) + + const methods = useForm({ + defaultValues: { + application: { + scientificApplication: '', + otherApplication: '', + description: '', + }, + }, + }) + + function calculateProgress(): number { + return currentStep > 0 ? currentStep / TOTAL_STEPS : 0 + } + + useEffect(() => { + setHeaderWithMeterAtom({ + displayHeaderWithMeter: true, + progress: calculateProgress(), + }) + }, [currentStep]) + + function generatePromptPreviewApplicationItems(): string[] { + const { + application: { scientificApplication, otherApplication, description }, + } = methods.watch() + + const scientificOrOtherApplication = + scientificApplication === OTHER + ? otherApplication + : scientificApplication !== '' + ? t(scientificApplication) + : '' + + return [ + scientificOrOtherApplication !== '' && scientificOrOtherApplication, + description !== '' && description, + ].filter(Boolean) + } + + function generatePromptPreviewData(): Array<{ + title: string + items: string[] + }> { + return [ + { + title: t('application_title'), + items: generatePromptPreviewApplicationItems(), + }, + ] + } + + return ( + + + + + + + ) +} diff --git a/opentrons-ai-client/src/pages/Landing/index.tsx b/opentrons-ai-client/src/pages/Landing/index.tsx index b464ad5ff29..cda92f7052b 100644 --- a/opentrons-ai-client/src/pages/Landing/index.tsx +++ b/opentrons-ai-client/src/pages/Landing/index.tsx @@ -17,10 +17,6 @@ import { useIsMobile } from '../../resources/hooks/useIsMobile' import { useNavigate } from 'react-router-dom' import { useTrackEvent } from '../../resources/hooks/useTrackEvent' -export interface InputType { - userPrompt: string -} - export function Landing(): JSX.Element | null { const navigate = useNavigate() const { t } = useTranslation('protocol_generator') diff --git a/opentrons-ai-client/src/resources/atoms.ts b/opentrons-ai-client/src/resources/atoms.ts index 73d45fb165b..3ea530c65f6 100644 --- a/opentrons-ai-client/src/resources/atoms.ts +++ b/opentrons-ai-client/src/resources/atoms.ts @@ -1,6 +1,12 @@ // jotai's atoms import { atom } from 'jotai' -import type { Chat, ChatData, Mixpanel } from './types' +import type { + Chat, + ChatData, + createProtocolAtomProps, + HeaderWithMeterAtomProps, + Mixpanel, +} from './types' /** ChatDataAtom is for chat data (user prompt and response from OpenAI API) */ export const chatDataAtom = atom([]) @@ -10,5 +16,16 @@ export const chatHistoryAtom = atom([]) export const tokenAtom = atom(null) export const mixpanelAtom = atom({ - analytics: { hasOptedIn: true }, // TODO: set to false + analytics: { hasOptedIn: true }, // TODO: set to false when we have the opt-in modal + isInitialized: false, +}) + +export const headerWithMeterAtom = atom({ + displayHeaderWithMeter: false, + progress: 0, +}) + +export const createProtocolAtom = atom({ + currentStep: 0, + focusStep: 0, }) diff --git a/opentrons-ai-client/src/resources/hooks/__tests__/useTrackEvent.test.tsx b/opentrons-ai-client/src/resources/hooks/__tests__/useTrackEvent.test.tsx index fab96155156..0c43e0bca24 100644 --- a/opentrons-ai-client/src/resources/hooks/__tests__/useTrackEvent.test.tsx +++ b/opentrons-ai-client/src/resources/hooks/__tests__/useTrackEvent.test.tsx @@ -5,24 +5,33 @@ import { renderHook } from '@testing-library/react' import { mixpanelAtom } from '../../atoms' import type { AnalyticsEvent } from '../../../analytics/mixpanel' import type { Mixpanel } from '../../types' -import { TestProvider } from '../../utils/testUtils' +import { TestProvider } from '../../../__testing-utils__' vi.mock('../../../analytics/mixpanel', () => ({ trackEvent: vi.fn(), })) +const mockMixpanelAtom: Mixpanel = { + analytics: { + hasOptedIn: true, + }, + isInitialized: false, +} + +const wrapper = ({ children }: { children: React.ReactNode }) => { + return ( + + {children} + + ) +} + describe('useTrackEvent', () => { afterEach(() => { vi.resetAllMocks() }) it('should call trackEvent with the correct arguments when hasOptedIn is true', () => { - const mockMixpanelAtom: Mixpanel = { - analytics: { - hasOptedIn: true, - }, - } - const wrapper = ({ children }: { children: React.ReactNode }) => ( {children} @@ -38,17 +47,7 @@ describe('useTrackEvent', () => { }) it('should call trackEvent with the correct arguments when hasOptedIn is false', () => { - const mockMixpanelAtomFalse: Mixpanel = { - analytics: { - hasOptedIn: false, - }, - } - - const wrapper = ({ children }: { children: React.ReactNode }) => ( - - {children} - - ) + mockMixpanelAtom.analytics.hasOptedIn = false const { result } = renderHook(() => useTrackEvent(), { wrapper }) diff --git a/opentrons-ai-client/src/resources/types.ts b/opentrons-ai-client/src/resources/types.ts index 067c1ef9764..410bdfd98a6 100644 --- a/opentrons-ai-client/src/resources/types.ts +++ b/opentrons-ai-client/src/resources/types.ts @@ -35,6 +35,7 @@ export interface Mixpanel { analytics: { hasOptedIn: boolean } + isInitialized: boolean } export interface AnalyticsEvent { @@ -42,3 +43,29 @@ export interface AnalyticsEvent { properties: Record superProperties?: Record } + +export interface HeaderWithMeterAtomProps { + displayHeaderWithMeter: boolean + progress: number +} + +export interface createProtocolAtomProps { + currentStep: number + focusStep: number +} + +export interface PromptData { + /** assistant: ChatGPT API, user: user */ + role: Role + /** content gathered from the user selection */ + data: { + applicationSection: { + application: string + description: string + } + instrumentsSection: { + robot: string + instruments: string[] + } + } +} diff --git a/opentrons-ai-client/src/resources/utils/createProtocolTestUtils.tsx b/opentrons-ai-client/src/resources/utils/createProtocolTestUtils.tsx new file mode 100644 index 00000000000..8a24224394e --- /dev/null +++ b/opentrons-ai-client/src/resources/utils/createProtocolTestUtils.tsx @@ -0,0 +1,19 @@ +import { fireEvent, screen, waitFor } from '@testing-library/react' +import { expect } from 'vitest' + +export async function fillApplicationSectionAndClickConfirm(): Promise { + const applicationDropdown = screen.getByText('Select an option') + fireEvent.click(applicationDropdown) + + const basicAliquotingOption = screen.getByText('Basic aliquoting') + fireEvent.click(basicAliquotingOption) + + const describeInput = screen.getByRole('textbox') + fireEvent.change(describeInput, { target: { value: 'Test description' } }) + + const confirmButton = screen.getByText('Confirm') + await waitFor(() => { + expect(confirmButton).toBeEnabled() + }) + fireEvent.click(confirmButton) +} diff --git a/opentrons-ai-client/src/resources/utils/testUtils.tsx b/opentrons-ai-client/src/resources/utils/testUtils.tsx deleted file mode 100644 index 954307bd391..00000000000 --- a/opentrons-ai-client/src/resources/utils/testUtils.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { Provider } from 'jotai' -import { useHydrateAtoms } from 'jotai/utils' - -interface HydrateAtomsProps { - initialValues: Array<[any, any]> - children: React.ReactNode -} - -interface TestProviderProps { - initialValues: Array<[any, any]> - children: React.ReactNode -} - -export const HydrateAtoms = ({ - initialValues, - children, -}: HydrateAtomsProps): React.ReactNode => { - useHydrateAtoms(initialValues) - return children -} - -export const TestProvider = ({ - initialValues, - children, -}: TestProviderProps): React.ReactNode => ( - - {children} - -) From 288b8a4a244a0eba93344f28ab2cae0c6470d549 Mon Sep 17 00:00:00 2001 From: Jamey Huffnagle Date: Mon, 28 Oct 2024 10:03:24 -0400 Subject: [PATCH 07/81] refactor(app): Update `dropTipInPlace` command text (#16610) Closes EXEC-182 This commit updates tip drop command text when trash is dropped into a waste container, increasing specificity. Unfortunately, the command metadata itself does not give any location when performing a drop tip, so the app must derive the location from looking at the most recent addressableArea command. Fortunately, this should never be a compute-heavy scan unless the protocol does something like "move to trash" followed by a ton of "dispense over trash" before dropping tips, which seems quite unlikely in practice. Regardless, this instance serves as an example of places in which we should reduce compute done on the app in the future. --- .../en/protocol_command_text.json | 9 +- .../{index.tsx => index.ts} | 4 +- .../getPipettingCommandText.test.tsx | 186 ++++++++++++++++++ .../getAbsorbanceReaderCommandText.ts | 2 +- .../getCommentCommandText.ts | 2 +- .../getConfigureForVolumeCommandText.ts | 2 +- .../getConfigureNozzleLayoutCommandText.ts | 2 +- .../{ => commandText}/getCustomCommandText.ts | 2 +- .../{ => commandText}/getDelayCommandText.ts | 2 +- .../getDirectTranslationCommandText.ts | 2 +- .../getHSShakeSpeedCommandText.ts | 2 +- .../getLiquidProbeCommandText.ts | 4 +- .../{ => commandText}/getLoadCommandText.ts | 6 +- .../getMoveLabwareCommandText.ts | 4 +- .../getMoveRelativeCommandText.ts | 2 +- .../getMoveToAddressableAreaCommandText.ts | 6 +- ...ToAddressableAreaForDropTipCommandText.ts} | 6 +- .../getMoveToCoordinatesCommandText.ts | 2 +- .../getMoveToSlotCommandText.ts | 2 +- .../getMoveToWellCommandText.ts | 4 +- .../getPipettingCommandText.ts | 17 +- .../getPrepareToAspirateCommandText.ts | 2 +- .../getRailLightsCommandText.ts | 2 +- .../getTCRunExtendedProfileCommandText.ts | 4 +- .../getTCRunProfileCommandText.ts | 4 +- .../getTemperatureCommandText.ts | 2 +- .../getUnknownCommandText.ts | 2 +- .../getWaitForDurationCommandText.ts | 2 +- .../getWaitForResumeCommandText.ts | 2 +- .../utils/commandText/index.ts | 26 +++ .../utils/getAddressableAreaDisplayName.ts | 14 +- .../utils/getFinalAddressableAreaCmd.ts | 21 ++ .../utils/getFinalLabwareLocation.ts | 18 +- .../useCommandTextString/utils/helpers.ts | 15 ++ .../hooks/useCommandTextString/utils/index.ts | 28 +-- .../Command/__tests__/CommandText.test.tsx | 2 +- 36 files changed, 317 insertions(+), 95 deletions(-) rename app/src/local-resources/commands/hooks/useCommandTextString/{index.tsx => index.ts} (98%) create mode 100644 app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/__tests__/getPipettingCommandText.test.tsx rename app/src/local-resources/commands/hooks/useCommandTextString/utils/{ => commandText}/getAbsorbanceReaderCommandText.ts (97%) rename app/src/local-resources/commands/hooks/useCommandTextString/utils/{ => commandText}/getCommentCommandText.ts (83%) rename app/src/local-resources/commands/hooks/useCommandTextString/utils/{ => commandText}/getConfigureForVolumeCommandText.ts (92%) rename app/src/local-resources/commands/hooks/useCommandTextString/utils/{ => commandText}/getConfigureNozzleLayoutCommandText.ts (95%) rename app/src/local-resources/commands/hooks/useCommandTextString/utils/{ => commandText}/getCustomCommandText.ts (91%) rename app/src/local-resources/commands/hooks/useCommandTextString/utils/{ => commandText}/getDelayCommandText.ts (91%) rename app/src/local-resources/commands/hooks/useCommandTextString/utils/{ => commandText}/getDirectTranslationCommandText.ts (97%) rename app/src/local-resources/commands/hooks/useCommandTextString/utils/{ => commandText}/getHSShakeSpeedCommandText.ts (87%) rename app/src/local-resources/commands/hooks/useCommandTextString/utils/{ => commandText}/getLiquidProbeCommandText.ts (92%) rename app/src/local-resources/commands/hooks/useCommandTextString/utils/{ => commandText}/getLoadCommandText.ts (97%) rename app/src/local-resources/commands/hooks/useCommandTextString/utils/{ => commandText}/getMoveLabwareCommandText.ts (94%) rename app/src/local-resources/commands/hooks/useCommandTextString/utils/{ => commandText}/getMoveRelativeCommandText.ts (86%) rename app/src/local-resources/commands/hooks/useCommandTextString/utils/{ => commandText}/getMoveToAddressableAreaCommandText.ts (67%) rename app/src/local-resources/commands/hooks/useCommandTextString/utils/{getMoveToAddressabelAreaForDropTipCommandText.ts => commandText/getMoveToAddressableAreaForDropTipCommandText.ts} (69%) rename app/src/local-resources/commands/hooks/useCommandTextString/utils/{ => commandText}/getMoveToCoordinatesCommandText.ts (86%) rename app/src/local-resources/commands/hooks/useCommandTextString/utils/{ => commandText}/getMoveToSlotCommandText.ts (85%) rename app/src/local-resources/commands/hooks/useCommandTextString/utils/{ => commandText}/getMoveToWellCommandText.ts (91%) rename app/src/local-resources/commands/hooks/useCommandTextString/utils/{ => commandText}/getPipettingCommandText.ts (88%) rename app/src/local-resources/commands/hooks/useCommandTextString/utils/{ => commandText}/getPrepareToAspirateCommandText.ts (92%) rename app/src/local-resources/commands/hooks/useCommandTextString/utils/{ => commandText}/getRailLightsCommandText.ts (89%) rename app/src/local-resources/commands/hooks/useCommandTextString/utils/{ => commandText}/getTCRunExtendedProfileCommandText.ts (97%) rename app/src/local-resources/commands/hooks/useCommandTextString/utils/{ => commandText}/getTCRunProfileCommandText.ts (87%) rename app/src/local-resources/commands/hooks/useCommandTextString/utils/{ => commandText}/getTemperatureCommandText.ts (97%) rename app/src/local-resources/commands/hooks/useCommandTextString/utils/{ => commandText}/getUnknownCommandText.ts (71%) rename app/src/local-resources/commands/hooks/useCommandTextString/utils/{ => commandText}/getWaitForDurationCommandText.ts (87%) rename app/src/local-resources/commands/hooks/useCommandTextString/utils/{ => commandText}/getWaitForResumeCommandText.ts (87%) create mode 100644 app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/index.ts create mode 100644 app/src/local-resources/commands/hooks/useCommandTextString/utils/getFinalAddressableAreaCmd.ts create mode 100644 app/src/local-resources/commands/hooks/useCommandTextString/utils/helpers.ts diff --git a/app/src/assets/localization/en/protocol_command_text.json b/app/src/assets/localization/en/protocol_command_text.json index 5640f3306a5..6dbee9af16f 100644 --- a/app/src/assets/localization/en/protocol_command_text.json +++ b/app/src/assets/localization/en/protocol_command_text.json @@ -1,7 +1,7 @@ { - "absorbance_reader_open_lid": "Opening Absorbance Reader lid", "absorbance_reader_close_lid": "Closing Absorbance Reader lid", "absorbance_reader_initialize": "Initializing Absorbance Reader to perform {{mode}} measurement at {{wavelengths}}", + "absorbance_reader_open_lid": "Opening Absorbance Reader lid", "absorbance_reader_read": "Reading plate in Absorbance Reader", "adapter_in_mod_in_slot": "{{adapter}} on {{module}} in {{slot}}", "adapter_in_slot": "{{adapter}} in {{slot}}", @@ -27,6 +27,7 @@ "dispense_push_out": "Dispensing {{volume}} µL into well {{well_name}} of {{labware}} in {{labware_location}} at {{flow_rate}} µL/sec and pushing out {{push_out_volume}} µL", "drop_tip": "Dropping tip in {{well_name}} of {{labware}}", "drop_tip_in_place": "Dropping tip in place", + "dropping_tip_in_trash": "Dropping tip in {{trash}}", "engaging_magnetic_module": "Engaging Magnetic Module", "fixed_trash": "Fixed Trash", "home_gantry": "Homing all gantry, pipette, and plunger axes", @@ -73,16 +74,16 @@ "setting_thermocycler_lid_temp": "Setting Thermocycler lid temperature to {{temp}}", "single": "single", "slot": "Slot {{slot_name}}", - "turning_rail_lights_off": "Turning rail lights off", - "turning_rail_lights_on": "Turning rail lights on", "target_temperature": "target temperature", "tc_awaiting_for_duration": "Waiting for Thermocycler profile to complete", "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_extended_profile_cycle": "{{repetitions}} repetitions of the following steps:", "tc_starting_profile": "Running thermocycler profile with {{stepCount}} steps:", "touch_tip": "Touching tip", "trash_bin_in_slot": "Trash Bin in {{slot_name}}", + "turning_rail_lights_off": "Turning rail lights off", + "turning_rail_lights_on": "Turning rail lights on", "unlatching_hs_latch": "Unlatching labware on Heater-Shaker", "wait_for_duration": "Pausing for {{seconds}} seconds. {{message}}", "wait_for_resume": "Pausing protocol", diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/index.tsx b/app/src/local-resources/commands/hooks/useCommandTextString/index.ts similarity index 98% rename from app/src/local-resources/commands/hooks/useCommandTextString/index.tsx rename to app/src/local-resources/commands/hooks/useCommandTextString/index.ts index 3966a1bc7f4..0eb04ee588e 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/index.tsx +++ b/app/src/local-resources/commands/hooks/useCommandTextString/index.ts @@ -7,11 +7,11 @@ import type { RobotType, LabwareDefinition2, } from '@opentrons/shared-data' -import type { GetDirectTranslationCommandText } from './utils/getDirectTranslationCommandText' import type { TCProfileStepText, TCProfileCycleText, -} from './utils/getTCRunExtendedProfileCommandText' + GetDirectTranslationCommandText, +} from './utils' import type { CommandTextData } from '/app/local-resources/commands/types' export interface UseCommandTextStringParams { diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/__tests__/getPipettingCommandText.test.tsx b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/__tests__/getPipettingCommandText.test.tsx new file mode 100644 index 00000000000..82b269bd581 --- /dev/null +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/__tests__/getPipettingCommandText.test.tsx @@ -0,0 +1,186 @@ +import { screen } from '@testing-library/react' +import { vi, describe, it, beforeEach } from 'vitest' +import { useTranslation } from 'react-i18next' + +import { renderWithProviders } from '/app/__testing-utils__' +import { i18n } from '/app/i18n' +import { + getLabwareDefinitionsFromCommands, + getLabwareName, + getLoadedLabware, + getLabwareDisplayLocation, +} from '/app/local-resources/labware' +import { getPipettingCommandText } from '../getPipettingCommandText' +import { getLabwareDefURI } from '@opentrons/shared-data' +import { getFinalLabwareLocation } from '../../getFinalLabwareLocation' +import { getWellRange } from '../../getWellRange' +import { getFinalMoveToAddressableAreaCmd } from '../../getFinalAddressableAreaCmd' +import { getAddressableAreaDisplayName } from '../../getAddressableAreaDisplayName' + +vi.mock('@opentrons/shared-data') +vi.mock('../../getFinalLabwareLocation') +vi.mock('../../getWellRange') +vi.mock('/app/local-resources/labware') +vi.mock('../../getFinalAddressableAreaCmd') +vi.mock('../../getAddressableAreaDisplayName') + +const baseCommandData = { + allRunDefs: {}, + robotType: 'OT-2', + commandTextData: { + commands: [], + labware: [], + modules: [], + pipettes: [{ id: 'pipette-1', pipetteName: 'p300_single' }], + }, +} as any + +function TestWrapper({ command }: { command: any }): JSX.Element { + const { t } = useTranslation('protocol_command_text') + const text = getPipettingCommandText({ + command, + ...baseCommandData, + t, + }) + + return
{text}
+} + +const render = (command: any) => { + return renderWithProviders(, { + i18nInstance: i18n, + }) +} + +describe('getPipettingCommandText', () => { + beforeEach(() => { + vi.mocked(getLabwareDefURI).mockImplementation((def: any) => def.uri) + vi.mocked(getFinalLabwareLocation).mockReturnValue('slot-1' as any) + vi.mocked(getWellRange).mockReturnValue('A1') + vi.mocked(getLabwareDefinitionsFromCommands).mockReturnValue([ + { uri: 'tiprack-uri', parameters: { isTiprack: true } }, + { uri: 'plate-uri', parameters: { isTiprack: false } }, + ] as any) + vi.mocked(getLabwareName).mockReturnValue('Test Labware') + vi.mocked(getLoadedLabware).mockImplementation( + (labware, id) => + ({ + definitionUri: id === 'tiprack-id' ? 'tiprack-uri' : 'plate-uri', + } as any) + ) + vi.mocked(getLabwareDisplayLocation).mockReturnValue('Slot 1') + vi.mocked(getFinalMoveToAddressableAreaCmd).mockReturnValue({ + id: 'cmd-1', + commandType: 'moveToAddressableArea', + } as any) + vi.mocked(getAddressableAreaDisplayName).mockReturnValue('Fixed Trash') + }) + + it('should render aspirate command text correctly', () => { + const command = { + id: 'cmd-1', + commandType: 'aspirate', + params: { + labwareId: 'labware-1', + wellName: 'A1', + volume: 100, + flowRate: 150, + }, + } + + render(command) + screen.getByText( + /Aspirating 100 µL from well A1 of Test Labware in Slot 1 at 150 µL\/sec/ + ) + }) + + it('should render dispense command text correctly', () => { + const command = { + id: 'cmd-1', + commandType: 'dispense', + params: { + labwareId: 'labware-1', + wellName: 'A1', + volume: 100, + flowRate: 150, + }, + } + + render(command) + screen.getByText( + /Dispensing 100 µL into well A1 of Test Labware in Slot 1 at 150 µL\/sec/ + ) + }) + + it('should render dispense with push out command text correctly', () => { + const command = { + id: 'cmd-1', + commandType: 'dispense', + params: { + labwareId: 'labware-1', + wellName: 'A1', + volume: 100, + flowRate: 150, + pushOut: 10, + }, + } + + render(command) + screen.getByText( + /Dispensing 100 µL into well A1 of Test Labware in Slot 1 at 150 µL\/sec and pushing out 10 µL/ + ) + }) + + it('should render pickup tip command text correctly', () => { + const command = { + id: 'cmd-1', + commandType: 'pickUpTip', + params: { + labwareId: 'tiprack-id', + wellName: 'A1', + pipetteId: 'pipette-1', + }, + } + + render(command) + screen.getByText(/Picking up tip\(s\) from A1 of Test Labware in Slot 1/) + }) + + it('should render drop tip in tiprack command text correctly', () => { + const command = { + id: 'cmd-1', + commandType: 'dropTip', + params: { + labwareId: 'tiprack-id', + wellName: 'A1', + }, + } + + render(command) + screen.getByText(/Returning tip to A1 of Test Labware in Slot 1/) + }) + + it('should render drop tip in place command text correctly if there is an addressable area name', () => { + const command = { + id: 'cmd-1', + commandType: 'dropTipInPlace', + params: {}, + } + + render(command) + screen.getByText('Dropping tip in Fixed Trash') + }) + + it('should render drop tip in place command text correctly if there is not an addressable area name', () => { + const command = { + id: 'cmd-1', + commandType: 'dropTipInPlace', + params: {}, + } + + vi.mocked(getFinalMoveToAddressableAreaCmd).mockReturnValue(null) + + render(command) + screen.getByText('Dropping tip in place') + }) +}) diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getAbsorbanceReaderCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getAbsorbanceReaderCommandText.ts similarity index 97% rename from app/src/local-resources/commands/hooks/useCommandTextString/utils/getAbsorbanceReaderCommandText.ts rename to app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getAbsorbanceReaderCommandText.ts index b9e7107b569..926ed749609 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getAbsorbanceReaderCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getAbsorbanceReaderCommandText.ts @@ -5,7 +5,7 @@ import type { AbsorbanceReaderReadRunTimeCommand, RunTimeCommand, } from '@opentrons/shared-data' -import type { HandlesCommands } from './types' +import type { HandlesCommands } from '../types' export type AbsorbanceCreateCommand = | AbsorbanceReaderOpenLidRunTimeCommand diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getCommentCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getCommentCommandText.ts similarity index 83% rename from app/src/local-resources/commands/hooks/useCommandTextString/utils/getCommentCommandText.ts rename to app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getCommentCommandText.ts index 3a1b7ce7e8a..f50de82c96e 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getCommentCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getCommentCommandText.ts @@ -1,5 +1,5 @@ import type { CommentRunTimeCommand } from '@opentrons/shared-data/command' -import type { HandlesCommands } from './types' +import type { HandlesCommands } from '../types' export function getCommentCommandText({ command, diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getConfigureForVolumeCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getConfigureForVolumeCommandText.ts similarity index 92% rename from app/src/local-resources/commands/hooks/useCommandTextString/utils/getConfigureForVolumeCommandText.ts rename to app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getConfigureForVolumeCommandText.ts index 1a4ee2e7c0e..fd9456b4cc3 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getConfigureForVolumeCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getConfigureForVolumeCommandText.ts @@ -1,7 +1,7 @@ import { getPipetteSpecsV2 } from '@opentrons/shared-data' import type { ConfigureForVolumeRunTimeCommand } from '@opentrons/shared-data/command' -import type { HandlesCommands } from './types' +import type { HandlesCommands } from '../types' export function getConfigureForVolumeCommandText({ command, diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getConfigureNozzleLayoutCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getConfigureNozzleLayoutCommandText.ts similarity index 95% rename from app/src/local-resources/commands/hooks/useCommandTextString/utils/getConfigureNozzleLayoutCommandText.ts rename to app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getConfigureNozzleLayoutCommandText.ts index 04d476fadd1..8c9e12f3d5b 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getConfigureNozzleLayoutCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getConfigureNozzleLayoutCommandText.ts @@ -1,7 +1,7 @@ import { getPipetteSpecsV2 } from '@opentrons/shared-data' import type { ConfigureNozzleLayoutRunTimeCommand } from '@opentrons/shared-data' -import type { HandlesCommands } from './types' +import type { HandlesCommands } from '../types' export function getConfigureNozzleLayoutCommandText({ command, diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getCustomCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getCustomCommandText.ts similarity index 91% rename from app/src/local-resources/commands/hooks/useCommandTextString/utils/getCustomCommandText.ts rename to app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getCustomCommandText.ts index da6d5a1d506..97d60249f7e 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getCustomCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getCustomCommandText.ts @@ -1,5 +1,5 @@ import type { CustomRunTimeCommand } from '@opentrons/shared-data/command' -import type { HandlesCommands } from './types' +import type { HandlesCommands } from '../types' export function getCustomCommandText({ command, diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getDelayCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getDelayCommandText.ts similarity index 91% rename from app/src/local-resources/commands/hooks/useCommandTextString/utils/getDelayCommandText.ts rename to app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getDelayCommandText.ts index 8bb24d99661..f421a163b36 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getDelayCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getDelayCommandText.ts @@ -1,5 +1,5 @@ import type { DeprecatedDelayRunTimeCommand } from '@opentrons/shared-data/command' -import type { HandlesCommands } from './types' +import type { HandlesCommands } from '../types' export function getDelayCommandText({ command, diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getDirectTranslationCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getDirectTranslationCommandText.ts similarity index 97% rename from app/src/local-resources/commands/hooks/useCommandTextString/utils/getDirectTranslationCommandText.ts rename to app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getDirectTranslationCommandText.ts index fd586136e90..92e969f402b 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getDirectTranslationCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getDirectTranslationCommandText.ts @@ -1,5 +1,5 @@ import type { RunTimeCommand } from '@opentrons/shared-data/command' -import type { HandlesCommands } from './types' +import type { HandlesCommands } from '../types' const SIMPLE_TRANSLATION_KEY_BY_COMMAND_TYPE: { [commandType in RunTimeCommand['commandType']]?: string diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getHSShakeSpeedCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getHSShakeSpeedCommandText.ts similarity index 87% rename from app/src/local-resources/commands/hooks/useCommandTextString/utils/getHSShakeSpeedCommandText.ts rename to app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getHSShakeSpeedCommandText.ts index 3710e7f0930..157cde89212 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getHSShakeSpeedCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getHSShakeSpeedCommandText.ts @@ -1,5 +1,5 @@ import type { HeaterShakerSetAndWaitForShakeSpeedRunTimeCommand } from '@opentrons/shared-data/command' -import type { HandlesCommands } from './types' +import type { HandlesCommands } from '../types' export function getHSShakeSpeedCommandText({ command, diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getLiquidProbeCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getLiquidProbeCommandText.ts similarity index 92% rename from app/src/local-resources/commands/hooks/useCommandTextString/utils/getLiquidProbeCommandText.ts rename to app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getLiquidProbeCommandText.ts index 171667012fe..014d30318eb 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getLiquidProbeCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getLiquidProbeCommandText.ts @@ -2,14 +2,14 @@ import { getLabwareName, getLabwareDisplayLocation, } from '/app/local-resources/labware' -import { getFinalLabwareLocation } from './getFinalLabwareLocation' +import { getFinalLabwareLocation } from '../getFinalLabwareLocation' import type { LiquidProbeRunTimeCommand, RunTimeCommand, TryLiquidProbeRunTimeCommand, } from '@opentrons/shared-data' -import type { HandlesCommands } from './types' +import type { HandlesCommands } from '../types' type LiquidProbeRunTimeCommands = | LiquidProbeRunTimeCommand diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getLoadCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getLoadCommandText.ts similarity index 97% rename from app/src/local-resources/commands/hooks/useCommandTextString/utils/getLoadCommandText.ts rename to app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getLoadCommandText.ts index d8ab8736e08..cba135218c8 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getLoadCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getLoadCommandText.ts @@ -5,8 +5,8 @@ import { getPipetteSpecsV2, } from '@opentrons/shared-data' -import { getPipetteNameOnMount } from './getPipetteNameOnMount' -import { getLiquidDisplayName } from './getLiquidDisplayName' +import { getPipetteNameOnMount } from '../getPipetteNameOnMount' +import { getLiquidDisplayName } from '../getLiquidDisplayName' import { getLabwareName } from '/app/local-resources/labware' import { @@ -15,7 +15,7 @@ import { } from '/app/local-resources/modules' import type { LoadLabwareRunTimeCommand } from '@opentrons/shared-data' -import type { GetCommandText } from '..' +import type { GetCommandText } from '../..' export const getLoadCommandText = ({ command, diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getMoveLabwareCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getMoveLabwareCommandText.ts similarity index 94% rename from app/src/local-resources/commands/hooks/useCommandTextString/utils/getMoveLabwareCommandText.ts rename to app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getMoveLabwareCommandText.ts index 67fe3d52aaf..29e90946bb4 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getMoveLabwareCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getMoveLabwareCommandText.ts @@ -1,13 +1,13 @@ import { GRIPPER_WASTE_CHUTE_ADDRESSABLE_AREA } from '@opentrons/shared-data' -import { getFinalLabwareLocation } from './getFinalLabwareLocation' +import { getFinalLabwareLocation } from '../getFinalLabwareLocation' import { getLabwareName, getLabwareDisplayLocation, } from '/app/local-resources/labware' import type { MoveLabwareRunTimeCommand } from '@opentrons/shared-data' -import type { HandlesCommands } from './types' +import type { HandlesCommands } from '../types' export function getMoveLabwareCommandText({ command, diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getMoveRelativeCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getMoveRelativeCommandText.ts similarity index 86% rename from app/src/local-resources/commands/hooks/useCommandTextString/utils/getMoveRelativeCommandText.ts rename to app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getMoveRelativeCommandText.ts index 7f3f8bf0aaa..d104e522fcd 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getMoveRelativeCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getMoveRelativeCommandText.ts @@ -1,5 +1,5 @@ import type { MoveRelativeRunTimeCommand } from '@opentrons/shared-data/command' -import type { HandlesCommands } from './types' +import type { HandlesCommands } from '../types' export function getMoveRelativeCommandText({ command, diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getMoveToAddressableAreaCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getMoveToAddressableAreaCommandText.ts similarity index 67% rename from app/src/local-resources/commands/hooks/useCommandTextString/utils/getMoveToAddressableAreaCommandText.ts rename to app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getMoveToAddressableAreaCommandText.ts index 749ef30f451..5dd4adb4ca4 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getMoveToAddressableAreaCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getMoveToAddressableAreaCommandText.ts @@ -1,7 +1,7 @@ -import { getAddressableAreaDisplayName } from './getAddressableAreaDisplayName' +import { getAddressableAreaDisplayName } from '../getAddressableAreaDisplayName' import type { MoveToAddressableAreaRunTimeCommand } from '@opentrons/shared-data/command' -import type { HandlesCommands } from './types' +import type { HandlesCommands } from '../types' export function getMoveToAddressableAreaCommandText({ command, @@ -10,7 +10,7 @@ export function getMoveToAddressableAreaCommandText({ }: HandlesCommands): string { const addressableAreaDisplayName = commandTextData != null - ? getAddressableAreaDisplayName(commandTextData, command.id, t) + ? getAddressableAreaDisplayName(commandTextData.commands, command.id, t) : null return t('move_to_addressable_area', { diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getMoveToAddressabelAreaForDropTipCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getMoveToAddressableAreaForDropTipCommandText.ts similarity index 69% rename from app/src/local-resources/commands/hooks/useCommandTextString/utils/getMoveToAddressabelAreaForDropTipCommandText.ts rename to app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getMoveToAddressableAreaForDropTipCommandText.ts index f7cc0f42e1f..29cd446a9ad 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getMoveToAddressabelAreaForDropTipCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getMoveToAddressableAreaForDropTipCommandText.ts @@ -1,7 +1,7 @@ -import { getAddressableAreaDisplayName } from './getAddressableAreaDisplayName' +import { getAddressableAreaDisplayName } from '../getAddressableAreaDisplayName' import type { MoveToAddressableAreaForDropTipRunTimeCommand } from '@opentrons/shared-data/command' -import type { HandlesCommands } from './types' +import type { HandlesCommands } from '../types' export function getMoveToAddressableAreaForDropTipCommandText({ command, @@ -10,7 +10,7 @@ export function getMoveToAddressableAreaForDropTipCommandText({ }: HandlesCommands): string { const addressableAreaDisplayName = commandTextData != null - ? getAddressableAreaDisplayName(commandTextData, command.id, t) + ? getAddressableAreaDisplayName(commandTextData.commands, command.id, t) : null return t('move_to_addressable_area_drop_tip', { diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getMoveToCoordinatesCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getMoveToCoordinatesCommandText.ts similarity index 86% rename from app/src/local-resources/commands/hooks/useCommandTextString/utils/getMoveToCoordinatesCommandText.ts rename to app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getMoveToCoordinatesCommandText.ts index a3dc5ace9fe..fde6e5aff22 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getMoveToCoordinatesCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getMoveToCoordinatesCommandText.ts @@ -1,5 +1,5 @@ import type { MoveToCoordinatesRunTimeCommand } from '@opentrons/shared-data/command' -import type { HandlesCommands } from './types' +import type { HandlesCommands } from '../types' export function getMoveToCoordinatesCommandText({ command, diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getMoveToSlotCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getMoveToSlotCommandText.ts similarity index 85% rename from app/src/local-resources/commands/hooks/useCommandTextString/utils/getMoveToSlotCommandText.ts rename to app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getMoveToSlotCommandText.ts index b66f5d78513..75904b7cb43 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getMoveToSlotCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getMoveToSlotCommandText.ts @@ -1,5 +1,5 @@ import type { MoveToSlotRunTimeCommand } from '@opentrons/shared-data/command' -import type { HandlesCommands } from './types' +import type { HandlesCommands } from '../types' export function getMoveToSlotCommandText({ command, diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getMoveToWellCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getMoveToWellCommandText.ts similarity index 91% rename from app/src/local-resources/commands/hooks/useCommandTextString/utils/getMoveToWellCommandText.ts rename to app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getMoveToWellCommandText.ts index e3c8d6223be..50bdba0a52f 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getMoveToWellCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getMoveToWellCommandText.ts @@ -3,10 +3,10 @@ import { getLabwareDisplayLocation, } from '/app/local-resources/labware' -import { getFinalLabwareLocation } from './getFinalLabwareLocation' +import { getFinalLabwareLocation } from '../getFinalLabwareLocation' import type { MoveToWellRunTimeCommand } from '@opentrons/shared-data/command' -import type { HandlesCommands } from './types' +import type { HandlesCommands } from '../types' export function getMoveToWellCommandText({ command, diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getPipettingCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getPipettingCommandText.ts similarity index 88% rename from app/src/local-resources/commands/hooks/useCommandTextString/utils/getPipettingCommandText.ts rename to app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getPipettingCommandText.ts index 34ad5eae3a3..6ef1369691e 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getPipettingCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getPipettingCommandText.ts @@ -1,7 +1,7 @@ import { getLabwareDefURI } from '@opentrons/shared-data' -import { getFinalLabwareLocation } from './getFinalLabwareLocation' -import { getWellRange } from './getWellRange' +import { getFinalLabwareLocation } from '../getFinalLabwareLocation' +import { getWellRange } from '../getWellRange' import { getLabwareDefinitionsFromCommands, @@ -11,7 +11,9 @@ import { } from '/app/local-resources/labware' import type { PipetteName, RunTimeCommand } from '@opentrons/shared-data' -import type { GetCommandText } from '..' +import type { GetCommandText } from '../..' +import { getFinalMoveToAddressableAreaCmd } from '/app/local-resources/commands/hooks/useCommandTextString/utils/getFinalAddressableAreaCmd' +import { getAddressableAreaDisplayName } from '/app/local-resources/commands/hooks/useCommandTextString/utils/getAddressableAreaDisplayName' export const getPipettingCommandText = ({ command, @@ -186,7 +188,14 @@ export const getPipettingCommandText = ({ }) } case 'dropTipInPlace': { - return t('drop_tip_in_place') + const cmd = getFinalMoveToAddressableAreaCmd(allPreviousCommands ?? []) + + if (cmd != null) { + const displayName = getAddressableAreaDisplayName([cmd], cmd?.id, t) + return t('dropping_tip_in_trash', { trash: displayName }) + } else { + return t('drop_tip_in_place') + } } case 'dispenseInPlace': { const { volume, flowRate } = command.params diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getPrepareToAspirateCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getPrepareToAspirateCommandText.ts similarity index 92% rename from app/src/local-resources/commands/hooks/useCommandTextString/utils/getPrepareToAspirateCommandText.ts rename to app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getPrepareToAspirateCommandText.ts index 13d32b6b7d6..f0d68c3fd4d 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getPrepareToAspirateCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getPrepareToAspirateCommandText.ts @@ -1,7 +1,7 @@ import { getPipetteSpecsV2 } from '@opentrons/shared-data' import type { PrepareToAspirateRunTimeCommand } from '@opentrons/shared-data/command' -import type { HandlesCommands } from './types' +import type { HandlesCommands } from '../types' export function getPrepareToAspirateCommandText({ command, diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getRailLightsCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getRailLightsCommandText.ts similarity index 89% rename from app/src/local-resources/commands/hooks/useCommandTextString/utils/getRailLightsCommandText.ts rename to app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getRailLightsCommandText.ts index b731d3ec392..8fe4c18aa4b 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getRailLightsCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getRailLightsCommandText.ts @@ -1,5 +1,5 @@ import type { RunTimeCommand } from '@opentrons/shared-data/command' -import type { HandlesCommands } from './types' +import type { HandlesCommands } from '../types' type HandledCommands = Extract diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getTCRunExtendedProfileCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getTCRunExtendedProfileCommandText.ts similarity index 97% rename from app/src/local-resources/commands/hooks/useCommandTextString/utils/getTCRunExtendedProfileCommandText.ts rename to app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getTCRunExtendedProfileCommandText.ts index 4c4acde0b6f..2d09f07f28c 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getTCRunExtendedProfileCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getTCRunExtendedProfileCommandText.ts @@ -4,8 +4,8 @@ import type { TCProfileCycle, AtomicProfileStep, } from '@opentrons/shared-data/command' -import type { GetTCRunExtendedProfileCommandTextResult } from '..' -import type { HandlesCommands } from './types' +import type { GetTCRunExtendedProfileCommandTextResult } from '../..' +import type { HandlesCommands } from '../types' export interface TCProfileStepText { kind: 'step' diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getTCRunProfileCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getTCRunProfileCommandText.ts similarity index 87% rename from app/src/local-resources/commands/hooks/useCommandTextString/utils/getTCRunProfileCommandText.ts rename to app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getTCRunProfileCommandText.ts index cbc56b02635..a98ce9cfa4a 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getTCRunProfileCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getTCRunProfileCommandText.ts @@ -1,7 +1,7 @@ import { formatDurationLabeled } from '/app/transformations/commands' import type { TCRunProfileRunTimeCommand } from '@opentrons/shared-data/command' -import type { GetTCRunProfileCommandTextResult } from '..' -import type { HandlesCommands } from './types' +import type { GetTCRunProfileCommandTextResult } from '../..' +import type { HandlesCommands } from '../types' export function getTCRunProfileCommandText({ command, diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getTemperatureCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getTemperatureCommandText.ts similarity index 97% rename from app/src/local-resources/commands/hooks/useCommandTextString/utils/getTemperatureCommandText.ts rename to app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getTemperatureCommandText.ts index ee60a76c289..1b5a03745c3 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getTemperatureCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getTemperatureCommandText.ts @@ -6,7 +6,7 @@ import type { HeaterShakerSetTargetTemperatureCreateCommand, RunTimeCommand, } from '@opentrons/shared-data' -import type { HandlesCommands } from './types' +import type { HandlesCommands } from '../types' export type TemperatureCreateCommand = | TemperatureModuleSetTargetTemperatureCreateCommand diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getUnknownCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getUnknownCommandText.ts similarity index 71% rename from app/src/local-resources/commands/hooks/useCommandTextString/utils/getUnknownCommandText.ts rename to app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getUnknownCommandText.ts index 4f2346c7c01..17b69b84c6a 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getUnknownCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getUnknownCommandText.ts @@ -1,4 +1,4 @@ -import type { GetCommandText } from '..' +import type { GetCommandText } from '../..' export function getUnknownCommandText({ command }: GetCommandText): string { return JSON.stringify(command) diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getWaitForDurationCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getWaitForDurationCommandText.ts similarity index 87% rename from app/src/local-resources/commands/hooks/useCommandTextString/utils/getWaitForDurationCommandText.ts rename to app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getWaitForDurationCommandText.ts index d3b3136be1f..18ccc55540a 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getWaitForDurationCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getWaitForDurationCommandText.ts @@ -1,5 +1,5 @@ import type { WaitForDurationRunTimeCommand } from '@opentrons/shared-data/command' -import type { HandlesCommands } from './types' +import type { HandlesCommands } from '../types' export function getWaitForDurationCommandText({ command, diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getWaitForResumeCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getWaitForResumeCommandText.ts similarity index 87% rename from app/src/local-resources/commands/hooks/useCommandTextString/utils/getWaitForResumeCommandText.ts rename to app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getWaitForResumeCommandText.ts index f1c7b7fcef6..a591504b244 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getWaitForResumeCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getWaitForResumeCommandText.ts @@ -1,5 +1,5 @@ import type { WaitForResumeRunTimeCommand } from '@opentrons/shared-data/command' -import type { HandlesCommands } from './types' +import type { HandlesCommands } from '../types' export function getWaitForResumeCommandText({ command, diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/index.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/index.ts new file mode 100644 index 00000000000..c2926c880c6 --- /dev/null +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/index.ts @@ -0,0 +1,26 @@ +export * from './getLoadCommandText' +export * from './getTemperatureCommandText' +export * from './getTCRunProfileCommandText' +export * from './getTCRunExtendedProfileCommandText' +export * from './getHSShakeSpeedCommandText' +export * from './getMoveToSlotCommandText' +export * from './getMoveRelativeCommandText' +export * from './getMoveToCoordinatesCommandText' +export * from './getMoveToWellCommandText' +export * from './getMoveLabwareCommandText' +export * from './getConfigureForVolumeCommandText' +export * from './getConfigureNozzleLayoutCommandText' +export * from './getPrepareToAspirateCommandText' +export * from './getMoveToAddressableAreaCommandText' +export * from './getMoveToAddressableAreaForDropTipCommandText' +export * from './getDirectTranslationCommandText' +export * from './getWaitForDurationCommandText' +export * from './getWaitForResumeCommandText' +export * from './getDelayCommandText' +export * from './getCommentCommandText' +export * from './getCustomCommandText' +export * from './getUnknownCommandText' +export * from './getPipettingCommandText' +export * from './getLiquidProbeCommandText' +export * from './getRailLightsCommandText' +export * from './getAbsorbanceReaderCommandText' diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getAddressableAreaDisplayName.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/getAddressableAreaDisplayName.ts index 20d7c6cca07..c3160de6223 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getAddressableAreaDisplayName.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/getAddressableAreaDisplayName.ts @@ -1,17 +1,16 @@ import type { AddressableAreaName, MoveToAddressableAreaParams, + RunTimeCommand, } from '@opentrons/shared-data' import type { TFunction } from 'i18next' -import type { CommandTextData } from '/app/local-resources/commands' - export function getAddressableAreaDisplayName( - commandTextData: CommandTextData, + commands: RunTimeCommand[] | undefined, commandId: string, t: TFunction ): string { - const addressableAreaCommand = (commandTextData?.commands ?? []).find( + const addressableAreaCommand = (commands ?? []).find( command => command.id === commandId ) @@ -30,8 +29,11 @@ export function getAddressableAreaDisplayName( return t('trash_bin_in_slot', { slot_name: slotName }) } else if (addressableAreaName.includes('WasteChute')) { return t('waste_chute') - } else if (addressableAreaName === 'fixedTrash') return t('fixed_trash') - else return addressableAreaName + } else if (addressableAreaName === 'fixedTrash') { + return t('fixed_trash') + } else { + return addressableAreaName + } } const getMovableTrashSlot = ( diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getFinalAddressableAreaCmd.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/getFinalAddressableAreaCmd.ts new file mode 100644 index 00000000000..3471073a8b9 --- /dev/null +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/getFinalAddressableAreaCmd.ts @@ -0,0 +1,21 @@ +import { findLastAt } from '/app/local-resources/commands/hooks/useCommandTextString/utils/helpers' + +import type { RunTimeCommand } from '@opentrons/shared-data' +/** + * given a list of commands and a labwareId, calculate the resulting location + * of the corresponding labware after all given commands are executed + * @param commands list of commands to search within + * @returns The last command related to addressable areas. + */ +export function getFinalMoveToAddressableAreaCmd( + commands: RunTimeCommand[] +): RunTimeCommand | null { + const [cmd] = findLastAt( + commands, + (c: RunTimeCommand) => + c.commandType === 'moveToAddressableArea' || + c.commandType === 'moveToAddressableAreaForDropTip' + ) + + return cmd ?? null +} diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getFinalLabwareLocation.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/getFinalLabwareLocation.ts index e674794a265..7e73770cbbd 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/getFinalLabwareLocation.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/getFinalLabwareLocation.ts @@ -1,3 +1,5 @@ +import { findLastAt } from './helpers' + import type { LabwareLocation, RunTimeCommand, @@ -5,22 +7,6 @@ import type { MoveLabwareRunTimeCommand, } from '@opentrons/shared-data' -const findLastAt = ( - arr: readonly T[], - pred: ((el: T) => boolean) | ((el: T) => el is U) -): [U, number] | [undefined, -1] => { - let arrayLoc = -1 - const lastEl = arr.findLast((el: T, idx: number): el is U => { - arrayLoc = idx - return pred(el) - }) - if (lastEl === undefined) { - return [undefined, -1] - } else { - return [lastEl, arrayLoc] - } -} - /** * given a list of commands and a labwareId, calculate the resulting location * of the corresponding labware after all given commands are executed diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/helpers.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/helpers.ts new file mode 100644 index 00000000000..5d28c41b82c --- /dev/null +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/helpers.ts @@ -0,0 +1,15 @@ +export const findLastAt = ( + arr: readonly T[], + pred: ((el: T) => boolean) | ((el: T) => el is U) +): [U, number] | [undefined, -1] => { + let arrayLoc = -1 + const lastEl = arr.findLast((el: T, idx: number): el is U => { + arrayLoc = idx + return pred(el) + }) + if (lastEl === undefined) { + return [undefined, -1] + } else { + return [lastEl, arrayLoc] + } +} diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/index.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/index.ts index 76659ca1222..44f99055f08 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/index.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/index.ts @@ -1,26 +1,2 @@ -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' -export { getMoveToCoordinatesCommandText } from './getMoveToCoordinatesCommandText' -export { getMoveToWellCommandText } from './getMoveToWellCommandText' -export { getMoveLabwareCommandText } from './getMoveLabwareCommandText' -export { getConfigureForVolumeCommandText } from './getConfigureForVolumeCommandText' -export { getConfigureNozzleLayoutCommandText } from './getConfigureNozzleLayoutCommandText' -export { getPrepareToAspirateCommandText } from './getPrepareToAspirateCommandText' -export { getMoveToAddressableAreaCommandText } from './getMoveToAddressableAreaCommandText' -export { getMoveToAddressableAreaForDropTipCommandText } from './getMoveToAddressabelAreaForDropTipCommandText' -export { getDirectTranslationCommandText } from './getDirectTranslationCommandText' -export { getWaitForDurationCommandText } from './getWaitForDurationCommandText' -export { getWaitForResumeCommandText } from './getWaitForResumeCommandText' -export { getDelayCommandText } from './getDelayCommandText' -export { getCommentCommandText } from './getCommentCommandText' -export { getCustomCommandText } from './getCustomCommandText' -export { getUnknownCommandText } from './getUnknownCommandText' -export { getPipettingCommandText } from './getPipettingCommandText' -export { getLiquidProbeCommandText } from './getLiquidProbeCommandText' -export { getRailLightsCommandText } from './getRailLightsCommandText' -export { getAbsorbanceReaderCommandText } from './getAbsorbanceReaderCommandText' +export * from './commandText' +export * from './types' diff --git a/app/src/molecules/Command/__tests__/CommandText.test.tsx b/app/src/molecules/Command/__tests__/CommandText.test.tsx index 6999063be38..f2762b622d7 100644 --- a/app/src/molecules/Command/__tests__/CommandText.test.tsx +++ b/app/src/molecules/Command/__tests__/CommandText.test.tsx @@ -444,7 +444,7 @@ describe('CommandText', () => { />, { i18nInstance: i18n } ) - screen.getByText('Dropping tip in place') + screen.getByText('Dropping tip in D3') }) it('renders correct text for pickUpTip', () => { const command = mockCommandTextData.commands.find( From 24fcc0de5ba8ed75648f88ecf96a275bfe4723ba Mon Sep 17 00:00:00 2001 From: Max Marrone Date: Mon, 28 Oct 2024 10:22:59 -0400 Subject: [PATCH 08/81] feat(api): Allow treating errors as false-positives (ignore them and continue with the run) (#16556) --- .../protocol_engine/actions/__init__.py | 4 +- .../protocol_engine/actions/actions.py | 2 +- .../actions/get_state_update.py | 29 +++-- .../protocol_engine/commands/command.py | 4 + .../protocol_engine/commands/drop_tip.py | 10 +- .../commands/drop_tip_in_place.py | 10 +- .../protocol_engine/commands/pick_up_tip.py | 10 +- .../protocol_engine/create_protocol_engine.py | 31 +++++- .../protocol_engine/error_recovery_policy.py | 16 ++- .../protocol_engine/errors/__init__.py | 2 + .../protocol_engine/errors/exceptions.py | 23 +++- ...or_recovery_hardware_state_synchronizer.py | 101 ++++++++++++++++++ .../execution/hardware_stopper.py | 8 +- .../protocol_engine/execution/tip_handler.py | 59 +++++++--- .../protocol_engine/protocol_engine.py | 75 +++++++------ .../protocol_engine/state/commands.py | 71 ++++++++---- .../protocol_engine/state/labware.py | 5 +- .../protocol_engine/state/pipettes.py | 5 +- .../opentrons/protocol_engine/state/tips.py | 5 +- .../protocol_runner/protocol_runner.py | 4 +- .../protocol_runner/run_orchestrator.py | 4 +- .../protocol_engine/commands/test_drop_tip.py | 6 ++ .../commands/test_drop_tip_in_place.py | 3 + .../commands/test_pick_up_tip.py | 10 +- .../execution/test_hardware_stopper.py | 8 +- .../execution/test_tip_handler.py | 29 ++++- .../state/test_command_state.py | 61 ++++++++++- .../state/test_command_store_old.py | 22 ++-- .../state/test_command_view_old.py | 13 ++- .../protocol_engine/test_protocol_engine.py | 30 +++++- .../protocol_runner/test_protocol_runner.py | 11 +- .../runs/error_recovery_mapping.py | 6 +- .../robot_server/runs/run_controller.py | 15 ++- .../runs/run_orchestrator_store.py | 4 +- .../tests/runs/test_error_recovery_mapping.py | 8 +- .../tests/runs/test_run_controller.py | 4 +- 36 files changed, 560 insertions(+), 148 deletions(-) create mode 100644 api/src/opentrons/protocol_engine/execution/error_recovery_hardware_state_synchronizer.py diff --git a/api/src/opentrons/protocol_engine/actions/__init__.py b/api/src/opentrons/protocol_engine/actions/__init__.py index dfd497817c0..26dfb0df8e0 100644 --- a/api/src/opentrons/protocol_engine/actions/__init__.py +++ b/api/src/opentrons/protocol_engine/actions/__init__.py @@ -30,7 +30,7 @@ SetPipetteMovementSpeedAction, AddAbsorbanceReaderLidAction, ) -from .get_state_update import get_state_update +from .get_state_update import get_state_updates __all__ = [ # action pipeline interface @@ -63,5 +63,5 @@ "PauseSource", "FinishErrorDetails", # helper functions - "get_state_update", + "get_state_updates", ] diff --git a/api/src/opentrons/protocol_engine/actions/actions.py b/api/src/opentrons/protocol_engine/actions/actions.py index 4569f7866ef..4cdcb771616 100644 --- a/api/src/opentrons/protocol_engine/actions/actions.py +++ b/api/src/opentrons/protocol_engine/actions/actions.py @@ -69,7 +69,7 @@ class StopAction: class ResumeFromRecoveryAction: """See `ProtocolEngine.resume_from_recovery()`.""" - pass + state_update: StateUpdate @dataclasses.dataclass(frozen=True) diff --git a/api/src/opentrons/protocol_engine/actions/get_state_update.py b/api/src/opentrons/protocol_engine/actions/get_state_update.py index e0ddadc3222..3ab984ab850 100644 --- a/api/src/opentrons/protocol_engine/actions/get_state_update.py +++ b/api/src/opentrons/protocol_engine/actions/get_state_update.py @@ -1,18 +1,35 @@ # noqa: D100 -from .actions import Action, SucceedCommandAction, FailCommandAction +from .actions import ( + Action, + ResumeFromRecoveryAction, + SucceedCommandAction, + FailCommandAction, +) from ..commands.command import DefinedErrorData +from ..error_recovery_policy import ErrorRecoveryType from ..state.update_types import StateUpdate -def get_state_update(action: Action) -> StateUpdate | None: - """Extract the StateUpdate from an action, if there is one.""" +def get_state_updates(action: Action) -> list[StateUpdate]: + """Extract all the StateUpdates that the StateStores should apply when they apply an action.""" if isinstance(action, SucceedCommandAction): - return action.state_update + return [action.state_update] + elif isinstance(action, FailCommandAction) and isinstance( action.error, DefinedErrorData ): - return action.error.state_update + if action.type == ErrorRecoveryType.ASSUME_FALSE_POSITIVE_AND_CONTINUE: + return [ + action.error.state_update, + action.error.state_update_if_false_positive, + ] + else: + return [action.error.state_update] + + elif isinstance(action, ResumeFromRecoveryAction): + return [action.state_update] + else: - return None + return [] diff --git a/api/src/opentrons/protocol_engine/commands/command.py b/api/src/opentrons/protocol_engine/commands/command.py index 9ba9404af1f..813a038d7ec 100644 --- a/api/src/opentrons/protocol_engine/commands/command.py +++ b/api/src/opentrons/protocol_engine/commands/command.py @@ -147,6 +147,10 @@ class DefinedErrorData(Generic[_ErrorT_co]): ) """How the engine state should be updated to reflect this command failure.""" + state_update_if_false_positive: StateUpdate = dataclasses.field( + default_factory=StateUpdate + ) + class BaseCommand( GenericModel, diff --git a/api/src/opentrons/protocol_engine/commands/drop_tip.py b/api/src/opentrons/protocol_engine/commands/drop_tip.py index f4917a82195..114a97b0467 100644 --- a/api/src/opentrons/protocol_engine/commands/drop_tip.py +++ b/api/src/opentrons/protocol_engine/commands/drop_tip.py @@ -146,7 +146,15 @@ async def execute(self, params: DropTipParams) -> _ExecuteReturn: ) ], ) - return DefinedErrorData(public=error, state_update=state_update) + state_update_if_false_positive = update_types.StateUpdate() + state_update_if_false_positive.update_pipette_tip_state( + pipette_id=params.pipetteId, tip_geometry=None + ) + return DefinedErrorData( + public=error, + state_update=state_update, + state_update_if_false_positive=state_update_if_false_positive, + ) else: state_update.update_pipette_tip_state( pipette_id=params.pipetteId, tip_geometry=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 81b47e05c08..49d44d6b563 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 @@ -72,6 +72,10 @@ async def execute(self, params: DropTipInPlaceParams) -> _ExecuteReturn: pipette_id=params.pipetteId, home_after=params.homeAfter ) except TipAttachedError as exception: + state_update_if_false_positive = update_types.StateUpdate() + state_update_if_false_positive.update_pipette_tip_state( + pipette_id=params.pipetteId, tip_geometry=None + ) error = TipPhysicallyAttachedError( id=self._model_utils.generate_id(), createdAt=self._model_utils.get_timestamp(), @@ -83,7 +87,11 @@ async def execute(self, params: DropTipInPlaceParams) -> _ExecuteReturn: ) ], ) - return DefinedErrorData(public=error, state_update=state_update) + return DefinedErrorData( + public=error, + state_update=state_update, + state_update_if_false_positive=state_update_if_false_positive, + ) else: state_update.update_pipette_tip_state( pipette_id=params.pipetteId, tip_geometry=None 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 5ccdcfc6f3a..bf8492cc74b 100644 --- a/api/src/opentrons/protocol_engine/commands/pick_up_tip.py +++ b/api/src/opentrons/protocol_engine/commands/pick_up_tip.py @@ -6,7 +6,7 @@ from typing_extensions import Literal -from ..errors import ErrorOccurrence, TipNotAttachedError +from ..errors import ErrorOccurrence, PickUpTipTipNotAttachedError from ..resources import ModelUtils from ..state import update_types from ..types import PickUpTipWellLocation, DeckPoint @@ -140,7 +140,12 @@ async def execute( labware_id=labware_id, well_name=well_name, ) - except TipNotAttachedError as e: + except PickUpTipTipNotAttachedError as e: + state_update_if_false_positive = update_types.StateUpdate() + state_update_if_false_positive.update_pipette_tip_state( + pipette_id=pipette_id, + tip_geometry=e.tip_geometry, + ) state_update.mark_tips_as_used( pipette_id=pipette_id, labware_id=labware_id, well_name=well_name ) @@ -157,6 +162,7 @@ async def execute( ], ), state_update=state_update, + state_update_if_false_positive=state_update_if_false_positive, ) else: state_update.update_pipette_tip_state( diff --git a/api/src/opentrons/protocol_engine/create_protocol_engine.py b/api/src/opentrons/protocol_engine/create_protocol_engine.py index dc66591eff2..372972c1f50 100644 --- a/api/src/opentrons/protocol_engine/create_protocol_engine.py +++ b/api/src/opentrons/protocol_engine/create_protocol_engine.py @@ -5,12 +5,20 @@ from opentrons.hardware_control import HardwareControlAPI from opentrons.hardware_control.types import DoorState -from opentrons.protocol_engine.error_recovery_policy import ErrorRecoveryPolicy +from opentrons.protocol_engine.execution.error_recovery_hardware_state_synchronizer import ( + ErrorRecoveryHardwareStateSynchronizer, +) from opentrons.util.async_helpers import async_context_manager_in_thread + from opentrons_shared_data.robot import load as load_robot +from .actions.action_dispatcher import ActionDispatcher +from .error_recovery_policy import ErrorRecoveryPolicy +from .execution.door_watcher import DoorWatcher +from .execution.hardware_stopper import HardwareStopper +from .plugins import PluginStarter from .protocol_engine import ProtocolEngine -from .resources import DeckDataProvider, ModuleDataProvider, FileProvider +from .resources import DeckDataProvider, ModuleDataProvider, FileProvider, ModelUtils from .state.config import Config from .state.state import StateStore from .types import PostRunHardwareState, DeckConfigurationType @@ -61,10 +69,27 @@ async def create_protocol_engine( deck_configuration=deck_configuration, notify_publishers=notify_publishers, ) + hardware_state_synchronizer = ErrorRecoveryHardwareStateSynchronizer( + hardware_api, state_store + ) + action_dispatcher = ActionDispatcher(state_store) + action_dispatcher.add_handler(hardware_state_synchronizer) + plugin_starter = PluginStarter(state_store, action_dispatcher) + model_utils = ModelUtils() + hardware_stopper = HardwareStopper(hardware_api, state_store) + door_watcher = DoorWatcher(state_store, hardware_api, action_dispatcher) + module_data_provider = ModuleDataProvider() + file_provider = file_provider or FileProvider() return ProtocolEngine( - state_store=state_store, hardware_api=hardware_api, + state_store=state_store, + action_dispatcher=action_dispatcher, + plugin_starter=plugin_starter, + model_utils=model_utils, + hardware_stopper=hardware_stopper, + door_watcher=door_watcher, + module_data_provider=module_data_provider, file_provider=file_provider, ) diff --git a/api/src/opentrons/protocol_engine/error_recovery_policy.py b/api/src/opentrons/protocol_engine/error_recovery_policy.py index d959651393e..fcc8a2ffef5 100644 --- a/api/src/opentrons/protocol_engine/error_recovery_policy.py +++ b/api/src/opentrons/protocol_engine/error_recovery_policy.py @@ -26,10 +26,20 @@ class ErrorRecoveryType(enum.Enum): """ WAIT_FOR_RECOVERY = enum.auto() - """Stop and wait for the error to be recovered from manually.""" + """Enter interactive error recovery mode.""" - IGNORE_AND_CONTINUE = enum.auto() - """Continue with the run, as if the command never failed.""" + CONTINUE_WITH_ERROR = enum.auto() + """Continue without interruption, carrying on from whatever error state the failed + command left the engine in. + + This is like `ProtocolEngine.resume_from_recovery(reconcile_false_positive=False)`. + """ + + ASSUME_FALSE_POSITIVE_AND_CONTINUE = enum.auto() + """Continue without interruption, acting as if the underlying error was a false positive. + + This is like `ProtocolEngine.resume_from_recovery(reconcile_false_positive=True)`. + """ class ErrorRecoveryPolicy(Protocol): diff --git a/api/src/opentrons/protocol_engine/errors/__init__.py b/api/src/opentrons/protocol_engine/errors/__init__.py index 9bbe3aae9b8..b25dfdb2d0e 100644 --- a/api/src/opentrons/protocol_engine/errors/__init__.py +++ b/api/src/opentrons/protocol_engine/errors/__init__.py @@ -8,6 +8,7 @@ InvalidSpecificationForRobotTypeError, InvalidLoadPipetteSpecsError, TipNotAttachedError, + PickUpTipTipNotAttachedError, TipAttachedError, CommandDoesNotExistError, LabwareNotLoadedError, @@ -89,6 +90,7 @@ "InvalidSpecificationForRobotTypeError", "InvalidLoadPipetteSpecsError", "TipNotAttachedError", + "PickUpTipTipNotAttachedError", "TipAttachedError", "CommandDoesNotExistError", "LabwareNotLoadedError", diff --git a/api/src/opentrons/protocol_engine/errors/exceptions.py b/api/src/opentrons/protocol_engine/errors/exceptions.py index 5656942b338..12f45f4936d 100644 --- a/api/src/opentrons/protocol_engine/errors/exceptions.py +++ b/api/src/opentrons/protocol_engine/errors/exceptions.py @@ -1,11 +1,17 @@ """Protocol engine exceptions.""" +from __future__ import annotations + from logging import getLogger -from typing import Any, Dict, Optional, Union, Iterator, Sequence +from typing import Any, Dict, Final, Optional, Union, Iterator, Sequence, TYPE_CHECKING from opentrons_shared_data.errors import ErrorCodes from opentrons_shared_data.errors.exceptions import EnumeratedError, PythonException +if TYPE_CHECKING: + from opentrons.protocol_engine.types import TipGeometry + + log = getLogger(__name__) @@ -132,6 +138,21 @@ def __init__( super().__init__(ErrorCodes.UNEXPECTED_TIP_REMOVAL, message, details, wrapping) +class PickUpTipTipNotAttachedError(TipNotAttachedError): + """Raised from TipHandler.pick_up_tip(). + + This is like TipNotAttachedError except that it carries some extra information + about the attempted operation. + """ + + tip_geometry: Final[TipGeometry] + """The tip geometry that would have been on the pipette, had the operation succeeded.""" + + def __init__(self, tip_geometry: TipGeometry) -> None: + super().__init__() + self.tip_geometry = tip_geometry + + class TipAttachedError(ProtocolEngineError): """Raised when a tip shouldn't be attached, but is.""" diff --git a/api/src/opentrons/protocol_engine/execution/error_recovery_hardware_state_synchronizer.py b/api/src/opentrons/protocol_engine/execution/error_recovery_hardware_state_synchronizer.py new file mode 100644 index 00000000000..67d75cfb181 --- /dev/null +++ b/api/src/opentrons/protocol_engine/execution/error_recovery_hardware_state_synchronizer.py @@ -0,0 +1,101 @@ +# noqa: D100 + + +from opentrons.hardware_control import HardwareControlAPI +from opentrons.protocol_engine.actions.action_handler import ActionHandler +from opentrons.protocol_engine.actions.actions import ( + Action, + FailCommandAction, + ResumeFromRecoveryAction, +) +from opentrons.protocol_engine.commands.command import DefinedErrorData +from opentrons.protocol_engine.error_recovery_policy import ErrorRecoveryType +from opentrons.protocol_engine.execution.tip_handler import HardwareTipHandler +from opentrons.protocol_engine.state import update_types +from opentrons.protocol_engine.state.state import StateView + + +class ErrorRecoveryHardwareStateSynchronizer(ActionHandler): + """A hack to keep the hardware API's state correct through certain error recovery flows. + + BACKGROUND: + + Certain parts of robot state are duplicated between `opentrons.protocol_engine` and + `opentrons.hardware_control`. Stuff like "is there a tip attached." + + Normally, Protocol Engine command implementations (`opentrons.protocol_engine.commands`) + mutate hardware API state when they execute; and then when they finish executing, + the Protocol Engine state stores (`opentrons.protocol_engine.state`) update Protocol + Engine state accordingly. So both halves are accounted for. This generally works fine. + + However, we need to go out of our way to support + `ProtocolEngine.resume_from_recovery(reconcile_false_positive=True)`. + It wants to apply a second set of state updates to "fix things up" with the + new knowledge that some error was a false positive. The Protocol Engine half of that + is easy for us to apply the normal way, through the state stores; but the + hardware API half of that cannot be applied the normal way, from the command + implementation, because the command in question is no longer running. + + THE HACK: + + This listens for the same error recovery state updates that the state stores do, + figures out what hardware API state mutations ought to go along with them, + and then does those mutations. + + The problem is that hardware API state is now mutated from two different places + (sometimes the command implementations, and sometimes here), which are bound + to grow accidental differences. + + TO FIX: + + Make Protocol Engine's use of the hardware API less stateful. e.g. supply + tip geometry every time we call a hardware API movement method, instead of + just once when we pick up a tip. Use Protocol Engine state as the single source + of truth. + """ + + def __init__(self, hardware_api: HardwareControlAPI, state_view: StateView) -> None: + self._hardware_api = hardware_api + self._state_view = state_view + + def handle_action(self, action: Action) -> None: + """Modify hardware API state in reaction to a Protocol Engine action.""" + state_update = _get_state_update(action) + if state_update: + self._synchronize(state_update) + + def _synchronize(self, state_update: update_types.StateUpdate) -> None: + tip_handler = HardwareTipHandler(self._state_view, self._hardware_api) + + if state_update.pipette_tip_state != update_types.NO_CHANGE: + pipette_id = state_update.pipette_tip_state.pipette_id + tip_geometry = state_update.pipette_tip_state.tip_geometry + if tip_geometry is None: + tip_handler.remove_tip(pipette_id) + else: + tip_handler.cache_tip(pipette_id=pipette_id, tip=tip_geometry) + + +def _get_state_update(action: Action) -> update_types.StateUpdate | None: + """Get the mutations that we need to do on the hardware API to stay in sync with an engine action. + + The mutations are returned in Protocol Engine terms, as a StateUpdate. + They then need to be converted to hardware API terms. + """ + match action: + case ResumeFromRecoveryAction(state_update=state_update): + return state_update + + case FailCommandAction( + error=DefinedErrorData( + state_update_if_false_positive=state_update_if_false_positive + ) + ): + return ( + state_update_if_false_positive + if action.type == ErrorRecoveryType.ASSUME_FALSE_POSITIVE_AND_CONTINUE + else None + ) + + case _: + return None diff --git a/api/src/opentrons/protocol_engine/execution/hardware_stopper.py b/api/src/opentrons/protocol_engine/execution/hardware_stopper.py index 24055f6b03b..81d4f10d94d 100644 --- a/api/src/opentrons/protocol_engine/execution/hardware_stopper.py +++ b/api/src/opentrons/protocol_engine/execution/hardware_stopper.py @@ -78,9 +78,7 @@ async def _drop_tip(self) -> None: try: if self._state_store.labware.get_fixed_trash_id() == FIXED_TRASH_ID: # OT-2 and Flex 2.15 protocols will default to the Fixed Trash Labware - await self._tip_handler.cache_tip( - pipette_id=pipette_id, tip=tip - ) + self._tip_handler.cache_tip(pipette_id=pipette_id, tip=tip) await self._movement_handler.move_to_well( pipette_id=pipette_id, labware_id=FIXED_TRASH_ID, @@ -92,9 +90,7 @@ async def _drop_tip(self) -> None: ) elif self._state_store.config.robot_type == "OT-2 Standard": # API 2.16 and above OT2 protocols use addressable areas - await self._tip_handler.cache_tip( - pipette_id=pipette_id, tip=tip - ) + self._tip_handler.cache_tip(pipette_id=pipette_id, tip=tip) await self._movement_handler.move_to_addressable_area( pipette_id=pipette_id, addressable_area_name="fixedTrash", diff --git a/api/src/opentrons/protocol_engine/execution/tip_handler.py b/api/src/opentrons/protocol_engine/execution/tip_handler.py index a963dd9abac..dde67ece007 100644 --- a/api/src/opentrons/protocol_engine/execution/tip_handler.py +++ b/api/src/opentrons/protocol_engine/execution/tip_handler.py @@ -4,6 +4,9 @@ from opentrons.hardware_control import HardwareControlAPI from opentrons.hardware_control.types import FailedTipStateCheck, InstrumentProbeType +from opentrons.protocol_engine.errors.exceptions import PickUpTipTipNotAttachedError +from opentrons.types import Mount + from opentrons_shared_data.errors.exceptions import ( CommandPreconditionViolated, CommandParameterLimitViolated, @@ -70,7 +73,7 @@ async def pick_up_tip( Tip geometry of the picked up tip. Raises: - TipNotAttachedError + PickUpTipTipNotAttachedError """ ... @@ -83,9 +86,12 @@ async def drop_tip(self, pipette_id: str, home_after: Optional[bool]) -> None: TipAttachedError """ - async def cache_tip(self, pipette_id: str, tip: TipGeometry) -> None: + def cache_tip(self, pipette_id: str, tip: TipGeometry) -> None: """Tell the Hardware API that a tip is attached.""" + def remove_tip(self, pipette_id: str) -> None: + """Tell the hardware API that no tip is attached.""" + async def get_tip_presence(self, pipette_id: str) -> TipPresenceStatus: """Get tip presence status on the pipette.""" @@ -198,6 +204,11 @@ def __init__( self._labware_data_provider = labware_data_provider or LabwareDataProvider() self._state_view = state_view + # WARNING: ErrorRecoveryHardwareStateSynchronizer can currently construct several + # instances of this class per run, in addition to the main instance used + # for command execution. We're therefore depending on this class being + # stateless, so consider that before adding additional attributes here. + async def available_for_nozzle_layout( self, pipette_id: str, @@ -223,7 +234,7 @@ async def pick_up_tip( well_name: str, ) -> TipGeometry: """See documentation on abstract base class.""" - hw_mount = self._state_view.pipettes.get_mount(pipette_id).to_hw_mount() + hw_mount = self._get_hw_mount(pipette_id) nominal_tip_geometry = self._state_view.geometry.get_nominal_tip_geometry( pipette_id=pipette_id, labware_id=labware_id, well_name=well_name @@ -234,6 +245,7 @@ async def pick_up_tip( labware_definition=self._state_view.labware.get_definition(labware_id), nominal_fallback=nominal_tip_geometry.length, ) + tip_geometry = TipGeometry( length=actual_tip_length, diameter=nominal_tip_geometry.diameter, @@ -243,10 +255,12 @@ async def pick_up_tip( await self._hardware_api.tip_pickup_moves( mount=hw_mount, presses=None, increment=None ) - # Allow TipNotAttachedError to propagate. - await self.verify_tip_presence(pipette_id, TipPresenceStatus.PRESENT) + try: + await self.verify_tip_presence(pipette_id, TipPresenceStatus.PRESENT) + except TipNotAttachedError as e: + raise PickUpTipTipNotAttachedError(tip_geometry=tip_geometry) from e - await self.cache_tip(pipette_id, tip_geometry) + self.cache_tip(pipette_id, tip_geometry) await self._hardware_api.prepare_for_aspirate(hw_mount) @@ -254,7 +268,7 @@ async def pick_up_tip( async def drop_tip(self, pipette_id: str, home_after: Optional[bool]) -> None: """See documentation on abstract base class.""" - hw_mount = self._state_view.pipettes.get_mount(pipette_id).to_hw_mount() + hw_mount = self._get_hw_mount(pipette_id) # Let the hardware controller handle defaulting home_after since its behavior # differs between machines @@ -268,12 +282,11 @@ async def drop_tip(self, pipette_id: str, home_after: Optional[bool]) -> None: # Allow TipNotAttachedError to propagate. await self.verify_tip_presence(pipette_id, TipPresenceStatus.ABSENT) - self._hardware_api.remove_tip(hw_mount) - self._hardware_api.set_current_tiprack_diameter(hw_mount, 0) + self.remove_tip(pipette_id) - async def cache_tip(self, pipette_id: str, tip: TipGeometry) -> None: + def cache_tip(self, pipette_id: str, tip: TipGeometry) -> None: """See documentation on abstract base class.""" - hw_mount = self._state_view.pipettes.get_mount(pipette_id).to_hw_mount() + hw_mount = self._get_hw_mount(pipette_id) self._hardware_api.cache_tip(mount=hw_mount, tip_length=tip.length) @@ -287,12 +300,18 @@ async def cache_tip(self, pipette_id: str, tip: TipGeometry) -> None: tip_volume=tip.volume, ) + def remove_tip(self, pipette_id: str) -> None: + """See documentation on abstract base class.""" + hw_mount = self._get_hw_mount(pipette_id) + self._hardware_api.remove_tip(hw_mount) + self._hardware_api.set_current_tiprack_diameter(hw_mount, 0) + async def get_tip_presence(self, pipette_id: str) -> TipPresenceStatus: """See documentation on abstract base class.""" try: ot3api = ensure_ot3_hardware(hardware_api=self._hardware_api) - hw_mount = self._state_view.pipettes.get_mount(pipette_id).to_hw_mount() + hw_mount = self._get_hw_mount(pipette_id) status = await ot3api.get_tip_presence_status(hw_mount) return TipPresenceStatus.from_hw_state(status) @@ -333,7 +352,7 @@ async def verify_tip_presence( return try: ot3api = ensure_ot3_hardware(hardware_api=self._hardware_api) - hw_mount = self._state_view.pipettes.get_mount(pipette_id).to_hw_mount() + hw_mount = self._get_hw_mount(pipette_id) await ot3api.verify_tip_presence( hw_mount, expected.to_hw_state(), follow_singular_sensor ) @@ -351,6 +370,9 @@ async def verify_tip_presence( wrapping=[PythonException(e)], ) + def _get_hw_mount(self, pipette_id: str) -> Mount: + return self._state_view.pipettes.get_mount(pipette_id).to_hw_mount() + class VirtualTipHandler(TipHandler): """Pick up and drop tips, using a virtual pipette.""" @@ -414,13 +436,20 @@ async def drop_tip( expected_has_tip=True, ) - async def cache_tip(self, pipette_id: str, tip: TipGeometry) -> None: - """Add a tip using a virtual pipette. + def cache_tip(self, pipette_id: str, tip: TipGeometry) -> None: + """See documentation on abstract base class. This should not be called when using virtual pipettes. """ assert False, "TipHandler.cache_tip should not be used with virtual pipettes" + def remove_tip(self, pipette_id: str) -> None: + """See documentation on abstract base class. + + This should not be called when using virtual pipettes. + """ + assert False, "TipHandler.remove_tip should not be used with virtual pipettes" + async def verify_tip_presence( self, pipette_id: str, diff --git a/api/src/opentrons/protocol_engine/protocol_engine.py b/api/src/opentrons/protocol_engine/protocol_engine.py index d93ab5dd42d..ced32b20cc3 100644 --- a/api/src/opentrons/protocol_engine/protocol_engine.py +++ b/api/src/opentrons/protocol_engine/protocol_engine.py @@ -6,7 +6,6 @@ ResumeFromRecoveryAction, SetErrorRecoveryPolicyAction, ) -from opentrons.protocol_engine.error_recovery_policy import ErrorRecoveryPolicy from opentrons.protocols.models import LabwareDefinition from opentrons.hardware_control import HardwareControlAPI @@ -19,6 +18,7 @@ from .errors import ProtocolCommandFailedError, ErrorOccurrence, CommandNotAllowedError from .errors.exceptions import EStopActivatedError +from .error_recovery_policy import ErrorRecoveryPolicy from . import commands, slot_standardization from .resources import ModelUtils, ModuleDataProvider, FileProvider from .types import ( @@ -39,6 +39,7 @@ HardwareStopper, ) from .state.state import StateStore, StateView +from .state.update_types import StateUpdate from .plugins import AbstractPlugin, PluginStarter from .actions import ( ActionDispatcher, @@ -88,43 +89,31 @@ def __init__( self, hardware_api: HardwareControlAPI, state_store: StateStore, - action_dispatcher: Optional[ActionDispatcher] = None, - plugin_starter: Optional[PluginStarter] = None, + action_dispatcher: ActionDispatcher, + plugin_starter: PluginStarter, + model_utils: ModelUtils, + hardware_stopper: HardwareStopper, + door_watcher: DoorWatcher, + module_data_provider: ModuleDataProvider, + file_provider: FileProvider, queue_worker: Optional[QueueWorker] = None, - model_utils: Optional[ModelUtils] = None, - hardware_stopper: Optional[HardwareStopper] = None, - door_watcher: Optional[DoorWatcher] = None, - module_data_provider: Optional[ModuleDataProvider] = None, - file_provider: Optional[FileProvider] = None, ) -> None: """Initialize a ProtocolEngine instance. Must be called while an event loop is active. - This constructor does not inject provider implementations. + This constructor is only for `ProtocolEngine` unit tests. Prefer the `create_protocol_engine()` factory function. """ self._hardware_api = hardware_api - self._file_provider = file_provider or FileProvider() + self._file_provider = file_provider self._state_store = state_store - self._model_utils = model_utils or ModelUtils() - self._action_dispatcher = action_dispatcher or ActionDispatcher( - sink=self._state_store - ) - self._plugin_starter = plugin_starter or PluginStarter( - state=self._state_store, - action_dispatcher=self._action_dispatcher, - ) - self._hardware_stopper = hardware_stopper or HardwareStopper( - hardware_api=hardware_api, - state_store=state_store, - ) - self._door_watcher = door_watcher or DoorWatcher( - state_store=state_store, - hardware_api=hardware_api, - action_dispatcher=self._action_dispatcher, - ) - self._module_data_provider = module_data_provider or ModuleDataProvider() + self._model_utils = model_utils + self._action_dispatcher = action_dispatcher + self._plugin_starter = plugin_starter + self._hardware_stopper = hardware_stopper + self._door_watcher = door_watcher + self._module_data_provider = module_data_provider self._queue_worker = queue_worker if self._queue_worker: self._queue_worker.start() @@ -186,11 +175,35 @@ def request_pause(self) -> None: self._action_dispatcher.dispatch(action) self._hardware_api.pause(HardwarePauseType.PAUSE) - def resume_from_recovery(self) -> None: - """Resume normal protocol execution after the engine was `AWAITING_RECOVERY`.""" + def resume_from_recovery(self, reconcile_false_positive: bool) -> None: + """Resume normal protocol execution after the engine was `AWAITING_RECOVERY`. + + If `reconcile_false_positive` is `False`, the engine will continue naively from + whatever state the error left it in. (Each defined error individually documents + exactly how it affects state.) This is appropriate for client-driven error + recovery, where the client wants predictable behavior from the engine. + + If `reconcile_false_positive` is `True`, the engine may apply additional fixups + to its state to try to get the rest of the run to just work, assuming the error + was a false-positive. + + For example, a `tipPhysicallyMissing` error from a `pickUpTip` would normally + leave the engine state without a tip on the pipette. If `reconcile_false_positive=True`, + the engine will set the pipette to have that missing tip before continuing, so + subsequent path planning, aspirates, dispenses, etc. will work as if nothing + went wrong. + """ + if reconcile_false_positive: + state_update = ( + self._state_store.commands.get_state_update_for_false_positive() + ) + else: + state_update = StateUpdate() # Empty/no-op. + action = self._state_store.commands.validate_action_allowed( - ResumeFromRecoveryAction() + ResumeFromRecoveryAction(state_update) ) + self._action_dispatcher.dispatch(action) def add_command( diff --git a/api/src/opentrons/protocol_engine/state/commands.py b/api/src/opentrons/protocol_engine/state/commands.py index 6723c521892..dc9e0c7ee49 100644 --- a/api/src/opentrons/protocol_engine/state/commands.py +++ b/api/src/opentrons/protocol_engine/state/commands.py @@ -25,6 +25,7 @@ ErrorRecoveryType, ) from opentrons.protocol_engine.notes.notes import CommandNote +from opentrons.protocol_engine.state import update_types from ..actions import ( Action, @@ -141,6 +142,16 @@ class CommandPointer: index: int +@dataclass(frozen=True) +class _RecoveryTargetInfo: + """Info about the failed command that we're currently recovering from.""" + + command_id: str + + state_update_if_false_positive: update_types.StateUpdate + """See `CommandView.get_state_update_if_continued()`.""" + + @dataclass class CommandState: """State of all protocol engine command resources.""" @@ -205,8 +216,8 @@ class CommandState: stable. Eventually, we might want this info to be stored directly on each command. """ - recovery_target_command_id: Optional[str] - """If we're currently recovering from a command failure, which command it was.""" + recovery_target: Optional[_RecoveryTargetInfo] + """If we're currently recovering from a command failure, info about that command.""" finish_error: Optional[ErrorOccurrence] """The error that happened during the post-run finish steps (homing & dropping tips), if any.""" @@ -253,7 +264,7 @@ def __init__( finish_error=None, failed_command=None, command_error_recovery_types={}, - recovery_target_command_id=None, + recovery_target=None, run_completed_at=None, run_started_at=None, latest_protocol_command_hash=None, @@ -335,14 +346,17 @@ def _handle_succeed_command_action(self, action: SucceedCommandAction) -> None: def _handle_fail_command_action(self, action: FailCommandAction) -> None: prev_entry = self.state.command_history.get(action.command_id) - if isinstance(action.error, EnumeratedError): + if isinstance(action.error, EnumeratedError): # The error was undefined. public_error_occurrence = ErrorOccurrence.from_failed( id=action.error_id, createdAt=action.failed_at, error=action.error, ) - else: + # An empty state update, to no-op. + state_update_if_false_positive = update_types.StateUpdate() + else: # The error was defined. public_error_occurrence = action.error.public + state_update_if_false_positive = action.error.state_update_if_false_positive self._update_to_failed( command_id=action.command_id, @@ -354,6 +368,19 @@ def _handle_fail_command_action(self, action: FailCommandAction) -> None: self._state.failed_command = self._state.command_history.get(action.command_id) self._state.failed_command_errors.append(public_error_occurrence) + if ( + prev_entry.command.intent in (CommandIntent.PROTOCOL, None) + and action.type == ErrorRecoveryType.WAIT_FOR_RECOVERY + ): + self._state.queue_status = QueueStatus.AWAITING_RECOVERY + self._state.recovery_target = _RecoveryTargetInfo( + command_id=action.command_id, + state_update_if_false_positive=state_update_if_false_positive, + ) + self._state.has_entered_error_recovery = True + + # When one command fails, we generally also cancel the commands that + # would have been queued after it. other_command_ids_to_fail: List[str] if prev_entry.command.intent == CommandIntent.SETUP: other_command_ids_to_fail = list( @@ -373,7 +400,8 @@ def _handle_fail_command_action(self, action: FailCommandAction) -> None: ) elif ( action.type == ErrorRecoveryType.WAIT_FOR_RECOVERY - or action.type == ErrorRecoveryType.IGNORE_AND_CONTINUE + or action.type == ErrorRecoveryType.CONTINUE_WITH_ERROR + or action.type == ErrorRecoveryType.ASSUME_FALSE_POSITIVE_AND_CONTINUE ): other_command_ids_to_fail = [] else: @@ -390,14 +418,6 @@ def _handle_fail_command_action(self, action: FailCommandAction) -> None: notes=None, ) - if ( - prev_entry.command.intent in (CommandIntent.PROTOCOL, None) - and action.type == ErrorRecoveryType.WAIT_FOR_RECOVERY - ): - self._state.queue_status = QueueStatus.AWAITING_RECOVERY - self._state.recovery_target_command_id = action.command_id - self._state.has_entered_error_recovery = True - def _handle_play_action(self, action: PlayAction) -> None: if not self._state.run_result: self._state.run_started_at = ( @@ -425,11 +445,11 @@ def _handle_resume_from_recovery_action( self, action: ResumeFromRecoveryAction ) -> None: self._state.queue_status = QueueStatus.RUNNING - self._state.recovery_target_command_id = None + self._state.recovery_target = None def _handle_stop_action(self, action: StopAction) -> None: if not self._state.run_result: - self._state.recovery_target_command_id = None + self._state.recovery_target = None self._state.queue_status = QueueStatus.PAUSED if action.from_estop: @@ -866,11 +886,11 @@ def get_all_commands_final(self) -> bool: def get_recovery_target(self) -> Optional[CommandPointer]: """Return the command currently undergoing error recovery, if any.""" - recovery_target_command_id = self._state.recovery_target_command_id - if recovery_target_command_id is None: + recovery_target = self._state.recovery_target + if recovery_target is None: return None else: - entry = self._state.command_history.get(recovery_target_command_id) + entry = self._state.command_history.get(recovery_target.command_id) return CommandPointer( command_id=entry.command.id, command_key=entry.command.key, @@ -1083,6 +1103,19 @@ def get_error_recovery_policy(self) -> ErrorRecoveryPolicy: """ return self._state.error_recovery_policy + def get_state_update_for_false_positive(self) -> update_types.StateUpdate: + """Return the state update for if the current recovery target was a false positive. + + If we're currently in error recovery mode, and you have decided that the + underlying command error was a false positive, this returns a state update + that will undo the error's effects on engine state. + See `ProtocolEngine.resume_from_recovery(reconcile_false_positive=True)`. + """ + if self._state.recovery_target is None: + return update_types.StateUpdate() # Empty/no-op. + else: + return self._state.recovery_target.state_update_if_false_positive + def _may_run_with_door_open( self, *, fixit_command: Command | CommandCreate ) -> bool: diff --git a/api/src/opentrons/protocol_engine/state/labware.py b/api/src/opentrons/protocol_engine/state/labware.py index dad9fe54dd0..7cea4f9765b 100644 --- a/api/src/opentrons/protocol_engine/state/labware.py +++ b/api/src/opentrons/protocol_engine/state/labware.py @@ -53,7 +53,7 @@ Action, AddLabwareOffsetAction, AddLabwareDefinitionAction, - get_state_update, + get_state_updates, ) from ._abstract_store import HasState, HandlesActions from ._move_types import EdgePathType @@ -149,8 +149,7 @@ def __init__( def handle_action(self, action: Action) -> None: """Modify state in reaction to an action.""" - state_update = get_state_update(action) - if state_update is not None: + for state_update in get_state_updates(action): self._add_loaded_labware(state_update) self._set_labware_location(state_update) diff --git a/api/src/opentrons/protocol_engine/state/pipettes.py b/api/src/opentrons/protocol_engine/state/pipettes.py index ced8b6076f7..bb90e067ec6 100644 --- a/api/src/opentrons/protocol_engine/state/pipettes.py +++ b/api/src/opentrons/protocol_engine/state/pipettes.py @@ -39,7 +39,7 @@ FailCommandAction, SetPipetteMovementSpeedAction, SucceedCommandAction, - get_state_update, + get_state_updates, ) from ._abstract_store import HasState, HandlesActions @@ -141,8 +141,7 @@ def __init__(self) -> None: def handle_action(self, action: Action) -> None: """Modify state in reaction to an action.""" - state_update = get_state_update(action) - if state_update is not None: + for state_update in get_state_updates(action): self._set_load_pipette(state_update) self._update_current_location(state_update) self._update_pipette_config(state_update) diff --git a/api/src/opentrons/protocol_engine/state/tips.py b/api/src/opentrons/protocol_engine/state/tips.py index f744b1a01b4..7427c78ac4c 100644 --- a/api/src/opentrons/protocol_engine/state/tips.py +++ b/api/src/opentrons/protocol_engine/state/tips.py @@ -6,7 +6,7 @@ from opentrons.protocol_engine.state import update_types from ._abstract_store import HasState, HandlesActions -from ..actions import Action, SucceedCommandAction, ResetTipsAction, get_state_update +from ..actions import Action, SucceedCommandAction, ResetTipsAction, get_state_updates from ..commands import ( Command, LoadLabwareResult, @@ -63,8 +63,7 @@ def __init__(self) -> None: def handle_action(self, action: Action) -> None: """Modify state in reaction to an action.""" - state_update = get_state_update(action) - if state_update is not None: + for state_update in get_state_updates(action): self._handle_state_update(state_update) if isinstance(action, SucceedCommandAction): diff --git a/api/src/opentrons/protocol_runner/protocol_runner.py b/api/src/opentrons/protocol_runner/protocol_runner.py index dcf4f224811..aec2aae80df 100644 --- a/api/src/opentrons/protocol_runner/protocol_runner.py +++ b/api/src/opentrons/protocol_runner/protocol_runner.py @@ -123,9 +123,9 @@ async def stop(self) -> None: post_run_hardware_state=PostRunHardwareState.STAY_ENGAGED_IN_PLACE, ) - def resume_from_recovery(self) -> None: + def resume_from_recovery(self, reconcile_false_positive: bool) -> None: """See `ProtocolEngine.resume_from_recovery()`.""" - self._protocol_engine.resume_from_recovery() + self._protocol_engine.resume_from_recovery(reconcile_false_positive) @abstractmethod async def run( diff --git a/api/src/opentrons/protocol_runner/run_orchestrator.py b/api/src/opentrons/protocol_runner/run_orchestrator.py index 69d9feaf524..dfa66e6a55a 100644 --- a/api/src/opentrons/protocol_runner/run_orchestrator.py +++ b/api/src/opentrons/protocol_runner/run_orchestrator.py @@ -205,9 +205,9 @@ async def stop(self) -> None: post_run_hardware_state=PostRunHardwareState.STAY_ENGAGED_IN_PLACE, ) - def resume_from_recovery(self) -> None: + def resume_from_recovery(self, reconcile_false_positive: bool) -> None: """Resume the run from recovery.""" - self._protocol_engine.resume_from_recovery() + self._protocol_engine.resume_from_recovery(reconcile_false_positive) async def finish( self, 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 4a8e32c05d0..8ba2c9c1d97 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_drop_tip.py +++ b/api/tests/opentrons/protocol_engine/commands/test_drop_tip.py @@ -294,4 +294,10 @@ async def test_tip_attached_error( new_deck_point=DeckPoint(x=111, y=222, z=333), ), ), + state_update_if_false_positive=update_types.StateUpdate( + 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 f2061c3d552..fde82626969 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 @@ -91,4 +91,7 @@ async def test_tip_attached_error( wrappedErrors=[matchers.Anything()], ), state_update=StateUpdate(), + state_update_if_false_positive=StateUpdate( + pipette_tip_state=PipetteTipStateUpdate(pipette_id="abc", tip_geometry=None) + ), ) 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 3771fe00eb1..2203f514cf4 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 @@ -2,6 +2,7 @@ from datetime import datetime from decoy import Decoy, matchers +from unittest.mock import sentinel from opentrons.types import MountType, Point @@ -11,7 +12,7 @@ WellOffset, DeckPoint, ) -from opentrons.protocol_engine.errors import TipNotAttachedError +from opentrons.protocol_engine.errors import PickUpTipTipNotAttachedError from opentrons.protocol_engine.execution import MovementHandler, TipHandler from opentrons.protocol_engine.resources import ModelUtils from opentrons.protocol_engine.state import update_types @@ -140,7 +141,7 @@ async def test_tip_physically_missing_error( await tip_handler.pick_up_tip( pipette_id=pipette_id, labware_id=labware_id, well_name=well_name ) - ).then_raise(TipNotAttachedError()) + ).then_raise(PickUpTipTipNotAttachedError(tip_geometry=sentinel.tip_geometry)) decoy.when(model_utils.generate_id()).then_return(error_id) decoy.when(model_utils.get_timestamp()).then_return(error_created_at) @@ -164,4 +165,9 @@ async def test_tip_physically_missing_error( pipette_id="pipette-id", labware_id="labware-id", well_name="well-name" ), ), + state_update_if_false_positive=update_types.StateUpdate( + pipette_tip_state=update_types.PipetteTipStateUpdate( + pipette_id="pipette-id", tip_geometry=sentinel.tip_geometry + ) + ), ) diff --git a/api/tests/opentrons/protocol_engine/execution/test_hardware_stopper.py b/api/tests/opentrons/protocol_engine/execution/test_hardware_stopper.py index d6c69d0b170..503d681bced 100644 --- a/api/tests/opentrons/protocol_engine/execution/test_hardware_stopper.py +++ b/api/tests/opentrons/protocol_engine/execution/test_hardware_stopper.py @@ -158,7 +158,7 @@ async def test_hardware_stopping_sequence_no_tip_drop( decoy.verify(await hardware_api.stop(home_after=False), times=1) decoy.verify( - await mock_tip_handler.cache_tip( + mock_tip_handler.cache_tip( pipette_id="pipette-id", tip=TipGeometry(length=1.0, volume=2.0, diameter=3.0), ), @@ -181,7 +181,7 @@ async def test_hardware_stopping_sequence_no_pipette( ) decoy.when( - await mock_tip_handler.cache_tip( + mock_tip_handler.cache_tip( pipette_id="pipette-id", tip=TipGeometry(length=1.0, volume=2.0, diameter=3.0), ), @@ -271,7 +271,7 @@ async def test_hardware_stopping_sequence_with_fixed_trash( await movement.home( axes=[MotorAxis.X, MotorAxis.Y, MotorAxis.LEFT_Z, MotorAxis.RIGHT_Z] ), - await mock_tip_handler.cache_tip( + mock_tip_handler.cache_tip( pipette_id="pipette-id", tip=TipGeometry(length=1.0, volume=2.0, diameter=3.0), ), @@ -320,7 +320,7 @@ async def test_hardware_stopping_sequence_with_OT2_addressable_area( await movement.home( axes=[MotorAxis.X, MotorAxis.Y, MotorAxis.LEFT_Z, MotorAxis.RIGHT_Z] ), - await mock_tip_handler.cache_tip( + mock_tip_handler.cache_tip( pipette_id="pipette-id", tip=TipGeometry(length=1.0, volume=2.0, diameter=3.0), ), 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 8ddb8840597..c03a611966c 100644 --- a/api/tests/opentrons/protocol_engine/execution/test_tip_handler.py +++ b/api/tests/opentrons/protocol_engine/execution/test_tip_handler.py @@ -266,7 +266,7 @@ async def test_drop_tip( ) -async def test_add_tip( +def test_add_tip( decoy: Decoy, mock_state_view: StateView, mock_hardware_api: HardwareAPI, @@ -289,7 +289,7 @@ async def test_add_tip( MountType.LEFT ) - await subject.cache_tip(pipette_id="pipette-id", tip=tip) + subject.cache_tip(pipette_id="pipette-id", tip=tip) decoy.verify( mock_hardware_api.cache_tip(mount=Mount.LEFT, tip_length=50), @@ -301,6 +301,31 @@ async def test_add_tip( ) +def test_remove_tip( + decoy: Decoy, + mock_state_view: StateView, + mock_hardware_api: HardwareAPI, + mock_labware_data_provider: LabwareDataProvider, +) -> None: + """It should remove a tip manually from the hardware API.""" + subject = HardwareTipHandler( + state_view=mock_state_view, + hardware_api=mock_hardware_api, + labware_data_provider=mock_labware_data_provider, + ) + + decoy.when(mock_state_view.pipettes.get_mount("pipette-id")).then_return( + MountType.LEFT + ) + + subject.remove_tip(pipette_id="pipette-id") + + decoy.verify( + mock_hardware_api.remove_tip(Mount.LEFT), + mock_hardware_api.set_current_tiprack_diameter(Mount.LEFT, 0), + ) + + @pytest.mark.parametrize( argnames=[ "test_channels", 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 6f090612a74..9df52541f02 100644 --- a/api/tests/opentrons/protocol_engine/state/test_command_state.py +++ b/api/tests/opentrons/protocol_engine/state/test_command_state.py @@ -19,7 +19,7 @@ PlayAction, SetErrorRecoveryPolicyAction, ) -from opentrons.protocol_engine.commands.command import CommandIntent +from opentrons.protocol_engine.commands.command import CommandIntent, DefinedErrorData from opentrons.protocol_engine.error_recovery_policy import ErrorRecoveryType from opentrons.protocol_engine.errors.error_occurrence import ErrorOccurrence from opentrons.protocol_engine.errors.exceptions import ( @@ -32,6 +32,7 @@ CommandView, ) from opentrons.protocol_engine.state.config import Config +from opentrons.protocol_engine.state.update_types import StateUpdate from opentrons.protocol_engine.types import DeckType, EngineStatus @@ -772,7 +773,7 @@ def test_recovery_target_tracking() -> None: assert recovery_target.command_id == "c1" assert subject_view.get_recovery_in_progress_for_command("c1") - resume_from_1_recovery = actions.ResumeFromRecoveryAction() + resume_from_1_recovery = actions.ResumeFromRecoveryAction(StateUpdate()) subject.handle_action(resume_from_1_recovery) # c1 failed recoverably, but we've already completed its recovery. @@ -808,7 +809,7 @@ def test_recovery_target_tracking() -> None: # even though it failed recoverably before. assert not subject_view.get_recovery_in_progress_for_command("c1") - resume_from_2_recovery = actions.ResumeFromRecoveryAction() + resume_from_2_recovery = actions.ResumeFromRecoveryAction(StateUpdate()) subject.handle_action(resume_from_2_recovery) queue_3 = actions.QueueCommandAction( "c3", @@ -993,3 +994,57 @@ def test_set_and_get_error_recovery_policy() -> None: assert subject_view.get_error_recovery_policy() is initial_policy subject.handle_action(SetErrorRecoveryPolicyAction(sentinel.new_policy)) assert subject_view.get_error_recovery_policy() is new_policy + + +def test_get_state_update_for_false_positive() -> None: + """Test storage of false-positive state updates.""" + subject = CommandStore( + config=_make_config(), + error_recovery_policy=_placeholder_error_recovery_policy, + is_door_open=False, + ) + subject_view = CommandView(subject.state) + + empty_state_update = StateUpdate() + + assert subject_view.get_state_update_for_false_positive() == empty_state_update + + queue = 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="command-id-1", + ) + subject.handle_action(queue) + run = actions.RunCommandAction( + command_id="command-id-1", + started_at=datetime(year=2022, month=2, day=2), + ) + subject.handle_action(run) + fail = actions.FailCommandAction( + command_id="command-id-1", + running_command=subject_view.get("command-id-1"), + error_id="error-id", + failed_at=datetime(year=2023, month=3, day=3), + error=DefinedErrorData( + public=sentinel.public, + state_update_if_false_positive=sentinel.state_update_if_false_positive, + ), + type=ErrorRecoveryType.WAIT_FOR_RECOVERY, + notes=[], + ) + subject.handle_action(fail) + + assert ( + subject_view.get_state_update_for_false_positive() + == sentinel.state_update_if_false_positive + ) + + resume_from_recovery = actions.ResumeFromRecoveryAction( + state_update=sentinel.some_other_state_update + ) + subject.handle_action(resume_from_recovery) + + assert subject_view.get_state_update_for_false_positive() == empty_state_update diff --git a/api/tests/opentrons/protocol_engine/state/test_command_store_old.py b/api/tests/opentrons/protocol_engine/state/test_command_store_old.py index 4b7cf01e87c..5dc3c4a4ee9 100644 --- a/api/tests/opentrons/protocol_engine/state/test_command_store_old.py +++ b/api/tests/opentrons/protocol_engine/state/test_command_store_old.py @@ -334,7 +334,7 @@ def test_command_store_handles_pause_action(pause_source: PauseSource) -> None: finish_error=None, failed_command=None, command_error_recovery_types={}, - recovery_target_command_id=None, + recovery_target=None, latest_protocol_command_hash=None, stopped_by_estop=False, failed_command_errors=[], @@ -363,7 +363,7 @@ def test_command_store_handles_play_action(pause_source: PauseSource) -> None: finish_error=None, failed_command=None, command_error_recovery_types={}, - recovery_target_command_id=None, + recovery_target=None, run_started_at=datetime(year=2021, month=1, day=1), latest_protocol_command_hash=None, stopped_by_estop=False, @@ -398,7 +398,7 @@ def test_command_store_handles_finish_action() -> None: finish_error=None, failed_command=None, command_error_recovery_types={}, - recovery_target_command_id=None, + recovery_target=None, run_started_at=datetime(year=2021, month=1, day=1), latest_protocol_command_hash=None, stopped_by_estop=False, @@ -453,7 +453,7 @@ def test_command_store_handles_stop_action( finish_error=None, failed_command=None, command_error_recovery_types={}, - recovery_target_command_id=None, + recovery_target=None, run_started_at=datetime(year=2021, month=1, day=1), latest_protocol_command_hash=None, stopped_by_estop=from_estop, @@ -491,7 +491,7 @@ def test_command_store_handles_stop_action_when_awaiting_recovery() -> None: finish_error=None, failed_command=None, command_error_recovery_types={}, - recovery_target_command_id=None, + recovery_target=None, run_started_at=datetime(year=2021, month=1, day=1), latest_protocol_command_hash=None, stopped_by_estop=False, @@ -525,7 +525,7 @@ def test_command_store_cannot_restart_after_should_stop() -> None: finish_error=None, failed_command=None, command_error_recovery_types={}, - recovery_target_command_id=None, + recovery_target=None, run_started_at=None, latest_protocol_command_hash=None, stopped_by_estop=False, @@ -673,7 +673,7 @@ def test_command_store_wraps_unknown_errors() -> None: run_started_at=None, failed_command=None, command_error_recovery_types={}, - recovery_target_command_id=None, + recovery_target=None, latest_protocol_command_hash=None, stopped_by_estop=False, failed_command_errors=[], @@ -742,7 +742,7 @@ def __init__(self, message: str) -> None: ), failed_command=None, command_error_recovery_types={}, - recovery_target_command_id=None, + recovery_target=None, run_started_at=None, latest_protocol_command_hash=None, stopped_by_estop=False, @@ -778,7 +778,7 @@ def test_command_store_ignores_stop_after_graceful_finish() -> None: finish_error=None, failed_command=None, command_error_recovery_types={}, - recovery_target_command_id=None, + recovery_target=None, run_started_at=datetime(year=2021, month=1, day=1), latest_protocol_command_hash=None, stopped_by_estop=False, @@ -814,7 +814,7 @@ def test_command_store_ignores_finish_after_non_graceful_stop() -> None: finish_error=None, failed_command=None, command_error_recovery_types={}, - recovery_target_command_id=None, + recovery_target=None, run_started_at=datetime(year=2021, month=1, day=1), latest_protocol_command_hash=None, stopped_by_estop=False, @@ -850,7 +850,7 @@ def test_handles_hardware_stopped() -> None: finish_error=None, failed_command=None, command_error_recovery_types={}, - recovery_target_command_id=None, + recovery_target=None, run_started_at=None, latest_protocol_command_hash=None, stopped_by_estop=False, 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 06318cb8d36..f7b1d6cd31f 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 @@ -22,6 +22,9 @@ from opentrons.protocol_engine.error_recovery_policy import ErrorRecoveryType from opentrons.protocol_engine.state.commands import ( + # todo(mm, 2024-10-24): Avoid testing internal implementation details like + # _RecoveryTargetInfo. See note above about porting to test_command_state.py. + _RecoveryTargetInfo, CommandState, CommandView, CommandSlice, @@ -38,6 +41,7 @@ from opentrons_shared_data.errors.codes import ErrorCodes from opentrons.protocol_engine.state.command_history import CommandHistory +from opentrons.protocol_engine.state.update_types import StateUpdate from .command_fixtures import ( create_queued_command, @@ -108,7 +112,12 @@ def get_command_view( # noqa: C901 finish_error=finish_error, failed_command=failed_command, command_error_recovery_types=command_error_recovery_types or {}, - recovery_target_command_id=recovery_target_command_id, + recovery_target=_RecoveryTargetInfo( + command_id=recovery_target_command_id, + state_update_if_false_positive=StateUpdate(), + ) + if recovery_target_command_id is not None + else None, run_started_at=run_started_at, latest_protocol_command_hash=latest_command_hash, stopped_by_estop=False, @@ -592,7 +601,7 @@ class ActionAllowedSpec(NamedTuple): ), ), ), - action=ResumeFromRecoveryAction(), + action=ResumeFromRecoveryAction(StateUpdate()), expected_error=errors.ResumeFromRecoveryNotAllowedError, ), ActionAllowedSpec( diff --git a/api/tests/opentrons/protocol_engine/test_protocol_engine.py b/api/tests/opentrons/protocol_engine/test_protocol_engine.py index 71e23cfe715..ac83e987153 100644 --- a/api/tests/opentrons/protocol_engine/test_protocol_engine.py +++ b/api/tests/opentrons/protocol_engine/test_protocol_engine.py @@ -10,6 +10,7 @@ from opentrons_shared_data.robot.types import RobotType from opentrons.protocol_engine.actions.actions import SetErrorRecoveryPolicyAction +from opentrons.protocol_engine.state.update_types import StateUpdate from opentrons.types import DeckSlotName from opentrons.hardware_control import HardwareControlAPI, OT2HardwareControlAPI from opentrons.hardware_control.modules import MagDeck, TempDeck @@ -38,7 +39,11 @@ HardwareStopper, DoorWatcher, ) -from opentrons.protocol_engine.resources import ModelUtils, ModuleDataProvider +from opentrons.protocol_engine.resources import ( + FileProvider, + ModelUtils, + ModuleDataProvider, +) from opentrons.protocol_engine.state.config import Config from opentrons.protocol_engine.state.state import StateStore from opentrons.protocol_engine.plugins import AbstractPlugin, PluginStarter @@ -118,6 +123,12 @@ def module_data_provider(decoy: Decoy) -> ModuleDataProvider: return decoy.mock(cls=ModuleDataProvider) +@pytest.fixture +def file_provider(decoy: Decoy) -> FileProvider: + """Get a mock FileProvider.""" + return decoy.mock(cls=FileProvider) + + @pytest.fixture(autouse=True) def _mock_slot_standardization_module( decoy: Decoy, monkeypatch: pytest.MonkeyPatch @@ -148,6 +159,7 @@ def subject( hardware_stopper: HardwareStopper, door_watcher: DoorWatcher, module_data_provider: ModuleDataProvider, + file_provider: FileProvider, ) -> ProtocolEngine: """Get a ProtocolEngine test subject with its dependencies stubbed out.""" return ProtocolEngine( @@ -160,6 +172,7 @@ def subject( hardware_stopper=hardware_stopper, door_watcher=door_watcher, module_data_provider=module_data_provider, + file_provider=file_provider, ) @@ -613,20 +626,31 @@ def test_pause( ) +@pytest.mark.parametrize("reconcile_false_positive", [True, False]) def test_resume_from_recovery( decoy: Decoy, state_store: StateStore, action_dispatcher: ActionDispatcher, subject: ProtocolEngine, + reconcile_false_positive: bool, ) -> None: """It should dispatch a ResumeFromRecoveryAction.""" - expected_action = ResumeFromRecoveryAction() + decoy.when(state_store.commands.get_state_update_for_false_positive()).then_return( + sentinel.state_update_for_false_positive + ) + empty_state_update = StateUpdate() + + expected_action = ResumeFromRecoveryAction( + sentinel.state_update_for_false_positive + if reconcile_false_positive + else empty_state_update + ) decoy.when( state_store.commands.validate_action_allowed(expected_action) ).then_return(expected_action) - subject.resume_from_recovery() + subject.resume_from_recovery(reconcile_false_positive) decoy.verify(action_dispatcher.dispatch(expected_action)) diff --git a/api/tests/opentrons/protocol_runner/test_protocol_runner.py b/api/tests/opentrons/protocol_runner/test_protocol_runner.py index cd945c33e64..2f06e27c2c2 100644 --- a/api/tests/opentrons/protocol_runner/test_protocol_runner.py +++ b/api/tests/opentrons/protocol_runner/test_protocol_runner.py @@ -313,9 +313,16 @@ def test_resume_from_recovery( subject: AnyRunner, ) -> None: """It should call `resume_from_recovery()` on the underlying engine.""" - subject.resume_from_recovery() + subject.resume_from_recovery( + reconcile_false_positive=sentinel.reconcile_false_positive + ) - decoy.verify(protocol_engine.resume_from_recovery(), times=1) + decoy.verify( + protocol_engine.resume_from_recovery( + reconcile_false_positive=sentinel.reconcile_false_positive + ), + times=1, + ) async def test_run_json_runner( diff --git a/robot-server/robot_server/runs/error_recovery_mapping.py b/robot-server/robot_server/runs/error_recovery_mapping.py index b548394cd8a..52da8caaad8 100644 --- a/robot-server/robot_server/runs/error_recovery_mapping.py +++ b/robot-server/robot_server/runs/error_recovery_mapping.py @@ -101,11 +101,9 @@ def _rule_matches_error( def _map_error_recovery_type(reaction_if_match: ReactionIfMatch) -> ErrorRecoveryType: match reaction_if_match: case ReactionIfMatch.IGNORE_AND_CONTINUE: - return ErrorRecoveryType.IGNORE_AND_CONTINUE + return ErrorRecoveryType.CONTINUE_WITH_ERROR case ReactionIfMatch.ASSUME_FALSE_POSITIVE_AND_CONTINUE: - # todo(mm, 2024-10-23): Connect to work in - # https://github.com/Opentrons/opentrons/pull/16556. - return ErrorRecoveryType.IGNORE_AND_CONTINUE + return ErrorRecoveryType.ASSUME_FALSE_POSITIVE_AND_CONTINUE case ReactionIfMatch.FAIL_RUN: return ErrorRecoveryType.FAIL_RUN case ReactionIfMatch.WAIT_FOR_RECOVERY: diff --git a/robot-server/robot_server/runs/run_controller.py b/robot-server/robot_server/runs/run_controller.py index 1619cd20a08..41252d4dfc3 100644 --- a/robot-server/robot_server/runs/run_controller.py +++ b/robot-server/robot_server/runs/run_controller.py @@ -95,15 +95,22 @@ def create_action( self._task_runner.run(self._run_orchestrator_store.stop) elif action_type == RunActionType.RESUME_FROM_RECOVERY: - self._run_orchestrator_store.resume_from_recovery() + log.info(f'Resuming run "{self._run_id}" from error recovery mode.') + self._run_orchestrator_store.resume_from_recovery( + reconcile_false_positive=False + ) elif ( action_type == RunActionType.RESUME_FROM_RECOVERY_ASSUMING_FALSE_POSITIVE ): - # todo(mm, 2024-10-23): Connect to work in - # https://github.com/Opentrons/opentrons/pull/16556. - self._run_orchestrator_store.resume_from_recovery() + log.info( + f'Resuming run "{self._run_id}" from error recovery mode,' + f" assuming false-positive." + ) + self._run_orchestrator_store.resume_from_recovery( + reconcile_false_positive=True + ) else: assert_never(action_type) diff --git a/robot-server/robot_server/runs/run_orchestrator_store.py b/robot-server/robot_server/runs/run_orchestrator_store.py index efa97347ae9..bbc070c3b6f 100644 --- a/robot-server/robot_server/runs/run_orchestrator_store.py +++ b/robot-server/robot_server/runs/run_orchestrator_store.py @@ -310,9 +310,9 @@ async def stop(self) -> None: """Stop the run.""" await self.run_orchestrator.stop() - def resume_from_recovery(self) -> None: + def resume_from_recovery(self, reconcile_false_positive: bool) -> None: """Resume the run from recovery mode.""" - self.run_orchestrator.resume_from_recovery() + self.run_orchestrator.resume_from_recovery(reconcile_false_positive) async def finish(self, error: Optional[Exception]) -> None: """Finish the run.""" diff --git a/robot-server/tests/runs/test_error_recovery_mapping.py b/robot-server/tests/runs/test_error_recovery_mapping.py index a125d12649d..8b75ff99aad 100644 --- a/robot-server/tests/runs/test_error_recovery_mapping.py +++ b/robot-server/tests/runs/test_error_recovery_mapping.py @@ -72,7 +72,7 @@ def test_create_error_recovery_policy_with_rules( mock_error_data: CommandDefinedErrorData, mock_rule: ErrorRecoveryRule, ) -> None: - """Should return IGNORE_AND_CONTINUE if that's what we specify as the rule.""" + """Should return CONTINUE_WITH_ERROR if we specified IGNORE_AND_CONTINUE as the rule.""" policy = create_error_recovery_policy_from_rules([mock_rule], enabled=True) example_config = Config( robot_type="OT-3 Standard", @@ -80,7 +80,7 @@ def test_create_error_recovery_policy_with_rules( ) assert ( policy(example_config, mock_command, mock_error_data) - == ErrorRecoveryType.IGNORE_AND_CONTINUE + == ErrorRecoveryType.CONTINUE_WITH_ERROR ) @@ -141,7 +141,7 @@ def test_enabled_boolean(enabled: bool) -> None: policy = create_error_recovery_policy_from_rules(rules, enabled) result = policy(example_config, command, error_data) expected_result = ( - ErrorRecoveryType.IGNORE_AND_CONTINUE if enabled else ErrorRecoveryType.FAIL_RUN + ErrorRecoveryType.CONTINUE_WITH_ERROR if enabled else ErrorRecoveryType.FAIL_RUN ) assert result == expected_result @@ -187,7 +187,7 @@ def test_enabled_on_flex_disabled_on_ot2( policy = create_error_recovery_policy_from_rules(rules, enabled=True) result = policy(example_config, command, error_data) expected_result = ( - ErrorRecoveryType.IGNORE_AND_CONTINUE + ErrorRecoveryType.CONTINUE_WITH_ERROR if expect_error_recovery_to_be_enabled else ErrorRecoveryType.FAIL_RUN ) diff --git a/robot-server/tests/runs/test_run_controller.py b/robot-server/tests/runs/test_run_controller.py index b069632a4e4..7dbdf827012 100644 --- a/robot-server/tests/runs/test_run_controller.py +++ b/robot-server/tests/runs/test_run_controller.py @@ -304,7 +304,9 @@ def test_create_resume_from_recovery_action( ) decoy.verify(mock_run_store.insert_action(run_id, result), times=1) - decoy.verify(mock_run_orchestrator_store.resume_from_recovery()) + decoy.verify( + mock_run_orchestrator_store.resume_from_recovery(reconcile_false_positive=False) + ) @pytest.mark.parametrize( From 965bc0d4cd9a4511bfd3c79b01600a0d3324e814 Mon Sep 17 00:00:00 2001 From: Max Marrone Date: Mon, 28 Oct 2024 10:23:46 -0400 Subject: [PATCH 09/81] refactor(api): Enable more type-checking inside pipette_handler.py (#16523) ## Overview Delete some `@overload`s that didn't seem like they were doing anything, and reincorporate their parameter annotations into the main function definitions. Formerly, the main function bodies were mostly not type-checked because the parameters didn't have annotations. (It's perhaps surprising that they didn't automatically "inherit" the annotations from the `@overload`s, but I guess mypy and pyright just don't work like that.) This fixes that. ## Test Plan and Hands on Testing None needed, just automated linting and tests. ## Review requests Any reason not to do this? ## Risk assessment Low. --- .../instruments/ot2/pipette_handler.py | 92 +++---------------- 1 file changed, 11 insertions(+), 81 deletions(-) diff --git a/api/src/opentrons/hardware_control/instruments/ot2/pipette_handler.py b/api/src/opentrons/hardware_control/instruments/ot2/pipette_handler.py index c1389ea6a5b..931c99fd4c6 100644 --- a/api/src/opentrons/hardware_control/instruments/ot2/pipette_handler.py +++ b/api/src/opentrons/hardware_control/instruments/ot2/pipette_handler.py @@ -13,7 +13,6 @@ Sequence, Iterator, TypeVar, - overload, ) import numpy @@ -503,25 +502,12 @@ def plunger_flowrate( ul_per_s = mm_per_s * instr.ul_per_mm(instr.liquid_class.max_volume, action) return round(ul_per_s, 6) - @overload def plan_check_aspirate( - self, mount: top_types.Mount, volume: Optional[float], rate: float - ) -> Optional[LiquidActionSpec]: - ... - - @overload - def plan_check_aspirate( - self, mount: OT3Mount, volume: Optional[float], rate: float - ) -> Optional[LiquidActionSpec]: - ... - - # note on this type ignore: see motion_utilities - def plan_check_aspirate( # type: ignore[no-untyped-def] self, - mount, - volume, - rate, - ): + mount: MountType, + volume: Optional[float], + rate: float, + ) -> Optional[LiquidActionSpec]: """Check preconditions for aspirate, parse args, and calculate positions. While the mechanics of issuing an aspirate move itself are left to child @@ -580,28 +566,12 @@ def plan_check_aspirate( # type: ignore[no-untyped-def] current=instrument.plunger_motor_current.run, ) - @overload def plan_check_dispense( self, - mount: top_types.Mount, - volume: Optional[float], - rate: float, - push_out: Optional[float], - ) -> Optional[LiquidActionSpec]: - ... - - @overload - def plan_check_dispense( - self, - mount: OT3Mount, + mount: MountType, volume: Optional[float], rate: float, push_out: Optional[float], - ) -> Optional[LiquidActionSpec]: - ... - - def plan_check_dispense( # type: ignore[no-untyped-def] - self, mount, volume, rate, push_out ) -> Optional[LiquidActionSpec]: """Check preconditions for dispense, parse args, and calculate positions. @@ -695,15 +665,7 @@ def plan_check_dispense( # type: ignore[no-untyped-def] current=instrument.plunger_motor_current.run, ) - @overload - def plan_check_blow_out(self, mount: top_types.Mount) -> LiquidActionSpec: - ... - - @overload - def plan_check_blow_out(self, mount: OT3Mount) -> LiquidActionSpec: - ... - - def plan_check_blow_out(self, mount): # type: ignore[no-untyped-def] + def plan_check_blow_out(self, mount: MountType) -> LiquidActionSpec: """Check preconditions and calculate values for blowout.""" instrument = self.get_pipette(mount) speed = self.plunger_speed( @@ -751,33 +713,13 @@ def build_one_shake() -> List[Tuple[top_types.Point, Optional[float]]]: else: return [] - @overload def plan_check_pick_up_tip( self, - mount: top_types.Mount, - presses: Optional[int], - increment: Optional[float], - tip_length: float = 0, - ) -> Tuple[PickUpTipSpec, Callable[[], None]]: - ... - - @overload - def plan_check_pick_up_tip( - self, - mount: OT3Mount, + mount: MountType, presses: Optional[int], increment: Optional[float], tip_length: float = 0, ) -> Tuple[PickUpTipSpec, Callable[[], None]]: - ... - - def plan_check_pick_up_tip( # type: ignore[no-untyped-def] - self, - mount, - presses, - increment, - tip_length=0, - ): # Prechecks: ready for pickup tip and press/increment are valid instrument = self.get_pipette(mount) if instrument.has_tip: @@ -925,25 +867,13 @@ def build() -> List[DropTipMove]: return build - @overload - def plan_check_drop_tip( - self, mount: top_types.Mount, home_after: bool - ) -> Tuple[DropTipSpec, Callable[[], None]]: - ... - - @overload - def plan_check_drop_tip( - self, mount: OT3Mount, home_after: bool - ) -> Tuple[DropTipSpec, Callable[[], None]]: - ... - # todo(mm, 2024-10-17): The returned _remove_tips() callable is not used by anything # anymore. Delete it. - def plan_check_drop_tip( # type: ignore[no-untyped-def] + def plan_check_drop_tip( self, - mount, - home_after, - ): + mount: MountType, + home_after: bool, + ) -> Tuple[DropTipSpec, Callable[[], None]]: instrument = self.get_pipette(mount) if not instrument.drop_configurations.plunger_eject: From 8a66ea32e7336e085dd6b925927ea8c8b888985a Mon Sep 17 00:00:00 2001 From: Jamey Huffnagle Date: Mon, 28 Oct 2024 10:29:47 -0400 Subject: [PATCH 10/81] refactor(app): Support "resume from recovery assuming false positive" action (#16601) Closes EXEC-791 See #16556 and the linked ticket for details concerning the reasoning for implementing these changes. When skipping a step in Error Recovery, the FE essentially calls two commands: handleIgnoringErrorKind, which deals with updating the recovery policy, and skipFailedCommand, which does the skipping. By using isAssumeFalsePositiveResumeKind, we can conditionally determine which policy ifMatch criteria to use, and we can determine which error recovery resume kind to dispatch to the server. --- .../__tests__/useRecoveryCommands.test.ts | 67 +++++++++++++++- .../hooks/useRecoveryCommands.ts | 47 +++++++++-- .../RunTimeControl/__tests__/hooks.test.tsx | 3 + .../__tests__/RunningProtocol.test.tsx | 3 + ...veryAssumingFalsePositiveMutation.test.tsx | 80 +++++++++++++++++++ .../useResumeRunFromRecoveryMutation.test.tsx | 8 +- .../__tests__/useRunActionMutations.test.tsx | 17 ++++ react-api-client/src/runs/index.ts | 2 + ...omRecoveryAssumingFalsePositiveMutation.ts | 60 ++++++++++++++ .../src/runs/useRunActionMutations.ts | 12 +++ 10 files changed, 288 insertions(+), 11 deletions(-) create mode 100644 react-api-client/src/runs/__tests__/useResumeFromRecoveryAssumingFalsePositiveMutation.test.tsx create mode 100644 react-api-client/src/runs/useResumeFromRecoveryAssumingFalsePositiveMutation.ts diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useRecoveryCommands.test.ts b/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useRecoveryCommands.test.ts index a553bdcb4ee..4079e8a8f1e 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useRecoveryCommands.test.ts +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useRecoveryCommands.test.ts @@ -5,6 +5,7 @@ import { useResumeRunFromRecoveryMutation, useStopRunMutation, useUpdateErrorRecoveryPolicy, + useResumeRunFromRecoveryAssumingFalsePositiveMutation, } from '@opentrons/react-api-client' import { useChainRunCommands } from '/app/resources/runs' @@ -14,13 +15,16 @@ import { RELEASE_GRIPPER_JAW, buildPickUpTips, buildIgnorePolicyRules, + isAssumeFalsePositiveResumeKind, UPDATE_ESTIMATORS_EXCEPT_PLUNGERS, HOME_GRIPPER_Z, } from '../useRecoveryCommands' -import { RECOVERY_MAP } from '../../constants' +import { RECOVERY_MAP, ERROR_KINDS } from '../../constants' +import { getErrorKind } from '/app/organisms/ErrorRecoveryFlows/utils' vi.mock('@opentrons/react-api-client') vi.mock('/app/resources/runs') +vi.mock('/app/organisms/ErrorRecoveryFlows/utils') describe('useRecoveryCommands', () => { const mockFailedCommand = { @@ -41,6 +45,9 @@ describe('useRecoveryCommands', () => { const mockResumeRunFromRecovery = vi.fn(() => Promise.resolve(mockMakeSuccessToast()) ) + const mockResumeRunFromRecoveryAssumingFalsePositive = vi.fn(() => + Promise.resolve(mockMakeSuccessToast()) + ) const mockStopRun = vi.fn() const mockChainRunCommands = vi.fn().mockResolvedValue([]) const mockReportActionSelectedResult = vi.fn() @@ -73,6 +80,11 @@ describe('useRecoveryCommands', () => { vi.mocked(useUpdateErrorRecoveryPolicy).mockReturnValue({ mutateAsync: mockUpdateErrorRecoveryPolicy, } as any) + vi.mocked( + useResumeRunFromRecoveryAssumingFalsePositiveMutation + ).mockReturnValue({ + mutateAsync: mockResumeRunFromRecoveryAssumingFalsePositive, + } as any) }) it('should call chainRunRecoveryCommands with continuePastCommandFailure set to false', async () => { @@ -317,7 +329,8 @@ describe('useRecoveryCommands', () => { const expectedPolicyRules = buildIgnorePolicyRules( 'aspirateInPlace', - 'mockErrorType' + 'mockErrorType', + 'ignoreAndContinue' ) expect(mockUpdateErrorRecoveryPolicy).toHaveBeenCalledWith( @@ -354,4 +367,54 @@ describe('useRecoveryCommands', () => { RECOVERY_MAP.ERROR_WHILE_RECOVERING.ROUTE ) }) + + describe('skipFailedCommand with false positive handling', () => { + it('should call resumeRunFromRecoveryAssumingFalsePositive for tip-related errors', async () => { + vi.mocked(getErrorKind).mockReturnValue(ERROR_KINDS.TIP_NOT_DETECTED) + + const { result } = renderHook(() => useRecoveryCommands(props)) + + await act(async () => { + await result.current.skipFailedCommand() + }) + + expect( + mockResumeRunFromRecoveryAssumingFalsePositive + ).toHaveBeenCalledWith(mockRunId) + expect(mockMakeSuccessToast).toHaveBeenCalled() + }) + + it('should call regular resumeRunFromRecovery for non-tip-related errors', async () => { + vi.mocked(getErrorKind).mockReturnValue(ERROR_KINDS.GRIPPER_ERROR) + + const { result } = renderHook(() => useRecoveryCommands(props)) + + await act(async () => { + await result.current.skipFailedCommand() + }) + + expect(mockResumeRunFromRecovery).toHaveBeenCalledWith(mockRunId) + expect(mockMakeSuccessToast).toHaveBeenCalled() + }) + }) +}) + +describe('isAssumeFalsePositiveResumeKind', () => { + it(`should return true for ${ERROR_KINDS.TIP_NOT_DETECTED} error kind`, () => { + vi.mocked(getErrorKind).mockReturnValue(ERROR_KINDS.TIP_NOT_DETECTED) + + expect(isAssumeFalsePositiveResumeKind({} as any)).toBe(true) + }) + + it(`should return true for ${ERROR_KINDS.TIP_DROP_FAILED} error kind`, () => { + vi.mocked(getErrorKind).mockReturnValue(ERROR_KINDS.TIP_DROP_FAILED) + + expect(isAssumeFalsePositiveResumeKind({} as any)).toBe(true) + }) + + it('should return false for other error kinds', () => { + vi.mocked(getErrorKind).mockReturnValue(ERROR_KINDS.GRIPPER_ERROR) + + expect(isAssumeFalsePositiveResumeKind({} as any)).toBe(false) + }) }) diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryCommands.ts b/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryCommands.ts index 69101d92fe9..7614dec4be3 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryCommands.ts +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryCommands.ts @@ -5,10 +5,12 @@ import { useResumeRunFromRecoveryMutation, useStopRunMutation, useUpdateErrorRecoveryPolicy, + useResumeRunFromRecoveryAssumingFalsePositiveMutation, } from '@opentrons/react-api-client' import { useChainRunCommands } from '/app/resources/runs' -import { RECOVERY_MAP } from '../constants' +import { ERROR_KINDS, RECOVERY_MAP } from '../constants' +import { getErrorKind } from '/app/organisms/ErrorRecoveryFlows/utils' import type { CreateCommand, @@ -23,7 +25,9 @@ import type { } from '@opentrons/shared-data' import type { CommandData, + IfMatchType, RecoveryPolicyRulesParams, + RunAction, } from '@opentrons/api-client' import type { WellGroup } from '@opentrons/components' import type { FailedCommand, RecoveryRoute, RouteStep } from '../types' @@ -89,6 +93,9 @@ export function useRecoveryCommands({ const { mutateAsync: resumeRunFromRecovery, } = useResumeRunFromRecoveryMutation() + const { + mutateAsync: resumeRunFromRecoveryAssumingFalsePositive, + } = useResumeRunFromRecoveryAssumingFalsePositiveMutation() const { stopRun } = useStopRunMutation() const { mutateAsync: updateErrorRecoveryPolicy, @@ -198,9 +205,16 @@ export function useRecoveryCommands({ const handleIgnoringErrorKind = useCallback((): Promise => { if (ignoreErrors) { if (failedCommandByRunRecord?.error != null) { + const ifMatch: IfMatchType = isAssumeFalsePositiveResumeKind( + failedCommandByRunRecord + ) + ? 'assumeFalsePositiveAndContinue' + : 'ignoreAndContinue' + const ignorePolicyRules = buildIgnorePolicyRules( failedCommandByRunRecord.commandType, - failedCommandByRunRecord.error.errorType + failedCommandByRunRecord.error.errorType, + ifMatch ) return updateErrorRecoveryPolicy(ignorePolicyRules) @@ -247,9 +261,17 @@ export function useRecoveryCommands({ stopRun(runId) }, [runId]) + const handleResumeAction = (): Promise => { + if (isAssumeFalsePositiveResumeKind(failedCommandByRunRecord)) { + return resumeRunFromRecoveryAssumingFalsePositive(runId) + } else { + return resumeRunFromRecovery(runId) + } + } + const skipFailedCommand = useCallback((): void => { void handleIgnoringErrorKind().then(() => - resumeRunFromRecovery(runId).then(() => { + handleResumeAction().then(() => { analytics.reportActionSelectedResult( selectedRecoveryOption, 'succeeded' @@ -303,6 +325,20 @@ export function useRecoveryCommands({ } } +export function isAssumeFalsePositiveResumeKind( + failedCommandByRunRecord: UseRecoveryCommandsParams['failedCommandByRunRecord'] +): boolean { + const errorKind = getErrorKind(failedCommandByRunRecord) + + switch (errorKind) { + case ERROR_KINDS.TIP_NOT_DETECTED: + case ERROR_KINDS.TIP_DROP_FAILED: + return true + default: + return false + } +} + export const HOME_PIPETTE_Z_AXES: CreateCommand = { commandType: 'home', params: { axes: ['leftZ', 'rightZ'] }, @@ -372,13 +408,14 @@ export const buildPickUpTips = ( export const buildIgnorePolicyRules = ( commandType: FailedCommand['commandType'], - errorType: string + errorType: string, + ifMatch: IfMatchType ): RecoveryPolicyRulesParams => { return [ { commandType, errorType, - ifMatch: 'ignoreAndContinue', + ifMatch, }, ] } diff --git a/app/src/organisms/RunTimeControl/__tests__/hooks.test.tsx b/app/src/organisms/RunTimeControl/__tests__/hooks.test.tsx index 7450fb34e4e..2ba0d50ea3b 100644 --- a/app/src/organisms/RunTimeControl/__tests__/hooks.test.tsx +++ b/app/src/organisms/RunTimeControl/__tests__/hooks.test.tsx @@ -40,16 +40,19 @@ describe('useRunControls hook', () => { const mockStopRun = vi.fn() const mockCloneRun = vi.fn() const mockResumeRunFromRecovery = vi.fn() + const mockResumeRunFromRecoveryAssumingFalsePositive = vi.fn() when(useRunActionMutations).calledWith(mockPausedRun.id).thenReturn({ playRun: mockPlayRun, pauseRun: mockPauseRun, stopRun: mockStopRun, resumeRunFromRecovery: mockResumeRunFromRecovery, + resumeRunFromRecoveryAssumingFalsePositive: mockResumeRunFromRecoveryAssumingFalsePositive, isPlayRunActionLoading: false, isPauseRunActionLoading: false, isStopRunActionLoading: false, isResumeRunFromRecoveryActionLoading: false, + isResumeRunFromRecoveryAssumingFalsePositiveActionLoading: false, }) when(useCloneRun).calledWith(mockPausedRun.id, undefined, true).thenReturn({ cloneRun: mockCloneRun, diff --git a/app/src/pages/ODD/RunningProtocol/__tests__/RunningProtocol.test.tsx b/app/src/pages/ODD/RunningProtocol/__tests__/RunningProtocol.test.tsx index 2605c1bad5b..f98666d3cbd 100644 --- a/app/src/pages/ODD/RunningProtocol/__tests__/RunningProtocol.test.tsx +++ b/app/src/pages/ODD/RunningProtocol/__tests__/RunningProtocol.test.tsx @@ -76,6 +76,7 @@ const mockPlayRun = vi.fn() const mockPauseRun = vi.fn() const mockStopRun = vi.fn() const mockResumeRunFromRecovery = vi.fn() +const mockResumeRunFromRecoveryAssumingFalsePositive = vi.fn() const render = (path = '/') => { return renderWithProviders( @@ -133,10 +134,12 @@ describe('RunningProtocol', () => { pauseRun: mockPauseRun, stopRun: mockStopRun, resumeRunFromRecovery: mockResumeRunFromRecovery, + resumeRunFromRecoveryAssumingFalsePositive: mockResumeRunFromRecoveryAssumingFalsePositive, isPlayRunActionLoading: false, isPauseRunActionLoading: false, isStopRunActionLoading: false, isResumeRunFromRecoveryActionLoading: false, + isResumeRunFromRecoveryAssumingFalsePositiveActionLoading: false, }) when(vi.mocked(useMostRecentCompletedAnalysis)) .calledWith(RUN_ID) diff --git a/react-api-client/src/runs/__tests__/useResumeFromRecoveryAssumingFalsePositiveMutation.test.tsx b/react-api-client/src/runs/__tests__/useResumeFromRecoveryAssumingFalsePositiveMutation.test.tsx new file mode 100644 index 00000000000..ec5900d4a62 --- /dev/null +++ b/react-api-client/src/runs/__tests__/useResumeFromRecoveryAssumingFalsePositiveMutation.test.tsx @@ -0,0 +1,80 @@ +import { describe, it, expect, beforeEach, vi } from 'vitest' +import { QueryClient, QueryClientProvider } from 'react-query' +import { act, renderHook, waitFor } from '@testing-library/react' + +import { createRunAction } from '@opentrons/api-client' + +import { useHost } from '../../api' +import { useResumeRunFromRecoveryAssumingFalsePositiveMutation } from '..' + +import { RUN_ID_1, mockResumeFromRecoveryAction } from '../__fixtures__' + +import type * as React from 'react' +import type { HostConfig, Response, RunAction } from '@opentrons/api-client' +import type { UseResumeRunFromRecoveryAssumingFalsePositiveMutationOptions } from '../useResumeFromRecoveryAssumingFalsePositiveMutation' + +vi.mock('@opentrons/api-client') +vi.mock('../../api/useHost') + +const HOST_CONFIG: HostConfig = { hostname: 'localhost' } + +describe('useResumeRunFromRecoveryAssumingFalsePositiveMutation hook', () => { + let wrapper: React.FunctionComponent< + { + children: React.ReactNode + } & UseResumeRunFromRecoveryAssumingFalsePositiveMutationOptions + > + + beforeEach(() => { + const queryClient = new QueryClient() + const clientProvider: React.FunctionComponent< + { + children: React.ReactNode + } & UseResumeRunFromRecoveryAssumingFalsePositiveMutationOptions + > = ({ children }) => ( + {children} + ) + wrapper = clientProvider + }) + + it('should return no data when calling resumeRunFromRecoveryAssumingFalsePositive if the request fails', async () => { + vi.mocked(useHost).mockReturnValue(HOST_CONFIG) + vi.mocked(createRunAction).mockRejectedValue('oh no') + + const { result } = renderHook( + useResumeRunFromRecoveryAssumingFalsePositiveMutation, + { + wrapper, + } + ) + + expect(result.current.data).toBeUndefined() + act(() => + result.current.resumeRunFromRecoveryAssumingFalsePositive(RUN_ID_1) + ) + await waitFor(() => { + expect(result.current.data).toBeUndefined() + }) + }) + + it('should create a resumeFromRecoveryAssumingFalsePositive run action when calling the resumeRunFromRecoveryAssumingFalsePositive callback', async () => { + vi.mocked(useHost).mockReturnValue(HOST_CONFIG) + vi.mocked(createRunAction).mockResolvedValue({ + data: mockResumeFromRecoveryAction, + } as Response) + + const { result } = renderHook( + useResumeRunFromRecoveryAssumingFalsePositiveMutation, + { + wrapper, + } + ) + act(() => + result.current.resumeRunFromRecoveryAssumingFalsePositive(RUN_ID_1) + ) + + await waitFor(() => { + expect(result.current.data).toEqual(mockResumeFromRecoveryAction) + }) + }) +}) diff --git a/react-api-client/src/runs/__tests__/useResumeRunFromRecoveryMutation.test.tsx b/react-api-client/src/runs/__tests__/useResumeRunFromRecoveryMutation.test.tsx index cf9794c0dd8..f556b105153 100644 --- a/react-api-client/src/runs/__tests__/useResumeRunFromRecoveryMutation.test.tsx +++ b/react-api-client/src/runs/__tests__/useResumeRunFromRecoveryMutation.test.tsx @@ -9,22 +9,22 @@ import { useResumeRunFromRecoveryMutation } from '..' import { RUN_ID_1, mockResumeFromRecoveryAction } from '../__fixtures__' import type { HostConfig, Response, RunAction } from '@opentrons/api-client' -import type { UsePlayRunMutationOptions } from '../usePlayRunMutation' +import type { UseResumeRunFromRecoveryMutationOptions } from '../useResumeRunFromRecoveryMutation' vi.mock('@opentrons/api-client') vi.mock('../../api/useHost') const HOST_CONFIG: HostConfig = { hostname: 'localhost' } -describe('usePlayRunMutation hook', () => { +describe('useResumeRunFromRecoveryMutation hook', () => { let wrapper: React.FunctionComponent< - { children: React.ReactNode } & UsePlayRunMutationOptions + { children: React.ReactNode } & UseResumeRunFromRecoveryMutationOptions > beforeEach(() => { const queryClient = new QueryClient() const clientProvider: React.FunctionComponent< - { children: React.ReactNode } & UsePlayRunMutationOptions + { children: React.ReactNode } & UseResumeRunFromRecoveryMutationOptions > = ({ children }) => ( {children} ) diff --git a/react-api-client/src/runs/__tests__/useRunActionMutations.test.tsx b/react-api-client/src/runs/__tests__/useRunActionMutations.test.tsx index 7b40e4fc88e..e5c5c4cf265 100644 --- a/react-api-client/src/runs/__tests__/useRunActionMutations.test.tsx +++ b/react-api-client/src/runs/__tests__/useRunActionMutations.test.tsx @@ -10,18 +10,21 @@ import { usePauseRunMutation, useStopRunMutation, useResumeRunFromRecoveryMutation, + useResumeRunFromRecoveryAssumingFalsePositiveMutation, } from '..' import type { UsePlayRunMutationResult, UsePauseRunMutationResult, UseStopRunMutationResult, UseResumeRunFromRecoveryMutationResult, + UseResumeRunFromRecoveryAssumingFalsePositiveMutationResult, } from '..' vi.mock('../usePlayRunMutation') vi.mock('../usePauseRunMutation') vi.mock('../useStopRunMutation') vi.mock('../useResumeRunFromRecoveryMutation') +vi.mock('../useResumeFromRecoveryAssumingFalsePositiveMutation') describe('useRunActionMutations hook', () => { let wrapper: React.FunctionComponent<{ children: React.ReactNode }> @@ -44,6 +47,7 @@ describe('useRunActionMutations hook', () => { const mockPauseRun = vi.fn() const mockStopRun = vi.fn() const mockResumeRunFromRecovery = vi.fn() + const mockResumeRunFromRecoveryAssumingFalsePositive = vi.fn() vi.mocked(usePlayRunMutation).mockReturnValue(({ playRun: mockPlayRun, @@ -61,6 +65,12 @@ describe('useRunActionMutations hook', () => { resumeRunFromRecovery: mockResumeRunFromRecovery, } as unknown) as UseResumeRunFromRecoveryMutationResult) + vi.mocked( + useResumeRunFromRecoveryAssumingFalsePositiveMutation + ).mockReturnValue(({ + resumeRunFromRecoveryAssumingFalsePositive: mockResumeRunFromRecoveryAssumingFalsePositive, + } as unknown) as UseResumeRunFromRecoveryAssumingFalsePositiveMutationResult) + const { result } = renderHook(() => useRunActionMutations(RUN_ID_1), { wrapper, }) @@ -77,5 +87,12 @@ describe('useRunActionMutations hook', () => { act(() => result.current.resumeRunFromRecovery()) expect(mockResumeRunFromRecovery).toHaveBeenCalledTimes(1) expect(mockResumeRunFromRecovery).toHaveBeenCalledWith(RUN_ID_1) + act(() => result.current.resumeRunFromRecoveryAssumingFalsePositive()) + expect( + mockResumeRunFromRecoveryAssumingFalsePositive + ).toHaveBeenCalledTimes(1) + expect(mockResumeRunFromRecoveryAssumingFalsePositive).toHaveBeenCalledWith( + RUN_ID_1 + ) }) }) diff --git a/react-api-client/src/runs/index.ts b/react-api-client/src/runs/index.ts index 71e3360a5f9..5e479ed5093 100644 --- a/react-api-client/src/runs/index.ts +++ b/react-api-client/src/runs/index.ts @@ -10,6 +10,7 @@ export { usePlayRunMutation } from './usePlayRunMutation' export { usePauseRunMutation } from './usePauseRunMutation' export { useStopRunMutation } from './useStopRunMutation' export { useResumeRunFromRecoveryMutation } from './useResumeRunFromRecoveryMutation' +export { useResumeRunFromRecoveryAssumingFalsePositiveMutation } from './useResumeFromRecoveryAssumingFalsePositiveMutation' export { useRunActionMutations } from './useRunActionMutations' export { useAllCommandsQuery } from './useAllCommandsQuery' export { useAllCommandsAsPreSerializedList } from './useAllCommandsAsPreSerializedList' @@ -23,3 +24,4 @@ export type { UsePlayRunMutationResult } from './usePlayRunMutation' export type { UsePauseRunMutationResult } from './usePauseRunMutation' export type { UseStopRunMutationResult } from './useStopRunMutation' export type { UseResumeRunFromRecoveryMutationResult } from './useResumeRunFromRecoveryMutation' +export type { UseResumeRunFromRecoveryAssumingFalsePositiveMutationResult } from './useResumeFromRecoveryAssumingFalsePositiveMutation' diff --git a/react-api-client/src/runs/useResumeFromRecoveryAssumingFalsePositiveMutation.ts b/react-api-client/src/runs/useResumeFromRecoveryAssumingFalsePositiveMutation.ts new file mode 100644 index 00000000000..6eb10990053 --- /dev/null +++ b/react-api-client/src/runs/useResumeFromRecoveryAssumingFalsePositiveMutation.ts @@ -0,0 +1,60 @@ +import { useMutation } from 'react-query' + +import { + RUN_ACTION_TYPE_RESUME_FROM_RECOVERY_ASSUMING_FALSE_POSITIVE, + createRunAction, +} from '@opentrons/api-client' + +import { useHost } from '../api' + +import type { AxiosError } from 'axios' +import type { + UseMutateFunction, + UseMutationOptions, + UseMutationResult, +} from 'react-query' +import type { HostConfig, RunAction } from '@opentrons/api-client' + +export type UseResumeRunFromRecoveryAssumingFalsePositiveMutationResult = UseMutationResult< + RunAction, + AxiosError, + string +> & { + resumeRunFromRecoveryAssumingFalsePositive: UseMutateFunction< + RunAction, + AxiosError, + string + > +} + +export type UseResumeRunFromRecoveryAssumingFalsePositiveMutationOptions = UseMutationOptions< + RunAction, + AxiosError, + string +> + +export const useResumeRunFromRecoveryAssumingFalsePositiveMutation = ( + options: UseResumeRunFromRecoveryAssumingFalsePositiveMutationOptions = {} +): UseResumeRunFromRecoveryAssumingFalsePositiveMutationResult => { + const host = useHost() + const mutation = useMutation( + [ + host, + 'runs', + RUN_ACTION_TYPE_RESUME_FROM_RECOVERY_ASSUMING_FALSE_POSITIVE, + ], + (runId: string) => + createRunAction(host as HostConfig, runId, { + actionType: RUN_ACTION_TYPE_RESUME_FROM_RECOVERY_ASSUMING_FALSE_POSITIVE, + }) + .then(response => response.data) + .catch(e => { + throw e + }), + options + ) + return { + ...mutation, + resumeRunFromRecoveryAssumingFalsePositive: mutation.mutate, + } +} diff --git a/react-api-client/src/runs/useRunActionMutations.ts b/react-api-client/src/runs/useRunActionMutations.ts index 8bf3a08f1cb..a64411e7209 100644 --- a/react-api-client/src/runs/useRunActionMutations.ts +++ b/react-api-client/src/runs/useRunActionMutations.ts @@ -5,6 +5,7 @@ import { usePauseRunMutation, useStopRunMutation, useResumeRunFromRecoveryMutation, + useResumeRunFromRecoveryAssumingFalsePositiveMutation, } from '..' interface UseRunActionMutations { @@ -12,10 +13,12 @@ interface UseRunActionMutations { pauseRun: () => void stopRun: () => void resumeRunFromRecovery: () => void + resumeRunFromRecoveryAssumingFalsePositive: () => void isPlayRunActionLoading: boolean isPauseRunActionLoading: boolean isStopRunActionLoading: boolean isResumeRunFromRecoveryActionLoading: boolean + isResumeRunFromRecoveryAssumingFalsePositiveActionLoading: boolean } export function useRunActionMutations(runId: string): UseRunActionMutations { @@ -43,6 +46,11 @@ export function useRunActionMutations(runId: string): UseRunActionMutations { isLoading: isResumeRunFromRecoveryActionLoading, } = useResumeRunFromRecoveryMutation() + const { + resumeRunFromRecoveryAssumingFalsePositive, + isLoading: isResumeRunFromRecoveryAssumingFalsePositiveActionLoading, + } = useResumeRunFromRecoveryAssumingFalsePositiveMutation() + return { playRun: () => { playRun(runId) @@ -56,9 +64,13 @@ export function useRunActionMutations(runId: string): UseRunActionMutations { resumeRunFromRecovery: () => { resumeRunFromRecovery(runId) }, + resumeRunFromRecoveryAssumingFalsePositive: () => { + resumeRunFromRecoveryAssumingFalsePositive(runId) + }, isPlayRunActionLoading, isPauseRunActionLoading, isStopRunActionLoading, isResumeRunFromRecoveryActionLoading, + isResumeRunFromRecoveryAssumingFalsePositiveActionLoading, } } From e420916b42d796b5128d7215b3593ec49b8b78e4 Mon Sep 17 00:00:00 2001 From: Max Marrone Date: Mon, 28 Oct 2024 10:54:29 -0400 Subject: [PATCH 11/81] feat(api): Attach error recovery debug notes to commands (#16608) --- ...2_19_P300M_P20S_HS_TC_TM_SmokeTestV3].json | 9 ++++++- ...2_18_P300M_P20S_HS_TC_TM_SmokeTestV3].json | 9 ++++++- ..._X_v6_P300M_P20S_HS_MM_TM_TC_AllMods].json | 9 ++++++- ...llumina_Stranded_total_RNA_Ribo_Zero].json | 9 ++++++- ..._GRIP_TC_TM_GripperCollisionWithTips].json | 9 ++++++- ...8][OT2_X_v6_P20S_None_SimpleTransfer].json | 9 ++++++- ...P300M_P20S_HS_TC_TM_dispense_changes].json | 9 ++++++- ...TTES_MM_MagneticModuleInFlexProtocol].json | 9 ++++++- ...ide_eight_partial_column_bottom_left].json | 9 ++++++- ...0MGen2_None_OT2PipetteInFlexProtocol].json | 9 ++++++- ..._PIPETTES_TM_ModuleInStagingAreaCol3].json | 9 ++++++- ...de_eight_partial_column_bottom_right].json | 9 ++++++- ...1000_96_GRIP_DropLabwareIntoTrashBin].json | 9 ++++++- ...6_GRIP_HS_MB_TC_TM_IDTXgen96Part1to3].json | 9 ++++++- ...ide_eight_partial_column_bottom_left].json | 9 ++++++- ...llumina_Stranded_total_RNA_Ribo_Zero].json | 9 ++++++- ...de_eight_partial_column_bottom_right].json | 9 ++++++- ...tranded_total_RNA_Ribo_Zero_protocol].json | 9 ++++++- ..._X_v2_16_NO_PIPETTES_TM_ModuleInCol2].json | 9 ++++++- ...P_HS_MB_TC_TM_IlluminaDNAPrep96PART3].json | 9 ++++++- ...00_96_TM_ModuleAndWasteChuteConflict].json | 9 ++++++- .../execution/command_executor.py | 25 +++++++++++-------- .../protocol_engine/notes/__init__.py | 16 ++++++++++-- .../opentrons/protocol_engine/notes/notes.py | 19 +++++++++++++- .../runs/test_json_v6_run_failure.tavern.yaml | 2 +- 25 files changed, 216 insertions(+), 35 deletions(-) diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[057de2035d][OT2_S_v2_19_P300M_P20S_HS_TC_TM_SmokeTestV3].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[057de2035d][OT2_S_v2_19_P300M_P20S_HS_TC_TM_SmokeTestV3].json index a73a19e4c88..a2aca7e252a 100644 --- a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[057de2035d][OT2_S_v2_19_P300M_P20S_HS_TC_TM_SmokeTestV3].json +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[057de2035d][OT2_S_v2_19_P300M_P20S_HS_TC_TM_SmokeTestV3].json @@ -9383,7 +9383,14 @@ }, "id": "UUID", "key": "08e16a2cac011d4bef561f8b0854d19e", - "notes": [], + "notes": [ + { + "longMessage": "Handling this command failure with FAIL_RUN.", + "noteKind": "debugErrorRecovery", + "shortMessage": "Handling this command failure with FAIL_RUN.", + "source": "execution" + } + ], "params": { "displayName": "4 custom tubes", "loadName": "cpx_4_tuberack_100ul", diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[0cbde10c37][OT2_S_v2_18_P300M_P20S_HS_TC_TM_SmokeTestV3].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[0cbde10c37][OT2_S_v2_18_P300M_P20S_HS_TC_TM_SmokeTestV3].json index 56d23e7468e..e4924262e1a 100644 --- a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[0cbde10c37][OT2_S_v2_18_P300M_P20S_HS_TC_TM_SmokeTestV3].json +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[0cbde10c37][OT2_S_v2_18_P300M_P20S_HS_TC_TM_SmokeTestV3].json @@ -9383,7 +9383,14 @@ }, "id": "UUID", "key": "08e16a2cac011d4bef561f8b0854d19e", - "notes": [], + "notes": [ + { + "longMessage": "Handling this command failure with FAIL_RUN.", + "noteKind": "debugErrorRecovery", + "shortMessage": "Handling this command failure with FAIL_RUN.", + "source": "execution" + } + ], "params": { "displayName": "4 custom tubes", "loadName": "cpx_4_tuberack_100ul", diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[134037b2aa][OT2_X_v6_P300M_P20S_HS_MM_TM_TC_AllMods].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[134037b2aa][OT2_X_v6_P300M_P20S_HS_MM_TM_TC_AllMods].json index 0ba775ce4cb..f2c63721b33 100644 --- a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[134037b2aa][OT2_X_v6_P300M_P20S_HS_MM_TM_TC_AllMods].json +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[134037b2aa][OT2_X_v6_P300M_P20S_HS_MM_TM_TC_AllMods].json @@ -7895,7 +7895,14 @@ }, "id": "UUID", "key": "675eb8be-6c85-4204-9c87-d7fdd522f580", - "notes": [], + "notes": [ + { + "longMessage": "Handling this command failure with FAIL_RUN.", + "noteKind": "debugErrorRecovery", + "shortMessage": "Handling this command failure with FAIL_RUN.", + "source": "execution" + } + ], "params": { "moduleId": "UUID" }, diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[13ec753045][Flex_S_v2_18_Illumina_Stranded_total_RNA_Ribo_Zero].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[13ec753045][Flex_S_v2_18_Illumina_Stranded_total_RNA_Ribo_Zero].json index 99501a91cd3..0b2e524dee6 100644 --- a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[13ec753045][Flex_S_v2_18_Illumina_Stranded_total_RNA_Ribo_Zero].json +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[13ec753045][Flex_S_v2_18_Illumina_Stranded_total_RNA_Ribo_Zero].json @@ -4341,7 +4341,14 @@ }, "id": "UUID", "key": "bccdb28e967f574dfbe472004101d7f9", - "notes": [], + "notes": [ + { + "longMessage": "Handling this command failure with FAIL_RUN.", + "noteKind": "debugErrorRecovery", + "shortMessage": "Handling this command failure with FAIL_RUN.", + "source": "execution" + } + ], "params": { "displayName": "Index Anchors", "loadName": "eppendorf_96_wellplate_150ul", diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[19c783e363][Flex_X_v8_P1000_96_HS_GRIP_TC_TM_GripperCollisionWithTips].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[19c783e363][Flex_X_v8_P1000_96_HS_GRIP_TC_TM_GripperCollisionWithTips].json index 9f6db189f50..b7c2e8d8c6a 100644 --- a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[19c783e363][Flex_X_v8_P1000_96_HS_GRIP_TC_TM_GripperCollisionWithTips].json +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[19c783e363][Flex_X_v8_P1000_96_HS_GRIP_TC_TM_GripperCollisionWithTips].json @@ -12587,7 +12587,14 @@ }, "id": "UUID", "key": "702caca4-12c8-4f26-a68e-138134723f09", - "notes": [], + "notes": [ + { + "longMessage": "Handling this command failure with FAIL_RUN.", + "noteKind": "debugErrorRecovery", + "shortMessage": "Handling this command failure with FAIL_RUN.", + "source": "execution" + } + ], "params": { "labwareId": "UUID", "newLocation": { 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 77e30bb1865..351c26b64b4 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 @@ -1772,7 +1772,14 @@ }, "id": "UUID", "key": "c2e4fa67-3c04-4d22-b3fa-5d61e956c488", - "notes": [], + "notes": [ + { + "longMessage": "Handling this command failure with FAIL_RUN.", + "noteKind": "debugErrorRecovery", + "shortMessage": "Handling this command failure with FAIL_RUN.", + "source": "execution" + } + ], "params": { "flowRate": 3.78, "labwareId": "UUID", diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4b17883f74][OT2_S_v2_17_P300M_P20S_HS_TC_TM_dispense_changes].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4b17883f74][OT2_S_v2_17_P300M_P20S_HS_TC_TM_dispense_changes].json index 8986f5e49cb..5af5922dada 100644 --- a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4b17883f74][OT2_S_v2_17_P300M_P20S_HS_TC_TM_dispense_changes].json +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4b17883f74][OT2_S_v2_17_P300M_P20S_HS_TC_TM_dispense_changes].json @@ -3035,7 +3035,14 @@ }, "id": "UUID", "key": "0bd3f36a944ee534e422ee69360a9501", - "notes": [], + "notes": [ + { + "longMessage": "Handling this command failure with FAIL_RUN.", + "noteKind": "debugErrorRecovery", + "shortMessage": "Handling this command failure with FAIL_RUN.", + "source": "execution" + } + ], "params": { "flowRate": 7.56, "labwareId": "UUID", diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4cb705bdbf][Flex_X_v2_16_NO_PIPETTES_MM_MagneticModuleInFlexProtocol].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4cb705bdbf][Flex_X_v2_16_NO_PIPETTES_MM_MagneticModuleInFlexProtocol].json index 60a3d0150e4..d810bd75c88 100644 --- a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4cb705bdbf][Flex_X_v2_16_NO_PIPETTES_MM_MagneticModuleInFlexProtocol].json +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4cb705bdbf][Flex_X_v2_16_NO_PIPETTES_MM_MagneticModuleInFlexProtocol].json @@ -32,7 +32,14 @@ }, "id": "UUID", "key": "8511b05ba5565bf0e6dcccd800e2ee23", - "notes": [], + "notes": [ + { + "longMessage": "Handling this command failure with FAIL_RUN.", + "noteKind": "debugErrorRecovery", + "shortMessage": "Handling this command failure with FAIL_RUN.", + "source": "execution" + } + ], "params": { "location": { "slotName": "C1" 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 index 662d6cf0c4b..0aaa562c15c 100644 --- 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 @@ -1205,7 +1205,14 @@ }, "id": "UUID", "key": "2c37ad797da7df791b57a7843a203e88", - "notes": [], + "notes": [ + { + "longMessage": "Handling this command failure with FAIL_RUN.", + "noteKind": "debugErrorRecovery", + "shortMessage": "Handling this command failure with FAIL_RUN.", + "source": "execution" + } + ], "params": { "configurationParams": { "backLeftNozzle": "A1", diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[5e958b7c98][Flex_X_v2_16_P300MGen2_None_OT2PipetteInFlexProtocol].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[5e958b7c98][Flex_X_v2_16_P300MGen2_None_OT2PipetteInFlexProtocol].json index 75ea09b454d..c76b2aca7f9 100644 --- a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[5e958b7c98][Flex_X_v2_16_P300MGen2_None_OT2PipetteInFlexProtocol].json +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[5e958b7c98][Flex_X_v2_16_P300MGen2_None_OT2PipetteInFlexProtocol].json @@ -1181,7 +1181,14 @@ }, "id": "UUID", "key": "bd403a1c851a75b4b68ce34796d713fa", - "notes": [], + "notes": [ + { + "longMessage": "Handling this command failure with FAIL_RUN.", + "noteKind": "debugErrorRecovery", + "shortMessage": "Handling this command failure with FAIL_RUN.", + "source": "execution" + } + ], "params": { "liquidPresenceDetection": false, "mount": "left", diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[604023f7f1][Flex_X_v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol3].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[604023f7f1][Flex_X_v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol3].json index 24e88e5454e..0de0eff0022 100644 --- a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[604023f7f1][Flex_X_v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol3].json +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[604023f7f1][Flex_X_v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol3].json @@ -121,7 +121,14 @@ }, "id": "UUID", "key": "a3a7eed460d8d94a91747f23820a180d", - "notes": [], + "notes": [ + { + "longMessage": "Handling this command failure with FAIL_RUN.", + "noteKind": "debugErrorRecovery", + "shortMessage": "Handling this command failure with FAIL_RUN.", + "source": "execution" + } + ], "params": { "location": { "slotName": "C3" 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 index a59e4a3176f..2c3d142321b 100644 --- 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 @@ -2366,7 +2366,14 @@ }, "id": "UUID", "key": "4b1d27a6f17f312dd76668f0c48ed406", - "notes": [], + "notes": [ + { + "longMessage": "Handling this command failure with FAIL_RUN.", + "noteKind": "debugErrorRecovery", + "shortMessage": "Handling this command failure with FAIL_RUN.", + "source": "execution" + } + ], "params": { "configurationParams": { "backLeftNozzle": "G12", diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[9e56ee92f6][Flex_X_v2_16_P1000_96_GRIP_DropLabwareIntoTrashBin].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[9e56ee92f6][Flex_X_v2_16_P1000_96_GRIP_DropLabwareIntoTrashBin].json index eedcd721687..8d4e3a960dd 100644 --- a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[9e56ee92f6][Flex_X_v2_16_P1000_96_GRIP_DropLabwareIntoTrashBin].json +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[9e56ee92f6][Flex_X_v2_16_P1000_96_GRIP_DropLabwareIntoTrashBin].json @@ -1350,7 +1350,14 @@ }, "id": "UUID", "key": "4cca9753dc59d176eee1522349363a75", - "notes": [], + "notes": [ + { + "longMessage": "Handling this command failure with FAIL_RUN.", + "noteKind": "debugErrorRecovery", + "shortMessage": "Handling this command failure with FAIL_RUN.", + "source": "execution" + } + ], "params": { "labwareId": "UUID", "newLocation": { diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[ac886d7768][Flex_S_v2_15_P1000_96_GRIP_HS_MB_TC_TM_IDTXgen96Part1to3].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[ac886d7768][Flex_S_v2_15_P1000_96_GRIP_HS_MB_TC_TM_IDTXgen96Part1to3].json index 25cba8c59b8..ef9acd1b1a3 100644 --- a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[ac886d7768][Flex_S_v2_15_P1000_96_GRIP_HS_MB_TC_TM_IDTXgen96Part1to3].json +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[ac886d7768][Flex_S_v2_15_P1000_96_GRIP_HS_MB_TC_TM_IDTXgen96Part1to3].json @@ -15103,7 +15103,14 @@ }, "id": "UUID", "key": "c3eacf39e9a35058cac9f69100549344", - "notes": [], + "notes": [ + { + "longMessage": "Handling this command failure with FAIL_RUN.", + "noteKind": "debugErrorRecovery", + "shortMessage": "Handling this command failure with FAIL_RUN.", + "source": "execution" + } + ], "params": { "forceDirect": false, "labwareId": "UUID", 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 index d70c634dcc6..c8389b97d75 100644 --- 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 @@ -2351,7 +2351,14 @@ }, "id": "UUID", "key": "4b1d27a6f17f312dd76668f0c48ed406", - "notes": [], + "notes": [ + { + "longMessage": "Handling this command failure with FAIL_RUN.", + "noteKind": "debugErrorRecovery", + "shortMessage": "Handling this command failure with FAIL_RUN.", + "source": "execution" + } + ], "params": { "configurationParams": { "backLeftNozzle": "A1", diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[b777168ac1][Flex_S_v2_19_Illumina_Stranded_total_RNA_Ribo_Zero].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[b777168ac1][Flex_S_v2_19_Illumina_Stranded_total_RNA_Ribo_Zero].json index e542e8191b2..7005e6011ab 100644 --- a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[b777168ac1][Flex_S_v2_19_Illumina_Stranded_total_RNA_Ribo_Zero].json +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[b777168ac1][Flex_S_v2_19_Illumina_Stranded_total_RNA_Ribo_Zero].json @@ -4341,7 +4341,14 @@ }, "id": "UUID", "key": "bccdb28e967f574dfbe472004101d7f9", - "notes": [], + "notes": [ + { + "longMessage": "Handling this command failure with FAIL_RUN.", + "noteKind": "debugErrorRecovery", + "shortMessage": "Handling this command failure with FAIL_RUN.", + "source": "execution" + } + ], "params": { "displayName": "Index Anchors", "loadName": "eppendorf_96_wellplate_150ul", 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 index 13e42d0bd8b..1149640d8b1 100644 --- 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 @@ -1220,7 +1220,14 @@ }, "id": "UUID", "key": "2c37ad797da7df791b57a7843a203e88", - "notes": [], + "notes": [ + { + "longMessage": "Handling this command failure with FAIL_RUN.", + "noteKind": "debugErrorRecovery", + "shortMessage": "Handling this command failure with FAIL_RUN.", + "source": "execution" + } + ], "params": { "configurationParams": { "backLeftNozzle": "G12", diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[e0b0133ffb][pl_Illumina_Stranded_total_RNA_Ribo_Zero_protocol].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[e0b0133ffb][pl_Illumina_Stranded_total_RNA_Ribo_Zero_protocol].json index 2de55429a53..b22e56cb8ed 100644 --- a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[e0b0133ffb][pl_Illumina_Stranded_total_RNA_Ribo_Zero_protocol].json +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[e0b0133ffb][pl_Illumina_Stranded_total_RNA_Ribo_Zero_protocol].json @@ -39047,7 +39047,14 @@ }, "id": "UUID", "key": "f524340032354f66bf69110d530e98ad", - "notes": [], + "notes": [ + { + "longMessage": "Handling this command failure with FAIL_RUN.", + "noteKind": "debugErrorRecovery", + "shortMessage": "Handling this command failure with FAIL_RUN.", + "source": "execution" + } + ], "params": { "labwareId": "UUID", "newLocation": { diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[ed1e64c539][Flex_X_v2_16_NO_PIPETTES_TM_ModuleInCol2].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[ed1e64c539][Flex_X_v2_16_NO_PIPETTES_TM_ModuleInCol2].json index 5c1d9a41364..368bbe05d9b 100644 --- a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[ed1e64c539][Flex_X_v2_16_NO_PIPETTES_TM_ModuleInCol2].json +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[ed1e64c539][Flex_X_v2_16_NO_PIPETTES_TM_ModuleInCol2].json @@ -32,7 +32,14 @@ }, "id": "UUID", "key": "8511b05ba5565bf0e6dcccd800e2ee23", - "notes": [], + "notes": [ + { + "longMessage": "Handling this command failure with FAIL_RUN.", + "noteKind": "debugErrorRecovery", + "shortMessage": "Handling this command failure with FAIL_RUN.", + "source": "execution" + } + ], "params": { "location": { "slotName": "C2" diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f24bb0b4d9][Flex_S_v2_15_P1000_96_GRIP_HS_MB_TC_TM_IlluminaDNAPrep96PART3].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f24bb0b4d9][Flex_S_v2_15_P1000_96_GRIP_HS_MB_TC_TM_IlluminaDNAPrep96PART3].json index 6e5b9d8028b..d1feceae4d0 100644 --- a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f24bb0b4d9][Flex_S_v2_15_P1000_96_GRIP_HS_MB_TC_TM_IlluminaDNAPrep96PART3].json +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f24bb0b4d9][Flex_S_v2_15_P1000_96_GRIP_HS_MB_TC_TM_IlluminaDNAPrep96PART3].json @@ -17824,7 +17824,14 @@ }, "id": "UUID", "key": "7e96139ed2163fa7f870805d0b3d14b6", - "notes": [], + "notes": [ + { + "longMessage": "Handling this command failure with FAIL_RUN.", + "noteKind": "debugErrorRecovery", + "shortMessage": "Handling this command failure with FAIL_RUN.", + "source": "execution" + } + ], "params": { "forceDirect": false, "labwareId": "UUID", diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f5f3b9c5bb][Flex_X_v2_16_P1000_96_TM_ModuleAndWasteChuteConflict].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f5f3b9c5bb][Flex_X_v2_16_P1000_96_TM_ModuleAndWasteChuteConflict].json index 9fbcd62f394..d452cf7ab52 100644 --- a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f5f3b9c5bb][Flex_X_v2_16_P1000_96_TM_ModuleAndWasteChuteConflict].json +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f5f3b9c5bb][Flex_X_v2_16_P1000_96_TM_ModuleAndWasteChuteConflict].json @@ -1255,7 +1255,14 @@ }, "id": "UUID", "key": "c55807b45b6b1d4ea04e12b0ee553f78", - "notes": [], + "notes": [ + { + "longMessage": "Handling this command failure with FAIL_RUN.", + "noteKind": "debugErrorRecovery", + "shortMessage": "Handling this command failure with FAIL_RUN.", + "source": "execution" + } + ], "params": { "location": { "slotName": "D3" diff --git a/api/src/opentrons/protocol_engine/execution/command_executor.py b/api/src/opentrons/protocol_engine/execution/command_executor.py index 1d30b8756d2..e534001ef12 100644 --- a/api/src/opentrons/protocol_engine/execution/command_executor.py +++ b/api/src/opentrons/protocol_engine/execution/command_executor.py @@ -12,6 +12,7 @@ ) from opentrons.protocol_engine.commands.command import SuccessData +from opentrons.protocol_engine.notes import make_error_recovery_debug_note from ..state.state import StateStore from ..resources import ModelUtils, FileProvider @@ -161,6 +162,12 @@ async def execute(self, command_id: str) -> None: elif not isinstance(error, EnumeratedError): error = PythonException(error) + error_recovery_type = error_recovery_policy( + self._state_store.config, + running_command, + None, + ) + note_tracker(make_error_recovery_debug_note(error_recovery_type)) self._action_dispatcher.dispatch( FailCommandAction( error=error, @@ -169,11 +176,7 @@ async def execute(self, command_id: str) -> None: error_id=self._model_utils.generate_id(), failed_at=self._model_utils.get_timestamp(), notes=note_tracker.get_notes(), - type=error_recovery_policy( - self._state_store.config, - running_command, - None, - ), + type=error_recovery_type, ) ) @@ -195,6 +198,12 @@ async def execute(self, command_id: str) -> None: ) else: # The command encountered a defined error. + error_recovery_type = error_recovery_policy( + self._state_store.config, + running_command, + result, + ) + note_tracker(make_error_recovery_debug_note(error_recovery_type)) self._action_dispatcher.dispatch( FailCommandAction( error=result, @@ -203,10 +212,6 @@ async def execute(self, command_id: str) -> None: error_id=result.public.id, failed_at=result.public.createdAt, notes=note_tracker.get_notes(), - type=error_recovery_policy( - self._state_store.config, - running_command, - result, - ), + type=error_recovery_type, ) ) diff --git a/api/src/opentrons/protocol_engine/notes/__init__.py b/api/src/opentrons/protocol_engine/notes/__init__.py index f5b1d8c1a2a..606d75665a4 100644 --- a/api/src/opentrons/protocol_engine/notes/__init__.py +++ b/api/src/opentrons/protocol_engine/notes/__init__.py @@ -1,5 +1,17 @@ """Protocol engine notes module.""" -from .notes import NoteKind, CommandNote, CommandNoteAdder, CommandNoteTracker +from .notes import ( + NoteKind, + CommandNote, + CommandNoteAdder, + CommandNoteTracker, + make_error_recovery_debug_note, +) -__all__ = ["NoteKind", "CommandNote", "CommandNoteAdder", "CommandNoteTracker"] +__all__ = [ + "NoteKind", + "CommandNote", + "CommandNoteAdder", + "CommandNoteTracker", + "make_error_recovery_debug_note", +] diff --git a/api/src/opentrons/protocol_engine/notes/notes.py b/api/src/opentrons/protocol_engine/notes/notes.py index cf381aa4a68..8c349d167cd 100644 --- a/api/src/opentrons/protocol_engine/notes/notes.py +++ b/api/src/opentrons/protocol_engine/notes/notes.py @@ -1,7 +1,10 @@ """Definitions of data and interface shapes for notes.""" -from typing import Union, Literal, Protocol, List +from typing import Union, Literal, Protocol, List, TYPE_CHECKING from pydantic import BaseModel, Field +if TYPE_CHECKING: + from opentrons.protocol_engine.error_recovery_policy import ErrorRecoveryType + NoteKind = Union[Literal["warning", "information"], str] @@ -26,6 +29,20 @@ class CommandNote(BaseModel): ) +def make_error_recovery_debug_note(type: "ErrorRecoveryType") -> CommandNote: + """Return a note for debugging error recovery. + + This is intended to be read by developers and support people, not computers. + """ + message = f"Handling this command failure with {type.name}." + return CommandNote.construct( + noteKind="debugErrorRecovery", + shortMessage=message, + longMessage=message, + source="execution", + ) + + class CommandNoteAdder(Protocol): """The shape of a function that something can use to add a command note.""" diff --git a/robot-server/tests/integration/http_api/runs/test_json_v6_run_failure.tavern.yaml b/robot-server/tests/integration/http_api/runs/test_json_v6_run_failure.tavern.yaml index e89681be0ac..27f894fe411 100644 --- a/robot-server/tests/integration/http_api/runs/test_json_v6_run_failure.tavern.yaml +++ b/robot-server/tests/integration/http_api/runs/test_json_v6_run_failure.tavern.yaml @@ -101,7 +101,7 @@ stages: startedAt: !re_fullmatch "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d+(Z|([+-]\\d{2}:\\d{2}))" completedAt: !re_fullmatch "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d+(Z|([+-]\\d{2}:\\d{2}))" status: failed - notes: [] + notes: !anylist error: id: !anystr errorType: TipNotAttachedError From d7d26f162b3c46ed2cb41792a14174863d765531 Mon Sep 17 00:00:00 2001 From: syao1226 <146495172+syao1226@users.noreply.github.com> Date: Mon, 28 Oct 2024 14:10:56 -0400 Subject: [PATCH 12/81] fix(protocol-designer): update release notes content (#16613) fixes RQA-3426 # Overview Updating the release notes content when users clicked on the the View Release Notes button in Settings page. ## Test Plan and Hands on Testing ## Changelog ## Review requests ## Risk assessment Co-authored-by: shiyaochen --- protocol-designer/src/assets/localization/en/modal.json | 9 ++++----- .../src/organisms/AnnouncementModal/announcements.tsx | 8 +------- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/protocol-designer/src/assets/localization/en/modal.json b/protocol-designer/src/assets/localization/en/modal.json index ebf4e0d9b80..65212e4ba4a 100644 --- a/protocol-designer/src/assets/localization/en/modal.json +++ b/protocol-designer/src/assets/localization/en/modal.json @@ -52,11 +52,10 @@ "body6": "All protocols require {{app}} version 7.3.0 or later to run." }, "redesign": { - "body1": "Welcome to Protocol Designer 9.0.0!", - "body2": "We’re excited to release the new Opentrons Protocol Designer, now with a fresh redesign! Enjoy the same functionality with some powerful new features:", - "body3": "Easily group multiple steps together, name the group, and keep your protocols organized with step grouping.", - "body4": "Add multiple Heater-Shaker Modules and Magnetic Blocks to the deck (Flex only).", - "body5": "All protocols now require Opentrons App version 8.0.0+ to run." + "body1": "Welcome to Protocol Designer 8.2.0!", + "body2": "We’re excited to release the new Opentrons Protocol Designer, now with a fresh redesign! Enjoy the same functionality with the added ability to:", + "body3": "Add multiple Heater-Shaker Modules and Magnetic Blocks to the deck (Flex only).", + "body4": "All protocols now require Opentrons App version 8.0.0+ to run." } }, "labware_selection": { diff --git a/protocol-designer/src/organisms/AnnouncementModal/announcements.tsx b/protocol-designer/src/organisms/AnnouncementModal/announcements.tsx index 38b16bf95aa..b06dad7d704 100644 --- a/protocol-designer/src/organisms/AnnouncementModal/announcements.tsx +++ b/protocol-designer/src/organisms/AnnouncementModal/announcements.tsx @@ -317,19 +317,13 @@ export const useAnnouncements = (): Announcement[] => { {t('announcements.redesign.body3')} - -
  • - - {t('announcements.redesign.body4')} - -
  • }} - i18nKey={'announcements.redesign.body5'} + i18nKey={'announcements.redesign.body4'} /> From e88d6f29c7d331eb30dbb5c2bf5f818f07234705 Mon Sep 17 00:00:00 2001 From: Jethary Alcid <66035149+jerader@users.noreply.github.com> Date: Mon, 28 Oct 2024 14:52:10 -0400 Subject: [PATCH 13/81] feat(protocol-designer): update well order modal (#16594) closes AUTH-975 --- .../src/assets/images/well-order_b2t-l2r.jpg | Bin 0 -> 9464 bytes .../src/assets/images/well-order_b2t-r2l.jpg | Bin 0 -> 9126 bytes .../src/assets/images/well-order_l2r-b2t.jpg | Bin 0 -> 9274 bytes .../src/assets/images/well-order_l2r-t2b.jpg | Bin 0 -> 9159 bytes .../src/assets/images/well-order_r2l-b2t.jpg | Bin 0 -> 8975 bytes .../src/assets/images/well-order_r2l-t2b.jpg | Bin 0 -> 9146 bytes .../src/assets/images/well-order_t2b-l2r.jpg | Bin 0 -> 9481 bytes .../src/assets/images/well-order_t2b-r2l.jpg | Bin 0 -> 9050 bytes .../src/assets/localization/en/shared.json | 15 +- .../WellOrderModal/WellOrderVisualization.tsx | 42 ++++ .../__tests__/WellOrderModal.test.tsx | 44 ++++ .../src/organisms/WellOrderModal/index.tsx | 228 ++++++++++++++++++ protocol-designer/src/organisms/index.ts | 1 + .../PipetteFields/WellsOrderField.tsx | 2 +- 14 files changed, 326 insertions(+), 6 deletions(-) create mode 100644 protocol-designer/src/assets/images/well-order_b2t-l2r.jpg create mode 100644 protocol-designer/src/assets/images/well-order_b2t-r2l.jpg create mode 100644 protocol-designer/src/assets/images/well-order_l2r-b2t.jpg create mode 100644 protocol-designer/src/assets/images/well-order_l2r-t2b.jpg create mode 100644 protocol-designer/src/assets/images/well-order_r2l-b2t.jpg create mode 100644 protocol-designer/src/assets/images/well-order_r2l-t2b.jpg create mode 100644 protocol-designer/src/assets/images/well-order_t2b-l2r.jpg create mode 100644 protocol-designer/src/assets/images/well-order_t2b-r2l.jpg create mode 100644 protocol-designer/src/organisms/WellOrderModal/WellOrderVisualization.tsx create mode 100644 protocol-designer/src/organisms/WellOrderModal/__tests__/WellOrderModal.test.tsx create mode 100644 protocol-designer/src/organisms/WellOrderModal/index.tsx diff --git a/protocol-designer/src/assets/images/well-order_b2t-l2r.jpg b/protocol-designer/src/assets/images/well-order_b2t-l2r.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e65a19f136cafe8f7b02bcb3916a0d5b38094d3a GIT binary patch literal 9464 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 literal 0 HcmV?d00001 diff --git a/protocol-designer/src/assets/images/well-order_l2r-t2b.jpg b/protocol-designer/src/assets/images/well-order_l2r-t2b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab69dc2f3d9d8a0c154f2b329d56c7be834dfdb9 GIT binary patch literal 9159 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 z z;&(#145G`_c6kPi>e<9_Gg!htZw$G(Hf!~iZN`FZ=3IBxcf1*hG#Jo$VB{(#slvZ% zqLbzyJ*Mb+09YUUD>lj3G<(GCF^oNDc$)|pJrFlTD(6-%F*-gU9ue(|c+OZ1*Mrae zZ^}7p05}dnk!Su4V-g#wGXB$eMowNX}F2}D?TQdO7T+r*SY!zuy>yp6)%ZbbK=wBJJ6gcx>tq8+TG`S z_*Tf6FX{8UgsZ63ndT&-@|WK30r{bdCV}?5Q53|UT9C!6ojvSTd2O8ligguZ8j*zo z*KdS0htwRY(A$a!0JZRwv`fh$3ilEB!F}-TtZr$30#AXLvH|!KMe7X*X??wJl*(Mo z?2v$Kr#G(;CahVg5!R7!Stx^{lpg)t@Kgw;IOO@Kfkf7hHz6jUhu$LBK!y+qIuw=a zCASr!_(A}IoIPe0x5Ocv_AqOa+j28(i}X{krQmdE!U>)FgmhNHznv8w`GUbeaC8GGNo zaBTUm$}pcI<;dZV;O;-`4}b{X{YYc_yNK46!5g!m9=`-0N!x7;pc(|`*QIf_R{zk3 z4R)uM6Idml7r*9o(l91j!S>XHjb2Hg>-9QV-{bvWFzS2b7=j*IPubn@3(^TzOVhO! zv=}g2glCe<3s%io@f|9fXupPILvY8WX?HG9MP3O%lPK5*gi{n7rQi8WjefUyoH}$% zzTs|IK4wScHCt~94>77A+7SAoEf?}#qT(!biL~4f%K*+F8`|UsJDfMJt@JghRql$uR6ci~OS+rHf=Is?=^KSW%px3c9zI)w_oluq&tDKrT! z;|VYH5NWev87Yf!z=~odPJi6~v#_gnaCp@CKEEJd!>(&OdRBwILF#e}hl^*ls}2ZO zrDoG}(zZ3#fc{VYxteu6ZPszsByCNR?|Zn^EFx{Fc5yE9>}iMGw0XK+T|xj4z*c_? z(&=NgFEXZ=w8>N+$r8q4BT;&qNK4)TQjd;?WLr{+KVWg zCOC2a>g4O1Yt)?lXj-hEIgwX*g0w^GGa6RQ8$+=}3$hP@VocmF;Zo=0nY+x%-m2ru zo7U1Rf->q%bQIx>yVq7RD9v2$njulI R1kbO+u%Bw#`td!?{s*AgqlW+h literal 0 HcmV?d00001 diff --git a/protocol-designer/src/assets/images/well-order_r2l-b2t.jpg b/protocol-designer/src/assets/images/well-order_r2l-b2t.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fccced73986e96e330b061534060dbe02e7b66d3 GIT binary patch literal 8975 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 a*kmNIPs%-B{VP78B(P9B{burh{=Wcv-ef@l literal 0 HcmV?d00001 diff --git a/protocol-designer/src/assets/images/well-order_r2l-t2b.jpg b/protocol-designer/src/assets/images/well-order_r2l-t2b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ee0a7719b63130f89f9752323f043a79710c4951 GIT binary patch literal 9146 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 Lrky|G@A>}&ll-!g literal 0 HcmV?d00001 diff --git a/protocol-designer/src/assets/images/well-order_t2b-l2r.jpg b/protocol-designer/src/assets/images/well-order_t2b-l2r.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ae3cb632f6281dfd81ced2954c41cf2e89c84b5 GIT binary patch literal 9481 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.", "create_a_protocol": "Create a protocol", "create_new": "Create new", "destination_well": "Destination Well", "developer_ff": "Developer feature flags", "done": "Done", - "pipette": "Pipette", "edit_existing": "Edit existing protocol", "edit_instruments": "Edit Instruments", "edit_pipette": "Edit Pipette", "edit_protocol_metadata": "Edit protocol metadata", + "edit_well_order": "Edit well order", "edit": "edit", "eight_channel": "8-Channel", "error_boundary_pd_app_description": "You need to reload the app. Contact support with the following error message:", @@ -96,24 +98,29 @@ "not_json": "Incompatible file type", "one_channel": "1-Channel", "only_tiprack": "Incompatible file type", + "opentrons_collects_data": "In order to improve our products, Opentrons would like to collect data related to your use of Protocol Designer. With your consent, Opentrons will collect and store analytics and session data, including through the use of cookies and similar technologies, solely for the purpose enhancing our products.", "opentrons_flex": "Opentrons Flex", "opentrons": "Opentrons", "ot2": "Opentrons OT-2", "overwrite_labware": "Overwrite labware", "overwrite": "Click Overwrite to replace the existing labware with the new labware.", + "pipette": "Pipette", "pd_version": "Protocol designer version", + "primary_order": "Primary order", "privacy": "Privacy", "protocol_designer": "Protocol Designer", "re_export": "To use this definition, use Labware Creator to give it a unique load name and display name.", - "remove": "remove", "reject": "Reject", "reload_app": "Reload app", + "remove": "remove", "reset_hints_and_tips": "Reset all hints and tips notifications", "reset_hints": "Reset hints", + "reset_to_default": "Reset to default", "resize_your_browser": "Resize your browser to at least 600px wide and 650px tall to continue editing your protocol", "review_our_privacy_policy": "You can adjust this setting at any time by clicking on the settings icon. Find detailed information in our privacy policy.", "right": "Right", "save": "Save", + "secondary_order": "Secondary order", "settings": "Settings", "shared_display_name": "Shared display name: ", "shared_load_name": "Shared load name: ", @@ -124,7 +131,6 @@ "stagingArea": "Staging area", "step_count": "Step {{current}}", "step": "Step {{current}} / {{max}}", - "consent_to_eula": "By using Protocol Designer, you consent to the Opentrons EULA.", "temperaturemoduletype": "Temperature Module", "thermocyclermoduletype": "Thermocycler Module", "trashBin": "Trash Bin", @@ -138,7 +144,6 @@ "wasteChuteAndStagingArea": "Waste chute and staging area slot", "we_are_improving": "In order to improve our products, Opentrons would like to collect data related to your use of Protocol Designer. With your consent, Opentrons will collect and store analytics and session data, including through the use of cookies and similar technologies, solely for the purpose enhancing our products. Find detailed information in our privacy policy. By using Protocol Designer, you consent to the Opentrons EULA.", "welcome": "Welcome to Protocol Designer!", - "opentrons_collects_data": "In order to improve our products, Opentrons would like to collect data related to your use of Protocol Designer. With your consent, Opentrons will collect and store analytics and session data, including through the use of cookies and similar technologies, solely for the purpose enhancing our products.", "yes": "Yes", "your_screen_is_too_small": "Your browser size is too small" } diff --git a/protocol-designer/src/organisms/WellOrderModal/WellOrderVisualization.tsx b/protocol-designer/src/organisms/WellOrderModal/WellOrderVisualization.tsx new file mode 100644 index 00000000000..e73f68a174b --- /dev/null +++ b/protocol-designer/src/organisms/WellOrderModal/WellOrderVisualization.tsx @@ -0,0 +1,42 @@ +import b2t_l2r from '../../assets/images/well-order_b2t-l2r.jpg' +import b2t_r2l from '../../assets/images/well-order_b2t-r2l.jpg' +import l2r_b2t from '../../assets/images/well-order_l2r-b2t.jpg' +import l2r_t2b from '../../assets/images/well-order_l2r-t2b.jpg' +import r2l_b2t from '../../assets/images/well-order_r2l-b2t.jpg' +import r2l_t2b from '../../assets/images/well-order_r2l-t2b.jpg' +import t2b_l2r from '../../assets/images/well-order_t2b-l2r.jpg' +import t2b_r2l from '../../assets/images/well-order_t2b-r2l.jpg' + +import type { WellOrderOption } from '../../form-types' + +interface WellOrderVisualizationProps { + firstValue: WellOrderOption + secondValue: WellOrderOption +} + +const imageMap: Record = { + b2t_l2r, + b2t_r2l, + l2r_b2t, + l2r_t2b, + r2l_b2t, + r2l_t2b, + t2b_l2r, + t2b_r2l, +} + +export function WellOrderVisualization( + props: WellOrderVisualizationProps +): JSX.Element { + const { firstValue, secondValue } = props + const imageKey = `${firstValue}_${secondValue}` + + return ( + {`${firstValue} + ) +} diff --git a/protocol-designer/src/organisms/WellOrderModal/__tests__/WellOrderModal.test.tsx b/protocol-designer/src/organisms/WellOrderModal/__tests__/WellOrderModal.test.tsx new file mode 100644 index 00000000000..798bd8abc89 --- /dev/null +++ b/protocol-designer/src/organisms/WellOrderModal/__tests__/WellOrderModal.test.tsx @@ -0,0 +1,44 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest' +import { fireEvent, screen } from '@testing-library/react' +import { i18n } from '../../../assets/localization' +import { renderWithProviders } from '../../../__testing-utils__' +import { WellOrderModal } from '..' + +const render = (props: React.ComponentProps) => { + return renderWithProviders(, { + i18nInstance: i18n, + })[0] +} + +describe('WellOrderModal', () => { + let props: React.ComponentProps + + beforeEach(() => { + props = { + isOpen: true, + closeModal: vi.fn(), + prefix: 'aspirate', + firstName: 'aspirate_wellOrder_l', + secondName: 'aspirate_wellOrder_r', + firstValue: null, + secondValue: null, + updateValues: vi.fn(), + } + }) + it('renders all the text and buttons for the modal with the default fields', () => { + render(props) + screen.getByText('Edit well order') + screen.getByText('Change how the robot moves from well to well.') + screen.getByText('Primary order') + screen.getByText('then') + screen.getByText('Secondary order') + fireEvent.click(screen.getByText('Reset to default')) + expect(props.closeModal).toHaveBeenCalled() + expect(props.updateValues).toHaveBeenCalled() + fireEvent.click(screen.getByText('Cancel')) + expect(props.closeModal).toHaveBeenCalled() + fireEvent.click(screen.getByText('Save')) + expect(props.closeModal).toHaveBeenCalled() + expect(props.updateValues).toHaveBeenCalled() + }) +}) diff --git a/protocol-designer/src/organisms/WellOrderModal/index.tsx b/protocol-designer/src/organisms/WellOrderModal/index.tsx new file mode 100644 index 00000000000..929bc534460 --- /dev/null +++ b/protocol-designer/src/organisms/WellOrderModal/index.tsx @@ -0,0 +1,228 @@ +import { createPortal } from 'react-dom' +import { useState, useEffect } from 'react' +import { useTranslation } from 'react-i18next' +import { + Modal, + Flex, + Btn, + JUSTIFY_SPACE_BETWEEN, + SecondaryButton, + PrimaryButton, + SPACING, + StyledText, + DIRECTION_COLUMN, + DropdownMenu, + ALIGN_CENTER, +} from '@opentrons/components' +import { getMainPagePortalEl } from '../../components/portals/MainPageModalPortal' +import { BUTTON_LINK_STYLE } from '../../atoms' +import { WellOrderVisualization } from './WellOrderVisualization' +import type { WellOrderOption } from '../../form-types' + +const DEFAULT_FIRST: WellOrderOption = 't2b' +const DEFAULT_SECOND: WellOrderOption = 'l2r' +const VERTICAL_VALUES: WellOrderOption[] = ['t2b', 'b2t'] +const HORIZONTAL_VALUES: WellOrderOption[] = ['l2r', 'r2l'] +const WELL_ORDER_VALUES: WellOrderOption[] = [ + ...VERTICAL_VALUES, + ...HORIZONTAL_VALUES, +] + +export interface WellOrderModalProps { + isOpen: boolean + closeModal: () => void + prefix: 'aspirate' | 'dispense' | 'mix' + firstName: string + secondName: string + firstValue?: WellOrderOption | null + secondValue?: WellOrderOption | null + updateValues: ( + firstValue?: WellOrderOption | null, + secondValue?: WellOrderOption | null + ) => void +} + +interface State { + firstValue: WellOrderOption + secondValue: WellOrderOption +} + +export function WellOrderModal(props: WellOrderModalProps): JSX.Element | null { + const { t } = useTranslation(['form', 'modal', 'shared']) + const { + isOpen, + closeModal, + updateValues, + firstValue, + secondValue, + firstName, + secondName, + } = props + const getInitialFirstValues = (): { + initialFirstValue: WellOrderOption + initialSecondValue: WellOrderOption + } => { + if (firstValue == null || secondValue == null) { + return { + initialFirstValue: DEFAULT_FIRST, + initialSecondValue: DEFAULT_SECOND, + } + } + return { + initialFirstValue: firstValue, + initialSecondValue: secondValue, + } + } + const { initialFirstValue, initialSecondValue } = getInitialFirstValues() + + const [wellOrder, setWellOrder] = useState({ + firstValue: initialFirstValue, + secondValue: initialSecondValue, + }) + + useEffect(() => { + setWellOrder({ + firstValue: initialFirstValue, + secondValue: initialSecondValue, + }) + }, [initialFirstValue, initialSecondValue]) + + const applyChanges = (): void => { + updateValues(wellOrder.firstValue, wellOrder.secondValue) + } + + const handleReset = (): void => { + setWellOrder({ firstValue: DEFAULT_FIRST, secondValue: DEFAULT_SECOND }) + applyChanges() + closeModal() + } + + const handleCancel = (): void => { + const { initialFirstValue, initialSecondValue } = getInitialFirstValues() + setWellOrder({ + firstValue: initialFirstValue, + secondValue: initialSecondValue, + }) + closeModal() + } + + const handleDone = (): void => { + applyChanges() + closeModal() + } + + const makeOnChange = (ordinality: 'first' | 'second') => ( + value: string + ): void => { + let nextState: State = { ...wellOrder, [`${ordinality}Value`]: value } + + if (ordinality === 'first') { + if ( + VERTICAL_VALUES.includes(value as WellOrderOption) && + VERTICAL_VALUES.includes(wellOrder.secondValue) + ) { + nextState = { ...nextState, secondValue: HORIZONTAL_VALUES[0] } + } else if ( + HORIZONTAL_VALUES.includes(value as WellOrderOption) && + HORIZONTAL_VALUES.includes(wellOrder.secondValue) + ) { + nextState = { ...nextState, secondValue: VERTICAL_VALUES[0] } + } + } + setWellOrder(nextState) + } + + const isSecondOptionDisabled = (value: WellOrderOption): boolean => { + if (VERTICAL_VALUES.includes(wellOrder.firstValue)) { + return VERTICAL_VALUES.includes(value) + } else if (HORIZONTAL_VALUES.includes(wellOrder.firstValue)) { + return HORIZONTAL_VALUES.includes(value) + } else { + return false + } + } + + if (!isOpen) return null + + return createPortal( + + + {t('shared:reset_to_default')} + + + + {t('shared:cancel')} + + + {t('shared:save')} + + + + } + > + + + + + {t('shared:change_robot_movement')} + + ({ + value, + name: t(`step_edit_form.field.well_order.option.${value}`), + }))} + /> + + + + {t('modal:well_order.then')} + + ({ + value, + name: t(`step_edit_form.field.well_order.option.${value}`), + disabled: isSecondOptionDisabled(value), + }))} + /> + + + + + , + getMainPagePortalEl() + ) +} diff --git a/protocol-designer/src/organisms/index.ts b/protocol-designer/src/organisms/index.ts index 0fd6e481e3e..a8581783e76 100644 --- a/protocol-designer/src/organisms/index.ts +++ b/protocol-designer/src/organisms/index.ts @@ -16,3 +16,4 @@ export * from './ProtocolMetadataNav' export * from './SelectWellsModal' export * from './SlotDetailsContainer' export * from './SlotInformation' +export * from './WellOrderModal' diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/WellsOrderField.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/WellsOrderField.tsx index a4152db7d4b..742fcbaf0ea 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/WellsOrderField.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/WellsOrderField.tsx @@ -10,7 +10,7 @@ import { DIRECTION_COLUMN, COLORS, } from '@opentrons/components' -import { WellOrderModal } from '../../../../../components/StepEditForm/fields/WellOrderField/WellOrderModal' +import { WellOrderModal } from '../../../../../organisms' import type { WellOrderOption } from '../../../../../form-types' import type { FieldProps } from '../types' From 6dbc215b2e5e3b8cd1038a5568def7c1afc197bb Mon Sep 17 00:00:00 2001 From: Nick Diehl <47604184+ncdiehl11@users.noreply.github.com> Date: Mon, 28 Oct 2024 15:28:10 -0400 Subject: [PATCH 14/81] feat(protocol-designer): update logic for form error rendering (#16611) AUTH-989 --- .../molecules/InputStepFormField/index.tsx | 4 +- .../ToggleExpandStepFormField/index.tsx | 1 + .../molecules/ToggleStepFormField/index.tsx | 8 +- .../src/organisms/Alerts/FormAlerts.tsx | 14 +++- .../StepForm/StepFormToolbox.tsx | 3 + .../StepTools/HeaterShakerTools/index.tsx | 29 ++++++- .../StepForm/StepTools/PauseTools/index.tsx | 26 +++++- .../ThermocyclerTools/ProfileSettings.tsx | 27 +++++- .../ThermocyclerTools/ThermocyclerState.tsx | 29 ++++++- .../StepTools/ThermocyclerTools/index.tsx | 25 +++++- .../StepTools/__tests__/MagnetTools.test.tsx | 1 + .../__tests__/TemperatureTools.test.tsx | 1 + .../StepForm/__tests__/utils.test.ts | 76 +++++++++++++++++ .../Designer/ProtocolSteps/StepForm/types.ts | 3 + .../Designer/ProtocolSteps/StepForm/utils.ts | 40 +++++++++ .../Designer/ProtocolSteps/StepSummary.tsx | 9 +- .../src/steplist/formLevel/errors.ts | 84 ++++++++++++++++++- .../src/steplist/formLevel/index.ts | 5 +- 18 files changed, 362 insertions(+), 23 deletions(-) diff --git a/protocol-designer/src/molecules/InputStepFormField/index.tsx b/protocol-designer/src/molecules/InputStepFormField/index.tsx index 93dde06295f..1f5e5223f0b 100644 --- a/protocol-designer/src/molecules/InputStepFormField/index.tsx +++ b/protocol-designer/src/molecules/InputStepFormField/index.tsx @@ -8,6 +8,7 @@ interface InputStepFormFieldProps extends FieldProps { padding?: string showTooltip?: boolean caption?: string + formLevelError?: string | null } export function InputStepFormField( @@ -26,6 +27,7 @@ export function InputStepFormField( padding = SPACING.spacing16, tooltipContent, caption, + formLevelError, ...otherProps } = props const { t } = useTranslation('tooltip') @@ -40,7 +42,7 @@ export function InputStepFormField( title={title} caption={caption} name={name} - error={errorToShow} + error={formLevelError ?? errorToShow} onBlur={onFieldBlur} onFocus={onFieldFocus} onChange={e => { diff --git a/protocol-designer/src/molecules/ToggleExpandStepFormField/index.tsx b/protocol-designer/src/molecules/ToggleExpandStepFormField/index.tsx index 05e3883e575..3bb253dca9d 100644 --- a/protocol-designer/src/molecules/ToggleExpandStepFormField/index.tsx +++ b/protocol-designer/src/molecules/ToggleExpandStepFormField/index.tsx @@ -26,6 +26,7 @@ interface ToggleExpandStepFormFieldProps extends FieldProps { offLabel?: string caption?: string toggleElement?: 'toggle' | 'checkbox' + formLevelError?: string | null } export function ToggleExpandStepFormField( props: ToggleExpandStepFormFieldProps diff --git a/protocol-designer/src/molecules/ToggleStepFormField/index.tsx b/protocol-designer/src/molecules/ToggleStepFormField/index.tsx index 9ce244c7d57..eaa7c371310 100644 --- a/protocol-designer/src/molecules/ToggleStepFormField/index.tsx +++ b/protocol-designer/src/molecules/ToggleStepFormField/index.tsx @@ -52,13 +52,16 @@ export function ToggleStepFormField( {title} + {tooltipContent != null ? ( + {tooltipContent} + ) : null} {isSelected ? onLabel : offLabel} @@ -76,9 +79,6 @@ export function ToggleStepFormField( - {tooltipContent != null ? ( - {tooltipContent} - ) : null} ) } diff --git a/protocol-designer/src/organisms/Alerts/FormAlerts.tsx b/protocol-designer/src/organisms/Alerts/FormAlerts.tsx index d08e25e1ec6..7897d86782d 100644 --- a/protocol-designer/src/organisms/Alerts/FormAlerts.tsx +++ b/protocol-designer/src/organisms/Alerts/FormAlerts.tsx @@ -121,10 +121,16 @@ function FormAlertsComponent(props: FormAlertsProps): JSX.Element | null { ) const formErrors = [ - ...visibleFormErrors.map(error => ({ - title: error.title, - description: error.body || null, - })), + ...visibleFormErrors.reduce((acc, error) => { + return error.showAtForm ?? true + ? { + ...acc, + title: error.title, + description: error.body || null, + showAtForm: error.showAtForm ?? true, + } + : acc + }, []), ...visibleDynamicFieldFormErrors.map(error => ({ title: error.title, description: error.body || null, diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx index d18bee31915..2f7ae836581 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx @@ -254,6 +254,9 @@ export function StepFormToolbox(props: StepFormToolboxProps): JSX.Element { focusHandlers, toolboxStep, visibleFormErrors, + showFormErrors: showFormErrorsAndWarnings, + focusedField, + setShowFormErrorsAndWarnings, }} /> diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/HeaterShakerTools/index.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/HeaterShakerTools/index.tsx index 0d1213db9f0..6a0315bb3bf 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/HeaterShakerTools/index.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/HeaterShakerTools/index.tsx @@ -16,10 +16,17 @@ import { ToggleExpandStepFormField, ToggleStepFormField, } from '../../../../../../molecules' +import { getFormErrorsMappedToField, getFormLevelError } from '../../utils' import type { StepFormProps } from '../../types' export function HeaterShakerTools(props: StepFormProps): JSX.Element { - const { propsForFields, formData } = props + const { + propsForFields, + formData, + showFormErrors = false, + focusedField = null, + visibleFormErrors, + } = props const { t } = useTranslation(['application', 'form', 'protocol_steps']) const moduleLabwareOptions = useSelector(getHeaterShakerLabwareOptions) @@ -29,6 +36,8 @@ export function HeaterShakerTools(props: StepFormProps): JSX.Element { } }, []) + const mappedErrorsToField = getFormErrorsMappedToField(visibleFormErrors) + return ( {moduleLabwareOptions.length > 1 ? ( @@ -82,6 +91,12 @@ export function HeaterShakerTools(props: StepFormProps): JSX.Element { offLabel={t( 'form:step_edit_form.field.heaterShaker.temperature.toggleOff' )} + formLevelError={getFormLevelError( + showFormErrors, + 'targetHeaterShakerTemperature', + mappedErrorsToField, + focusedField + )} /> diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/PauseTools/index.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/PauseTools/index.tsx index 1ab9d90ce44..98175175218 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/PauseTools/index.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/PauseTools/index.tsx @@ -28,12 +28,19 @@ import { import { InputStepFormField } from '../../../../../../molecules' import { getInitialDeckSetup } from '../../../../../../step-forms/selectors' import { selectors as uiModuleSelectors } from '../../../../../../ui/modules' +import { getFormErrorsMappedToField, getFormLevelError } from '../../utils' import type { ChangeEvent } from 'react' import type { StepFormProps } from '../../types' export function PauseTools(props: StepFormProps): JSX.Element { - const { propsForFields } = props + const { + propsForFields, + visibleFormErrors, + focusedField, + showFormErrors, + setShowFormErrorsAndWarnings, + } = props const tempModuleLabwareOptions = useSelector( uiModuleSelectors.getTemperatureLabwareOptions @@ -75,6 +82,8 @@ export function PauseTools(props: StepFormProps): JSX.Element { const { pauseAction } = props.formData + const mappedErrorsToField = getFormErrorsMappedToField(visibleFormErrors) + return ( <> @@ -88,6 +97,7 @@ export function PauseTools(props: StepFormProps): JSX.Element { ) => { propsForFields.pauseAction.updateValue(e.currentTarget.value) + setShowFormErrorsAndWarnings?.(false) }} buttonLabel={t( 'form:step_edit_form.field.pauseAction.options.untilResume' @@ -101,6 +111,7 @@ export function PauseTools(props: StepFormProps): JSX.Element { ) => { propsForFields.pauseAction.updateValue(e.currentTarget.value) + setShowFormErrorsAndWarnings?.(false) }} buttonLabel={t( 'form:step_edit_form.field.pauseAction.options.untilTime' @@ -112,6 +123,7 @@ export function PauseTools(props: StepFormProps): JSX.Element { ) => { propsForFields.pauseAction.updateValue(e.currentTarget.value) + setShowFormErrorsAndWarnings?.(false) }} buttonLabel={t( 'form:step_edit_form.field.pauseAction.options.untilTemperature' @@ -146,6 +158,12 @@ export function PauseTools(props: StepFormProps): JSX.Element { units={t('application:units.time_hms')} padding="0" showTooltip={false} + formLevelError={getFormLevelError( + showFormErrors, + 'pauseTime', + mappedErrorsToField, + focusedField + )} /> @@ -184,6 +202,12 @@ export function PauseTools(props: StepFormProps): JSX.Element { errorToShow={propsForFields.pauseTemperature.errorToShow} padding="0" showTooltip={false} + formLevelError={getFormLevelError( + showFormErrors, + 'pauseTemperature', + mappedErrorsToField, + focusedField + )} /> diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/ThermocyclerTools/ProfileSettings.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/ThermocyclerTools/ProfileSettings.tsx index f31f77f00c4..59d94469fd1 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/ThermocyclerTools/ProfileSettings.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/ThermocyclerTools/ProfileSettings.tsx @@ -6,14 +6,27 @@ import { StyledText, } from '@opentrons/components' import { InputStepFormField } from '../../../../../../molecules' +import { getFormErrorsMappedToField, getFormLevelError } from '../../utils' +import type { StepFormErrors } from '../../../../../../steplist' import type { FieldPropsByName } from '../../types' interface ProfileSettingsProps { propsForFields: FieldPropsByName + showFormErrors: boolean + visibleFormErrors: StepFormErrors + focusedField?: string | null } export function ProfileSettings(props: ProfileSettingsProps): JSX.Element { - const { propsForFields } = props + const { + propsForFields, + showFormErrors, + visibleFormErrors, + focusedField, + } = props + + const mappedErrorsToField = getFormErrorsMappedToField(visibleFormErrors) + const { i18n, t } = useTranslation(['application', 'form']) return ( ) diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/ThermocyclerTools/ThermocyclerState.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/ThermocyclerTools/ThermocyclerState.tsx index a5f1676f2c8..0b00c140f65 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/ThermocyclerTools/ThermocyclerState.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/ThermocyclerTools/ThermocyclerState.tsx @@ -10,8 +10,10 @@ import { ToggleExpandStepFormField, ToggleStepFormField, } from '../../../../../../molecules' +import { getFormErrorsMappedToField, getFormLevelError } from '../../utils' import type { FormData } from '../../../../../../form-types' +import type { StepFormErrors } from '../../../../../../steplist' import type { FieldPropsByName } from '../../types' interface ThermocyclerStateProps { @@ -19,12 +21,25 @@ interface ThermocyclerStateProps { formData: FormData propsForFields: FieldPropsByName isHold?: boolean + visibleFormErrors: StepFormErrors + showFormErrors?: boolean + focusedField?: string | null } export function ThermocyclerState(props: ThermocyclerStateProps): JSX.Element { - const { title, propsForFields, formData, isHold = false } = props + const { + title, + propsForFields, + formData, + isHold = false, + visibleFormErrors, + showFormErrors = true, + focusedField, + } = props const { i18n, t } = useTranslation(['application', 'form']) + const mappedErrorsToField = getFormErrorsMappedToField(visibleFormErrors) + const { blockFieldActive, lidFieldActive, @@ -68,6 +83,12 @@ export function ThermocyclerState(props: ThermocyclerStateProps): JSX.Element { isSelected={formData[blockFieldActive] === true} onLabel={t('form:step_edit_form.field.heaterShaker.shaker.toggleOn')} offLabel={t('form:step_edit_form.field.heaterShaker.shaker.toggleOff')} + formLevelError={getFormLevelError( + showFormErrors, + blockTempField, + mappedErrorsToField, + focusedField + )} /> ( @@ -42,6 +50,7 @@ export function ThermocyclerTools(props: StepFormProps): JSX.Element { onChange={() => { setContentType('thermocyclerState') propsForFields.thermocyclerFormType.updateValue('thermocyclerState') + setShowFormErrorsAndWarnings?.(false) }} isSelected={contentType === 'thermocyclerState'} /> @@ -56,6 +65,7 @@ export function ThermocyclerTools(props: StepFormProps): JSX.Element { propsForFields.thermocyclerFormType.updateValue( 'thermocyclerProfile' ) + setShowFormErrorsAndWarnings?.(false) }} isSelected={contentType === 'thermocyclerProfile'} /> @@ -67,12 +77,20 @@ export function ThermocyclerTools(props: StepFormProps): JSX.Element { title={t('step_edit_form.field.thermocyclerState.state')} propsForFields={propsForFields} formData={formData} + showFormErrors={showFormErrors} + visibleFormErrors={visibleFormErrors} + focusedField={focusedField} /> ) } else { return ( - + ) diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/__tests__/MagnetTools.test.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/__tests__/MagnetTools.test.tsx index c6cb5f13383..368bfb1d1ee 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/__tests__/MagnetTools.test.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/__tests__/MagnetTools.test.tsx @@ -69,6 +69,7 @@ describe('MagnetTools', () => { value: 10, }, }, + showFormErrors: false, } vi.mocked(getMagneticLabwareOptions).mockReturnValue([ { name: 'mock labware in mock module in slot abc', value: 'mockValue' }, diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/__tests__/TemperatureTools.test.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/__tests__/TemperatureTools.test.tsx index 8edd87af457..498e6b2e1db 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/__tests__/TemperatureTools.test.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/__tests__/TemperatureTools.test.tsx @@ -71,6 +71,7 @@ describe('TemperatureTools', () => { value: null, }, }, + showFormErrors: false, } vi.mocked(getTemperatureModuleIds).mockReturnValue(['mockId']) diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/__tests__/utils.test.ts b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/__tests__/utils.test.ts index 3d3e3a47393..6007eae6d0c 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/__tests__/utils.test.ts +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/__tests__/utils.test.ts @@ -6,8 +6,24 @@ import { import { capitalizeFirstLetter, getBlowoutLocationOptionsForForm, + getFormErrorsMappedToField, + getFormLevelError, } from '../utils' +const BASE_VISIBLE_FORM_ERROR = { + title: 'form level error title', + dependentFields: ['field1', 'field2'], +} + +const MAPPED_ERRORS = { + field1: { + title: 'form level error title', + dependentFields: ['field1', 'field2'], + showAtField: true, + showAtForm: true, + }, +} + describe('getBlowoutLocationOptionsForForm', () => { const destOption = { name: 'Destination Well', @@ -69,3 +85,63 @@ describe('capitalizeFirstLetter', () => { ) }) }) + +describe('getFormErrorsMappedToField', () => { + it('should flatten form-level errors to an object keyed by each implicated field with form-level error as the value', () => { + const result = getFormErrorsMappedToField([BASE_VISIBLE_FORM_ERROR]) + expect(result).toEqual({ + field1: { + ...BASE_VISIBLE_FORM_ERROR, + showAtField: true, + showAtForm: true, + }, + field2: { + ...BASE_VISIBLE_FORM_ERROR, + showAtField: true, + showAtForm: true, + }, + }) + }) + it('should maintain booleans for showAtForm and showAtField', () => { + const result = getFormErrorsMappedToField([ + { ...BASE_VISIBLE_FORM_ERROR, showAtForm: false }, + ]) + expect(result).toEqual({ + field1: { + ...BASE_VISIBLE_FORM_ERROR, + showAtField: true, + showAtForm: false, + }, + field2: { + ...BASE_VISIBLE_FORM_ERROR, + showAtField: true, + showAtForm: false, + }, + }) + }) +}) + +describe('getFormLevelError', () => { + it('shows form-level error at field when field is not focused and showAtField is true', () => { + const result = getFormLevelError(true, 'field1', MAPPED_ERRORS) + expect(result).toEqual('form level error title') + }) + + it('shows no form-level error at field when field is focused and showAtField is true', () => { + const result = getFormLevelError(true, 'field1', MAPPED_ERRORS, 'field1') + expect(result).toBeNull() + }) + + it('shows no form-level error at field when field is not focused and showAtField is false', () => { + const result = getFormLevelError( + true, + 'field1', + { + ...MAPPED_ERRORS, + field1: { ...MAPPED_ERRORS.field1, showAtField: false }, + }, + 'field2' + ) + expect(result).toBeNull() + }) +}) diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/types.ts b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/types.ts index c7b063c4731..f0bd6970e73 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/types.ts +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/types.ts @@ -26,4 +26,7 @@ export interface StepFormProps { propsForFields: FieldPropsByName toolboxStep: number visibleFormErrors: StepFormErrors + showFormErrors: boolean + focusedField?: string | null + setShowFormErrorsAndWarnings?: React.Dispatch> } diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/utils.ts b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/utils.ts index 00f4749a71b..563308f1238 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/utils.ts +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/utils.ts @@ -25,6 +25,7 @@ import type { StepType, PathOption, } from '../../../../form-types' +import type { FormError } from '../../../../steplist/formLevel' import type { NozzleType } from '../../../../types' import type { FieldProps, FieldPropsByName, FocusHandlers } from './types' @@ -325,3 +326,42 @@ export const getSaveStepSnackbarText = ( export const capitalizeFirstLetter = (stepName: string): string => `${stepName.charAt(0).toUpperCase()}${stepName.slice(1)}` + +type ErrorMappedToField = Record + +export const getFormErrorsMappedToField = ( + formErrors: StepFormErrors +): ErrorMappedToField => { + return formErrors.reduce((acc, error) => { + const { dependentFields } = error + for (const field of dependentFields) { + const { showAtField, showAtForm, title } = error + if (showAtField == null || showAtForm == null) { + console.error( + `${title} should wire up where to show error (at form and/or field)` + ) + } + // map each field to only one one error + acc[field] = { + ...error, + showAtField: error.showAtField ?? true, + showAtForm: error.showAtForm ?? true, + } + } + return acc + }, {}) +} + +export const getFormLevelError = ( + showFormErrors: boolean, + fieldName: string, + mappedErrorsToField: ErrorMappedToField, + focusedField?: string | null +): string | null => { + return showFormErrors && + focusedField !== fieldName && + mappedErrorsToField[fieldName] && + mappedErrorsToField[fieldName].showAtField + ? mappedErrorsToField[fieldName].title + : null +} diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepSummary.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepSummary.tsx index 7d76fc02ae2..3b231529243 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepSummary.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepSummary.tsx @@ -148,6 +148,7 @@ export function StepSummary(props: StepSummaryProps): JSX.Element | null { lidOpen, thermocyclerFormType, lidOpenHold, + blockTargetTempHold, profileTargetLidTemp, profileVolume, } = currentStep @@ -192,7 +193,7 @@ export function StepSummary(props: StepSummaryProps): JSX.Element | null { @@ -215,9 +216,6 @@ export function StepSummary(props: StepSummaryProps): JSX.Element | null { pauseTime, pauseTemperature, } = currentStep - const pauseModuleDisplayName = getModuleDisplayName( - modules[pauseModuleId].model - ) switch (pauseAction) { case 'untilResume': stepSummaryContent = ( @@ -227,6 +225,9 @@ export function StepSummary(props: StepSummaryProps): JSX.Element | null { ) break case 'untilTemperature': + const pauseModuleDisplayName = getModuleDisplayName( + modules[pauseModuleId].model + ) stepSummaryContent = ( { + const { pauseTime, pauseAction } = fields + return pauseAction === PAUSE_UNTIL_TIME && !pauseTime + ? PAUSE_TIME_REQUIRED + : null +} +export const pauseTemperatureRequired = ( + fields: HydratedFormData +): FormError | null => { + const { pauseTemperature, pauseAction } = fields + return pauseAction === PAUSE_UNTIL_TEMP && !pauseTemperature + ? PAUSE_TEMP_REQUIRED + : null +} +export const labwareToMoveRequired = ( + fields: HydratedFormData +): FormError | null => { + const { labware } = fields + return labware == null ? LABWARE_TO_MOVE_REQUIRED : null +} +export const newLabwareLocationRequired = ( + fields: HydratedFormData +): FormError | null => { + const { newLocation } = fields + console.log(fields) + return newLocation == null ? NEW_LABWARE_LOCATION_REQUIRED : null +} export const engageHeightRangeExceeded = ( fields: HydratedFormData ): FormError | null => { diff --git a/protocol-designer/src/steplist/formLevel/index.ts b/protocol-designer/src/steplist/formLevel/index.ts index 1d67206c82b..dd7b9fea36c 100644 --- a/protocol-designer/src/steplist/formLevel/index.ts +++ b/protocol-designer/src/steplist/formLevel/index.ts @@ -3,7 +3,6 @@ import { incompatibleAspirateLabware, incompatibleDispenseLabware, incompatibleLabware, - pauseForTimeOrUntilTold, wellRatioMoveLiquid, magnetActionRequired, engageHeightRequired, @@ -20,6 +19,8 @@ import { shakeSpeedRequired, temperatureRequired, shakeTimeRequired, + pauseTimeRequired, + pauseTemperatureRequired, } from './errors' import { @@ -69,7 +70,7 @@ const stepFormHelperMap: Partial> = { ), }, pause: { - getErrors: composeErrors(pauseForTimeOrUntilTold), + getErrors: composeErrors(pauseTimeRequired, pauseTemperatureRequired), }, moveLiquid: { getErrors: composeErrors( From 6812452999bd4b7fbc7b4e55118d2482d120c9d4 Mon Sep 17 00:00:00 2001 From: pmoegenburg Date: Tue, 29 Oct 2024 09:33:52 -0400 Subject: [PATCH 15/81] feat(api): fully connected volume tracking (#16532) # Overview This PR aims to consolidate well volume data from our existing relevant commands into a single source of truth in WellStore. These commands are LiquidProbe, LoadLiquid, Aspirate, and Dispense. ## volume estimation and height Well volume and height are tracked in three parts: - the probed height is a height gathered from a liquid probe since the last volume-affecting operation occurred; it is nulled out if you carry out a liquid operation on a well - the tracked volume is a volume that started with a `LoadLiquid` and was then modified by liquid volume tracking from aspirate and dispense volumes - the estimated volume is the same, but has been updated or started with a liquid height measurement that was converted into an estimated volume The reason for having all three is that they have different accuracy characteristics, and we therefore use them for meniscus height estimation in an order of precedence: - The most accurate is a probed height - If a probed height isn't available, use a tracked volume that we turn into a height - If that isn't available, use an estimated volume that we turn into a height The latter two values are only accessible if the labware the well is in has internal geometry data. Even when we do, that geometry data is noisy and can be inaccurate, making those values suitable for problems like "I don't want to have to accurately measure how much is in this tube" and not for problems like "I want to minimize external droplet formation on my 1uL aspiration". This PR implements all that, as well as setting the movement data for actually going to a well meniscus. ## volume offsets A pretty important thing to consider for _static_ meniscus-relative movements is that when you're aspirating you don't want to move to where the meniscus _is_ but rather where it will be when the operation ends, so you don't leave your pipette high and dry. We signify this by allowing a "volume offset" in a location. This is like a height offset but is specified in uL or the special value "operationVolume". It will add an extra Z-offset to the positioning to account for a volume change in a well. This is calculated using the well's internal geometry and thus only available if the well has internal geometry. If the value is the string "operationVolume", which should be thought of as a sentinel value, we even calculate the volume offset from the volume you passed to `aspirate`; but specifying the value as a float is available for things like a `moveToWell` preceding an `aspirateInPlace`. There's some gross internals because of history. One particularly gross one is the Location data type; this is an old friend indeed, and its friendship continues to pay dividends since we want to add something to it that is somewhat internal, and we have to do so in a really gross way. ## testing We really need to test this in actually used protocols and this shouldn't be relied upon yet, but extensive test coverage should help. --------- Co-authored-by: Seth Foster --- .../citools/generate_analyses.py | 1 + .../protocol_api/core/engine/instrument.py | 2 + .../actions/get_state_update.py | 7 +- .../protocol_engine/commands/aspirate.py | 18 +- .../commands/aspirate_in_place.py | 29 +- .../protocol_engine/commands/dispense.py | 12 +- .../commands/dispense_in_place.py | 30 +- .../protocol_engine/commands/liquid_probe.py | 50 +++- .../protocol_engine/commands/load_liquid.py | 19 +- .../protocol_engine/execution/queue_worker.py | 6 +- .../protocol_engine/state/geometry.py | 61 +++- .../protocol_engine/state/state_summary.py | 4 +- .../protocol_engine/state/update_types.py | 76 +++++ .../opentrons/protocol_engine/state/wells.py | 281 ++++++++++++------ api/src/opentrons/protocol_engine/types.py | 42 ++- .../core/engine/test_instrument_core.py | 68 ++++- .../protocol_engine/commands/test_aspirate.py | 34 ++- .../commands/test_aspirate_in_place.py | 99 +++++- .../protocol_engine/commands/test_dispense.py | 10 + .../commands/test_dispense_in_place.py | 122 +++++++- .../commands/test_liquid_probe.py | 30 +- .../commands/test_load_liquid.py | 26 +- .../protocol_engine/state/command_fixtures.py | 25 +- .../state/test_geometry_view.py | 185 +++++++++++- .../state/test_labware_view.py | 11 + .../protocol_engine/state/test_well_store.py | 216 +++++++++++++- .../protocol_engine/state/test_well_view.py | 73 +++-- 27 files changed, 1323 insertions(+), 214 deletions(-) diff --git a/analyses-snapshot-testing/citools/generate_analyses.py b/analyses-snapshot-testing/citools/generate_analyses.py index f67d0394429..52aba70363b 100644 --- a/analyses-snapshot-testing/citools/generate_analyses.py +++ b/analyses-snapshot-testing/citools/generate_analyses.py @@ -186,6 +186,7 @@ def analyze(protocol: TargetProtocol, container: docker.models.containers.Contai start_time = time.time() result = None exit_code = None + console.print(f"Beginning analysis of {protocol.host_protocol_file.name}") try: command_result = container.exec_run(cmd=command) exit_code = command_result.exit_code diff --git a/api/src/opentrons/protocol_api/core/engine/instrument.py b/api/src/opentrons/protocol_api/core/engine/instrument.py index 4474a174a85..825d45bfded 100644 --- a/api/src/opentrons/protocol_api/core/engine/instrument.py +++ b/api/src/opentrons/protocol_api/core/engine/instrument.py @@ -153,6 +153,8 @@ def aspirate( absolute_point=location.point, is_meniscus=is_meniscus, ) + if well_location.origin == WellOrigin.MENISCUS: + well_location.volumeOffset = "operationVolume" pipette_movement_conflict.check_safe_for_pipette_movement( engine_state=self._engine_client.state, pipette_id=self._pipette_id, diff --git a/api/src/opentrons/protocol_engine/actions/get_state_update.py b/api/src/opentrons/protocol_engine/actions/get_state_update.py index 3ab984ab850..ec29a6e38ef 100644 --- a/api/src/opentrons/protocol_engine/actions/get_state_update.py +++ b/api/src/opentrons/protocol_engine/actions/get_state_update.py @@ -1,5 +1,6 @@ # noqa: D100 - +from __future__ import annotations +from typing import TYPE_CHECKING from .actions import ( Action, @@ -9,7 +10,9 @@ ) from ..commands.command import DefinedErrorData from ..error_recovery_policy import ErrorRecoveryType -from ..state.update_types import StateUpdate + +if TYPE_CHECKING: + from ..state.update_types import StateUpdate def get_state_updates(action: Action) -> list[StateUpdate]: diff --git a/api/src/opentrons/protocol_engine/commands/aspirate.py b/api/src/opentrons/protocol_engine/commands/aspirate.py index 14b59248216..bbeb089182d 100644 --- a/api/src/opentrons/protocol_engine/commands/aspirate.py +++ b/api/src/opentrons/protocol_engine/commands/aspirate.py @@ -24,7 +24,7 @@ from opentrons.hardware_control import HardwareControlAPI -from ..state.update_types import StateUpdate +from ..state.update_types import StateUpdate, CLEAR from ..types import WellLocation, WellOrigin, CurrentWell, DeckPoint if TYPE_CHECKING: @@ -112,15 +112,11 @@ async def execute(self, params: AspirateParams) -> _ExecuteReturn: well_name=well_name, ) - well_location = params.wellLocation - if well_location.origin == WellOrigin.MENISCUS: - well_location.volumeOffset = "operationVolume" - position = await self._movement.move_to_well( pipette_id=pipette_id, labware_id=labware_id, well_name=well_name, - well_location=well_location, + well_location=params.wellLocation, current_well=current_well, operation_volume=-params.volume, ) @@ -140,6 +136,11 @@ async def execute(self, params: AspirateParams) -> _ExecuteReturn: command_note_adder=self._command_note_adder, ) except PipetteOverpressureError as e: + state_update.set_liquid_operated( + labware_id=labware_id, + well_name=well_name, + volume_added=CLEAR, + ) return DefinedErrorData( public=OverpressureError( id=self._model_utils.generate_id(), @@ -156,6 +157,11 @@ async def execute(self, params: AspirateParams) -> _ExecuteReturn: state_update=state_update, ) else: + state_update.set_liquid_operated( + labware_id=labware_id, + well_name=well_name, + volume_added=-volume_aspirated, + ) return SuccessData( public=AspirateResult( volume=volume_aspirated, 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 59879e7ca63..23d331cd19b 100644 --- a/api/src/opentrons/protocol_engine/commands/aspirate_in_place.py +++ b/api/src/opentrons/protocol_engine/commands/aspirate_in_place.py @@ -24,6 +24,8 @@ ) from ..errors.error_occurrence import ErrorOccurrence from ..errors.exceptions import PipetteNotReadyToAspirateError +from ..state.update_types import StateUpdate, CLEAR +from ..types import CurrentWell if TYPE_CHECKING: from ..execution import PipettingHandler, GantryMover @@ -91,6 +93,10 @@ async def execute(self, params: AspirateInPlaceParams) -> _ExecuteReturn: " The first aspirate following a blow-out must be from a specific well" " so the plunger can be reset in a known safe position." ) + + state_update = StateUpdate() + current_location = self._state_view.pipettes.get_current_location() + try: current_position = await self._gantry_mover.get_position(params.pipetteId) volume = await self._pipetting.aspirate_in_place( @@ -100,6 +106,15 @@ async def execute(self, params: AspirateInPlaceParams) -> _ExecuteReturn: command_note_adder=self._command_note_adder, ) except PipetteOverpressureError as e: + if ( + isinstance(current_location, CurrentWell) + and current_location.pipette_id == params.pipetteId + ): + state_update.set_liquid_operated( + labware_id=current_location.labware_id, + well_name=current_location.well_name, + volume_added=CLEAR, + ) return DefinedErrorData( public=OverpressureError( id=self._model_utils.generate_id(), @@ -121,10 +136,22 @@ async def execute(self, params: AspirateInPlaceParams) -> _ExecuteReturn: } ), ), + state_update=state_update, ) else: + if ( + isinstance(current_location, CurrentWell) + and current_location.pipette_id == params.pipetteId + ): + state_update.set_liquid_operated( + labware_id=current_location.labware_id, + well_name=current_location.well_name, + volume_added=-volume, + ) return SuccessData( - public=AspirateInPlaceResult(volume=volume), private=None + public=AspirateInPlaceResult(volume=volume), + private=None, + state_update=state_update, ) diff --git a/api/src/opentrons/protocol_engine/commands/dispense.py b/api/src/opentrons/protocol_engine/commands/dispense.py index 7e18cc6560b..ad57cb1882f 100644 --- a/api/src/opentrons/protocol_engine/commands/dispense.py +++ b/api/src/opentrons/protocol_engine/commands/dispense.py @@ -8,7 +8,7 @@ from pydantic import Field from ..types import DeckPoint -from ..state.update_types import StateUpdate +from ..state.update_types import StateUpdate, CLEAR from .pipetting_common import ( PipetteIdMixin, DispenseVolumeMixin, @@ -107,6 +107,11 @@ async def execute(self, params: DispenseParams) -> _ExecuteReturn: push_out=params.pushOut, ) except PipetteOverpressureError as e: + state_update.set_liquid_operated( + labware_id=labware_id, + well_name=well_name, + volume_added=CLEAR, + ) return DefinedErrorData( public=OverpressureError( id=self._model_utils.generate_id(), @@ -123,6 +128,11 @@ async def execute(self, params: DispenseParams) -> _ExecuteReturn: state_update=state_update, ) else: + state_update.set_liquid_operated( + labware_id=labware_id, + well_name=well_name, + volume_added=volume, + ) return SuccessData( public=DispenseResult(volume=volume, position=deck_point), private=None, 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 36f15e8e528..b6eac561559 100644 --- a/api/src/opentrons/protocol_engine/commands/dispense_in_place.py +++ b/api/src/opentrons/protocol_engine/commands/dispense_in_place.py @@ -21,10 +21,13 @@ DefinedErrorData, ) from ..errors.error_occurrence import ErrorOccurrence +from ..state.update_types import StateUpdate, CLEAR +from ..types import CurrentWell if TYPE_CHECKING: from ..execution import PipettingHandler, GantryMover from ..resources import ModelUtils + from ..state.state import StateView DispenseInPlaceCommandType = Literal["dispenseInPlace"] @@ -59,16 +62,20 @@ class DispenseInPlaceImplementation( def __init__( self, pipetting: PipettingHandler, + state_view: StateView, gantry_mover: GantryMover, model_utils: ModelUtils, **kwargs: object, ) -> None: self._pipetting = pipetting + self._state_view = state_view self._gantry_mover = gantry_mover self._model_utils = model_utils async def execute(self, params: DispenseInPlaceParams) -> _ExecuteReturn: """Dispense without moving the pipette.""" + state_update = StateUpdate() + current_location = self._state_view.pipettes.get_current_location() try: current_position = await self._gantry_mover.get_position(params.pipetteId) volume = await self._pipetting.dispense_in_place( @@ -78,6 +85,15 @@ async def execute(self, params: DispenseInPlaceParams) -> _ExecuteReturn: push_out=params.pushOut, ) except PipetteOverpressureError as e: + if ( + isinstance(current_location, CurrentWell) + and current_location.pipette_id == params.pipetteId + ): + state_update.set_liquid_operated( + labware_id=current_location.labware_id, + well_name=current_location.well_name, + volume_added=CLEAR, + ) return DefinedErrorData( public=OverpressureError( id=self._model_utils.generate_id(), @@ -99,10 +115,22 @@ async def execute(self, params: DispenseInPlaceParams) -> _ExecuteReturn: } ), ), + state_update=state_update, ) else: + if ( + isinstance(current_location, CurrentWell) + and current_location.pipette_id == params.pipetteId + ): + state_update.set_liquid_operated( + labware_id=current_location.labware_id, + well_name=current_location.well_name, + volume_added=volume, + ) return SuccessData( - public=DispenseInPlaceResult(volume=volume), private=None + public=DispenseInPlaceResult(volume=volume), + private=None, + state_update=state_update, ) diff --git a/api/src/opentrons/protocol_engine/commands/liquid_probe.py b/api/src/opentrons/protocol_engine/commands/liquid_probe.py index 1a8597f9c03..677d62731f9 100644 --- a/api/src/opentrons/protocol_engine/commands/liquid_probe.py +++ b/api/src/opentrons/protocol_engine/commands/liquid_probe.py @@ -11,6 +11,7 @@ MustHomeError, PipetteNotReadyToAspirateError, TipNotEmptyError, + IncompleteLabwareDefinitionError, ) from opentrons.types import MountType from opentrons_shared_data.errors.exceptions import ( @@ -205,6 +206,13 @@ async def execute(self, params: _CommonParams) -> _LiquidProbeExecuteReturn: self._state_view, self._movement, self._pipetting, params ) if isinstance(z_pos_or_error, PipetteLiquidNotFoundError): + state_update.set_liquid_probed( + labware_id=params.labwareId, + well_name=params.wellName, + height=update_types.CLEAR, + volume=update_types.CLEAR, + last_probed=self._model_utils.get_timestamp(), + ) return DefinedErrorData( public=LiquidNotFoundError( id=self._model_utils.generate_id(), @@ -220,6 +228,23 @@ async def execute(self, params: _CommonParams) -> _LiquidProbeExecuteReturn: state_update=state_update, ) else: + try: + well_volume: float | update_types.ClearType = ( + self._state_view.geometry.get_well_volume_at_height( + labware_id=params.labwareId, + well_name=params.wellName, + height=z_pos_or_error, + ) + ) + except IncompleteLabwareDefinitionError: + well_volume = update_types.CLEAR + state_update.set_liquid_probed( + labware_id=params.labwareId, + well_name=params.wellName, + height=z_pos_or_error, + volume=well_volume, + last_probed=self._model_utils.get_timestamp(), + ) return SuccessData( public=LiquidProbeResult( z_position=z_pos_or_error, position=deck_point @@ -239,11 +264,13 @@ def __init__( 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 async def execute(self, params: _CommonParams) -> _TryLiquidProbeExecuteReturn: """Execute a `tryLiquidProbe` command. @@ -256,11 +283,26 @@ async def execute(self, params: _CommonParams) -> _TryLiquidProbeExecuteReturn: self._state_view, self._movement, self._pipetting, params ) - z_pos = ( - None - if isinstance(z_pos_or_error, PipetteLiquidNotFoundError) - else z_pos_or_error + if isinstance(z_pos_or_error, PipetteLiquidNotFoundError): + z_pos = None + well_volume: float | update_types.ClearType = update_types.CLEAR + else: + z_pos = z_pos_or_error + try: + well_volume = self._state_view.geometry.get_well_volume_at_height( + labware_id=params.labwareId, well_name=params.wellName, height=z_pos + ) + except IncompleteLabwareDefinitionError: + well_volume = update_types.CLEAR + + state_update.set_liquid_probed( + labware_id=params.labwareId, + well_name=params.wellName, + height=z_pos if z_pos is not None else update_types.CLEAR, + volume=well_volume, + last_probed=self._model_utils.get_timestamp(), ) + return SuccessData( public=TryLiquidProbeResult( z_position=z_pos, diff --git a/api/src/opentrons/protocol_engine/commands/load_liquid.py b/api/src/opentrons/protocol_engine/commands/load_liquid.py index 856cf3ee127..d37bc537b2d 100644 --- a/api/src/opentrons/protocol_engine/commands/load_liquid.py +++ b/api/src/opentrons/protocol_engine/commands/load_liquid.py @@ -4,11 +4,14 @@ from typing import Optional, Type, Dict, TYPE_CHECKING from typing_extensions import Literal +from opentrons.protocol_engine.state.update_types import StateUpdate + from .command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData from ..errors.error_occurrence import ErrorOccurrence if TYPE_CHECKING: from ..state.state import StateView + from ..resources import ModelUtils LoadLiquidCommandType = Literal["loadLiquid"] @@ -41,8 +44,11 @@ class LoadLiquidImplementation( ): """Load liquid command implementation.""" - def __init__(self, state_view: StateView, **kwargs: object) -> None: + def __init__( + self, state_view: StateView, model_utils: ModelUtils, **kwargs: object + ) -> None: self._state_view = state_view + self._model_utils = model_utils async def execute( self, params: LoadLiquidParams @@ -54,7 +60,16 @@ async def execute( labware_id=params.labwareId, wells=params.volumeByWell ) - return SuccessData(public=LoadLiquidResult(), private=None) + state_update = StateUpdate() + state_update.set_liquid_loaded( + labware_id=params.labwareId, + volumes=params.volumeByWell, + last_loaded=self._model_utils.get_timestamp(), + ) + + return SuccessData( + public=LoadLiquidResult(), private=None, state_update=state_update + ) class LoadLiquid(BaseCommand[LoadLiquidParams, LoadLiquidResult, ErrorOccurrence]): diff --git a/api/src/opentrons/protocol_engine/execution/queue_worker.py b/api/src/opentrons/protocol_engine/execution/queue_worker.py index 67f8f17b42c..015adf085c9 100644 --- a/api/src/opentrons/protocol_engine/execution/queue_worker.py +++ b/api/src/opentrons/protocol_engine/execution/queue_worker.py @@ -69,7 +69,11 @@ async def join(self) -> None: async def _run_commands(self) -> None: async for command_id in self._command_generator(): - await self._command_executor.execute(command_id=command_id) + try: + await self._command_executor.execute(command_id=command_id) + except BaseException: + log.exception("Unhandled failure in command executor") + raise # Yield to the event loop in case we're executing a long sequence of commands # that never yields internally. For example, a long sequence of comment commands. await asyncio.sleep(0) diff --git a/api/src/opentrons/protocol_engine/state/geometry.py b/api/src/opentrons/protocol_engine/state/geometry.py index 125be3339a9..471065adcc2 100644 --- a/api/src/opentrons/protocol_engine/state/geometry.py +++ b/api/src/opentrons/protocol_engine/state/geometry.py @@ -9,7 +9,6 @@ from opentrons.types import Point, DeckSlotName, StagingSlotName, MountType from opentrons_shared_data.labware.constants import WELL_NAME_PATTERN -from opentrons_shared_data.labware.labware_definition import InnerWellGeometry from opentrons_shared_data.deck.types import CutoutFixture from opentrons_shared_data.pipette import PIPETTE_X_SPAN from opentrons_shared_data.pipette.types import ChannelCount @@ -1372,6 +1371,7 @@ def get_well_offset_adjustment( Distance is with reference to the well bottom. """ + # TODO(pbm, 10-23-24): refactor to smartly reduce height/volume conversions initial_handling_height = self.get_well_handling_height( labware_id=labware_id, well_name=well_name, @@ -1386,9 +1386,9 @@ def get_well_offset_adjustment( volume = operation_volume or 0.0 if volume: - well_geometry = self._labware.get_well_geometry(labware_id, well_name) return self.get_well_height_after_volume( - well_geometry=well_geometry, + labware_id=labware_id, + well_name=well_name, initial_height=initial_handling_height, volume=volume, ) @@ -1401,15 +1401,36 @@ def get_meniscus_height( well_name: str, ) -> float: """Returns stored meniscus height in specified well.""" - meniscus_height = self._wells.get_last_measured_liquid_height( + well_liquid = self._wells.get_well_liquid_info( labware_id=labware_id, well_name=well_name ) - if meniscus_height is None: - raise errors.LiquidHeightUnknownError( - "Must liquid probe before specifying WellOrigin.MENISCUS." + if ( + well_liquid.probed_height is not None + and well_liquid.probed_height.height is not None + ): + return well_liquid.probed_height.height + elif ( + well_liquid.loaded_volume is not None + and well_liquid.loaded_volume.volume is not None + ): + return self.get_well_height_at_volume( + labware_id=labware_id, + well_name=well_name, + volume=well_liquid.loaded_volume.volume, + ) + elif ( + well_liquid.probed_volume is not None + and well_liquid.probed_volume.volume is not None + ): + return self.get_well_height_at_volume( + labware_id=labware_id, + well_name=well_name, + volume=well_liquid.probed_volume.volume, ) else: - return meniscus_height + raise errors.LiquidHeightUnknownError( + "Must LiquidProbe or LoadLiquid before specifying WellOrigin.MENISCUS." + ) def get_well_handling_height( self, @@ -1431,12 +1452,15 @@ def get_well_handling_height( return float(handling_height) def get_well_height_after_volume( - self, well_geometry: InnerWellGeometry, initial_height: float, volume: float + self, labware_id: str, well_name: str, initial_height: float, volume: float ) -> float: """Return the height of liquid in a labware well after a given volume has been handled. This is given an initial handling height, with reference to the well bottom. """ + well_geometry = self._labware.get_well_geometry( + labware_id=labware_id, well_name=well_name + ) initial_volume = find_volume_at_well_height( target_height=initial_height, well_geometry=well_geometry ) @@ -1445,6 +1469,24 @@ def get_well_height_after_volume( target_volume=final_volume, well_geometry=well_geometry ) + def get_well_height_at_volume( + self, labware_id: str, well_name: str, volume: float + ) -> float: + """Convert well volume to height.""" + well_geometry = self._labware.get_well_geometry(labware_id, well_name) + return find_height_at_well_volume( + target_volume=volume, well_geometry=well_geometry + ) + + def get_well_volume_at_height( + self, labware_id: str, well_name: str, height: float + ) -> float: + """Convert well height to volume.""" + well_geometry = self._labware.get_well_geometry(labware_id, well_name) + return find_volume_at_well_height( + target_height=height, well_geometry=well_geometry + ) + def validate_dispense_volume_into_well( self, labware_id: str, @@ -1456,6 +1498,7 @@ def validate_dispense_volume_into_well( well_def = self._labware.get_well_definition(labware_id, well_name) well_volumetric_capacity = well_def.totalLiquidVolume if well_location.origin == WellOrigin.MENISCUS: + # TODO(pbm, 10-23-24): refactor to smartly reduce height/volume conversions well_geometry = self._labware.get_well_geometry(labware_id, well_name) meniscus_height = self.get_meniscus_height( labware_id=labware_id, well_name=well_name diff --git a/api/src/opentrons/protocol_engine/state/state_summary.py b/api/src/opentrons/protocol_engine/state/state_summary.py index b1c4dd8f766..7e47ccbbb37 100644 --- a/api/src/opentrons/protocol_engine/state/state_summary.py +++ b/api/src/opentrons/protocol_engine/state/state_summary.py @@ -6,12 +6,12 @@ from ..errors import ErrorOccurrence from ..types import ( EngineStatus, - LiquidHeightSummary, LoadedLabware, LabwareOffset, LoadedModule, LoadedPipette, Liquid, + WellInfoSummary, ) @@ -30,5 +30,5 @@ class StateSummary(BaseModel): startedAt: Optional[datetime] completedAt: Optional[datetime] liquids: List[Liquid] = Field(default_factory=list) - wells: List[LiquidHeightSummary] = Field(default_factory=list) + wells: List[WellInfoSummary] = Field(default_factory=list) files: List[str] = Field(default_factory=list) diff --git a/api/src/opentrons/protocol_engine/state/update_types.py b/api/src/opentrons/protocol_engine/state/update_types.py index 5d941d33933..181d8820723 100644 --- a/api/src/opentrons/protocol_engine/state/update_types.py +++ b/api/src/opentrons/protocol_engine/state/update_types.py @@ -4,6 +4,7 @@ import dataclasses import enum import typing +from datetime import datetime from opentrons.hardware_control.nozzle_manager import NozzleMap from opentrons.protocol_engine.resources import pipette_data_provider @@ -175,6 +176,35 @@ class TipsUsedUpdate: """ +@dataclasses.dataclass +class LiquidLoadedUpdate: + """An update from loading a liquid.""" + + labware_id: str + volumes: typing.Dict[str, float] + last_loaded: datetime + + +@dataclasses.dataclass +class LiquidProbedUpdate: + """An update from probing a liquid.""" + + labware_id: str + well_name: str + last_probed: datetime + height: float | ClearType + volume: float | ClearType + + +@dataclasses.dataclass +class LiquidOperatedUpdate: + """An update from operating a liquid.""" + + labware_id: str + well_name: str + volume_added: float | ClearType + + @dataclasses.dataclass class StateUpdate: """Represents an update to perform on engine state.""" @@ -195,6 +225,12 @@ class StateUpdate: tips_used: TipsUsedUpdate | NoChangeType = NO_CHANGE + liquid_loaded: LiquidLoadedUpdate | NoChangeType = NO_CHANGE + + liquid_probed: LiquidProbedUpdate | NoChangeType = NO_CHANGE + + liquid_operated: LiquidOperatedUpdate | NoChangeType = NO_CHANGE + # These convenience functions let the caller avoid the boilerplate of constructing a # complicated dataclass tree. @@ -330,3 +366,43 @@ def mark_tips_as_used( self.tips_used = TipsUsedUpdate( pipette_id=pipette_id, labware_id=labware_id, well_name=well_name ) + + def set_liquid_loaded( + self, + labware_id: str, + volumes: typing.Dict[str, float], + last_loaded: datetime, + ) -> None: + """Add liquid volumes to well state. See `LoadLiquidUpdate`.""" + self.liquid_loaded = LiquidLoadedUpdate( + labware_id=labware_id, + volumes=volumes, + last_loaded=last_loaded, + ) + + def set_liquid_probed( + self, + labware_id: str, + well_name: str, + last_probed: datetime, + height: float | ClearType, + volume: float | ClearType, + ) -> None: + """Add a liquid height and volume to well state. See `ProbeLiquidUpdate`.""" + self.liquid_probed = LiquidProbedUpdate( + labware_id=labware_id, + well_name=well_name, + height=height, + volume=volume, + last_probed=last_probed, + ) + + def set_liquid_operated( + self, labware_id: str, well_name: str, volume_added: float | ClearType + ) -> None: + """Update liquid volumes in well state. See `OperateLiquidUpdate`.""" + self.liquid_operated = LiquidOperatedUpdate( + labware_id=labware_id, + well_name=well_name, + volume_added=volume_added, + ) diff --git a/api/src/opentrons/protocol_engine/state/wells.py b/api/src/opentrons/protocol_engine/state/wells.py index d74d94a1be0..5b4d3bb8d77 100644 --- a/api/src/opentrons/protocol_engine/state/wells.py +++ b/api/src/opentrons/protocol_engine/state/wells.py @@ -1,25 +1,32 @@ """Basic well data state and store.""" from dataclasses import dataclass -from datetime import datetime -from typing import Dict, List, Optional -from opentrons.protocol_engine.actions.actions import ( - FailCommandAction, - SucceedCommandAction, +from typing import Dict, List, Union, Iterator, Optional, Tuple, overload, TypeVar + +from opentrons.protocol_engine.types import ( + ProbedHeightInfo, + ProbedVolumeInfo, + LoadedVolumeInfo, + WellInfoSummary, + WellLiquidInfo, ) -from opentrons.protocol_engine.commands.liquid_probe import LiquidProbeResult -from opentrons.protocol_engine.commands.pipetting_common import LiquidNotFoundError -from opentrons.protocol_engine.types import LiquidHeightInfo, LiquidHeightSummary +from . import update_types from ._abstract_store import HasState, HandlesActions from ..actions import Action -from ..commands import Command +from ..actions.get_state_update import get_state_updates + + +LabwareId = str +WellName = str @dataclass class WellState: """State of all wells.""" - measured_liquid_heights: Dict[str, Dict[str, LiquidHeightInfo]] + loaded_volumes: Dict[LabwareId, Dict[WellName, LoadedVolumeInfo]] + probed_heights: Dict[LabwareId, Dict[WellName, ProbedHeightInfo]] + probed_volumes: Dict[LabwareId, Dict[WellName, ProbedVolumeInfo]] class WellStore(HasState[WellState], HandlesActions): @@ -29,41 +36,95 @@ class WellStore(HasState[WellState], HandlesActions): def __init__(self) -> None: """Initialize a well store and its state.""" - self._state = WellState(measured_liquid_heights={}) + self._state = WellState(loaded_volumes={}, probed_heights={}, probed_volumes={}) def handle_action(self, action: Action) -> None: """Modify state in reaction to an action.""" - if isinstance(action, SucceedCommandAction): - self._handle_succeeded_command(action.command) - if isinstance(action, FailCommandAction): - self._handle_failed_command(action) - - def _handle_succeeded_command(self, command: Command) -> None: - if isinstance(command.result, LiquidProbeResult): - self._set_liquid_height( - labware_id=command.params.labwareId, - well_name=command.params.wellName, - height=command.result.z_position, - time=command.createdAt, - ) - - def _handle_failed_command(self, action: FailCommandAction) -> None: - if isinstance(action.error, LiquidNotFoundError): - self._set_liquid_height( - labware_id=action.error.private.labware_id, - well_name=action.error.private.well_name, - height=None, - time=action.failed_at, + for state_update in get_state_updates(action): + if state_update.liquid_loaded != update_types.NO_CHANGE: + self._handle_liquid_loaded_update(state_update.liquid_loaded) + if state_update.liquid_probed != update_types.NO_CHANGE: + self._handle_liquid_probed_update(state_update.liquid_probed) + if state_update.liquid_operated != update_types.NO_CHANGE: + self._handle_liquid_operated_update(state_update.liquid_operated) + + def _handle_liquid_loaded_update( + self, state_update: update_types.LiquidLoadedUpdate + ) -> None: + labware_id = state_update.labware_id + if labware_id not in self._state.loaded_volumes: + self._state.loaded_volumes[labware_id] = {} + for (well, volume) in state_update.volumes.items(): + self._state.loaded_volumes[labware_id][well] = LoadedVolumeInfo( + volume=_none_from_clear(volume), + last_loaded=state_update.last_loaded, + operations_since_load=0, ) - def _set_liquid_height( - self, labware_id: str, well_name: str, height: float, time: datetime + def _handle_liquid_probed_update( + self, state_update: update_types.LiquidProbedUpdate + ) -> None: + labware_id = state_update.labware_id + well_name = state_update.well_name + if labware_id not in self._state.probed_heights: + self._state.probed_heights[labware_id] = {} + if labware_id not in self._state.probed_volumes: + self._state.probed_volumes[labware_id] = {} + self._state.probed_heights[labware_id][well_name] = ProbedHeightInfo( + height=_none_from_clear(state_update.height), + last_probed=state_update.last_probed, + ) + self._state.probed_volumes[labware_id][well_name] = ProbedVolumeInfo( + volume=_none_from_clear(state_update.volume), + last_probed=state_update.last_probed, + operations_since_probe=0, + ) + + def _handle_liquid_operated_update( + self, state_update: update_types.LiquidOperatedUpdate ) -> None: - """Set the liquid height of the well.""" - lhi = LiquidHeightInfo(height=height, last_measured=time) - if labware_id not in self._state.measured_liquid_heights: - self._state.measured_liquid_heights[labware_id] = {} - self._state.measured_liquid_heights[labware_id][well_name] = lhi + labware_id = state_update.labware_id + well_name = state_update.well_name + if ( + labware_id in self._state.loaded_volumes + and well_name in self._state.loaded_volumes[labware_id] + ): + if state_update.volume_added is update_types.CLEAR: + del self._state.loaded_volumes[labware_id][well_name] + else: + prev_loaded_vol_info = self._state.loaded_volumes[labware_id][well_name] + assert prev_loaded_vol_info.volume is not None + self._state.loaded_volumes[labware_id][well_name] = LoadedVolumeInfo( + volume=prev_loaded_vol_info.volume + state_update.volume_added, + last_loaded=prev_loaded_vol_info.last_loaded, + operations_since_load=prev_loaded_vol_info.operations_since_load + + 1, + ) + if ( + labware_id in self._state.probed_heights + and well_name in self._state.probed_heights[labware_id] + ): + del self._state.probed_heights[labware_id][well_name] + if ( + labware_id in self._state.probed_volumes + and well_name in self._state.probed_volumes[labware_id] + ): + if state_update.volume_added is update_types.CLEAR: + del self._state.probed_volumes[labware_id][well_name] + else: + prev_probed_vol_info = self._state.probed_volumes[labware_id][well_name] + if prev_probed_vol_info.volume is None: + new_vol_info: float | None = None + else: + new_vol_info = ( + prev_probed_vol_info.volume + state_update.volume_added + ) + self._state.probed_volumes[labware_id][well_name] = ProbedVolumeInfo( + volume=new_vol_info, + last_probed=prev_probed_vol_info.last_probed, + operations_since_probe=prev_probed_vol_info.operations_since_probe + + 1, + ) class WellView(HasState[WellState]): @@ -79,51 +140,97 @@ def __init__(self, state: WellState) -> None: """ self._state = state - def get_all(self) -> List[LiquidHeightSummary]: - """Get all well liquid heights.""" - all_heights: List[LiquidHeightSummary] = [] - for labware, wells in self._state.measured_liquid_heights.items(): - for well, lhi in wells.items(): - lhs = LiquidHeightSummary( - labware_id=labware, - well_name=well, - height=lhi.height, - last_measured=lhi.last_measured, - ) - all_heights.append(lhs) - return all_heights - - def get_all_in_labware(self, labware_id: str) -> List[LiquidHeightSummary]: - """Get all well liquid heights for a particular labware.""" - all_heights: List[LiquidHeightSummary] = [] - for well, lhi in self._state.measured_liquid_heights[labware_id].items(): - lhs = LiquidHeightSummary( - labware_id=labware_id, - well_name=well, - height=lhi.height, - last_measured=lhi.last_measured, - ) - all_heights.append(lhs) - return all_heights - - def get_last_measured_liquid_height( - self, labware_id: str, well_name: str - ) -> Optional[float]: - """Returns the height of the liquid according to the most recent liquid level probe to this well. - - Returns None if no liquid probe has been done. - """ - try: - height = self._state.measured_liquid_heights[labware_id][well_name].height - return height - except KeyError: - return None - - def has_measured_liquid_height(self, labware_id: str, well_name: str) -> bool: - """Returns True if the well has been liquid level probed previously.""" - try: - return bool( - self._state.measured_liquid_heights[labware_id][well_name].height - ) - except KeyError: - return False + def get_well_liquid_info(self, labware_id: str, well_name: str) -> WellLiquidInfo: + """Return all the liquid info for a well.""" + if ( + labware_id not in self._state.loaded_volumes + or well_name not in self._state.loaded_volumes[labware_id] + ): + loaded_volume_info = None + else: + loaded_volume_info = self._state.loaded_volumes[labware_id][well_name] + if ( + labware_id not in self._state.probed_heights + or well_name not in self._state.probed_heights[labware_id] + ): + probed_height_info = None + else: + probed_height_info = self._state.probed_heights[labware_id][well_name] + if ( + labware_id not in self._state.probed_volumes + or well_name not in self._state.probed_volumes[labware_id] + ): + probed_volume_info = None + else: + probed_volume_info = self._state.probed_volumes[labware_id][well_name] + return WellLiquidInfo( + loaded_volume=loaded_volume_info, + probed_height=probed_height_info, + probed_volume=probed_volume_info, + ) + + def get_all(self) -> List[WellInfoSummary]: + """Get all well liquid info summaries.""" + + def _all_well_combos() -> Iterator[Tuple[str, str, str]]: + for labware, lv_wells in self._state.loaded_volumes.items(): + for well_name in lv_wells.keys(): + yield f"{labware}{well_name}", labware, well_name + for labware, ph_wells in self._state.probed_heights.items(): + for well_name in ph_wells.keys(): + yield f"{labware}{well_name}", labware, well_name + for labware, pv_wells in self._state.probed_volumes.items(): + for well_name in pv_wells.keys(): + yield f"{labware}{well_name}", labware, well_name + + wells = { + key: (labware_id, well_name) + for key, labware_id, well_name in _all_well_combos() + } + return [ + self._summarize_well(labware_id, well_name) + for labware_id, well_name in wells.values() + ] + + def _summarize_well(self, labware_id: str, well_name: str) -> WellInfoSummary: + well_liquid_info = self.get_well_liquid_info(labware_id, well_name) + return WellInfoSummary( + labware_id=labware_id, + well_name=well_name, + loaded_volume=_volume_from_info(well_liquid_info.loaded_volume), + probed_volume=_volume_from_info(well_liquid_info.probed_volume), + probed_height=_height_from_info(well_liquid_info.probed_height), + ) + + +@overload +def _volume_from_info(info: Optional[ProbedVolumeInfo]) -> Optional[float]: + ... + + +@overload +def _volume_from_info(info: Optional[LoadedVolumeInfo]) -> Optional[float]: + ... + + +def _volume_from_info( + info: Union[ProbedVolumeInfo, LoadedVolumeInfo, None] +) -> Optional[float]: + if info is None: + return None + return info.volume + + +def _height_from_info(info: Optional[ProbedHeightInfo]) -> Optional[float]: + if info is None: + return None + return info.height + + +MaybeClear = TypeVar("MaybeClear") + + +def _none_from_clear(inval: MaybeClear | update_types.ClearType) -> MaybeClear | None: + if inval == update_types.CLEAR: + return None + return inval diff --git a/api/src/opentrons/protocol_engine/types.py b/api/src/opentrons/protocol_engine/types.py index 72daafd3a52..ea3a57945b2 100644 --- a/api/src/opentrons/protocol_engine/types.py +++ b/api/src/opentrons/protocol_engine/types.py @@ -355,20 +355,46 @@ class CurrentWell: well_name: str -class LiquidHeightInfo(BaseModel): - """Payload required to store recent measured liquid heights.""" +class LoadedVolumeInfo(BaseModel): + """A well's liquid volume, initialized by a LoadLiquid, updated by Aspirate and Dispense.""" - height: float - last_measured: datetime + volume: Optional[float] = None + last_loaded: datetime + operations_since_load: int -class LiquidHeightSummary(BaseModel): - """Payload for liquid state height in StateSummary.""" +class ProbedHeightInfo(BaseModel): + """A well's liquid height, initialized by a LiquidProbe, cleared by Aspirate and Dispense.""" + + height: Optional[float] = None + last_probed: datetime + + +class ProbedVolumeInfo(BaseModel): + """A well's liquid volume, initialized by a LiquidProbe, updated by Aspirate and Dispense.""" + + volume: Optional[float] = None + last_probed: datetime + operations_since_probe: int + + +class WellInfoSummary(BaseModel): + """Payload for a well's liquid info in StateSummary.""" labware_id: str well_name: str - height: float - last_measured: datetime + loaded_volume: Optional[float] = None + probed_height: Optional[float] = None + probed_volume: Optional[float] = None + + +@dataclass +class WellLiquidInfo: + """Tracked and sensed information about liquid in a well.""" + + probed_height: Optional[ProbedHeightInfo] + loaded_volume: Optional[LoadedVolumeInfo] + probed_volume: Optional[ProbedVolumeInfo] @dataclass(frozen=True) diff --git a/api/tests/opentrons/protocol_api/core/engine/test_instrument_core.py b/api/tests/opentrons/protocol_api/core/engine/test_instrument_core.py index 3d07bfe07d8..0ab9ac9da73 100644 --- a/api/tests/opentrons/protocol_api/core/engine/test_instrument_core.py +++ b/api/tests/opentrons/protocol_api/core/engine/test_instrument_core.py @@ -545,7 +545,7 @@ def test_aspirate_from_well( ) -def test_aspirate_from_location( +def test_aspirate_from_coordinates( decoy: Decoy, mock_engine_client: EngineClient, mock_protocol_core: ProtocolCore, @@ -583,6 +583,72 @@ def test_aspirate_from_location( ) +def test_aspirate_from_meniscus( + decoy: Decoy, + mock_engine_client: EngineClient, + mock_protocol_core: ProtocolCore, + subject: InstrumentCore, +) -> None: + """It should aspirate from a well.""" + location = Location(point=Point(1, 2, 3), labware=None) + + well_core = WellCore( + name="my cool well", labware_id="123abc", engine_client=mock_engine_client + ) + + decoy.when( + mock_engine_client.state.geometry.get_relative_liquid_handling_well_location( + labware_id="123abc", + well_name="my cool well", + absolute_point=Point(1, 2, 3), + is_meniscus=True, + ) + ).then_return( + LiquidHandlingWellLocation( + origin=WellOrigin.MENISCUS, offset=WellOffset(x=3, y=2, z=1), volumeOffset=0 + ) + ) + + subject.aspirate( + location=location, + well_core=well_core, + volume=12.34, + rate=5.6, + flow_rate=7.8, + in_place=False, + is_meniscus=True, + ) + + decoy.verify( + pipette_movement_conflict.check_safe_for_pipette_movement( + engine_state=mock_engine_client.state, + pipette_id="abc123", + labware_id="123abc", + well_name="my cool well", + well_location=LiquidHandlingWellLocation( + origin=WellOrigin.MENISCUS, + offset=WellOffset(x=3, y=2, z=1), + volumeOffset="operationVolume", + ), + ), + mock_engine_client.execute_command( + cmd.AspirateParams( + pipetteId="abc123", + labwareId="123abc", + wellName="my cool well", + wellLocation=LiquidHandlingWellLocation( + origin=WellOrigin.MENISCUS, + offset=WellOffset(x=3, y=2, z=1), + volumeOffset="operationVolume", + ), + volume=12.34, + flowRate=7.8, + ) + ), + mock_protocol_core.set_last_location(location=location, mount=Mount.LEFT), + ) + + def test_aspirate_in_place( decoy: Decoy, mock_engine_client: EngineClient, diff --git a/api/tests/opentrons/protocol_engine/commands/test_aspirate.py b/api/tests/opentrons/protocol_engine/commands/test_aspirate.py index 8d6f6d92179..ccaac0b6748 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_aspirate.py +++ b/api/tests/opentrons/protocol_engine/commands/test_aspirate.py @@ -109,7 +109,12 @@ async def test_aspirate_implementation_no_prep( pipette_id="abc", new_location=update_types.Well(labware_id="123", well_name="A3"), new_deck_point=DeckPoint(x=1, y=2, z=3), - ) + ), + liquid_operated=update_types.LiquidOperatedUpdate( + labware_id="123", + well_name="A3", + volume_added=-50, + ), ), ) @@ -178,7 +183,12 @@ async def test_aspirate_implementation_with_prep( pipette_id="abc", new_location=update_types.Well(labware_id="123", well_name="A3"), new_deck_point=DeckPoint(x=1, y=2, z=3), - ) + ), + liquid_operated=update_types.LiquidOperatedUpdate( + labware_id="123", + well_name="A3", + volume_added=-50, + ), ), ) @@ -313,7 +323,12 @@ async def test_overpressure_error( labware_id=labware_id, well_name=well_name ), new_deck_point=DeckPoint(x=position.x, y=position.y, z=position.z), - ) + ), + liquid_operated=update_types.LiquidOperatedUpdate( + labware_id=labware_id, + well_name=well_name, + volume_added=update_types.CLEAR, + ), ), ) @@ -329,14 +344,10 @@ async def test_aspirate_implementation_meniscus( ) -> None: """Aspirate should update WellVolumeOffset when called with WellOrigin.MENISCUS.""" location = LiquidHandlingWellLocation( - origin=WellOrigin.MENISCUS, offset=WellOffset(x=0, y=0, z=-1) - ) - updated_location = LiquidHandlingWellLocation( origin=WellOrigin.MENISCUS, offset=WellOffset(x=0, y=0, z=-1), volumeOffset="operationVolume", ) - data = AspirateParams( pipetteId="abc", labwareId="123", @@ -353,7 +364,7 @@ async def test_aspirate_implementation_meniscus( pipette_id="abc", labware_id="123", well_name="A3", - well_location=updated_location, + well_location=location, current_well=None, operation_volume=-50, ), @@ -378,6 +389,11 @@ async def test_aspirate_implementation_meniscus( pipette_id="abc", new_location=update_types.Well(labware_id="123", well_name="A3"), new_deck_point=DeckPoint(x=1, y=2, z=3), - ) + ), + liquid_operated=update_types.LiquidOperatedUpdate( + labware_id="123", + well_name="A3", + volume_added=-50, + ), ), ) diff --git a/api/tests/opentrons/protocol_engine/commands/test_aspirate_in_place.py b/api/tests/opentrons/protocol_engine/commands/test_aspirate_in_place.py index 3891dd90294..f639033d157 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_aspirate_in_place.py +++ b/api/tests/opentrons/protocol_engine/commands/test_aspirate_in_place.py @@ -21,6 +21,12 @@ from opentrons.protocol_engine.resources import ModelUtils from opentrons.protocol_engine.state.state import StateStore from opentrons.protocol_engine.commands.pipetting_common import OverpressureError +from opentrons.protocol_engine.types import ( + CurrentWell, + CurrentPipetteLocation, + CurrentAddressableArea, +) +from opentrons.protocol_engine.state import update_types @pytest.fixture @@ -61,6 +67,22 @@ def subject( ) +@pytest.mark.parametrize( + "location,stateupdateLabware,stateupdateWell", + [ + ( + CurrentWell( + pipette_id="pipette-id-abc", + labware_id="labware-id-1", + well_name="well-name-1", + ), + "labware-id-1", + "well-name-1", + ), + (None, None, None), + (CurrentAddressableArea("pipette-id-abc", "addressable-area-1"), None, None), + ], +) async def test_aspirate_in_place_implementation( decoy: Decoy, pipetting: PipettingHandler, @@ -68,6 +90,9 @@ async def test_aspirate_in_place_implementation( hardware_api: HardwareAPI, mock_command_note_adder: CommandNoteAdder, subject: AspirateInPlaceImplementation, + location: CurrentPipetteLocation | None, + stateupdateLabware: str, + stateupdateWell: str, ) -> None: """It should aspirate in place.""" data = AspirateInPlaceParams( @@ -91,9 +116,27 @@ async def test_aspirate_in_place_implementation( ) ).then_return(123) + decoy.when(state_store.pipettes.get_current_location()).then_return(location) + result = await subject.execute(params=data) - assert result == SuccessData(public=AspirateInPlaceResult(volume=123), private=None) + if isinstance(location, CurrentWell): + assert result == SuccessData( + public=AspirateInPlaceResult(volume=123), + private=None, + state_update=update_types.StateUpdate( + liquid_operated=update_types.LiquidOperatedUpdate( + labware_id=stateupdateLabware, + well_name=stateupdateWell, + volume_added=-123, + ) + ), + ) + else: + assert result == SuccessData( + public=AspirateInPlaceResult(volume=123), + private=None, + ) async def test_handle_aspirate_in_place_request_not_ready_to_aspirate( @@ -153,6 +196,22 @@ async def test_aspirate_raises_volume_error( await subject.execute(data) +@pytest.mark.parametrize( + "location,stateupdateLabware,stateupdateWell", + [ + ( + CurrentWell( + pipette_id="pipette-id", + labware_id="labware-id-1", + well_name="well-name-1", + ), + "labware-id-1", + "well-name-1", + ), + (None, None, None), + (CurrentAddressableArea("pipette-id", "addressable-area-1"), None, None), + ], +) async def test_overpressure_error( decoy: Decoy, gantry_mover: GantryMover, @@ -160,6 +219,10 @@ async def test_overpressure_error( subject: AspirateInPlaceImplementation, model_utils: ModelUtils, mock_command_note_adder: CommandNoteAdder, + state_store: StateStore, + location: CurrentPipetteLocation | None, + stateupdateLabware: str, + stateupdateWell: str, ) -> None: """It should return an overpressure error if the hardware API indicates that.""" pipette_id = "pipette-id" @@ -191,14 +254,32 @@ async def test_overpressure_error( decoy.when(model_utils.generate_id()).then_return(error_id) decoy.when(model_utils.get_timestamp()).then_return(error_timestamp) decoy.when(await gantry_mover.get_position(pipette_id)).then_return(position) + decoy.when(state_store.pipettes.get_current_location()).then_return(location) result = await subject.execute(data) - assert result == DefinedErrorData( - public=OverpressureError.construct( - id=error_id, - createdAt=error_timestamp, - wrappedErrors=[matchers.Anything()], - errorInfo={"retryLocation": (position.x, position.y, position.z)}, - ), - ) + if isinstance(location, CurrentWell): + assert result == DefinedErrorData( + public=OverpressureError.construct( + id=error_id, + createdAt=error_timestamp, + wrappedErrors=[matchers.Anything()], + errorInfo={"retryLocation": (position.x, position.y, position.z)}, + ), + state_update=update_types.StateUpdate( + liquid_operated=update_types.LiquidOperatedUpdate( + labware_id=stateupdateLabware, + well_name=stateupdateWell, + volume_added=update_types.CLEAR, + ) + ), + ) + else: + assert result == DefinedErrorData( + public=OverpressureError.construct( + id=error_id, + createdAt=error_timestamp, + wrappedErrors=[matchers.Anything()], + errorInfo={"retryLocation": (position.x, position.y, position.z)}, + ), + ) diff --git a/api/tests/opentrons/protocol_engine/commands/test_dispense.py b/api/tests/opentrons/protocol_engine/commands/test_dispense.py index 167223e6d9d..106bf197e11 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_dispense.py +++ b/api/tests/opentrons/protocol_engine/commands/test_dispense.py @@ -92,6 +92,11 @@ async def test_dispense_implementation( ), new_deck_point=DeckPoint.construct(x=1, y=2, z=3), ), + liquid_operated=update_types.LiquidOperatedUpdate( + labware_id="labware-id-abc123", + well_name="A3", + volume_added=42, + ), ), ) @@ -161,5 +166,10 @@ async def test_overpressure_error( ), new_deck_point=DeckPoint.construct(x=1, y=2, z=3), ), + liquid_operated=update_types.LiquidOperatedUpdate( + labware_id="labware-id", + well_name="well-name", + volume_added=update_types.CLEAR, + ), ), ) diff --git a/api/tests/opentrons/protocol_engine/commands/test_dispense_in_place.py b/api/tests/opentrons/protocol_engine/commands/test_dispense_in_place.py index 53a491ad211..56090ec63a7 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_dispense_in_place.py +++ b/api/tests/opentrons/protocol_engine/commands/test_dispense_in_place.py @@ -1,6 +1,7 @@ """Test dispense-in-place commands.""" from datetime import datetime +import pytest from decoy import Decoy, matchers from opentrons_shared_data.errors.exceptions import PipetteOverpressureError @@ -16,17 +17,53 @@ ) from opentrons.protocol_engine.commands.pipetting_common import OverpressureError from opentrons.protocol_engine.resources import ModelUtils - - +from opentrons.protocol_engine.state.state import StateStore +from opentrons.protocol_engine.types import ( + CurrentWell, + CurrentPipetteLocation, + CurrentAddressableArea, +) +from opentrons.protocol_engine.state import update_types + + +@pytest.fixture +def state_store(decoy: Decoy) -> StateStore: + """Get a mock in the shape of a StateStore.""" + return decoy.mock(cls=StateStore) + + +@pytest.mark.parametrize( + "location,stateupdateLabware,stateupdateWell", + [ + ( + CurrentWell( + pipette_id="pipette-id-abc", + labware_id="labware-id-1", + well_name="well-name-1", + ), + "labware-id-1", + "well-name-1", + ), + (None, None, None), + (CurrentAddressableArea("pipette-id-abc", "addressable-area-1"), None, None), + ], +) async def test_dispense_in_place_implementation( decoy: Decoy, pipetting: PipettingHandler, + state_store: StateStore, gantry_mover: GantryMover, model_utils: ModelUtils, + location: CurrentPipetteLocation | None, + stateupdateLabware: str, + stateupdateWell: str, ) -> None: """It should dispense in place.""" subject = DispenseInPlaceImplementation( - pipetting=pipetting, gantry_mover=gantry_mover, model_utils=model_utils + pipetting=pipetting, + state_view=state_store, + gantry_mover=gantry_mover, + model_utils=model_utils, ) data = DispenseInPlaceParams( @@ -41,20 +78,61 @@ async def test_dispense_in_place_implementation( ) ).then_return(42) + decoy.when(state_store.pipettes.get_current_location()).then_return(location) + result = await subject.execute(data) - assert result == SuccessData(public=DispenseInPlaceResult(volume=42), private=None) + if isinstance(location, CurrentWell): + assert result == SuccessData( + public=DispenseInPlaceResult(volume=42), + private=None, + state_update=update_types.StateUpdate( + liquid_operated=update_types.LiquidOperatedUpdate( + labware_id=stateupdateLabware, + well_name=stateupdateWell, + volume_added=42, + ) + ), + ) + else: + assert result == SuccessData( + public=DispenseInPlaceResult(volume=42), + private=None, + ) +@pytest.mark.parametrize( + "location,stateupdateLabware,stateupdateWell", + [ + ( + CurrentWell( + pipette_id="pipette-id", + labware_id="labware-id-1", + well_name="well-name-1", + ), + "labware-id-1", + "well-name-1", + ), + (None, None, None), + (CurrentAddressableArea("pipette-id", "addressable-area-1"), None, None), + ], +) async def test_overpressure_error( decoy: Decoy, gantry_mover: GantryMover, pipetting: PipettingHandler, + state_store: StateStore, model_utils: ModelUtils, + location: CurrentPipetteLocation | None, + stateupdateLabware: str, + stateupdateWell: str, ) -> None: """It should return an overpressure error if the hardware API indicates that.""" subject = DispenseInPlaceImplementation( - pipetting=pipetting, gantry_mover=gantry_mover, model_utils=model_utils + pipetting=pipetting, + state_view=state_store, + gantry_mover=gantry_mover, + model_utils=model_utils, ) pipette_id = "pipette-id" @@ -83,14 +161,32 @@ async def test_overpressure_error( decoy.when(model_utils.generate_id()).then_return(error_id) decoy.when(model_utils.get_timestamp()).then_return(error_timestamp) decoy.when(await gantry_mover.get_position(pipette_id)).then_return(position) + decoy.when(state_store.pipettes.get_current_location()).then_return(location) result = await subject.execute(data) - assert result == DefinedErrorData( - public=OverpressureError.construct( - id=error_id, - createdAt=error_timestamp, - wrappedErrors=[matchers.Anything()], - errorInfo={"retryLocation": (position.x, position.y, position.z)}, - ), - ) + if isinstance(location, CurrentWell): + assert result == DefinedErrorData( + public=OverpressureError.construct( + id=error_id, + createdAt=error_timestamp, + wrappedErrors=[matchers.Anything()], + errorInfo={"retryLocation": (position.x, position.y, position.z)}, + ), + state_update=update_types.StateUpdate( + liquid_operated=update_types.LiquidOperatedUpdate( + labware_id=stateupdateLabware, + well_name=stateupdateWell, + volume_added=update_types.CLEAR, + ) + ), + ) + else: + assert result == DefinedErrorData( + public=OverpressureError.construct( + id=error_id, + createdAt=error_timestamp, + wrappedErrors=[matchers.Anything()], + errorInfo={"retryLocation": (position.x, position.y, position.z)}, + ) + ) 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 6fb6ebc6935..5593ac9ca66 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_liquid_probe.py +++ b/api/tests/opentrons/protocol_engine/commands/test_liquid_probe.py @@ -104,6 +104,7 @@ async def test_liquid_probe_implementation( subject: EitherImplementation, params_type: EitherParamsType, result_type: EitherResultType, + model_utils: ModelUtils, ) -> None: """It should move to the destination and do a liquid probe there.""" location = WellLocation(origin=WellOrigin.BOTTOM, offset=WellOffset(x=0, y=0, z=1)) @@ -137,6 +138,17 @@ async def test_liquid_probe_implementation( ), ).then_return(15.0) + decoy.when( + state_view.geometry.get_well_volume_at_height( + labware_id="123", + well_name="A3", + height=15.0, + ), + ).then_return(30.0) + + timestamp = datetime(year=2020, month=1, day=2) + decoy.when(model_utils.get_timestamp()).then_return(timestamp) + result = await subject.execute(data) assert type(result.public) is result_type # Pydantic v1 only compares the fields. @@ -148,7 +160,14 @@ async def test_liquid_probe_implementation( pipette_id="abc", new_location=update_types.Well(labware_id="123", well_name="A3"), new_deck_point=DeckPoint(x=1, y=2, z=3), - ) + ), + liquid_probed=update_types.LiquidProbedUpdate( + labware_id="123", + well_name="A3", + height=15.0, + volume=30.0, + last_probed=timestamp, + ), ), ) @@ -212,7 +231,14 @@ async def test_liquid_not_found_error( pipette_id=pipette_id, new_location=update_types.Well(labware_id=labware_id, well_name=well_name), new_deck_point=DeckPoint(x=position.x, y=position.y, z=position.z), - ) + ), + liquid_probed=update_types.LiquidProbedUpdate( + labware_id=labware_id, + well_name=well_name, + height=update_types.CLEAR, + volume=update_types.CLEAR, + last_probed=error_timestamp, + ), ) if isinstance(subject, LiquidProbeImplementation): assert result == DefinedErrorData( diff --git a/api/tests/opentrons/protocol_engine/commands/test_load_liquid.py b/api/tests/opentrons/protocol_engine/commands/test_load_liquid.py index 3ccaaea15d0..d8641b1eb4b 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_load_liquid.py +++ b/api/tests/opentrons/protocol_engine/commands/test_load_liquid.py @@ -1,6 +1,7 @@ """Test load-liquid command.""" import pytest from decoy import Decoy +from datetime import datetime from opentrons.protocol_engine.commands.command import SuccessData from opentrons.protocol_engine.commands import ( @@ -9,6 +10,8 @@ LoadLiquidParams, ) from opentrons.protocol_engine.state.state import StateView +from opentrons.protocol_engine.resources.model_utils import ModelUtils +from opentrons.protocol_engine.state import update_types @pytest.fixture @@ -18,15 +21,18 @@ def mock_state_view(decoy: Decoy) -> StateView: @pytest.fixture -def subject(mock_state_view: StateView) -> LoadLiquidImplementation: +def subject( + mock_state_view: StateView, model_utils: ModelUtils +) -> LoadLiquidImplementation: """Load liquid implementation test subject.""" - return LoadLiquidImplementation(state_view=mock_state_view) + return LoadLiquidImplementation(state_view=mock_state_view, model_utils=model_utils) async def test_load_liquid_implementation( decoy: Decoy, subject: LoadLiquidImplementation, mock_state_view: StateView, + model_utils: ModelUtils, ) -> None: """Test LoadLiquid command execution.""" data = LoadLiquidParams( @@ -34,9 +40,23 @@ async def test_load_liquid_implementation( liquidId="liquid-id", volumeByWell={"A1": 30, "B2": 100}, ) + + timestamp = datetime(year=2020, month=1, day=2) + decoy.when(model_utils.get_timestamp()).then_return(timestamp) + result = await subject.execute(data) - assert result == SuccessData(public=LoadLiquidResult(), private=None) + assert result == SuccessData( + public=LoadLiquidResult(), + private=None, + state_update=update_types.StateUpdate( + liquid_loaded=update_types.LiquidLoadedUpdate( + labware_id="labware-id", + volumes={"A1": 30, "B2": 100}, + last_loaded=timestamp, + ) + ), + ) decoy.verify(mock_state_view.liquid.validate_liquid_id("liquid-id")) diff --git a/api/tests/opentrons/protocol_engine/state/command_fixtures.py b/api/tests/opentrons/protocol_engine/state/command_fixtures.py index 9c4665d31a2..5ac522095f2 100644 --- a/api/tests/opentrons/protocol_engine/state/command_fixtures.py +++ b/api/tests/opentrons/protocol_engine/state/command_fixtures.py @@ -1,7 +1,7 @@ """Command factories to use in tests as data fixtures.""" from datetime import datetime from pydantic import BaseModel -from typing import Optional, cast +from typing import Optional, cast, Dict from opentrons_shared_data.pipette.types import PipetteNameType from opentrons.types import MountType @@ -338,6 +338,29 @@ def create_liquid_probe_command( ) +def create_load_liquid_command( + liquid_id: str = "liquid-id", + labware_id: str = "labware-id", + volume_by_well: Dict[str, float] = {"A1": 30, "B2": 100}, +) -> cmd.LoadLiquid: + """Get a completed Load Liquid command.""" + params = cmd.LoadLiquidParams( + liquidId=liquid_id, + labwareId=labware_id, + volumeByWell=volume_by_well, + ) + result = cmd.LoadLiquidResult() + + return cmd.LoadLiquid( + id="command-id", + key="command-key", + status=cmd.CommandStatus.SUCCEEDED, + createdAt=datetime.now(), + params=params, + result=result, + ) + + def create_pick_up_tip_command( pipette_id: str, labware_id: str = "labware-id", 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 7a94f06ca09..1a0e27d2bb5 100644 --- a/api/tests/opentrons/protocol_engine/state/test_geometry_view.py +++ b/api/tests/opentrons/protocol_engine/state/test_geometry_view.py @@ -55,6 +55,9 @@ LoadedPipette, TipGeometry, ModuleDefinition, + ProbedHeightInfo, + LoadedVolumeInfo, + WellLiquidInfo, ) from opentrons.protocol_engine.commands import ( CommandStatus, @@ -1539,9 +1542,13 @@ def test_get_well_position_with_meniscus_offset( decoy.when(mock_labware_view.get_well_definition("labware-id", "B2")).then_return( well_def ) - decoy.when( - mock_well_view.get_last_measured_liquid_height("labware-id", "B2") - ).then_return(70.5) + decoy.when(mock_well_view.get_well_liquid_info("labware-id", "B2")).then_return( + WellLiquidInfo( + probed_volume=None, + probed_height=ProbedHeightInfo(height=70.5, last_probed=datetime.now()), + loaded_volume=None, + ) + ) decoy.when( mock_pipette_view.get_current_tip_lld_settings(pipette_id="pipette-id") ).then_return(0.5) @@ -1563,6 +1570,68 @@ def test_get_well_position_with_meniscus_offset( ) +def test_get_well_position_with_volume_offset_raises_error( + decoy: Decoy, + well_plate_def: LabwareDefinition, + mock_labware_view: LabwareView, + mock_well_view: WellView, + mock_addressable_area_view: AddressableAreaView, + mock_pipette_view: PipetteView, + subject: GeometryView, +) -> None: + """Calling get_well_position with any volume offset should raise an error when there's no innerLabwareGeometry.""" + labware_data = LoadedLabware( + id="labware-id", + loadName="load-name", + definitionUri="definition-uri", + location=DeckSlotLocation(slotName=DeckSlotName.SLOT_4), + offsetId="offset-id", + ) + calibration_offset = LabwareOffsetVector(x=1, y=-2, z=3) + slot_pos = Point(4, 5, 6) + well_def = well_plate_def.wells["B2"] + + decoy.when(mock_labware_view.get("labware-id")).then_return(labware_data) + decoy.when(mock_labware_view.get_definition("labware-id")).then_return( + well_plate_def + ) + decoy.when(mock_labware_view.get_labware_offset_vector("labware-id")).then_return( + calibration_offset + ) + decoy.when( + mock_addressable_area_view.get_addressable_area_position(DeckSlotName.SLOT_4.id) + ).then_return(slot_pos) + decoy.when(mock_labware_view.get_well_definition("labware-id", "B2")).then_return( + well_def + ) + decoy.when(mock_well_view.get_well_liquid_info("labware-id", "B2")).then_return( + WellLiquidInfo( + loaded_volume=None, + probed_height=ProbedHeightInfo(height=45.0, last_probed=datetime.now()), + probed_volume=None, + ) + ) + decoy.when( + mock_pipette_view.get_current_tip_lld_settings(pipette_id="pipette-id") + ).then_return(0.5) + decoy.when(mock_labware_view.get_well_geometry("labware-id", "B2")).then_raise( + errors.IncompleteLabwareDefinitionError("Woops!") + ) + + with pytest.raises(errors.IncompleteLabwareDefinitionError): + subject.get_well_position( + labware_id="labware-id", + well_name="B2", + well_location=LiquidHandlingWellLocation( + origin=WellOrigin.MENISCUS, + offset=WellOffset(x=2, y=3, z=4), + volumeOffset="operationVolume", + ), + operation_volume=-1245.833, + pipette_id="pipette-id", + ) + + def test_get_well_position_with_meniscus_and_literal_volume_offset( decoy: Decoy, well_plate_def: LabwareDefinition, @@ -1597,9 +1666,13 @@ def test_get_well_position_with_meniscus_and_literal_volume_offset( decoy.when(mock_labware_view.get_well_definition("labware-id", "B2")).then_return( well_def ) - decoy.when( - mock_well_view.get_last_measured_liquid_height("labware-id", "B2") - ).then_return(45.0) + decoy.when(mock_well_view.get_well_liquid_info("labware-id", "B2")).then_return( + WellLiquidInfo( + loaded_volume=None, + probed_height=ProbedHeightInfo(height=45.0, last_probed=datetime.now()), + probed_volume=None, + ) + ) labware_def = _load_labware_definition_data() assert labware_def.innerLabwareGeometry is not None inner_well_def = labware_def.innerLabwareGeometry["welldefinition1111"] @@ -1663,9 +1736,13 @@ def test_get_well_position_with_meniscus_and_float_volume_offset( decoy.when(mock_labware_view.get_well_definition("labware-id", "B2")).then_return( well_def ) - decoy.when( - mock_well_view.get_last_measured_liquid_height("labware-id", "B2") - ).then_return(45.0) + decoy.when(mock_well_view.get_well_liquid_info("labware-id", "B2")).then_return( + WellLiquidInfo( + loaded_volume=None, + probed_height=ProbedHeightInfo(height=45.0, last_probed=datetime.now()), + probed_volume=None, + ) + ) labware_def = _load_labware_definition_data() assert labware_def.innerLabwareGeometry is not None inner_well_def = labware_def.innerLabwareGeometry["welldefinition1111"] @@ -1728,9 +1805,13 @@ def test_get_well_position_raises_validation_error( decoy.when(mock_labware_view.get_well_definition("labware-id", "B2")).then_return( well_def ) - decoy.when( - mock_well_view.get_last_measured_liquid_height("labware-id", "B2") - ).then_return(40.0) + decoy.when(mock_well_view.get_well_liquid_info("labware-id", "B2")).then_return( + WellLiquidInfo( + loaded_volume=None, + probed_height=ProbedHeightInfo(height=40.0, last_probed=datetime.now()), + probed_volume=None, + ) + ) labware_def = _load_labware_definition_data() assert labware_def.innerLabwareGeometry is not None inner_well_def = labware_def.innerLabwareGeometry["welldefinition1111"] @@ -1755,6 +1836,76 @@ def test_get_well_position_raises_validation_error( ) +def test_get_meniscus_height( + decoy: Decoy, + well_plate_def: LabwareDefinition, + mock_labware_view: LabwareView, + mock_well_view: WellView, + mock_addressable_area_view: AddressableAreaView, + mock_pipette_view: PipetteView, + subject: GeometryView, +) -> None: + """It should be able to get the position of a well meniscus in a labware.""" + labware_data = LoadedLabware( + id="labware-id", + loadName="load-name", + definitionUri="definition-uri", + location=DeckSlotLocation(slotName=DeckSlotName.SLOT_4), + offsetId="offset-id", + ) + calibration_offset = LabwareOffsetVector(x=1, y=-2, z=3) + slot_pos = Point(4, 5, 6) + well_def = well_plate_def.wells["B2"] + + decoy.when(mock_labware_view.get("labware-id")).then_return(labware_data) + decoy.when(mock_labware_view.get_definition("labware-id")).then_return( + well_plate_def + ) + decoy.when(mock_labware_view.get_labware_offset_vector("labware-id")).then_return( + calibration_offset + ) + decoy.when( + mock_addressable_area_view.get_addressable_area_position(DeckSlotName.SLOT_4.id) + ).then_return(slot_pos) + decoy.when(mock_labware_view.get_well_definition("labware-id", "B2")).then_return( + well_def + ) + decoy.when(mock_well_view.get_well_liquid_info("labware-id", "B2")).then_return( + WellLiquidInfo( + loaded_volume=LoadedVolumeInfo( + volume=2000.0, last_loaded=datetime.now(), operations_since_load=0 + ), + probed_height=None, + probed_volume=None, + ) + ) + labware_def = _load_labware_definition_data() + assert labware_def.innerLabwareGeometry is not None + inner_well_def = labware_def.innerLabwareGeometry["welldefinition1111"] + decoy.when(mock_labware_view.get_well_geometry("labware-id", "B2")).then_return( + inner_well_def + ) + decoy.when( + mock_pipette_view.get_current_tip_lld_settings(pipette_id="pipette-id") + ).then_return(0.5) + + result = subject.get_well_position( + labware_id="labware-id", + well_name="B2", + well_location=WellLocation( + origin=WellOrigin.MENISCUS, + offset=WellOffset(x=2, y=3, z=4), + ), + pipette_id="pipette-id", + ) + + assert result == Point( + x=slot_pos[0] + 1 + well_def.x + 2, + y=slot_pos[1] - 2 + well_def.y + 3, + z=slot_pos[2] + 3 + well_def.z + 4 + 39.2423, + ) + + def test_get_relative_well_location( decoy: Decoy, well_plate_def: LabwareDefinition, @@ -3133,9 +3284,13 @@ def test_validate_dispense_volume_into_well_meniscus( decoy.when(mock_labware_view.get_well_geometry("labware-id", "A1")).then_return( inner_well_def ) - decoy.when( - mock_well_view.get_last_measured_liquid_height("labware-id", "A1") - ).then_return(40.0) + decoy.when(mock_well_view.get_well_liquid_info("labware-id", "A1")).then_return( + WellLiquidInfo( + loaded_volume=None, + probed_height=ProbedHeightInfo(height=40.0, last_probed=datetime.now()), + probed_volume=None, + ) + ) with pytest.raises(errors.InvalidDispenseVolumeError): subject.validate_dispense_volume_into_well( diff --git a/api/tests/opentrons/protocol_engine/state/test_labware_view.py b/api/tests/opentrons/protocol_engine/state/test_labware_view.py index d461ddda4e6..d6b05b7b027 100644 --- a/api/tests/opentrons/protocol_engine/state/test_labware_view.py +++ b/api/tests/opentrons/protocol_engine/state/test_labware_view.py @@ -460,6 +460,17 @@ def test_get_well_definition_get_first(well_plate_def: LabwareDefinition) -> Non assert result == expected_well_def +def test_get_well_geometry_raises_error(well_plate_def: LabwareDefinition) -> None: + """It should raise an IncompleteLabwareDefinitionError when there's no innerLabwareGeometry.""" + subject = get_labware_view( + labware_by_id={"plate-id": plate}, + definitions_by_uri={"some-plate-uri": well_plate_def}, + ) + + with pytest.raises(errors.IncompleteLabwareDefinitionError): + subject.get_well_geometry(labware_id="plate-id") + + def test_get_well_size_circular(well_plate_def: LabwareDefinition) -> None: """It should return the well dimensions of a circular well.""" subject = get_labware_view( diff --git a/api/tests/opentrons/protocol_engine/state/test_well_store.py b/api/tests/opentrons/protocol_engine/state/test_well_store.py index 325021a9942..822329aa874 100644 --- a/api/tests/opentrons/protocol_engine/state/test_well_store.py +++ b/api/tests/opentrons/protocol_engine/state/test_well_store.py @@ -1,9 +1,15 @@ """Well state store tests.""" import pytest +from datetime import datetime from opentrons.protocol_engine.state.wells import WellStore from opentrons.protocol_engine.actions.actions import SucceedCommandAction +from opentrons.protocol_engine.state import update_types -from .command_fixtures import create_liquid_probe_command +from .command_fixtures import ( + create_liquid_probe_command, + create_load_liquid_command, + create_aspirate_command, +) @pytest.fixture @@ -16,13 +22,215 @@ def test_handles_liquid_probe_success(subject: WellStore) -> None: """It should add the well to the state after a successful liquid probe.""" labware_id = "labware-id" well_name = "well-name" + liquid_probe = create_liquid_probe_command() + timestamp = datetime(year=2020, month=1, day=2) + + subject.handle_action( + SucceedCommandAction( + private_result=None, + command=liquid_probe, + state_update=update_types.StateUpdate( + liquid_probed=update_types.LiquidProbedUpdate( + labware_id="labware-id", + well_name="well-name", + height=15.0, + volume=30.0, + last_probed=timestamp, + ) + ), + ) + ) + + assert len(subject.state.probed_heights) == 1 + assert len(subject.state.probed_volumes) == 1 + + assert subject.state.probed_heights[labware_id][well_name].height == 15.0 + assert subject.state.probed_heights[labware_id][well_name].last_probed == timestamp + assert subject.state.probed_volumes[labware_id][well_name].volume == 30.0 + assert subject.state.probed_volumes[labware_id][well_name].last_probed == timestamp + assert ( + subject.state.probed_volumes[labware_id][well_name].operations_since_probe == 0 + ) + + +def test_handles_load_liquid_success(subject: WellStore) -> None: + """It should add the well to the state after a successful load liquid.""" + labware_id = "labware-id" + well_name_1 = "well-name-1" + well_name_2 = "well-name-2" + load_liquid = create_load_liquid_command( + labware_id=labware_id, volume_by_well={well_name_1: 30, well_name_2: 100} + ) + timestamp = datetime(year=2020, month=1, day=2) + + subject.handle_action( + SucceedCommandAction( + private_result=None, + command=load_liquid, + state_update=update_types.StateUpdate( + liquid_loaded=update_types.LiquidLoadedUpdate( + labware_id=labware_id, + volumes={well_name_1: 30, well_name_2: 100}, + last_loaded=timestamp, + ) + ), + ) + ) + + assert len(subject.state.loaded_volumes) == 1 + assert len(subject.state.loaded_volumes[labware_id]) == 2 + + assert subject.state.loaded_volumes[labware_id][well_name_1].volume == 30.0 + assert ( + subject.state.loaded_volumes[labware_id][well_name_1].last_loaded == timestamp + ) + assert ( + subject.state.loaded_volumes[labware_id][well_name_1].operations_since_load == 0 + ) + assert subject.state.loaded_volumes[labware_id][well_name_2].volume == 100.0 + assert ( + subject.state.loaded_volumes[labware_id][well_name_2].last_loaded == timestamp + ) + assert ( + subject.state.loaded_volumes[labware_id][well_name_2].operations_since_load == 0 + ) + + +def test_handles_load_liquid_and_aspirate(subject: WellStore) -> None: + """It should populate the well state after load liquid and update the well state after aspirate.""" + pipette_id = "pipette-id" + labware_id = "labware-id" + well_name_1 = "well-name-1" + well_name_2 = "well-name-2" + aspirated_volume = 10.0 + load_liquid = create_load_liquid_command( + labware_id=labware_id, volume_by_well={well_name_1: 30, well_name_2: 100} + ) + aspirate_1 = create_aspirate_command( + pipette_id=pipette_id, + volume=aspirated_volume, + flow_rate=1.0, + labware_id=labware_id, + well_name=well_name_1, + ) + aspirate_2 = create_aspirate_command( + pipette_id=pipette_id, + volume=aspirated_volume, + flow_rate=1.0, + labware_id=labware_id, + well_name=well_name_2, + ) + timestamp = datetime(year=2020, month=1, day=2) + + subject.handle_action( + SucceedCommandAction( + private_result=None, + command=load_liquid, + state_update=update_types.StateUpdate( + liquid_loaded=update_types.LiquidLoadedUpdate( + labware_id=labware_id, + volumes={well_name_1: 30, well_name_2: 100}, + last_loaded=timestamp, + ) + ), + ) + ) + subject.handle_action( + SucceedCommandAction( + private_result=None, + command=aspirate_1, + state_update=update_types.StateUpdate( + liquid_operated=update_types.LiquidOperatedUpdate( + labware_id=labware_id, + well_name=well_name_1, + volume_added=-aspirated_volume, + ) + ), + ) + ) + subject.handle_action( + SucceedCommandAction( + private_result=None, + command=aspirate_2, + state_update=update_types.StateUpdate( + liquid_operated=update_types.LiquidOperatedUpdate( + labware_id=labware_id, + well_name=well_name_2, + volume_added=-aspirated_volume, + ) + ), + ) + ) + + assert len(subject.state.loaded_volumes) == 1 + assert len(subject.state.loaded_volumes[labware_id]) == 2 + assert subject.state.loaded_volumes[labware_id][well_name_1].volume == 20.0 + assert ( + subject.state.loaded_volumes[labware_id][well_name_1].last_loaded == timestamp + ) + assert ( + subject.state.loaded_volumes[labware_id][well_name_1].operations_since_load == 1 + ) + assert subject.state.loaded_volumes[labware_id][well_name_2].volume == 90.0 + assert ( + subject.state.loaded_volumes[labware_id][well_name_2].last_loaded == timestamp + ) + assert ( + subject.state.loaded_volumes[labware_id][well_name_2].operations_since_load == 1 + ) + + +def test_handles_liquid_probe_and_aspirate(subject: WellStore) -> None: + """It should populate the well state after liquid probe and update the well state after aspirate.""" + pipette_id = "pipette-id" + labware_id = "labware-id" + well_name = "well-name" + aspirated_volume = 10.0 liquid_probe = create_liquid_probe_command() + aspirate = create_aspirate_command( + pipette_id=pipette_id, + volume=aspirated_volume, + flow_rate=1.0, + labware_id=labware_id, + well_name=well_name, + ) + timestamp = datetime(year=2020, month=1, day=2) subject.handle_action( - SucceedCommandAction(private_result=None, command=liquid_probe) + SucceedCommandAction( + private_result=None, + command=liquid_probe, + state_update=update_types.StateUpdate( + liquid_probed=update_types.LiquidProbedUpdate( + labware_id="labware-id", + well_name="well-name", + height=15.0, + volume=30.0, + last_probed=timestamp, + ) + ), + ) + ) + subject.handle_action( + SucceedCommandAction( + private_result=None, + command=aspirate, + state_update=update_types.StateUpdate( + liquid_operated=update_types.LiquidOperatedUpdate( + labware_id="labware-id", + well_name="well-name", + volume_added=-aspirated_volume, + ) + ), + ) ) - assert len(subject.state.measured_liquid_heights) == 1 + assert len(subject.state.probed_heights[labware_id]) == 0 + assert len(subject.state.probed_volumes) == 1 - assert subject.state.measured_liquid_heights[labware_id][well_name].height == 0.5 + assert subject.state.probed_volumes[labware_id][well_name].volume == 20.0 + assert subject.state.probed_volumes[labware_id][well_name].last_probed == timestamp + assert ( + subject.state.probed_volumes[labware_id][well_name].operations_since_probe == 1 + ) diff --git a/api/tests/opentrons/protocol_engine/state/test_well_view.py b/api/tests/opentrons/protocol_engine/state/test_well_view.py index 3bd86e9dcb9..5025e4ee93e 100644 --- a/api/tests/opentrons/protocol_engine/state/test_well_view.py +++ b/api/tests/opentrons/protocol_engine/state/test_well_view.py @@ -1,6 +1,10 @@ """Well view tests.""" from datetime import datetime -from opentrons.protocol_engine.types import LiquidHeightInfo +from opentrons.protocol_engine.types import ( + LoadedVolumeInfo, + ProbedHeightInfo, + ProbedVolumeInfo, +) import pytest from opentrons.protocol_engine.state.wells import WellState, WellView @@ -8,44 +12,47 @@ @pytest.fixture def subject() -> WellView: """Get a well view test subject.""" - labware_id = "labware-id" - well_name = "well-name" - height_info = LiquidHeightInfo(height=0.5, last_measured=datetime.now()) - state = WellState(measured_liquid_heights={labware_id: {well_name: height_info}}) + loaded_volume_info = LoadedVolumeInfo( + volume=30.0, last_loaded=datetime.now(), operations_since_load=0 + ) + probed_height_info = ProbedHeightInfo(height=5.5, last_probed=datetime.now()) + probed_volume_info = ProbedVolumeInfo( + volume=25.0, last_probed=datetime.now(), operations_since_probe=0 + ) + state = WellState( + loaded_volumes={"labware_id_1": {"well_name": loaded_volume_info}}, + probed_heights={"labware_id_2": {"well_name": probed_height_info}}, + probed_volumes={"labware_id_2": {"well_name": probed_volume_info}}, + ) return WellView(state) -def test_get_all(subject: WellView) -> None: - """Should return a list of well heights.""" - assert subject.get_all()[0].height == 0.5 - - -def test_get_last_measured_liquid_height(subject: WellView) -> None: - """Should return the height of a single well correctly for valid wells.""" - labware_id = "labware-id" - well_name = "well-name" - - invalid_labware_id = "invalid-labware-id" - invalid_well_name = "invalid-well-name" - - assert ( - subject.get_last_measured_liquid_height(invalid_labware_id, invalid_well_name) - is None +def test_get_well_liquid_info(subject: WellView) -> None: + """Should return a tuple of well infos.""" + volume_info = subject.get_well_liquid_info( + labware_id="labware_id_1", well_name="well_name" ) - assert subject.get_last_measured_liquid_height(labware_id, well_name) == 0.5 + assert volume_info.loaded_volume is not None + assert volume_info.probed_height is None + assert volume_info.probed_volume is None + assert volume_info.loaded_volume.volume == 30.0 + volume_info = subject.get_well_liquid_info( + labware_id="labware_id_2", well_name="well_name" + ) + assert volume_info.loaded_volume is None + assert volume_info.probed_height is not None + assert volume_info.probed_volume is not None + assert volume_info.probed_height.height == 5.5 + assert volume_info.probed_volume.volume == 25.0 -def test_has_measured_liquid_height(subject: WellView) -> None: - """Should return True for measured wells and False for ones that have no measurements.""" - labware_id = "labware-id" - well_name = "well-name" - invalid_labware_id = "invalid-labware-id" - invalid_well_name = "invalid-well-name" +def test_get_all(subject: WellView) -> None: + """Should return a list of well summaries.""" + summaries = subject.get_all() - assert ( - subject.has_measured_liquid_height(invalid_labware_id, invalid_well_name) - is False - ) - assert subject.has_measured_liquid_height(labware_id, well_name) is True + assert len(summaries) == 2, f"{summaries}" + assert summaries[0].loaded_volume == 30.0 + assert summaries[1].probed_height == 5.5 + assert summaries[1].probed_volume == 25.0 From 1585b48a2fb9e1cac6cd1d15dc5c5f780cbdcfc7 Mon Sep 17 00:00:00 2001 From: Jethary Alcid <66035149+jerader@users.noreply.github.com> Date: Tue, 29 Oct 2024 09:34:46 -0400 Subject: [PATCH 16/81] feat(protocol-designer): flow rate field refactor (#16614) closes AUTH-976 --- .../localization/en/protocol_steps.json | 1 + .../molecules/InputStepFormField/index.tsx | 7 + .../StepForm/PipetteFields/FlowRateField.tsx | 74 +++-- .../StepForm/PipetteFields/FlowRateInput.tsx | 255 ------------------ .../StepForm/StepTools/MixTools/index.tsx | 2 + .../StepTools/MoveLiquidTools/index.tsx | 2 + .../src/steplist/fieldLevel/index.ts | 9 + 7 files changed, 78 insertions(+), 272 deletions(-) delete mode 100644 protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/FlowRateInput.tsx diff --git a/protocol-designer/src/assets/localization/en/protocol_steps.json b/protocol-designer/src/assets/localization/en/protocol_steps.json index 4f7e3a00ed6..ea0339978ec 100644 --- a/protocol-designer/src/assets/localization/en/protocol_steps.json +++ b/protocol-designer/src/assets/localization/en/protocol_steps.json @@ -10,6 +10,7 @@ "blowout_location": "Blowout location", "blowout_position": "Blowout position from bottom", "change_tips": "Change tips", + "default_flow_rate": "The default flow rate is {{flowRate}}", "default_tip_option": "Default - get next tip", "delay_duration": "Delay duration", "delay_position": "Delay position from bottom", diff --git a/protocol-designer/src/molecules/InputStepFormField/index.tsx b/protocol-designer/src/molecules/InputStepFormField/index.tsx index 1f5e5223f0b..8048d136e62 100644 --- a/protocol-designer/src/molecules/InputStepFormField/index.tsx +++ b/protocol-designer/src/molecules/InputStepFormField/index.tsx @@ -1,9 +1,11 @@ import { useTranslation } from 'react-i18next' import { Flex, InputField, SPACING } from '@opentrons/components' +import type { Dispatch, SetStateAction } from 'react' import type { FieldProps } from '../../components/StepEditForm/types' interface InputStepFormFieldProps extends FieldProps { title: string + setIsPristine?: Dispatch> units?: string padding?: string showTooltip?: boolean @@ -28,6 +30,7 @@ export function InputStepFormField( tooltipContent, caption, formLevelError, + setIsPristine, ...otherProps } = props const { t } = useTranslation('tooltip') @@ -39,6 +42,7 @@ export function InputStepFormField( tooltipText={ showTooltip ? t(`${tooltipContent}`) ?? undefined : undefined } + type="number" title={title} caption={caption} name={name} @@ -47,6 +51,9 @@ export function InputStepFormField( onFocus={onFieldFocus} onChange={e => { updateValue(e.currentTarget.value) + if (setIsPristine != null) { + setIsPristine(false) + } }} value={value ? String(value) : null} units={units} diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/FlowRateField.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/FlowRateField.tsx index a89c4f0be62..027e5c3a5fc 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/FlowRateField.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/FlowRateField.tsx @@ -1,13 +1,13 @@ import { useSelector } from 'react-redux' +import { useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import { selectors as stepFormSelectors } from '../../../../../step-forms' import { getMatchingTipLiquidSpecs } from '../../../../../utils' -import { FlowRateInput } from './FlowRateInput' +import { InputStepFormField } from '../../../../../molecules' import type { FieldProps } from '../types' -import type { FlowRateInputProps } from './FlowRateInput' interface FlowRateFieldProps extends FieldProps { - flowRateType: FlowRateInputProps['flowRateType'] + flowRateType: 'aspirate' | 'dispense' | 'blowout' volume: unknown tiprack: unknown pipetteId?: string | null @@ -17,23 +17,22 @@ export function FlowRateField(props: FlowRateFieldProps): JSX.Element { const { pipetteId, flowRateType, - value, volume, tiprack, name, + tooltipContent, ...passThruProps } = props - const { t } = useTranslation('shared') + const { t, i18n } = useTranslation(['form', 'application', 'protocol_steps']) + const [isPristine, setIsPristine] = useState(true) const pipetteEntities = useSelector(stepFormSelectors.getPipetteEntities) const pipette = pipetteId != null ? pipetteEntities[pipetteId] : null - const pipetteDisplayName = pipette ? pipette.spec.displayName : t('pipette') - const innerKey = `${name}:${String(value || 0)}` const matchingTipLiquidSpecs = pipette != null ? getMatchingTipLiquidSpecs(pipette, volume as number, tiprack as string) : null - let defaultFlowRate + let defaultFlowRate = 0 if (pipette) { if (flowRateType === 'aspirate') { defaultFlowRate = @@ -46,18 +45,59 @@ export function FlowRateField(props: FlowRateFieldProps): JSX.Element { matchingTipLiquidSpecs?.defaultBlowOutFlowRate.default ?? 0 } } + + const title = i18n.format( + t('protocol_steps:flow_type_title', { type: flowRateType }), + 'capitalize' + ) + + const flowRateNum = Number(passThruProps.value) + const maxFlowRate = matchingTipLiquidSpecs?.uiMaxFlowRate ?? Infinity + + const outOfBounds = flowRateNum > maxFlowRate || flowRateNum < 0 + + let errorMessage: string | null = null + if ( + (!isPristine && passThruProps.value !== undefined && flowRateNum === 0) || + outOfBounds + ) { + errorMessage = i18n.format( + t('step_edit_form.field.flow_rate.error_out_of_bounds', { + min: 0.1, + max: maxFlowRate, + }), + 'capitalize' + ) + } + + useEffect(() => { + if (isPristine && errorMessage != null) { + passThruProps.updateValue(defaultFlowRate) + } + }, []) + return ( - ) } diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/FlowRateInput.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/FlowRateInput.tsx deleted file mode 100644 index 210f831bb86..00000000000 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/FlowRateInput.tsx +++ /dev/null @@ -1,255 +0,0 @@ -import { useState } from 'react' -import { createPortal } from 'react-dom' -import round from 'lodash/round' -import { useTranslation } from 'react-i18next' -import { - RadioGroup, - Flex, - useHoverTooltip, - InputField, - Modal, - SecondaryButton, - PrimaryButton, - Tooltip, -} from '@opentrons/components' -import { getMainPagePortalEl } from '../../../../../components/portals/MainPageModalPortal' -import type { ChangeEvent } from 'react' -import type { FieldProps } from '../types' - -const DECIMALS_ALLOWED = 1 - -export interface FlowRateInputProps extends FieldProps { - flowRateType: 'aspirate' | 'dispense' | 'blowout' - minFlowRate: number - maxFlowRate: number - defaultFlowRate?: number | null - pipetteDisplayName?: string | null -} - -interface InitialState { - isPristine: boolean - modalUseDefault: boolean - showModal: boolean - modalFlowRate?: string | null -} - -export function FlowRateInput(props: FlowRateInputProps): JSX.Element { - const { - defaultFlowRate, - disabled, - flowRateType, - isIndeterminate, - maxFlowRate, - minFlowRate, - name, - pipetteDisplayName, - tooltipContent, - value, - } = props - const [targetProps, tooltipProps] = useHoverTooltip() - const { t, i18n } = useTranslation([ - 'form', - 'application', - 'shared', - 'protocol_steps', - ]) - - const initialState: InitialState = { - isPristine: true, - modalFlowRate: props.value ? String(props.value) : null, - modalUseDefault: !props.value && !isIndeterminate, - showModal: false, - } - - const [isPristine, setIsPristine] = useState( - initialState.isPristine - ) - - const [modalFlowRate, setModalFlowRate] = useState< - InitialState['modalFlowRate'] - >(initialState.modalFlowRate) - - const [modalUseDefault, setModalUseDefault] = useState< - InitialState['modalUseDefault'] - >(initialState.modalUseDefault) - - const [showModal, setShowModal] = useState( - initialState.showModal - ) - - const resetModalState = (): void => { - setShowModal(initialState.showModal) - setModalFlowRate(initialState.modalFlowRate) - setModalUseDefault(initialState.modalUseDefault) - setIsPristine(initialState.isPristine) - } - - const cancelModal = resetModalState - - const openModal = (): void => { - setShowModal(true) - } - - const makeSaveModal = (allowSave: boolean) => (): void => { - setIsPristine(false) - - if (allowSave) { - const newFlowRate = modalUseDefault ? null : Number(modalFlowRate) - props.updateValue(newFlowRate) - resetModalState() - } - } - - const handleChangeRadio = (e: ChangeEvent): void => { - setModalUseDefault(e.target.value !== 'custom') - } - - const handleChangeNumber = (e: ChangeEvent): void => { - const value = e.target.value - if (value === '' || value === '.' || !Number.isNaN(Number(value))) { - setModalFlowRate(value) - setModalUseDefault(false) - } - } - const title = i18n.format( - t('protocol_steps:flow_type_title', { type: flowRateType }), - 'capitalize' - ) - - const modalFlowRateNum = Number(modalFlowRate) - - // show 0.1 not 0 as minimum, since bottom of range is non-inclusive - const displayMinFlowRate = minFlowRate || Math.pow(10, -DECIMALS_ALLOWED) - const rangeDescription = t('step_edit_form.field.flow_rate.range', { - min: displayMinFlowRate, - max: maxFlowRate, - }) - const outOfBounds = - modalFlowRateNum === 0 || - minFlowRate > modalFlowRateNum || - modalFlowRateNum > maxFlowRate - const correctDecimals = - round(modalFlowRateNum, DECIMALS_ALLOWED) === modalFlowRateNum - const allowSave = modalUseDefault || (!outOfBounds && correctDecimals) - - let errorMessage = null - // validation only happens when "Custom" is selected, not "Default" - // and pristinity only masks the outOfBounds error, not the correctDecimals error - if (!modalUseDefault) { - if (!Number.isNaN(modalFlowRateNum) && !correctDecimals) { - errorMessage = t('step_edit_form.field.flow_rate.error_decimals', { - decimals: `${DECIMALS_ALLOWED}`, - }) - } else if (!isPristine && outOfBounds) { - errorMessage = t('step_edit_form.field.flow_rate.error_out_of_bounds', { - min: displayMinFlowRate, - max: maxFlowRate, - }) - } - } - - const FlowRateInputField = ( - - ) - - // TODO: update the modal - const FlowRateModal = - pipetteDisplayName && - createPortal( - - - {t('shared:cancel')} - - - {t('shared:done')} - - - } - > -

    {t('protocol_steps:flow_type_title', { type: flowRateType })}

    - -
    {title}
    - -
    {`${flowRateType} speed`}
    - - - , - getMainPagePortalEl() - ) - - return ( - <> - {flowRateType === 'blowout' ? ( - - - {tooltipContent} - - ) : ( - - - - )} - - {showModal && FlowRateModal} - - ) -} diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/MixTools/index.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/MixTools/index.tsx index 893a2b4d5f1..a319afc572a 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/MixTools/index.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/MixTools/index.tsx @@ -150,6 +150,7 @@ export function MixTools(props: StepFormProps): JSX.Element { = { tipRack: { getErrors: composeErrors(requiredField), }, + aspirate_flowRate: { + maskValue: composeMaskers(trimDecimals(1)), + }, + dispense_flowRate: { + maskValue: composeMaskers(trimDecimals(1)), + }, + mix_flowRate: { + maskValue: composeMaskers(trimDecimals(1)), + }, } const profileFieldHelperMap: Record = { // profile step fields From 1a91bf472ac81be6fdc7891d61d942a69984c451 Mon Sep 17 00:00:00 2001 From: Sarah Breen Date: Tue, 29 Oct 2024 10:13:24 -0400 Subject: [PATCH 17/81] feat(app, shared-data, components): support for stacking multiple labware (#16615) fix PLAT-499, PLAT-500, PLAT-502, PLAT-548 --- .../labware/opentrons_flex_deck_riser.png | Bin 0 -> 17859 bytes .../opentrons_tough_pcr_auto_sealing_lid.png | Bin 0 -> 32793 bytes .../localization/en/protocol_setup.json | 1 + .../LabwareStackModal/LabwareStackModal.tsx | 155 +++++++++------ .../SetupLabware/LabwareListItem.tsx | 183 ++++++++---------- .../SetupLabware/OffDeckLabwareList.tsx | 1 - .../SetupLabware/SetupLabwareList.tsx | 7 +- .../SetupLabware/SetupLabwareMap.tsx | 147 +++++++------- .../__tests__/LabwareListItem.test.tsx | 67 ++++--- .../SetupLiquids/SetupLiquidsMap.tsx | 132 ++++++------- .../__tests__/SetupLiquidsList.test.tsx | 1 + .../LiquidsLabwareDetailsModal.test.tsx | 1 + .../ProtocolSetupLabware/LabwareMapView.tsx | 84 ++++---- .../__tests__/LabwareMapView.test.tsx | 1 - .../ProtocolSetupLabware/index.tsx | 125 ++++++------ .../__tests__/LiquidDetails.test.tsx | 1 + .../__tests__/getLocationInfoNames.test.ts | 30 ++- .../transformations/getLocationInfoNames.ts | 39 ++-- .../OpentronsAutoclavableDeckRiser.tsx | 100 ++++++++++ .../OpentronsToughPCRAutoSealingLid.tsx | 83 ++++++++ .../Labware/LabwareAdapter/index.tsx | 4 + .../src/hardware-sim/ProtocolDeck/index.tsx | 41 ++-- .../js/helpers/parseProtocolCommands.ts | 107 ++++++++++ 23 files changed, 823 insertions(+), 487 deletions(-) create mode 100644 app/src/assets/images/labware/opentrons_flex_deck_riser.png create mode 100644 app/src/assets/images/labware/opentrons_tough_pcr_auto_sealing_lid.png create mode 100644 components/src/hardware-sim/Labware/LabwareAdapter/OpentronsAutoclavableDeckRiser.tsx create mode 100644 components/src/hardware-sim/Labware/LabwareAdapter/OpentronsToughPCRAutoSealingLid.tsx diff --git a/app/src/assets/images/labware/opentrons_flex_deck_riser.png b/app/src/assets/images/labware/opentrons_flex_deck_riser.png new file mode 100644 index 0000000000000000000000000000000000000000..a06f26bf4458e6acd562ae72631c3607be13675a GIT binary patch literal 17859 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 DEXHrh literal 0 HcmV?d00001 diff --git a/app/src/assets/images/labware/opentrons_tough_pcr_auto_sealing_lid.png b/app/src/assets/images/labware/opentrons_tough_pcr_auto_sealing_lid.png new file mode 100644 index 0000000000000000000000000000000000000000..bc0cffa3df67c0c4b6d54e3e8e5104102db684b4 GIT binary patch literal 32793 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 literal 0 HcmV?d00001 diff --git a/app/src/assets/localization/en/protocol_setup.json b/app/src/assets/localization/en/protocol_setup.json index f2e284e607e..94e679b4aba 100644 --- a/app/src/assets/localization/en/protocol_setup.json +++ b/app/src/assets/localization/en/protocol_setup.json @@ -120,6 +120,7 @@ "labware_position_check_step_description": "Recommended workflow that helps you verify the position of each labware on the deck.", "labware_position_check_step_title": "Labware Position Check", "labware_position_check_text": "Labware Position Check is a recommended workflow that helps you verify the position of each labware on the deck. During this check, you can create Labware Offsets that adjust how the robot moves to each labware in the X, Y and Z directions.", + "labware_quantity": "Quantity: {{quantity}}", "labware_setup_step_description": "Gather the following labware and full tip racks. To run your protocol without Labware Position Check, place and secure labware in their initial locations.", "labware_setup_step_title": "Labware", "last_calibrated": "Last calibrated: {{date}}", diff --git a/app/src/molecules/LabwareStackModal/LabwareStackModal.tsx b/app/src/molecules/LabwareStackModal/LabwareStackModal.tsx index 9c6602023a8..83b588f4a6e 100644 --- a/app/src/molecules/LabwareStackModal/LabwareStackModal.tsx +++ b/app/src/molecules/LabwareStackModal/LabwareStackModal.tsx @@ -32,6 +32,8 @@ import { THERMOCYCLER_MODULE_TYPE, } from '@opentrons/shared-data' import tiprackAdapter from '/app/assets/images/labware/opentrons_flex_96_tiprack_adapter.png' +import tcLid from '/app/assets/images/labware/opentrons_tough_pcr_auto_sealing_lid.png' +import deckRiser from '/app/assets/images/labware/opentrons_flex_deck_riser.png' import type { RobotType, RunTimeCommand } from '@opentrons/shared-data' @@ -58,6 +60,13 @@ const LIST_ITEM_STYLE = css` justify-content: ${JUSTIFY_SPACE_BETWEEN}; ` +const ADAPTER_LOAD_NAMES_TO_SHOW_IMAGE: { [key: string]: string } = { + opentrons_flex_96_tiprack_adapter: tiprackAdapter, + opentrons_flex_deck_riser: deckRiser, +} +const LABWARE_LOAD_NAMES_TO_SHOW_IMAGE: { [key: string]: string } = { + opentrons_tough_pcr_auto_sealing_lid: tcLid, +} interface LabwareStackModalProps { labwareIdTop: string commands: RunTimeCommand[] | null @@ -87,6 +96,7 @@ export const LabwareStackModal = ( moduleModel, labwareName, labwareNickname, + labwareQuantity, } = getLocationInfoNames(labwareIdTop, commands) const topDefinition = getSlotLabwareDefinition(labwareIdTop, commands) @@ -106,7 +116,25 @@ export const LabwareStackModal = ( moduleModel != null ? getModuleDisplayName(moduleModel) : null ?? '' const isAdapterForTiprack = adapterDef?.parameters.loadName === 'opentrons_flex_96_tiprack_adapter' - const tiprackAdapterImg = + + const labwareImg = + topDefinition.parameters.loadName in LABWARE_LOAD_NAMES_TO_SHOW_IMAGE ? ( + + ) : null + + const adapterImg = + adapterDef != null && + adapterDef.parameters.loadName in ADAPTER_LOAD_NAMES_TO_SHOW_IMAGE ? ( + + ) : null const moduleImg = moduleModel != null ? ( @@ -139,25 +167,33 @@ export const LabwareStackModal = ( 1 + ? t('labware_quantity', { quantity: labwareQuantity }) + : labwareNickname + } /> - - - + {labwareImg != null ? ( + {labwareImg} + ) : ( + + + + )} - {adapterDef != null ? ( <> + - {isAdapterForTiprack ? ( - {tiprackAdapterImg} + {adapterImg != null ? ( + {adapterImg} ) : ( )} - {moduleModel != null ? ( - - ) : null} ) : null} {moduleModel != null ? ( - - - {moduleImg} - + <> + + + + {moduleImg} + + ) : null} @@ -200,24 +236,35 @@ export const LabwareStackModal = ( <> - - - - + 1 + ? t('labware_quantity', { quantity: labwareQuantity }) + : labwareNickname + } + /> + {labwareImg != null ? ( + {labwareImg} + ) : ( + + + + )} - {adapterDef != null ? ( <> + - {isAdapterForTiprack ? ( - {tiprackAdapterImg} + {adapterImg != null ? ( + {adapterImg} ) : ( )} - {moduleModel != null ? ( - - ) : null} ) : null} {moduleModel != null ? ( - - - {moduleImg} - + <> + + + + {moduleImg} + + ) : null} @@ -253,31 +300,23 @@ interface LabwareStackLabelProps { } function LabwareStackLabel(props: LabwareStackLabelProps): JSX.Element { const { text, subText, isOnDevice = false } = props - return isOnDevice ? ( - - {text} - {subText != null ? ( - - {subText} - - ) : null} - - ) : ( + return ( - {text} + + {text} + {subText != null ? ( - + {subText} ) : null} diff --git a/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/LabwareListItem.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/LabwareListItem.tsx index 6269be78e83..f31a3bcf28d 100644 --- a/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/LabwareListItem.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/LabwareListItem.tsx @@ -26,7 +26,7 @@ import { } from '@opentrons/components' import { useCreateLiveCommandMutation } from '@opentrons/react-api-client' import { - getLabwareDisplayName, + getTopLabwareInfo, getModuleDisplayName, getModuleType, HEATERSHAKER_MODULE_TYPE, @@ -37,6 +37,7 @@ import { THERMOCYCLER_MODULE_V2, } from '@opentrons/shared-data' +import { getLocationInfoNames } from '/app/transformations/commands' import { ToggleButton } from '/app/atoms/buttons' import { Divider } from '/app/atoms/structure' import { SecureLabwareModal } from './SecureLabwareModal' @@ -47,14 +48,10 @@ import type { RunTimeCommand, ModuleType, LabwareDefinition2, - LoadModuleRunTimeCommand, LoadLabwareRunTimeCommand, } from '@opentrons/shared-data' import type { ModuleRenderInfoForProtocol } from '/app/resources/runs' -import type { - LabwareSetupItem, - NestedLabwareInfo, -} from '/app/transformations/commands' +import type { LabwareSetupItem } from '/app/transformations/commands' import type { ModuleTypesThatRequireExtraAttention } from '../utils/getModuleTypesThatRequireExtraAttention' const LabwareRow = styled.div` @@ -73,7 +70,6 @@ interface LabwareListItemProps extends LabwareSetupItem { extraAttentionModules: ModuleTypesThatRequireExtraAttention[] isFlex: boolean commands: RunTimeCommand[] - nestedLabwareInfo: NestedLabwareInfo | null showLabwareSVG?: boolean } @@ -82,37 +78,48 @@ export function LabwareListItem( ): JSX.Element | null { const { attachedModuleInfo, - nickName, + nickName: bottomLabwareNickname, initialLocation, - definition, moduleModel, - moduleLocation, extraAttentionModules, isFlex, commands, - nestedLabwareInfo, showLabwareSVG, + labwareId: bottomLabwareId, } = props + const loadLabwareCommands = commands?.filter( + (command): command is LoadLabwareRunTimeCommand => + command.commandType === 'loadLabware' + ) + + const { topLabwareId, topLabwareDefinition } = getTopLabwareInfo( + bottomLabwareId ?? '', + loadLabwareCommands + ) + const { + slotName, + labwareName, + labwareNickname, + labwareQuantity, + adapterName: bottomLabwareName, + } = getLocationInfoNames(topLabwareId, commands) + + const isStacked = + labwareQuantity > 1 || + bottomLabwareId !== topLabwareId || + moduleModel != null + const { i18n, t } = useTranslation('protocol_setup') const [ secureLabwareModalType, setSecureLabwareModalType, ] = useState(null) - const labwareDisplayName = getLabwareDisplayName(definition) const { createLiveCommand } = useCreateLiveCommandMutation() const [isLatchLoading, setIsLatchLoading] = useState(false) const [isLatchClosed, setIsLatchClosed] = useState(false) - let slotInfo: string | null = null - - if (initialLocation !== 'offDeck' && 'slotName' in initialLocation) { - slotInfo = initialLocation.slotName - } else if ( - initialLocation !== 'offDeck' && - 'addressableAreaName' in initialLocation - ) { - slotInfo = initialLocation.addressableAreaName - } else if (initialLocation === 'offDeck') { + let slotInfo: string | null = slotName + if (initialLocation === 'offDeck') { slotInfo = i18n.format(t('off_deck'), 'upperCase') } @@ -126,50 +133,20 @@ export function LabwareListItem( | HeaterShakerOpenLatchCreateCommand | HeaterShakerCloseLatchCreateCommand - if (initialLocation !== 'offDeck' && 'labwareId' in initialLocation) { - const loadedAdapter = commands.find( - (command): command is LoadLabwareRunTimeCommand => - command.commandType === 'loadLabware' && - command.result?.labwareId === initialLocation.labwareId - ) - const loadedAdapterLocation = loadedAdapter?.params.location - - if (loadedAdapterLocation != null && loadedAdapterLocation !== 'offDeck') { - if ('slotName' in loadedAdapterLocation) { - slotInfo = loadedAdapterLocation.slotName - } else if ('moduleId' in loadedAdapterLocation) { - const module = commands.find( - (command): command is LoadModuleRunTimeCommand => - command.commandType === 'loadModule' && - command.result?.moduleId === loadedAdapterLocation.moduleId - ) - if (module != null) { - slotInfo = module.params.location.slotName - moduleDisplayName = getModuleDisplayName(module.params.model) - } - } - } - } - if ( - initialLocation !== 'offDeck' && - 'moduleId' in initialLocation && - moduleLocation != null && - moduleModel != null - ) { - const moduleName = getModuleDisplayName(moduleModel) + if (moduleModel != null) { moduleType = getModuleType(moduleModel) + moduleDisplayName = getModuleDisplayName(moduleModel) + const moduleTypeNeedsAttention = extraAttentionModules.find( extraAttentionModType => extraAttentionModType === moduleType ) - let moduleSlotName = moduleLocation.slotName - if (moduleType === THERMOCYCLER_MODULE_TYPE) { - moduleSlotName = isFlex ? TC_MODULE_LOCATION_OT3 : TC_MODULE_LOCATION_OT2 - } - slotInfo = moduleSlotName - moduleDisplayName = moduleName + switch (moduleTypeNeedsAttention) { case MAGNETIC_MODULE_TYPE: case THERMOCYCLER_MODULE_TYPE: + if (moduleType === THERMOCYCLER_MODULE_TYPE) { + slotInfo = isFlex ? TC_MODULE_LOCATION_OT3 : TC_MODULE_LOCATION_OT2 + } if (moduleModel !== THERMOCYCLER_MODULE_V2) { secureLabwareInstructions = ( )} - {nestedLabwareInfo != null || moduleDisplayName != null ? ( - - ) : null} + {isStacked ? : null} - {nestedLabwareInfo != null && - nestedLabwareInfo?.sharedSlotId === slotInfo ? ( - <> - - + + {showLabwareSVG && topLabwareDefinition != null ? ( + + ) : null} + + + {labwareName} + + - - {nestedLabwareInfo.nestedLabwareDisplayName} - - - {nestedLabwareInfo.nestedLabwareNickName} - - + {labwareQuantity > 1 + ? t('labware_quantity', { quantity: labwareQuantity }) + : labwareNickname} + + + + {bottomLabwareName != null ? ( + <> + + + {bottomLabwareName} + + + {bottomLabwareNickname} + + ) : null} - - {showLabwareSVG ? ( - - ) : null} - - - {labwareDisplayName} - - - {nickName} - - - {moduleDisplayName != null ? ( <> @@ -371,9 +352,7 @@ export function LabwareListItem( marginTop="3px" > ))} diff --git a/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/SetupLabwareList.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/SetupLabwareList.tsx index 647f1543677..b71c84da0f8 100644 --- a/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/SetupLabwareList.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/SetupLabwareList.tsx @@ -6,10 +6,7 @@ import { StyledText, COLORS, } from '@opentrons/components' -import { - getLabwareSetupItemGroups, - getNestedLabwareInfo, -} from '/app/transformations/commands' +import { getLabwareSetupItemGroups } from '/app/transformations/commands' import { LabwareListItem } from './LabwareListItem' import type { RunTimeCommand } from '@opentrons/shared-data' @@ -56,6 +53,7 @@ export function SetupLabwareList( {allItems.map((labwareItem, index) => { + // filtering out all labware that aren't on a module or the deck const labwareOnAdapter = allItems.find( item => labwareItem.initialLocation !== 'offDeck' && @@ -70,7 +68,6 @@ export function SetupLabwareList( extraAttentionModules={extraAttentionModules} {...labwareItem} isFlex={isFlex} - nestedLabwareInfo={getNestedLabwareInfo(labwareItem, commands)} /> ) })} diff --git a/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/SetupLabwareMap.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/SetupLabwareMap.tsx index 0334496fd6b..c8bc460bbf4 100644 --- a/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/SetupLabwareMap.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/SetupLabwareMap.tsx @@ -12,7 +12,7 @@ import { FLEX_ROBOT_TYPE, getDeckDefFromRobotType, getSimplestDeckConfigForProtocol, - parseInitialLoadedLabwareByAdapter, + getTopLabwareInfo, THERMOCYCLER_MODULE_V1, } from '@opentrons/shared-data' @@ -22,14 +22,17 @@ import { getProtocolModulesInfo, getLabwareRenderInfo, } from '/app/transformations/analysis' +import { LabwareStackModal } from '/app/molecules/LabwareStackModal' import { getStandardDeckViewLayerBlockList } from '/app/local-resources/deck_configuration' import { OffDeckLabwareList } from './OffDeckLabwareList' +import type { LabwareOnDeck } from '@opentrons/components' import type { CompletedProtocolAnalysis, ProtocolAnalysisOutput, + LoadLabwareRunTimeCommand, + RunTimeCommand, } from '@opentrons/shared-data' -import { LabwareStackModal } from '/app/molecules/LabwareStackModal' interface SetupLabwareMapProps { runId: string @@ -49,31 +52,25 @@ export function SetupLabwareMap({ if (protocolAnalysis == null) return null - const commands = protocolAnalysis.commands + const commands: RunTimeCommand[] = protocolAnalysis.commands + const loadLabwareCommands = commands?.filter( + (command): command is LoadLabwareRunTimeCommand => + command.commandType === 'loadLabware' + ) const robotType = protocolAnalysis.robotType ?? FLEX_ROBOT_TYPE const deckDef = getDeckDefFromRobotType(robotType) const protocolModulesInfo = getProtocolModulesInfo(protocolAnalysis, deckDef) - const initialLoadedLabwareByAdapter = parseInitialLoadedLabwareByAdapter( - commands - ) - const modulesOnDeck = protocolModulesInfo.map(module => { - const labwareInAdapterInMod = - module.nestedLabwareId != null - ? initialLoadedLabwareByAdapter[module.nestedLabwareId] - : null - // only rendering the labware on top most layer so - // either the adapter or the labware are rendered but not both - const topLabwareDefinition = - labwareInAdapterInMod?.result?.definition ?? module.nestedLabwareDef - const topLabwareId = - labwareInAdapterInMod?.result?.labwareId ?? module.nestedLabwareId - const topLabwareDisplayName = - labwareInAdapterInMod?.params.displayName ?? - module.nestedLabwareDisplayName + const isLabwareStacked = + module.nestedLabwareId != null && module.nestedLabwareDef != null + const { + topLabwareId, + topLabwareDefinition, + topLabwareDisplayName, + } = getTopLabwareInfo(module.nestedLabwareId ?? '', loadLabwareCommands) return { moduleModel: module.moduleDef.model, @@ -84,15 +81,9 @@ export function SetupLabwareMap({ : {}, nestedLabwareDef: topLabwareDefinition, - highlightLabware: - topLabwareDefinition != null && - topLabwareId != null && - hoverLabwareId === topLabwareId, - highlightShadowLabware: - topLabwareDefinition != null && - topLabwareId != null && - hoverLabwareId === topLabwareId, - stacked: topLabwareDefinition != null && topLabwareId != null, + highlightLabware: hoverLabwareId === topLabwareId, + highlightShadowLabware: hoverLabwareId === topLabwareId, + stacked: isLabwareStacked, moduleChildren: ( // open modal ) : null} @@ -130,59 +121,59 @@ export function SetupLabwareMap({ const labwareRenderInfo = getLabwareRenderInfo(protocolAnalysis, deckDef) - const labwareOnDeck = map( + const labwareOnDeck: Array = map( labwareRenderInfo, - ({ labwareDef, displayName, slotName }, labwareId) => { - const labwareInAdapter = initialLoadedLabwareByAdapter[labwareId] - // only rendering the labware on top most layer so - // either the adapter or the labware are rendered but not both - const topLabwareDefinition = - labwareInAdapter?.result?.definition ?? labwareDef - const topLabwareId = labwareInAdapter?.result?.labwareId ?? labwareId - const topLabwareDisplayName = - labwareInAdapter?.params.displayName ?? displayName - const isLabwareInStack = - topLabwareDefinition != null && - topLabwareId != null && - labwareInAdapter != null - - return { - labwareLocation: { slotName }, - definition: topLabwareDefinition, + ({ slotName }, labwareId) => { + const { topLabwareId, + topLabwareDefinition, topLabwareDisplayName, - highlight: isLabwareInStack && hoverLabwareId === topLabwareId, - highlightShadow: isLabwareInStack && hoverLabwareId === topLabwareId, - labwareChildren: ( - { - if (isLabwareInStack) { - setLabwareStackDetailsLabwareId(topLabwareId) - } - }} - onMouseEnter={() => { - if (topLabwareDefinition != null && topLabwareId != null) { - setHoverLabwareId(() => topLabwareId) - } - }} - onMouseLeave={() => { - setHoverLabwareId(null) - }} - > - - - ), - stacked: isLabwareInStack, - } + } = getTopLabwareInfo(labwareId, loadLabwareCommands) + const isLabwareInStack = labwareId !== topLabwareId + return topLabwareDefinition != null + ? { + labwareLocation: { slotName }, + definition: topLabwareDefinition, + highlight: isLabwareInStack && hoverLabwareId === topLabwareId, + highlightShadow: + isLabwareInStack && hoverLabwareId === topLabwareId, + stacked: isLabwareInStack, + labwareChildren: ( + { + if (isLabwareInStack) { + setLabwareStackDetailsLabwareId(topLabwareId) + } + }} + onMouseEnter={() => { + if (topLabwareDefinition != null && topLabwareId != null) { + setHoverLabwareId(() => topLabwareId) + } + }} + onMouseLeave={() => { + setHoverLabwareId(null) + }} + > + {topLabwareDefinition != null ? ( + + ) : null} + + ), + } + : null } ) + const labwareOnDeckFiltered: LabwareOnDeck[] = labwareOnDeck.filter( + (labware): labware is LabwareOnDeck => labware != null + ) + return ( @@ -191,7 +182,7 @@ export function SetupLabwareMap({ deckConfig={deckConfig} deckLayerBlocklist={getStandardDeckViewLayerBlockList(robotType)} robotType={robotType} - labwareOnDeck={labwareOnDeck} + labwareOnDeck={labwareOnDeckFiltered} modulesOnDeck={modulesOnDeck} /> diff --git a/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/__tests__/LabwareListItem.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/__tests__/LabwareListItem.test.tsx index 904395f7c98..50afda3d92f 100644 --- a/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/__tests__/LabwareListItem.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/__tests__/LabwareListItem.test.tsx @@ -3,7 +3,10 @@ import { fireEvent, screen } from '@testing-library/react' import { describe, it, beforeEach, vi, expect } from 'vitest' import { MemoryRouter } from 'react-router-dom' -import { opentrons96PcrAdapterV1 } from '@opentrons/shared-data' +import { + opentrons96PcrAdapterV1, + getTopLabwareInfo, +} from '@opentrons/shared-data' import { useCreateLiveCommandMutation } from '@opentrons/react-api-client' import { renderWithProviders } from '/app/__testing-utils__' @@ -14,6 +17,7 @@ import { mockTemperatureModule, mockThermocycler, } from '/app/redux/modules/__fixtures__' +import { getLocationInfoNames } from '/app/transformations/commands' import { mockLabwareDef } from '/app/organisms/LabwarePositionCheck/__fixtures__/mockLabwareDef' import { SecureLabwareModal } from '../SecureLabwareModal' import { LabwareListItem } from '../LabwareListItem' @@ -28,7 +32,15 @@ import type { AttachedModule } from '/app/redux/modules/types' import type { ModuleRenderInfoForProtocol } from '/app/resources/runs' vi.mock('../SecureLabwareModal') +vi.mock('/app/transformations/commands') vi.mock('@opentrons/react-api-client') +vi.mock('@opentrons/shared-data', async importOriginal => { + const actualSharedData = await importOriginal() + return { + ...actualSharedData, + getTopLabwareInfo: vi.fn(), + } +}) const mockAdapterDef = opentrons96PcrAdapterV1 as LabwareDefinition2 const mockAdapterId = 'mockAdapterId' @@ -87,12 +99,23 @@ describe('LabwareListItem', () => { vi.mocked(useCreateLiveCommandMutation).mockReturnValue({ createLiveCommand: mockCreateLiveCommand, } as any) + vi.mocked(getLocationInfoNames).mockReturnValue({ + slotName: '7', + labwareName: 'Mock Labware Definition', + labwareNickname: 'nickName', + labwareQuantity: 1, + }) + vi.mocked(getTopLabwareInfo).mockReturnValue({ + topLabwareId: '1', + topLabwareDefinition: mockLabwareDef, + }) }) it('renders the correct info for a thermocycler (OT2), clicking on secure labware instructions opens the modal', () => { render({ commands: [], nickName: mockNickName, + labwareId: '7', definition: mockLabwareDef, initialLocation: { moduleId: mockModuleId }, moduleModel: 'thermocyclerModuleV1' as ModuleModel, @@ -107,7 +130,6 @@ describe('LabwareListItem', () => { } as any) as ModuleRenderInfoForProtocol, }, isFlex: false, - nestedLabwareInfo: null, }) screen.getByText('Mock Labware Definition') screen.getByText('nickName') @@ -137,7 +159,6 @@ describe('LabwareListItem', () => { } as any) as ModuleRenderInfoForProtocol, }, isFlex: true, - nestedLabwareInfo: null, }) screen.getByText('Mock Labware Definition') screen.getByText('A1+B1') @@ -168,7 +189,6 @@ describe('LabwareListItem', () => { } as any) as ModuleRenderInfoForProtocol, }, isFlex: false, - nestedLabwareInfo: null, }) screen.getByText('Mock Labware Definition') screen.getByTestId('slot_info_7') @@ -203,7 +223,6 @@ describe('LabwareListItem', () => { } as any) as ModuleRenderInfoForProtocol, }, isFlex: false, - nestedLabwareInfo: null, }) screen.getByText('Mock Labware Definition') screen.getByTestId('slot_info_7') @@ -245,7 +264,7 @@ describe('LabwareListItem', () => { nickName: mockNickName, definition: mockLabwareDef, initialLocation: { labwareId: mockAdapterId }, - moduleModel: 'temperatureModuleV1' as ModuleModel, + moduleModel: 'temperatureModuleV2' as ModuleModel, moduleLocation: mockModuleSlot, extraAttentionModules: [], attachedModuleInfo: { @@ -262,18 +281,11 @@ describe('LabwareListItem', () => { } as any) as ModuleRenderInfoForProtocol, }, isFlex: false, - nestedLabwareInfo: { - nestedLabwareDisplayName: 'mock nested display name', - sharedSlotId: '7', - nestedLabwareNickName: 'nestedLabwareNickName', - nestedLabwareDefinition: mockLabwareDef, - }, }) screen.getByText('Mock Labware Definition') screen.getAllByText('7') screen.getByText('Temperature Module GEN2') - screen.getByText('mock nested display name') - screen.getByText('nestedLabwareNickName') + screen.getByText('Mock Labware Definition') screen.getByText('nickName') }) @@ -293,10 +305,17 @@ describe('LabwareListItem', () => { z: 1.2, }, } as any + vi.mocked(getLocationInfoNames).mockReturnValue({ + slotName: 'A2', + labwareName: 'Mock Labware Name', + labwareNickname: 'labware nick name', + labwareQuantity: 1, + adapterName: 'mock adapter name', + }) render({ commands: [mockAdapterLoadCommand], - nickName: mockNickName, + nickName: 'mock adapter nick name', definition: mockLabwareDef, initialLocation: { labwareId: mockAdapterId }, moduleModel: null, @@ -304,18 +323,13 @@ describe('LabwareListItem', () => { extraAttentionModules: [], attachedModuleInfo: {}, isFlex: false, - nestedLabwareInfo: { - nestedLabwareDisplayName: 'mock nested display name', - sharedSlotId: 'A2', - nestedLabwareNickName: 'nestedLabwareNickName', - nestedLabwareDefinition: mockLabwareDef, - }, + labwareId: '5', }) - screen.getByText('Mock Labware Definition') + screen.getByText('Mock Labware Name') + screen.getByText('labware nick name') screen.getByText('A2') - screen.getByText('mock nested display name') - screen.getByText('nestedLabwareNickName') - screen.getByText('nickName') + screen.getByText('mock adapter name') + screen.getByText('mock adapter nick name') }) it('renders the correct info for a labware on top of a heater shaker', () => { @@ -341,7 +355,6 @@ describe('LabwareListItem', () => { } as any) as ModuleRenderInfoForProtocol, }, isFlex: false, - nestedLabwareInfo: null, }) screen.getByText('Mock Labware Definition') screen.getByTestId('slot_info_7') @@ -363,6 +376,7 @@ describe('LabwareListItem', () => { }) it('renders the correct info for an off deck labware', () => { + vi.mocked(getTopLabwareInfo) render({ nickName: null, definition: mockLabwareDef, @@ -373,7 +387,6 @@ describe('LabwareListItem', () => { extraAttentionModules: [], attachedModuleInfo: {}, isFlex: false, - nestedLabwareInfo: null, }) screen.getByText('Mock Labware Definition') screen.getByTestId('slot_info_OFF DECK') diff --git a/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLiquids/SetupLiquidsMap.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLiquids/SetupLiquidsMap.tsx index 5338a9ce055..1b556692f8d 100644 --- a/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLiquids/SetupLiquidsMap.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLiquids/SetupLiquidsMap.tsx @@ -14,7 +14,7 @@ import { FLEX_ROBOT_TYPE, getDeckDefFromRobotType, getSimplestDeckConfigForProtocol, - parseInitialLoadedLabwareByAdapter, + getTopLabwareInfo, parseLabwareInfoByLiquidId, parseLiquidsInLoadOrder, THERMOCYCLER_MODULE_V1, @@ -32,6 +32,8 @@ import { import type { CompletedProtocolAnalysis, ProtocolAnalysisOutput, + RunTimeCommand, + LoadLabwareRunTimeCommand, } from '@opentrons/shared-data' interface SetupLiquidsMapProps { @@ -50,13 +52,16 @@ export function SetupLiquidsMap( if (protocolAnalysis == null) return null + const commands: RunTimeCommand[] = protocolAnalysis.commands + const loadLabwareCommands = commands?.filter( + (command): command is LoadLabwareRunTimeCommand => + command.commandType === 'loadLabware' + ) + const liquids = parseLiquidsInLoadOrder( protocolAnalysis.liquids != null ? protocolAnalysis.liquids : [], protocolAnalysis.commands ?? [] ) - const initialLoadedLabwareByAdapter = parseInitialLoadedLabwareByAdapter( - protocolAnalysis.commands ?? [] - ) const robotType = protocolAnalysis.robotType ?? FLEX_ROBOT_TYPE const deckDef = getDeckDefFromRobotType(robotType) const labwareRenderInfo = getLabwareRenderInfo(protocolAnalysis, deckDef) @@ -69,19 +74,11 @@ export function SetupLiquidsMap( const protocolModulesInfo = getProtocolModulesInfo(protocolAnalysis, deckDef) const modulesOnDeck = protocolModulesInfo.map(module => { - const labwareInAdapterInMod = - module.nestedLabwareId != null - ? initialLoadedLabwareByAdapter[module.nestedLabwareId] - : null - // only rendering the labware on top most layer so - // either the adapter or the labware are rendered but not both - const topLabwareDefinition = - labwareInAdapterInMod?.result?.definition ?? module.nestedLabwareDef - const topLabwareId = - labwareInAdapterInMod?.result?.labwareId ?? module.nestedLabwareId - const topLabwareDisplayName = - labwareInAdapterInMod?.params.displayName ?? - module.nestedLabwareDisplayName + const { + topLabwareId, + topLabwareDefinition, + topLabwareDisplayName, + } = getTopLabwareInfo(module.nestedLabwareId ?? '', loadLabwareCommands) const nestedLabwareWellFill = getWellFillFromLabwareId( topLabwareId ?? '', liquids, @@ -120,7 +117,7 @@ export function SetupLiquidsMap( hover={topLabwareId === hoverLabwareId && labwareHasLiquid} labwareHasLiquid={labwareHasLiquid} labwareId={topLabwareId} - displayName={topLabwareDisplayName} + displayName={topLabwareDisplayName ?? null} runId={runId} /> @@ -140,59 +137,52 @@ export function SetupLiquidsMap( labwareOnDeck={[]} modulesOnDeck={modulesOnDeck} > - {map( - labwareRenderInfo, - ({ x, y, labwareDef, displayName }, labwareId) => { - const labwareInAdapter = initialLoadedLabwareByAdapter[labwareId] - // only rendering the labware on top most layer so - // either the adapter or the labware are rendered but not both - const topLabwareDefinition = - labwareInAdapter?.result?.definition ?? labwareDef - const topLabwareId = - labwareInAdapter?.result?.labwareId ?? labwareId - const topLabwareDisplayName = - labwareInAdapter?.params.displayName ?? displayName - const wellFill = getWellFillFromLabwareId( - topLabwareId ?? '', - liquids, - labwareByLiquidId - ) - const labwareHasLiquid = !isEmpty(wellFill) - return ( - - { - setHoverLabwareId(topLabwareId) - }} - onMouseLeave={() => { - setHoverLabwareId('') - }} - onClick={() => { - if (labwareHasLiquid) { - setLiquidDetailsLabwareId(topLabwareId) - } - }} - cursor={labwareHasLiquid ? 'pointer' : ''} - > - - - - - ) - } - )} + {map(labwareRenderInfo, ({ x, y }, labwareId) => { + const { + topLabwareId, + topLabwareDefinition, + topLabwareDisplayName, + } = getTopLabwareInfo(labwareId, loadLabwareCommands) + const wellFill = getWellFillFromLabwareId( + topLabwareId ?? '', + liquids, + labwareByLiquidId + ) + const labwareHasLiquid = !isEmpty(wellFill) + return topLabwareDefinition != null ? ( + + { + setHoverLabwareId(topLabwareId) + }} + onMouseLeave={() => { + setHoverLabwareId('') + }} + onClick={() => { + if (labwareHasLiquid) { + setLiquidDetailsLabwareId(topLabwareId) + } + }} + cursor={labwareHasLiquid ? 'pointer' : ''} + > + + + + + ) : null + })} {liquidDetailsLabwareId != null && ( { vi.mocked(getLocationInfoNames).mockReturnValue({ labwareName: 'mock labware name', slotName: '4', + labwareQuantity: 1, }) mockTrackEvent = vi.fn() vi.mocked(useTrackEvent).mockReturnValue(mockTrackEvent) diff --git a/app/src/organisms/LiquidsLabwareDetailsModal/__tests__/LiquidsLabwareDetailsModal.test.tsx b/app/src/organisms/LiquidsLabwareDetailsModal/__tests__/LiquidsLabwareDetailsModal.test.tsx index 54b8239da47..967a840ee75 100644 --- a/app/src/organisms/LiquidsLabwareDetailsModal/__tests__/LiquidsLabwareDetailsModal.test.tsx +++ b/app/src/organisms/LiquidsLabwareDetailsModal/__tests__/LiquidsLabwareDetailsModal.test.tsx @@ -65,6 +65,7 @@ describe('LiquidsLabwareDetailsModal', () => { vi.mocked(getLocationInfoNames).mockReturnValue({ labwareName: 'mock labware name', slotName: '5', + labwareQuantity: 1, }) vi.mocked(getSlotLabwareDefinition).mockReturnValue(mockDefinition) vi.mocked(getLiquidsByIdForLabware).mockReturnValue({ diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/LabwareMapView.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/LabwareMapView.tsx index 21b6fb20854..339ad981daa 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/LabwareMapView.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/LabwareMapView.tsx @@ -3,18 +3,22 @@ import { BaseDeck, Flex } from '@opentrons/components' import { FLEX_ROBOT_TYPE, getSimplestDeckConfigForProtocol, + getTopLabwareInfo, THERMOCYCLER_MODULE_V1, } from '@opentrons/shared-data' import { getStandardDeckViewLayerBlockList } from '/app/local-resources/deck_configuration' import { getLabwareRenderInfo } from '/app/transformations/analysis' +import type { LabwareOnDeck } from '@opentrons/components' import type { CompletedProtocolAnalysis, DeckDefinition, LabwareDefinition2, - LoadedLabwareByAdapter, + RunTimeCommand, + LoadLabwareRunTimeCommand, } from '@opentrons/shared-data' + import type { AttachedProtocolModuleMatch } from '/app/transformations/analysis' interface LabwareMapViewProps { @@ -23,7 +27,6 @@ interface LabwareMapViewProps { labwareDef: LabwareDefinition2, labwareId: string ) => void - initialLoadedLabwareByAdapter: LoadedLabwareByAdapter deckDef: DeckDefinition mostRecentAnalysis: CompletedProtocolAnalysis | null } @@ -32,11 +35,16 @@ export function LabwareMapView(props: LabwareMapViewProps): JSX.Element { const { handleLabwareClick, attachedProtocolModuleMatches, - initialLoadedLabwareByAdapter, deckDef, mostRecentAnalysis, } = props const deckConfig = getSimplestDeckConfigForProtocol(mostRecentAnalysis) + const commands: RunTimeCommand[] = mostRecentAnalysis?.commands ?? [] + const loadLabwareCommands = commands?.filter( + (command): command is LoadLabwareRunTimeCommand => + command.commandType === 'loadLabware' + ) + const labwareRenderInfo = mostRecentAnalysis != null ? getLabwareRenderInfo(mostRecentAnalysis, deckDef) @@ -44,16 +52,11 @@ export function LabwareMapView(props: LabwareMapViewProps): JSX.Element { const modulesOnDeck = attachedProtocolModuleMatches.map(module => { const { moduleDef, nestedLabwareDef, nestedLabwareId, slotName } = module - const labwareInAdapterInMod = - nestedLabwareId != null - ? initialLoadedLabwareByAdapter[nestedLabwareId] - : null - // only rendering the labware on top most layer so - // either the adapter or the labware are rendered but not both - const topLabwareDefinition = - labwareInAdapterInMod?.result?.definition ?? nestedLabwareDef - const topLabwareId = - labwareInAdapterInMod?.result?.labwareId ?? nestedLabwareId + const isLabwareStacked = nestedLabwareId != null && nestedLabwareDef != null + const { topLabwareId, topLabwareDefinition } = getTopLabwareInfo( + module.nestedLabwareId ?? '', + loadLabwareCommands + ) return { moduleModel: moduleDef.model, @@ -70,49 +73,48 @@ export function LabwareMapView(props: LabwareMapViewProps): JSX.Element { } : undefined, highlightLabware: true, - highlightShadowLabware: - topLabwareDefinition != null && topLabwareId != null, + highlightShadowLabware: isLabwareStacked, moduleChildren: null, - stacked: topLabwareDefinition != null && topLabwareId != null, + stacked: isLabwareStacked, } }) - const labwareLocations = map( + const labwareLocations: Array = map( labwareRenderInfo, - ({ labwareDef, slotName }, labwareId) => { - const labwareInAdapter = initialLoadedLabwareByAdapter[labwareId] - // only rendering the labware on top most layer so - // either the adapter or the labware are rendered but not both - const topLabwareDefinition = - labwareInAdapter?.result?.definition ?? labwareDef - const topLabwareId = labwareInAdapter?.result?.labwareId ?? labwareId - const isLabwareInStack = - topLabwareDefinition != null && - topLabwareId != null && - labwareInAdapter != null + ({ slotName }, labwareId) => { + const { topLabwareId, topLabwareDefinition } = getTopLabwareInfo( + labwareId, + loadLabwareCommands + ) + const isLabwareInStack = labwareId !== topLabwareId - return { - labwareLocation: { slotName }, - definition: topLabwareDefinition, - topLabwareId, - onLabwareClick: () => { - handleLabwareClick(topLabwareDefinition, topLabwareId) - }, - labwareChildren: null, - highlight: true, - highlightShadow: isLabwareInStack, - stacked: isLabwareInStack, - } + return topLabwareDefinition != null + ? { + labwareLocation: { slotName }, + definition: topLabwareDefinition, + onLabwareClick: () => { + handleLabwareClick(topLabwareDefinition, topLabwareId) + }, + highlight: true, + highlightShadow: isLabwareInStack, + stacked: isLabwareInStack, + } + : null } ) + const labwareLocationsFiltered: LabwareOnDeck[] = labwareLocations.filter( + (labwareLocation): labwareLocation is LabwareOnDeck => + labwareLocation != null + ) + return ( 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 8729ae0f811..860d927578e 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/__tests__/LabwareMapView.test.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/__tests__/LabwareMapView.test.tsx @@ -114,7 +114,6 @@ describe('LabwareMapView', () => { handleLabwareClick: vi.fn(), deckDef: (deckDefFixture as unknown) as DeckDefinition, mostRecentAnalysis: ({} as unknown) as CompletedProtocolAnalysis, - initialLoadedLabwareByAdapter: {}, attachedProtocolModuleMatches: [ { ...mockProtocolModuleInfo[0], diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/index.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/index.tsx index 1a54e2fc00d..2d440fc9516 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/index.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/index.tsx @@ -25,10 +25,11 @@ import { FLEX_ROBOT_TYPE, getDeckDefFromRobotType, getLabwareDefURI, - getLabwareDisplayName, + getTopLabwareInfo, getModuleDisplayName, HEATERSHAKER_MODULE_TYPE, - parseInitialLoadedLabwareByAdapter, + TC_MODULE_LOCATION_OT3, + THERMOCYCLER_MODULE_TYPE, } from '@opentrons/shared-data' import { useCreateLiveCommandMutation, @@ -38,8 +39,8 @@ import { import { FloatingActionButton, SmallButton } from '/app/atoms/buttons' import { ODDBackButton } from '/app/molecules/ODDBackButton' import { + getLocationInfoNames, getLabwareSetupItemGroups, - getNestedLabwareInfo, } from '/app/transformations/commands' import { getAttachedProtocolModuleMatches, @@ -56,15 +57,12 @@ import type { HeaterShakerCloseLatchCreateCommand, HeaterShakerOpenLatchCreateCommand, LabwareDefinition2, - LabwareLocation, LoadLabwareRunTimeCommand, + LabwareLocation, RunTimeCommand, } from '@opentrons/shared-data' import type { HeaterShakerModule, Modules } from '@opentrons/api-client' -import type { - LabwareSetupItem, - NestedLabwareInfo, -} from '/app/transformations/commands' +import type { LabwareSetupItem } from '/app/transformations/commands' import type { SetupScreens } from '../types' import type { AttachedProtocolModuleMatch } from '/app/transformations/analysis' @@ -121,9 +119,6 @@ export function ProtocolSetupLabware({ protocolModulesInfo, deckConfig ) - const initialLoadedLabwareByAdapter = parseInitialLoadedLabwareByAdapter( - mostRecentAnalysis?.commands ?? [] - ) const handleLabwareClick = ( labwareDef: LabwareDefinition2, @@ -152,7 +147,7 @@ export function ProtocolSetupLabware({ } } } - const selectedLabwareIsTopOfStack = mostRecentAnalysis?.commands.some( + const selectedLabwareIsStacked = mostRecentAnalysis?.commands.some( command => command.commandType === 'loadLabware' && command.result?.labwareId === selectedLabware?.id && @@ -164,7 +159,7 @@ export function ProtocolSetupLabware({ return ( <> {showLabwareDetailsModal && - !selectedLabwareIsTopOfStack && + !selectedLabwareIsStacked && selectedLabware != null ? ( ) : ( <> @@ -239,17 +233,14 @@ export function ProtocolSetupLabware({ 'labwareId' in labware.initialLocation && item.labwareId === labware.initialLocation.labwareId ) - return mostRecentAnalysis != null && labwareOnAdapter == null ? ( + return mostRecentAnalysis?.commands != null && + labwareOnAdapter == null ? ( ) : null })} @@ -257,7 +248,7 @@ export function ProtocolSetupLabware({ )} {showLabwareDetailsModal && selectedLabware != null && - selectedLabwareIsTopOfStack ? ( + selectedLabwareIsStacked ? ( ['refetch'] - nestedLabwareInfo: NestedLabwareInfo | null - commands?: RunTimeCommand[] + commands: RunTimeCommand[] } function RowLabware({ labware, attachedProtocolModules, refetchModules, - nestedLabwareInfo, commands, }: RowLabwareProps): JSX.Element | null { - const { definition, initialLocation, nickName } = labware + const { + initialLocation, + nickName: bottomLabwareNickname, + labwareId: bottomLabwareId, + } = labware + const loadLabwareCommands = commands?.filter( + (command): command is LoadLabwareRunTimeCommand => + command.commandType === 'loadLabware' + ) + + const { topLabwareId } = getTopLabwareInfo( + bottomLabwareId ?? '', + loadLabwareCommands + ) + const { + slotName: slot, + labwareName: topLabwareName, + labwareNickname: topLabwareNickname, + labwareQuantity: topLabwareQuantity, + adapterName, + } = getLocationInfoNames(topLabwareId, commands) + const { t, i18n } = useTranslation([ 'protocol_command_text', 'protocol_setup', @@ -451,47 +461,21 @@ function RowLabware({ matchedModule.attachedModuleMatch.moduleType === HEATERSHAKER_MODULE_TYPE ? matchedModule.attachedModuleMatch : null + const isStacked = + topLabwareQuantity > 1 || adapterName != null || matchedModule != null - let slotName: string = '' - let location: JSX.Element | string | null = null + let slotName: string = slot + let location: JSX.Element = if (initialLocation === 'offDeck') { location = ( ) - } else if ('slotName' in initialLocation) { - slotName = initialLocation.slotName - location = - } else if ('addressableAreaName' in initialLocation) { - slotName = initialLocation.addressableAreaName - location = - } else if (labware.moduleLocation != null) { - location = ( - <> - - - ) - } else if ('labwareId' in initialLocation) { - const adapterId = initialLocation.labwareId - const adapterLocation = commands?.find( - (command): command is LoadLabwareRunTimeCommand => - command.commandType === 'loadLabware' && - command.result?.labwareId === adapterId - )?.params.location - - if (adapterLocation != null && adapterLocation !== 'offDeck') { - if ('slotName' in adapterLocation) { - slotName = adapterLocation.slotName - location = - } else if ('moduleId' in adapterLocation) { - const moduleUnderAdapter = attachedProtocolModules.find( - module => module.moduleId === adapterLocation.moduleId - ) - if (moduleUnderAdapter != null) { - slotName = moduleUnderAdapter.slotName - location = - } - } - } + } else if ( + matchedModule != null && + matchedModule.attachedModuleMatch?.moduleType === THERMOCYCLER_MODULE_TYPE + ) { + slotName = TC_MODULE_LOCATION_OT3 + location = } return ( {location} - {nestedLabwareInfo != null || matchedModule != null ? ( - - ) : null} + {isStacked ? : null} - {getLabwareDisplayName(definition)} + {topLabwareName} - {nickName} + {topLabwareQuantity > 1 + ? t('protocol_setup:labware_quantity', { + quantity: topLabwareQuantity, + }) + : topLabwareNickname} - {nestedLabwareInfo != null && - nestedLabwareInfo?.sharedSlotId === slotName ? ( + {adapterName != null ? ( <> - {nestedLabwareInfo.nestedLabwareDisplayName} + {adapterName} - {nestedLabwareInfo.nestedLabwareNickName} + {bottomLabwareNickname} 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 feeb3e863a4..720b6db7545 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLiquids/__tests__/LiquidDetails.test.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLiquids/__tests__/LiquidDetails.test.tsx @@ -43,6 +43,7 @@ describe('LiquidDetails', () => { vi.mocked(getLocationInfoNames).mockReturnValue({ slotName: '4', labwareName: 'mock labware name', + labwareQuantity: 1, }) vi.mocked(LiquidsLabwareDetailsModal).mockReturnValue(
    mock modal
    ) }) diff --git a/app/src/transformations/commands/transformations/__tests__/getLocationInfoNames.test.ts b/app/src/transformations/commands/transformations/__tests__/getLocationInfoNames.test.ts index d0b3551972f..f722caeb076 100644 --- a/app/src/transformations/commands/transformations/__tests__/getLocationInfoNames.test.ts +++ b/app/src/transformations/commands/transformations/__tests__/getLocationInfoNames.test.ts @@ -1,5 +1,8 @@ import { describe, it, vi, expect, beforeEach } from 'vitest' -import { getLabwareDisplayName } from '@opentrons/shared-data' +import { + getLabwareDisplayName, + getLabwareStackCountAndLocation, +} from '@opentrons/shared-data' import { getLocationInfoNames } from '../getLocationInfoNames' import type { ModuleModel } from '@opentrons/shared-data' @@ -154,11 +157,16 @@ vi.mock('@opentrons/shared-data') describe('getLocationInfoNames', () => { beforeEach(() => { vi.mocked(getLabwareDisplayName).mockReturnValue(LABWARE_DISPLAY_NAME) + vi.mocked(getLabwareStackCountAndLocation).mockReturnValue({ + labwareLocation: { slotName: SLOT }, + labwareQuantity: 1, + }) }) it('returns labware name and slot number for labware id on the deck', () => { const expected = { slotName: SLOT, labwareName: LABWARE_DISPLAY_NAME, + labwareQuantity: 1, } expect( getLocationInfoNames(LABWARE_ID, MOCK_LOAD_LABWARE_COMMANDS as any) @@ -169,7 +177,12 @@ describe('getLocationInfoNames', () => { slotName: SLOT, labwareName: LABWARE_DISPLAY_NAME, moduleModel: MOCK_MODEL, + labwareQuantity: 1, } + vi.mocked(getLabwareStackCountAndLocation).mockReturnValue({ + labwareLocation: { moduleId: '12345' }, + labwareQuantity: 1, + }) expect(getLocationInfoNames(LABWARE_ID, MOCK_MOD_COMMANDS as any)).toEqual( expected ) @@ -181,7 +194,12 @@ describe('getLocationInfoNames', () => { moduleModel: MOCK_MODEL, adapterName: ADAPTER_DISPLAY_NAME, adapterId: ADAPTER_ID, + labwareQuantity: 1, } + vi.mocked(getLabwareStackCountAndLocation).mockReturnValue({ + labwareLocation: { labwareId: ADAPTER_ID }, + labwareQuantity: 1, + }) expect( getLocationInfoNames(LABWARE_ID, MOCK_ADAPTER_MOD_COMMANDS as any) ).toEqual(expected) @@ -192,7 +210,12 @@ describe('getLocationInfoNames', () => { labwareName: LABWARE_DISPLAY_NAME, adapterName: ADAPTER_DISPLAY_NAME, adapterId: ADAPTER_ID, + labwareQuantity: 1, } + vi.mocked(getLabwareStackCountAndLocation).mockReturnValue({ + labwareLocation: { labwareId: ADAPTER_ID }, + labwareQuantity: 1, + }) expect( getLocationInfoNames(LABWARE_ID, MOCK_ADAPTER_COMMANDS as any) ).toEqual(expected) @@ -203,7 +226,12 @@ describe('getLocationInfoNames', () => { labwareName: LABWARE_DISPLAY_NAME, adapterName: ADAPTER_DISPLAY_NAME, adapterId: ADAPTER_ID, + labwareQuantity: 1, } + vi.mocked(getLabwareStackCountAndLocation).mockReturnValue({ + labwareLocation: { labwareId: ADAPTER_ID }, + labwareQuantity: 1, + }) expect( getLocationInfoNames(LABWARE_ID, MOCK_ADAPTER_EXTENSION_COMMANDS as any) ).toEqual(expected) diff --git a/app/src/transformations/commands/transformations/getLocationInfoNames.ts b/app/src/transformations/commands/transformations/getLocationInfoNames.ts index 26d618859f9..e87f5d68ba8 100644 --- a/app/src/transformations/commands/transformations/getLocationInfoNames.ts +++ b/app/src/transformations/commands/transformations/getLocationInfoNames.ts @@ -1,4 +1,8 @@ -import { getLabwareDisplayName } from '@opentrons/shared-data' +import { + getLabwareDisplayName, + getLabwareStackCountAndLocation, +} from '@opentrons/shared-data' + import type { LoadLabwareRunTimeCommand, RunTimeCommand, @@ -10,6 +14,7 @@ export interface LocationInfoNames { slotName: string labwareName: string labwareNickname?: string + labwareQuantity: number adapterName?: string moduleModel?: ModuleModel adapterId?: string @@ -30,11 +35,11 @@ export function getLocationInfoNames( (command): command is LoadModuleRunTimeCommand => command.commandType === 'loadModule' ) - if (loadLabwareCommand == null) { + if (loadLabwareCommands == null || loadLabwareCommand == null) { console.warn( `could not find the load labware command assosciated with thie labwareId: ${labwareId}` ) - return { slotName: '', labwareName: '' } + return { slotName: '', labwareName: '', labwareQuantity: 0 } } const labwareName = @@ -43,14 +48,21 @@ export function getLocationInfoNames( : '' const labwareNickname = loadLabwareCommand.params.displayName - const labwareLocation = loadLabwareCommand.params.location + const { labwareLocation, labwareQuantity } = getLabwareStackCountAndLocation( + labwareId, + loadLabwareCommands + ) if (labwareLocation === 'offDeck') { - return { slotName: 'Off deck', labwareName } + return { slotName: 'Off deck', labwareName, labwareQuantity } } else if ('slotName' in labwareLocation) { - return { slotName: labwareLocation.slotName, labwareName } + return { slotName: labwareLocation.slotName, labwareName, labwareQuantity } } else if ('addressableAreaName' in labwareLocation) { - return { slotName: labwareLocation.addressableAreaName, labwareName } + return { + slotName: labwareLocation.addressableAreaName, + labwareName, + labwareQuantity, + } } else if ('moduleId' in labwareLocation) { const loadModuleCommandUnderLabware = loadModuleCommands?.find( command => command.result?.moduleId === labwareLocation.moduleId @@ -62,9 +74,11 @@ export function getLocationInfoNames( loadModuleCommandUnderLabware?.params.location.slotName ?? '', labwareName, moduleModel: loadModuleCommandUnderLabware?.params.model, + labwareQuantity, } - : { slotName: '', labwareName: '' } + : { slotName: '', labwareName: '', labwareQuantity } } else { + // adapt this to return the adapter only if the role of this labware is adapter -- otherwise, keep parsing through until you find out how many identical labware there are const loadedAdapterCommand = loadLabwareCommands?.find(command => command.result != null ? command.result?.labwareId === labwareLocation.labwareId @@ -74,7 +88,7 @@ export function getLocationInfoNames( console.warn( `expected to find an adapter under the labware but could not with labwareId ${labwareLocation.labwareId}` ) - return { slotName: '', labwareName: labwareName } + return { slotName: '', labwareName: labwareName, labwareQuantity } } else if ( loadedAdapterCommand?.params.location !== 'offDeck' && 'slotName' in loadedAdapterCommand?.params.location @@ -86,6 +100,7 @@ export function getLocationInfoNames( adapterName: loadedAdapterCommand?.result?.definition.metadata.displayName, adapterId: loadedAdapterCommand?.result?.labwareId, + labwareQuantity, } } else if ( loadedAdapterCommand?.params.location !== 'offDeck' && @@ -98,6 +113,7 @@ export function getLocationInfoNames( adapterName: loadedAdapterCommand?.result?.definition.metadata.displayName, adapterId: loadedAdapterCommand?.result?.labwareId, + labwareQuantity, } } else if ( loadedAdapterCommand?.params.location !== 'offDeck' && @@ -118,11 +134,12 @@ export function getLocationInfoNames( loadedAdapterCommand.result?.definition.metadata.displayName, adapterId: loadedAdapterCommand?.result?.labwareId, moduleModel: loadModuleCommandUnderAdapter.params.model, + labwareQuantity, } - : { slotName: '', labwareName } + : { slotName: '', labwareName, labwareQuantity } } else { // shouldn't hit this - return { slotName: '', labwareName } + return { slotName: '', labwareName, labwareQuantity } } } } diff --git a/components/src/hardware-sim/Labware/LabwareAdapter/OpentronsAutoclavableDeckRiser.tsx b/components/src/hardware-sim/Labware/LabwareAdapter/OpentronsAutoclavableDeckRiser.tsx new file mode 100644 index 00000000000..d6685e0793c --- /dev/null +++ b/components/src/hardware-sim/Labware/LabwareAdapter/OpentronsAutoclavableDeckRiser.tsx @@ -0,0 +1,100 @@ +// x .32, y .31 +export function OpentronsAutoclavableDeckRiser(): JSX.Element { + return ( + + + + + + + + + + + + + + + + ) +} diff --git a/components/src/hardware-sim/Labware/LabwareAdapter/OpentronsToughPCRAutoSealingLid.tsx b/components/src/hardware-sim/Labware/LabwareAdapter/OpentronsToughPCRAutoSealingLid.tsx new file mode 100644 index 00000000000..b3f50f94dd0 --- /dev/null +++ b/components/src/hardware-sim/Labware/LabwareAdapter/OpentronsToughPCRAutoSealingLid.tsx @@ -0,0 +1,83 @@ +export function OpentronsToughPCRAutoSealingLid(): JSX.Element { + return ( + + + + + + + + + + + + + + + + ) +} diff --git a/components/src/hardware-sim/Labware/LabwareAdapter/index.tsx b/components/src/hardware-sim/Labware/LabwareAdapter/index.tsx index f3941d980af..417b83ce89c 100644 --- a/components/src/hardware-sim/Labware/LabwareAdapter/index.tsx +++ b/components/src/hardware-sim/Labware/LabwareAdapter/index.tsx @@ -3,6 +3,8 @@ import { Opentrons96FlatBottomAdapter } from './Opentrons96FlatBottomAdapter' import { OpentronsUniversalFlatAdapter } from './OpentronsUniversalFlatAdapter' import { OpentronsAluminumFlatBottomPlate } from './OpentronsAluminumFlatBottomPlate' import { OpentronsFlex96TiprackAdapter } from './OpentronsFlex96TiprackAdapter' +import { OpentronsToughPCRAutoSealingLid } from './OpentronsToughPCRAutoSealingLid' +import { OpentronsAutoclavableDeckRiser } from './OpentronsAutoclavableDeckRiser' import { COLORS } from '../../../helix-design-system' import { LabwareOutline } from '../labwareInternals' import type { LabwareDefinition2 } from '@opentrons/shared-data' @@ -13,6 +15,8 @@ const LABWARE_ADAPTER_LOADNAME_PATHS = { opentrons_aluminum_flat_bottom_plate: OpentronsAluminumFlatBottomPlate, opentrons_flex_96_tiprack_adapter: OpentronsFlex96TiprackAdapter, opentrons_universal_flat_adapter: OpentronsUniversalFlatAdapter, + opentrons_tough_pcr_auto_sealing_lid: OpentronsToughPCRAutoSealingLid, + opentrons_flex_deck_riser: OpentronsAutoclavableDeckRiser, } export type LabwareAdapterLoadName = keyof typeof LABWARE_ADAPTER_LOADNAME_PATHS diff --git a/components/src/hardware-sim/ProtocolDeck/index.tsx b/components/src/hardware-sim/ProtocolDeck/index.tsx index fb1ac06349b..20c3a0c990b 100644 --- a/components/src/hardware-sim/ProtocolDeck/index.tsx +++ b/components/src/hardware-sim/ProtocolDeck/index.tsx @@ -4,7 +4,7 @@ import { FLEX_ROBOT_TYPE, getLabwareDisplayName, getSimplestDeckConfigForProtocol, - parseInitialLoadedLabwareByAdapter, + getTopLabwareInfo, } from '@opentrons/shared-data' import { BaseDeck } from '../BaseDeck' @@ -19,6 +19,8 @@ import type { CompletedProtocolAnalysis, LabwareDefinition2, ProtocolAnalysisOutput, + RunTimeCommand, + LoadLabwareRunTimeCommand, } from '@opentrons/shared-data' export * from './utils/getStandardDeckViewLayerBlockList' @@ -46,13 +48,15 @@ export function ProtocolDeck(props: ProtocolDeckProps): JSX.Element | null { if (protocolAnalysis == null || (protocolAnalysis?.errors ?? []).length > 0) return null + const commands: RunTimeCommand[] = protocolAnalysis.commands + const loadLabwareCommands = commands?.filter( + (command): command is LoadLabwareRunTimeCommand => + command.commandType === 'loadLabware' + ) const robotType = protocolAnalysis.robotType ?? FLEX_ROBOT_TYPE const deckConfig = getSimplestDeckConfigForProtocol(protocolAnalysis) const labwareByLiquidId = getLabwareInfoByLiquidId(protocolAnalysis.commands) - const initialLoadedLabwareByAdapter = parseInitialLoadedLabwareByAdapter( - protocolAnalysis.commands - ) const modulesInSlots = getModulesInSlots(protocolAnalysis) const modulesOnDeck = modulesInSlots.map( @@ -63,16 +67,10 @@ export function ProtocolDeck(props: ProtocolDeckProps): JSX.Element | null { nestedLabwareDef, nestedLabwareNickName, }) => { - const labwareInAdapterInMod = - nestedLabwareId != null - ? initialLoadedLabwareByAdapter[nestedLabwareId] - : null - // only rendering the labware on top most layer so - // either the adapter or the labware are rendered but not both - const topLabwareDefinition = - labwareInAdapterInMod?.result?.definition ?? nestedLabwareDef - const topLabwareId = - labwareInAdapterInMod?.result?.labwareId ?? nestedLabwareId + const { topLabwareId, topLabwareDefinition } = getTopLabwareInfo( + nestedLabwareId ?? '', + loadLabwareCommands + ) return { moduleModel, @@ -112,15 +110,16 @@ export function ProtocolDeck(props: ProtocolDeckProps): JSX.Element | null { } ) + // this function gets the top labware assuming a stack of max 2 labware const topMostLabwareInSlots = getTopMostLabwareInSlots(protocolAnalysis) const labwareOnDeck = topMostLabwareInSlots.map( ({ labwareId, labwareDef, labwareNickName, location }) => { - const labwareInAdapter = initialLoadedLabwareByAdapter[labwareId] - // only rendering the labware on top most layer so - // either the adapter or the labware are rendered but not both - const topLabwareDefinition = - labwareInAdapter?.result?.definition ?? labwareDef - const topLabwareId = labwareInAdapter?.result?.labwareId ?? labwareId + // this gets the very top of the stack in case there is a stack + // of many like items, such as TC lids + const { topLabwareId, topLabwareDefinition } = getTopLabwareInfo( + labwareId, + loadLabwareCommands + ) const isLabwareInStack = protocolAnalysis?.commands.some( command => command.commandType === 'loadLabware' && @@ -146,7 +145,7 @@ export function ProtocolDeck(props: ProtocolDeckProps): JSX.Element | null { highlight: handleLabwareClick != null, highlightShadow: handleLabwareClick != null && isLabwareInStack, onLabwareClick: - handleLabwareClick != null + handleLabwareClick != null && topLabwareDefinition != null ? () => { handleLabwareClick(topLabwareDefinition, topLabwareId) } diff --git a/shared-data/js/helpers/parseProtocolCommands.ts b/shared-data/js/helpers/parseProtocolCommands.ts index a5a05a65636..4f111e4d3e5 100644 --- a/shared-data/js/helpers/parseProtocolCommands.ts +++ b/shared-data/js/helpers/parseProtocolCommands.ts @@ -10,6 +10,7 @@ import type { LoadModuleRunTimeCommand, LoadPipetteRunTimeCommand, RunTimeCommand, + LabwareLocation, } from '../../command/types' import type { PipetteName } from '../pipettes' import type { @@ -18,6 +19,7 @@ import type { LoadedModule, LoadedPipette, ModuleModel, + LabwareDefinition2, } from '../types' interface PipetteNamesByMount { @@ -135,6 +137,111 @@ export function parseInitialLoadedLabwareBySlot( ) } +// given a labware id and load labware commands, this function +// finds the top most labware in the stack and returns relevant +// information +export function getTopLabwareInfo( + labwareId: string, + loadLabwareCommands: LoadLabwareRunTimeCommand[], + currentStackHeight: number = 0 +): { + topLabwareId: string + topLabwareDefinition?: LabwareDefinition2 + topLabwareDisplayName?: string +} { + const nestedCommand = loadLabwareCommands.find( + command => + command.commandType === 'loadLabware' && + command.params.location !== 'offDeck' && + 'labwareId' in command.params.location && + command.params.location.labwareId === labwareId + ) + // prevent recurssion errors (like labware stacked on itself) + // by enforcing a max stack height + if (nestedCommand == null || currentStackHeight > 5) { + const loadCommand = loadLabwareCommands.find( + command => + command.commandType === 'loadLabware' && + command.result?.labwareId === labwareId + ) + if (loadCommand == null) { + console.warn( + `could not find the load labware command assosciated with thie labwareId: ${labwareId}` + ) + } + return { + topLabwareId: labwareId, + topLabwareDefinition: loadCommand?.result?.definition, + topLabwareDisplayName: loadCommand?.params.displayName, + } + } else { + return getTopLabwareInfo( + nestedCommand?.result?.labwareId as string, + loadLabwareCommands, + currentStackHeight + 1 + ) + } +} + +// this recursive function will parse through load labware commands +// and give the quantity of LIKE labware stacked below the given labware +// id and the labware location of the bottom-most stacked item +export function getLabwareStackCountAndLocation( + topLabwareId: string, + commands: RunTimeCommand[], + initialQuantity: number = 1 +): { labwareQuantity: number; labwareLocation: LabwareLocation } { + const loadLabwareCommands = commands?.filter( + (command): command is LoadLabwareRunTimeCommand => + command.commandType === 'loadLabware' + ) + const loadLabwareCommand = loadLabwareCommands?.find( + command => command.result?.labwareId === topLabwareId + ) + + if (loadLabwareCommands == null || loadLabwareCommand == null) { + console.warn( + `could not find the load labware command assosciated with thie labwareId: ${topLabwareId}` + ) + return { labwareLocation: 'offDeck', labwareQuantity: 0 } + } + + const labwareLocation = loadLabwareCommand.params.location + + if (labwareLocation !== 'offDeck' && 'labwareId' in labwareLocation) { + const lowerLabwareCommand = loadLabwareCommands?.find(command => + command.result != null + ? command.result?.labwareId === labwareLocation.labwareId + : '' + ) + if (lowerLabwareCommand?.result?.labwareId == null) { + console.warn( + `could not find the load labware command assosciated with thie labwareId: ${labwareLocation.labwareId}` + ) + return { labwareLocation: 'offDeck', labwareQuantity: 0 } + } + + const isSameLabware = + loadLabwareCommand.params.loadName === + lowerLabwareCommand?.params.loadName + + // add protection for recursion errors by having a max stack of 5 which is current + // allowed max stack of TC lids + if (isSameLabware && initialQuantity < 5) { + const newQuantity = initialQuantity + 1 + return getLabwareStackCountAndLocation( + lowerLabwareCommand.result.labwareId, + commands, + newQuantity + ) + } + } + return { + labwareQuantity: initialQuantity, + labwareLocation, + } +} + export interface LoadedLabwareByAdapter { [labwareId: string]: LoadLabwareRunTimeCommand } From f16d3fbfb5c80d42579c526d577f8392cc341206 Mon Sep 17 00:00:00 2001 From: Max Marrone Date: Tue, 29 Oct 2024 10:53:48 -0400 Subject: [PATCH 18/81] refactor(api): Port remaining TipStore bits to StateUpdate (#16620) --- .../protocol_engine/commands/__init__.py | 1 - .../commands/command_unions.py | 16 +- .../commands/configure_for_volume.py | 17 +- .../commands/configuring_common.py | 13 - .../protocol_engine/commands/load_pipette.py | 19 +- .../opentrons/protocol_engine/state/tips.py | 59 ++-- .../protocol_runner/legacy_command_mapper.py | 19 +- .../commands/test_configure_for_volume.py | 5 +- .../commands/test_load_pipette.py | 9 +- .../state/test_pipette_store.py | 5 +- .../protocol_engine/state/test_tip_state.py | 274 ++++++++---------- .../test_legacy_command_mapper.py | 12 +- 12 files changed, 179 insertions(+), 270 deletions(-) delete mode 100644 api/src/opentrons/protocol_engine/commands/configuring_common.py diff --git a/api/src/opentrons/protocol_engine/commands/__init__.py b/api/src/opentrons/protocol_engine/commands/__init__.py index b8ad7ab0b57..3be0917b835 100644 --- a/api/src/opentrons/protocol_engine/commands/__init__.py +++ b/api/src/opentrons/protocol_engine/commands/__init__.py @@ -153,7 +153,6 @@ LoadPipetteCreate, LoadPipetteResult, LoadPipetteCommandType, - LoadPipettePrivateResult, ) from .move_labware import ( diff --git a/api/src/opentrons/protocol_engine/commands/command_unions.py b/api/src/opentrons/protocol_engine/commands/command_unions.py index 7623cc09f68..c86724c1124 100644 --- a/api/src/opentrons/protocol_engine/commands/command_unions.py +++ b/api/src/opentrons/protocol_engine/commands/command_unions.py @@ -1,7 +1,7 @@ """Union types of concrete command definitions.""" from collections.abc import Collection -from typing import Annotated, Type, Union, get_type_hints +from typing import Annotated, Literal, Type, Union, get_type_hints from pydantic import Field @@ -141,7 +141,6 @@ LoadPipetteCreate, LoadPipetteResult, LoadPipetteCommandType, - LoadPipettePrivateResult, ) from .move_labware import ( @@ -272,7 +271,6 @@ ConfigureForVolumeCreate, ConfigureForVolumeResult, ConfigureForVolumeCommandType, - ConfigureForVolumePrivateResult, ) from .prepare_to_aspirate import ( @@ -701,15 +699,9 @@ unsafe.UnsafeUngripLabwareResult, ] -# todo(mm, 2024-06-12): Ideally, command return types would have specific -# CommandPrivateResults paired with specific CommandResults. For example, -# a TouchTipResult can never be paired with a LoadPipettePrivateResult in practice, -# and ideally our types would reflect that. -CommandPrivateResult = Union[ - None, - LoadPipettePrivateResult, - ConfigureForVolumePrivateResult, -] +# todo(mm, 2024-10-28): This has been obsoleted by StateUpdate. Delete this. +# https://opentrons.atlassian.net/browse/EXEC-639 +CommandPrivateResult = Literal[None] # All `DefinedErrorData`s that implementations will actually return in practice. CommandDefinedErrorData = Union[ 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 93a56ca8805..f4caee72c7f 100644 --- a/api/src/opentrons/protocol_engine/commands/configure_for_volume.py +++ b/api/src/opentrons/protocol_engine/commands/configure_for_volume.py @@ -7,7 +7,6 @@ from .pipetting_common import PipetteIdMixin 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: @@ -35,12 +34,6 @@ class ConfigureForVolumeParams(PipetteIdMixin): ) -class ConfigureForVolumePrivateResult(PipetteConfigUpdateResultMixin): - """Result sent to the store but not serialized.""" - - pass - - class ConfigureForVolumeResult(BaseModel): """Result data from execution of an ConfigureForVolume command.""" @@ -50,7 +43,7 @@ class ConfigureForVolumeResult(BaseModel): class ConfigureForVolumeImplementation( AbstractCommandImpl[ ConfigureForVolumeParams, - SuccessData[ConfigureForVolumeResult, ConfigureForVolumePrivateResult], + SuccessData[ConfigureForVolumeResult, None], ] ): """Configure for volume command implementation.""" @@ -60,7 +53,7 @@ def __init__(self, equipment: EquipmentHandler, **kwargs: object) -> None: async def execute( self, params: ConfigureForVolumeParams - ) -> SuccessData[ConfigureForVolumeResult, ConfigureForVolumePrivateResult]: + ) -> SuccessData[ConfigureForVolumeResult, None]: """Check that requested pipette can be configured for the given volume.""" pipette_result = await self._equipment.configure_for_volume( pipette_id=params.pipetteId, @@ -77,11 +70,7 @@ async def execute( return SuccessData( public=ConfigureForVolumeResult(), - private=ConfigureForVolumePrivateResult( - pipette_id=pipette_result.pipette_id, - serial_number=pipette_result.serial_number, - config=pipette_result.static_config, - ), + private=None, state_update=state_update, ) diff --git a/api/src/opentrons/protocol_engine/commands/configuring_common.py b/api/src/opentrons/protocol_engine/commands/configuring_common.py deleted file mode 100644 index f69cf41fef6..00000000000 --- a/api/src/opentrons/protocol_engine/commands/configuring_common.py +++ /dev/null @@ -1,13 +0,0 @@ -"""Common configuration command base models.""" - -from dataclasses import dataclass -from ..resources import pipette_data_provider - - -@dataclass -class PipetteConfigUpdateResultMixin: - """A mixin-suitable model for adding pipette config to private results.""" - - pipette_id: str - serial_number: str - config: pipette_data_provider.LoadedStaticPipetteData diff --git a/api/src/opentrons/protocol_engine/commands/load_pipette.py b/api/src/opentrons/protocol_engine/commands/load_pipette.py index 5961272ae7c..3d9bdd83050 100644 --- a/api/src/opentrons/protocol_engine/commands/load_pipette.py +++ b/api/src/opentrons/protocol_engine/commands/load_pipette.py @@ -17,7 +17,6 @@ from .command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData from ..errors.error_occurrence import ErrorOccurrence -from .configuring_common import PipetteConfigUpdateResultMixin from ..errors import InvalidSpecificationForRobotTypeError, InvalidLoadPipetteSpecsError if TYPE_CHECKING: @@ -28,12 +27,6 @@ LoadPipetteCommandType = Literal["loadPipette"] -class LoadPipettePrivateResult(PipetteConfigUpdateResultMixin): - """The not-to-be-exposed results of a load pipette call.""" - - ... - - class LoadPipetteParams(BaseModel): """Payload needed to load a pipette on to a mount.""" @@ -73,9 +66,7 @@ class LoadPipetteResult(BaseModel): class LoadPipetteImplementation( - AbstractCommandImpl[ - LoadPipetteParams, SuccessData[LoadPipetteResult, LoadPipettePrivateResult] - ] + AbstractCommandImpl[LoadPipetteParams, SuccessData[LoadPipetteResult, None]] ): """Load pipette command implementation.""" @@ -87,7 +78,7 @@ def __init__( async def execute( self, params: LoadPipetteParams - ) -> SuccessData[LoadPipetteResult, LoadPipettePrivateResult]: + ) -> SuccessData[LoadPipetteResult, None]: """Check that requested pipette is attached and assign its identifier.""" pipette_generation = convert_to_pipette_name_type( params.pipetteName.value @@ -139,11 +130,7 @@ async def execute( return SuccessData( public=LoadPipetteResult(pipetteId=loaded_pipette.pipette_id), - private=LoadPipettePrivateResult( - pipette_id=loaded_pipette.pipette_id, - serial_number=loaded_pipette.serial_number, - config=loaded_pipette.static_config, - ), + private=None, state_update=state_update, ) diff --git a/api/src/opentrons/protocol_engine/state/tips.py b/api/src/opentrons/protocol_engine/state/tips.py index 7427c78ac4c..1ac3e91f795 100644 --- a/api/src/opentrons/protocol_engine/state/tips.py +++ b/api/src/opentrons/protocol_engine/state/tips.py @@ -6,12 +6,7 @@ from opentrons.protocol_engine.state import update_types from ._abstract_store import HasState, HandlesActions -from ..actions import Action, SucceedCommandAction, ResetTipsAction, get_state_updates -from ..commands import ( - Command, - LoadLabwareResult, -) -from ..commands.configuring_common import PipetteConfigUpdateResultMixin +from ..actions import Action, ResetTipsAction, get_state_updates from opentrons.hardware_control.nozzle_manager import NozzleMap @@ -66,19 +61,7 @@ def handle_action(self, action: Action) -> None: for state_update in get_state_updates(action): self._handle_state_update(state_update) - if isinstance(action, SucceedCommandAction): - if isinstance(action.private_result, PipetteConfigUpdateResultMixin): - pipette_id = action.private_result.pipette_id - config = action.private_result.config - self._state.pipette_info_by_pipette_id[pipette_id] = _PipetteInfo( - channels=config.channels, - active_channels=config.channels, - nozzle_map=config.nozzle_map, - ) - - self._handle_succeeded_command(action.command) - - elif isinstance(action, ResetTipsAction): + if isinstance(action, ResetTipsAction): labware_id = action.labware_id for well_name in self._state.tips_by_labware_id[labware_id].keys(): @@ -86,23 +69,16 @@ def handle_action(self, action: Action) -> None: well_name ] = TipRackWellState.CLEAN - def _handle_succeeded_command(self, command: Command) -> None: - if ( - isinstance(command.result, LoadLabwareResult) - and command.result.definition.parameters.isTiprack - ): - labware_id = command.result.labwareId - definition = command.result.definition - self._state.tips_by_labware_id[labware_id] = { - well_name: TipRackWellState.CLEAN - for column in definition.ordering - for well_name in column - } - self._state.column_by_labware_id[labware_id] = [ - column for column in definition.ordering - ] - def _handle_state_update(self, state_update: update_types.StateUpdate) -> None: + if state_update.pipette_config != update_types.NO_CHANGE: + self._state.pipette_info_by_pipette_id[ + state_update.pipette_config.pipette_id + ] = _PipetteInfo( + channels=state_update.pipette_config.config.channels, + active_channels=state_update.pipette_config.config.channels, + nozzle_map=state_update.pipette_config.config.nozzle_map, + ) + if state_update.tips_used != update_types.NO_CHANGE: self._set_used_tips( pipette_id=state_update.tips_used.pipette_id, @@ -119,6 +95,19 @@ def _handle_state_update(self, state_update: update_types.StateUpdate) -> None: ) pipette_info.nozzle_map = state_update.pipette_nozzle_map.nozzle_map + if state_update.loaded_labware != update_types.NO_CHANGE: + labware_id = state_update.loaded_labware.labware_id + definition = state_update.loaded_labware.definition + if definition.parameters.isTiprack: + self._state.tips_by_labware_id[labware_id] = { + well_name: TipRackWellState.CLEAN + for column in definition.ordering + for well_name in column + } + self._state.column_by_labware_id[labware_id] = [ + column for column in definition.ordering + ] + def _set_used_tips( # noqa: C901 self, pipette_id: str, well_name: str, labware_id: str ) -> None: diff --git a/api/src/opentrons/protocol_runner/legacy_command_mapper.py b/api/src/opentrons/protocol_runner/legacy_command_mapper.py index 686560c1ca2..2a1ef28a359 100644 --- a/api/src/opentrons/protocol_runner/legacy_command_mapper.py +++ b/api/src/opentrons/protocol_runner/legacy_command_mapper.py @@ -731,7 +731,14 @@ def _map_instrument_load( result=pe_commands.LoadPipetteResult.construct(pipetteId=pipette_id), ) serial = instrument_load_info.pipette_dict.get("pipette_id", None) or "" - pipette_config_result = pe_commands.LoadPipettePrivateResult( + 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, + ) + state_update.update_pipette_config( pipette_id=pipette_id, serial_number=serial, config=pipette_data_provider.get_pipette_static_config( @@ -754,16 +761,10 @@ 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, + private_result=None, state_update=state_update, ) 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 2279f2a0ebf..59e65ede181 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 @@ -19,7 +19,6 @@ from opentrons.protocol_engine.commands.configure_for_volume import ( ConfigureForVolumeParams, ConfigureForVolumeResult, - ConfigureForVolumePrivateResult, ConfigureForVolumeImplementation, ) from opentrons_shared_data.pipette.types import PipetteNameType @@ -85,9 +84,7 @@ async def test_configure_for_volume_implementation( assert result == SuccessData( public=ConfigureForVolumeResult(), - private=ConfigureForVolumePrivateResult( - pipette_id="pipette-id", serial_number="some number", config=config - ), + private=None, 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_load_pipette.py b/api/tests/opentrons/protocol_engine/commands/test_load_pipette.py index 5884e015342..4d757f49a54 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_load_pipette.py +++ b/api/tests/opentrons/protocol_engine/commands/test_load_pipette.py @@ -22,7 +22,6 @@ from opentrons.protocol_engine.commands.load_pipette import ( LoadPipetteParams, LoadPipetteResult, - LoadPipettePrivateResult, LoadPipetteImplementation, ) from ..pipette_fixtures import get_default_nozzle_map @@ -90,9 +89,7 @@ async def test_load_pipette_implementation( assert result == SuccessData( public=LoadPipetteResult(pipetteId="some id"), - private=LoadPipettePrivateResult( - pipette_id="some id", serial_number="some-serial-number", config=config_data - ), + private=None, state_update=StateUpdate( loaded_pipette=LoadPipetteUpdate( pipette_name=PipetteNameType.P300_SINGLE, @@ -158,9 +155,7 @@ async def test_load_pipette_implementation_96_channel( assert result == SuccessData( public=LoadPipetteResult(pipetteId="pipette-id"), - private=LoadPipettePrivateResult( - pipette_id="pipette-id", serial_number="some id", config=config_data - ), + private=None, state_update=StateUpdate( loaded_pipette=LoadPipetteUpdate( pipette_name=PipetteNameType.P1000_96, 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 caab429e26b..10ae35e5f4a 100644 --- a/api/tests/opentrons/protocol_engine/state/test_pipette_store.py +++ b/api/tests/opentrons/protocol_engine/state/test_pipette_store.py @@ -638,13 +638,10 @@ def test_add_pipette_config( 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, + private_result=None, state_update=update_types.StateUpdate( pipette_config=update_types.PipetteConfigUpdate( pipette_id="pipette-id", diff --git a/api/tests/opentrons/protocol_engine/state/test_tip_state.py b/api/tests/opentrons/protocol_engine/state/test_tip_state.py index e0f0fd15669..96e0451dbbe 100644 --- a/api/tests/opentrons/protocol_engine/state/test_tip_state.py +++ b/api/tests/opentrons/protocol_engine/state/test_tip_state.py @@ -16,11 +16,11 @@ from opentrons.protocol_engine import actions, commands from opentrons.protocol_engine.state import update_types from opentrons.protocol_engine.state.tips import TipStore, TipView -from opentrons.protocol_engine.types import FlowRates +from opentrons.protocol_engine.types import DeckSlotLocation, FlowRates from opentrons.protocol_engine.resources.pipette_data_provider import ( LoadedStaticPipetteData, ) -from opentrons.types import Point +from opentrons.types import DeckSlotName, Point from opentrons_shared_data.pipette.types import PipetteNameType from ..pipette_fixtures import ( NINETY_SIX_MAP, @@ -61,13 +61,22 @@ def labware_definition() -> LabwareDefinition: @pytest.fixture -def load_labware_command(labware_definition: LabwareDefinition) -> commands.LoadLabware: +def load_labware_action( + labware_definition: LabwareDefinition, +) -> actions.SucceedCommandAction: """Get a load labware command value object.""" - return commands.LoadLabware.construct( # type: ignore[call-arg] - result=commands.LoadLabwareResult.construct( - labwareId="cool-labware", - definition=labware_definition, - ) + return actions.SucceedCommandAction( + private_result=None, + command=_dummy_command(), + state_update=update_types.StateUpdate( + loaded_labware=update_types.LoadedLabwareUpdate( + labware_id="cool-labware", + definition=labware_definition, + new_location=DeckSlotLocation(slotName=DeckSlotName.SLOT_A1), + display_name=None, + offset_id=None, + ) + ), ) @@ -83,18 +92,13 @@ def _dummy_command() -> commands.Command: ], ) def test_get_next_tip_returns_none( - load_labware_command: commands.LoadLabware, + load_labware_action: actions.SucceedCommandAction, subject: TipStore, supported_tip_fixture: pipette_definition.SupportedTipsDefinition, ) -> None: """It should start at the first tip in the labware.""" - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=load_labware_command) - ) - load_pipette_command = commands.LoadPipette.construct( # type: ignore[call-arg] - result=commands.LoadPipetteResult(pipetteId="pipette-id") - ) - load_pipette_private_result = commands.LoadPipettePrivateResult( + subject.handle_action(load_labware_action) + config_update = update_types.PipetteConfigUpdate( pipette_id="pipette-id", serial_number="pipette-serial", config=LoadedStaticPipetteData( @@ -120,7 +124,9 @@ def test_get_next_tip_returns_none( ) subject.handle_action( actions.SucceedCommandAction( - private_result=load_pipette_private_result, command=load_pipette_command + private_result=None, + state_update=update_types.StateUpdate(pipette_config=config_update), + command=_dummy_command(), ) ) @@ -136,18 +142,14 @@ def test_get_next_tip_returns_none( @pytest.mark.parametrize("input_tip_amount", [1, 8, 96]) def test_get_next_tip_returns_first_tip( - load_labware_command: commands.LoadLabware, + load_labware_action: actions.SucceedCommandAction, subject: TipStore, input_tip_amount: int, supported_tip_fixture: pipette_definition.SupportedTipsDefinition, ) -> None: """It should start at the first tip in the labware.""" - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=load_labware_command) - ) - load_pipette_command = commands.LoadPipette.construct( # type: ignore[call-arg] - result=commands.LoadPipetteResult(pipetteId="pipette-id") - ) + subject.handle_action(load_labware_action) + pipette_name_type = PipetteNameType.P1000_96 if input_tip_amount == 1: pipette_name_type = PipetteNameType.P300_SINGLE_GEN2 @@ -155,7 +157,7 @@ def test_get_next_tip_returns_first_tip( pipette_name_type = PipetteNameType.P300_MULTI_GEN2 else: pipette_name_type = PipetteNameType.P1000_96 - load_pipette_private_result = commands.LoadPipettePrivateResult( + config_update = update_types.PipetteConfigUpdate( pipette_id="pipette-id", serial_number="pipette-serial", config=LoadedStaticPipetteData( @@ -181,7 +183,9 @@ def test_get_next_tip_returns_first_tip( ) subject.handle_action( actions.SucceedCommandAction( - private_result=load_pipette_private_result, command=load_pipette_command + private_result=None, + state_update=update_types.StateUpdate(pipette_config=config_update), + command=_dummy_command(), ) ) @@ -197,20 +201,16 @@ def test_get_next_tip_returns_first_tip( @pytest.mark.parametrize("input_tip_amount, result_well_name", [(1, "B1"), (8, "A2")]) def test_get_next_tip_used_starting_tip( - load_labware_command: commands.LoadLabware, + load_labware_action: actions.SucceedCommandAction, subject: TipStore, input_tip_amount: int, result_well_name: str, supported_tip_fixture: pipette_definition.SupportedTipsDefinition, ) -> None: """It should start searching at the given starting tip.""" - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=load_labware_command) - ) - load_pipette_command = commands.LoadPipette.construct( # type: ignore[call-arg] - result=commands.LoadPipetteResult(pipetteId="pipette-id") - ) - load_pipette_private_result = commands.LoadPipettePrivateResult( + subject.handle_action(load_labware_action) + + config_update = update_types.PipetteConfigUpdate( pipette_id="pipette-id", serial_number="pipette-serial", config=LoadedStaticPipetteData( @@ -236,7 +236,9 @@ def test_get_next_tip_used_starting_tip( ) subject.handle_action( actions.SucceedCommandAction( - private_result=load_pipette_private_result, command=load_pipette_command + private_result=None, + state_update=update_types.StateUpdate(pipette_config=config_update), + command=_dummy_command(), ) ) @@ -265,7 +267,7 @@ def test_get_next_tip_used_starting_tip( ], ) def test_get_next_tip_skips_picked_up_tip( - load_labware_command: commands.LoadLabware, + load_labware_action: actions.SucceedCommandAction, subject: TipStore, input_tip_amount: int, get_next_tip_tips: int, @@ -274,13 +276,8 @@ def test_get_next_tip_skips_picked_up_tip( supported_tip_fixture: pipette_definition.SupportedTipsDefinition, ) -> None: """It should get the next tip in the column if one has been picked up.""" - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=load_labware_command) - ) + subject.handle_action(load_labware_action) - load_pipette_command = commands.LoadPipette.construct( # type: ignore[call-arg] - result=commands.LoadPipetteResult(pipetteId="pipette-id") - ) channels_num = input_tip_amount if input_starting_tip is not None: pipette_name_type = PipetteNameType.P1000_96 @@ -299,7 +296,7 @@ def test_get_next_tip_skips_picked_up_tip( pipette_name_type = PipetteNameType.P300_MULTI_GEN2 else: pipette_name_type = PipetteNameType.P1000_96 - load_pipette_private_result = commands.LoadPipettePrivateResult( + config_update = update_types.PipetteConfigUpdate( pipette_id="pipette-id", serial_number="pipette-serial", config=LoadedStaticPipetteData( @@ -325,7 +322,9 @@ def test_get_next_tip_skips_picked_up_tip( ) subject.handle_action( actions.SucceedCommandAction( - private_result=load_pipette_private_result, command=load_pipette_command + private_result=None, + state_update=update_types.StateUpdate(pipette_config=config_update), + command=_dummy_command(), ) ) @@ -348,7 +347,7 @@ def test_get_next_tip_skips_picked_up_tip( labware_id="cool-labware", num_tips=get_next_tip_tips, starting_tip_name=input_starting_tip, - nozzle_map=load_pipette_private_result.config.nozzle_map, + nozzle_map=config_update.config.nozzle_map, ) assert result == result_well_name @@ -356,17 +355,13 @@ def test_get_next_tip_skips_picked_up_tip( def test_get_next_tip_with_starting_tip( subject: TipStore, - load_labware_command: commands.LoadLabware, + load_labware_action: actions.SucceedCommandAction, supported_tip_fixture: pipette_definition.SupportedTipsDefinition, ) -> None: """It should return the starting tip, and then the following tip after that.""" - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=load_labware_command) - ) - load_pipette_command = commands.LoadPipette.construct( # type: ignore[call-arg] - result=commands.LoadPipetteResult(pipetteId="pipette-id") - ) - load_pipette_private_result = commands.LoadPipettePrivateResult( + subject.handle_action(load_labware_action) + + config_update = update_types.PipetteConfigUpdate( pipette_id="pipette-id", serial_number="pipette-serial", config=LoadedStaticPipetteData( @@ -392,14 +387,16 @@ def test_get_next_tip_with_starting_tip( ) subject.handle_action( actions.SucceedCommandAction( - private_result=load_pipette_private_result, command=load_pipette_command + private_result=None, + state_update=update_types.StateUpdate(pipette_config=config_update), + command=_dummy_command(), ) ) result = TipView(subject.state).get_next_tip( labware_id="cool-labware", num_tips=1, starting_tip_name="B2", - nozzle_map=load_pipette_private_result.config.nozzle_map, + nozzle_map=config_update.config.nozzle_map, ) assert result == "B2" @@ -419,7 +416,7 @@ def test_get_next_tip_with_starting_tip( labware_id="cool-labware", num_tips=1, starting_tip_name="B2", - nozzle_map=load_pipette_private_result.config.nozzle_map, + nozzle_map=config_update.config.nozzle_map, ) assert result == "C2" @@ -427,17 +424,13 @@ def test_get_next_tip_with_starting_tip( def test_get_next_tip_with_starting_tip_8_channel( subject: TipStore, - load_labware_command: commands.LoadLabware, + load_labware_action: actions.SucceedCommandAction, supported_tip_fixture: pipette_definition.SupportedTipsDefinition, ) -> None: """It should return the starting tip, and then the following tip after that.""" - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=load_labware_command) - ) - load_pipette_command = commands.LoadPipette.construct( # type: ignore[call-arg] - result=commands.LoadPipetteResult(pipetteId="pipette-id") - ) - load_pipette_private_result = commands.LoadPipettePrivateResult( + subject.handle_action(load_labware_action) + + config_update = update_types.PipetteConfigUpdate( pipette_id="pipette-id", serial_number="pipette-serial", config=LoadedStaticPipetteData( @@ -463,7 +456,9 @@ def test_get_next_tip_with_starting_tip_8_channel( ) subject.handle_action( actions.SucceedCommandAction( - private_result=load_pipette_private_result, command=load_pipette_command + private_result=None, + state_update=update_types.StateUpdate(pipette_config=config_update), + command=_dummy_command(), ) ) @@ -501,17 +496,13 @@ def test_get_next_tip_with_starting_tip_8_channel( def test_get_next_tip_with_1_channel_followed_by_8_channel( subject: TipStore, - load_labware_command: commands.LoadLabware, + load_labware_action: actions.SucceedCommandAction, supported_tip_fixture: pipette_definition.SupportedTipsDefinition, ) -> None: """It should return the first tip of column 2 for the 8 channel after performing a single tip pickup on column 1.""" - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=load_labware_command) - ) - load_pipette_command = commands.LoadPipette.construct( # type: ignore[call-arg] - result=commands.LoadPipetteResult(pipetteId="pipette-id") - ) - load_pipette_private_result = commands.LoadPipettePrivateResult( + subject.handle_action(load_labware_action) + + config_update = update_types.PipetteConfigUpdate( pipette_id="pipette-id", serial_number="pipette-serial", config=LoadedStaticPipetteData( @@ -537,13 +528,13 @@ def test_get_next_tip_with_1_channel_followed_by_8_channel( ) subject.handle_action( actions.SucceedCommandAction( - private_result=load_pipette_private_result, command=load_pipette_command + private_result=None, + state_update=update_types.StateUpdate(pipette_config=config_update), + command=_dummy_command(), ) ) - load_pipette_command_2 = commands.LoadPipette.construct( # type: ignore[call-arg] - result=commands.LoadPipetteResult(pipetteId="pipette-id2") - ) - load_pipette_private_result_2 = commands.LoadPipettePrivateResult( + + config_update_2 = update_types.PipetteConfigUpdate( pipette_id="pipette-id2", serial_number="pipette-serial2", config=LoadedStaticPipetteData( @@ -569,7 +560,9 @@ def test_get_next_tip_with_1_channel_followed_by_8_channel( ) subject.handle_action( actions.SucceedCommandAction( - private_result=load_pipette_private_result_2, command=load_pipette_command_2 + private_result=None, + state_update=update_types.StateUpdate(pipette_config=config_update_2), + command=_dummy_command(), ) ) @@ -607,17 +600,13 @@ def test_get_next_tip_with_1_channel_followed_by_8_channel( def test_get_next_tip_with_starting_tip_out_of_tips( subject: TipStore, - load_labware_command: commands.LoadLabware, + load_labware_action: actions.SucceedCommandAction, supported_tip_fixture: pipette_definition.SupportedTipsDefinition, ) -> None: """It should return the starting tip of H12 and then None after that.""" - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=load_labware_command) - ) - load_pipette_command = commands.LoadPipette.construct( # type: ignore[call-arg] - result=commands.LoadPipetteResult(pipetteId="pipette-id") - ) - load_pipette_private_result = commands.LoadPipettePrivateResult( + subject.handle_action(load_labware_action) + + config_update = update_types.PipetteConfigUpdate( pipette_id="pipette-id", serial_number="pipette-serial", config=LoadedStaticPipetteData( @@ -643,7 +632,9 @@ def test_get_next_tip_with_starting_tip_out_of_tips( ) subject.handle_action( actions.SucceedCommandAction( - private_result=load_pipette_private_result, command=load_pipette_command + private_result=None, + state_update=update_types.StateUpdate(pipette_config=config_update), + command=_dummy_command(), ) ) @@ -681,17 +672,13 @@ def test_get_next_tip_with_starting_tip_out_of_tips( def test_get_next_tip_with_column_and_starting_tip( subject: TipStore, - load_labware_command: commands.LoadLabware, + load_labware_action: actions.SucceedCommandAction, supported_tip_fixture: pipette_definition.SupportedTipsDefinition, ) -> None: """It should return the first tip in a column, taking starting tip into account.""" - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=load_labware_command) - ) - load_pipette_command = commands.LoadPipette.construct( # type: ignore[call-arg] - result=commands.LoadPipetteResult(pipetteId="pipette-id") - ) - load_pipette_private_result = commands.LoadPipettePrivateResult( + subject.handle_action(load_labware_action) + + config_update = update_types.PipetteConfigUpdate( pipette_id="pipette-id", serial_number="pipette-serial", config=LoadedStaticPipetteData( @@ -717,7 +704,9 @@ def test_get_next_tip_with_column_and_starting_tip( ) subject.handle_action( actions.SucceedCommandAction( - private_result=load_pipette_private_result, command=load_pipette_command + private_result=None, + state_update=update_types.StateUpdate(pipette_config=config_update), + command=_dummy_command(), ) ) @@ -733,17 +722,13 @@ def test_get_next_tip_with_column_and_starting_tip( def test_reset_tips( subject: TipStore, - load_labware_command: commands.LoadLabware, + load_labware_action: actions.SucceedCommandAction, supported_tip_fixture: pipette_definition.SupportedTipsDefinition, ) -> None: """It should be able to reset tip tracking state.""" - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=load_labware_command) - ) - load_pipette_command = commands.LoadPipette.construct( # type: ignore[call-arg] - result=commands.LoadPipetteResult(pipetteId="pipette-id") - ) - load_pipette_private_result = commands.LoadPipettePrivateResult( + subject.handle_action(load_labware_action) + + config_update = update_types.PipetteConfigUpdate( pipette_id="pipette-id", serial_number="pipette-serial", config=LoadedStaticPipetteData( @@ -770,7 +755,9 @@ def test_reset_tips( subject.handle_action( actions.SucceedCommandAction( - private_result=load_pipette_private_result, command=load_pipette_command + private_result=None, + state_update=update_types.StateUpdate(pipette_config=config_update), + command=_dummy_command(), ) ) @@ -805,10 +792,7 @@ def test_handle_pipette_config_action( subject: TipStore, supported_tip_fixture: pipette_definition.SupportedTipsDefinition ) -> None: """Should add pipette channel to state.""" - load_pipette_command = commands.LoadPipette.construct( # type: ignore[call-arg] - result=commands.LoadPipetteResult(pipetteId="pipette-id") - ) - load_pipette_private_result = commands.LoadPipettePrivateResult( + config_update = update_types.PipetteConfigUpdate( pipette_id="pipette-id", serial_number="pipette-serial", config=LoadedStaticPipetteData( @@ -834,7 +818,9 @@ def test_handle_pipette_config_action( ) subject.handle_action( actions.SucceedCommandAction( - private_result=load_pipette_private_result, command=load_pipette_command + private_result=None, + state_update=update_types.StateUpdate(pipette_config=config_update), + command=_dummy_command(), ) ) @@ -852,12 +838,10 @@ def test_handle_pipette_config_action( ], ) def test_has_tip_not_tip_rack( - load_labware_command: commands.LoadLabware, subject: TipStore + load_labware_action: actions.SucceedCommandAction, subject: TipStore ) -> None: """It should return False if labware isn't a tip rack.""" - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=load_labware_command) - ) + subject.handle_action(load_labware_action) result = TipView(state=subject.state).has_clean_tip("cool-labware", "A1") @@ -865,12 +849,10 @@ def test_has_tip_not_tip_rack( def test_has_tip_tip_rack( - load_labware_command: commands.LoadLabware, subject: TipStore + load_labware_action: actions.SucceedCommandAction, subject: TipStore ) -> None: """It should return False if labware isn't a tip rack.""" - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=load_labware_command) - ) + subject.handle_action(load_labware_action) result = TipView(state=subject.state).has_clean_tip("cool-labware", "A1") @@ -944,10 +926,7 @@ def test_active_channels( ) -> None: """Should update active channels after pipette configuration change.""" # Load pipette to update state - load_pipette_command = commands.LoadPipette.construct( # type: ignore[call-arg] - result=commands.LoadPipetteResult(pipetteId="pipette-id") - ) - load_pipette_private_result = commands.LoadPipettePrivateResult( + config_update = update_types.PipetteConfigUpdate( pipette_id="pipette-id", serial_number="pipette-serial", config=LoadedStaticPipetteData( @@ -973,7 +952,9 @@ def test_active_channels( ) subject.handle_action( actions.SucceedCommandAction( - private_result=load_pipette_private_result, command=load_pipette_command + private_result=None, + state_update=update_types.StateUpdate(pipette_config=config_update), + command=_dummy_command(), ) ) @@ -1000,19 +981,14 @@ def test_active_channels( def test_next_tip_uses_active_channels( subject: TipStore, supported_tip_fixture: pipette_definition.SupportedTipsDefinition, - load_labware_command: commands.LoadLabware, + load_labware_action: actions.SucceedCommandAction, ) -> None: """Test that tip tracking logic uses pipette's active channels.""" # Load labware - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=load_labware_command) - ) + subject.handle_action(load_labware_action) # Load pipette - load_pipette_command = commands.LoadPipette.construct( # type: ignore[call-arg] - result=commands.LoadPipetteResult(pipetteId="pipette-id") - ) - load_pipette_private_result = commands.LoadPipettePrivateResult( + config_update = update_types.PipetteConfigUpdate( pipette_id="pipette-id", serial_number="pipette-serial", config=LoadedStaticPipetteData( @@ -1038,7 +1014,9 @@ def test_next_tip_uses_active_channels( ) subject.handle_action( actions.SucceedCommandAction( - private_result=load_pipette_private_result, command=load_pipette_command + private_result=None, + state_update=update_types.StateUpdate(pipette_config=config_update), + command=_dummy_command(), ) ) @@ -1104,19 +1082,14 @@ def test_next_tip_uses_active_channels( def test_next_tip_automatic_tip_tracking_with_partial_configurations( subject: TipStore, supported_tip_fixture: pipette_definition.SupportedTipsDefinition, - load_labware_command: commands.LoadLabware, + load_labware_action: actions.SucceedCommandAction, ) -> None: """Test tip tracking logic using multiple pipette configurations.""" # Load labware - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=load_labware_command) - ) + subject.handle_action(load_labware_action) # Load pipette - load_pipette_command = commands.LoadPipette.construct( # type: ignore[call-arg] - result=commands.LoadPipetteResult(pipetteId="pipette-id") - ) - load_pipette_private_result = commands.LoadPipettePrivateResult( + config_update = update_types.PipetteConfigUpdate( pipette_id="pipette-id", serial_number="pipette-serial", config=LoadedStaticPipetteData( @@ -1142,7 +1115,9 @@ def test_next_tip_automatic_tip_tracking_with_partial_configurations( ) subject.handle_action( actions.SucceedCommandAction( - private_result=load_pipette_private_result, command=load_pipette_command + private_result=None, + state_update=update_types.StateUpdate(pipette_config=config_update), + command=_dummy_command(), ) ) @@ -1262,19 +1237,14 @@ def _reconfigure_nozzle_layout(start: str, back_l: str, front_r: str) -> NozzleM def test_next_tip_automatic_tip_tracking_tiprack_limits( subject: TipStore, supported_tip_fixture: pipette_definition.SupportedTipsDefinition, - load_labware_command: commands.LoadLabware, + load_labware_action: actions.SucceedCommandAction, ) -> None: """Test tip tracking logic to ensure once a tiprack is consumed it returns None when consuming tips using multiple pipette configurations.""" # Load labware - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=load_labware_command) - ) + subject.handle_action(load_labware_action) # Load pipette - load_pipette_command = commands.LoadPipette.construct( # type: ignore[call-arg] - result=commands.LoadPipetteResult(pipetteId="pipette-id") - ) - load_pipette_private_result = commands.LoadPipettePrivateResult( + config_update = update_types.PipetteConfigUpdate( pipette_id="pipette-id", serial_number="pipette-serial", config=LoadedStaticPipetteData( @@ -1300,7 +1270,9 @@ def test_next_tip_automatic_tip_tracking_tiprack_limits( ) subject.handle_action( actions.SucceedCommandAction( - private_result=load_pipette_private_result, command=load_pipette_command + private_result=None, + state_update=update_types.StateUpdate(pipette_config=config_update), + command=_dummy_command(), ) ) 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 8663c3e0a8d..c31c6a2e551 100644 --- a/api/tests/opentrons/protocol_runner/test_legacy_command_mapper.py +++ b/api/tests/opentrons/protocol_runner/test_legacy_command_mapper.py @@ -6,6 +6,7 @@ from opentrons.protocol_engine.state.update_types import ( LoadPipetteUpdate, LoadedLabwareUpdate, + PipetteConfigUpdate, StateUpdate, ) import pytest @@ -380,16 +381,19 @@ def test_map_instrument_load(decoy: Decoy) -> None: result=pe_commands.LoadPipetteResult(pipetteId="pipette-0"), notes=[], ), - private_result=pe_commands.LoadPipettePrivateResult( - pipette_id="pipette-0", serial_number="fizzbuzz", config=pipette_config - ), + private_result=None, 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, - ) + ), + pipette_config=PipetteConfigUpdate( + pipette_id="pipette-0", + serial_number="fizzbuzz", + config=pipette_config, + ), ), ) From a20cb6faf20127dbfe83b65a5e3a88f8e8e59b49 Mon Sep 17 00:00:00 2001 From: Sarah Breen Date: Tue, 29 Oct 2024 11:33:44 -0400 Subject: [PATCH 19/81] feat(app): add lid category to labware tab display (#16623) fix PLAT-516 --- app/src/local-resources/labware/types.ts | 1 + app/src/pages/Desktop/Labware/__tests__/Labware.test.tsx | 3 +++ app/src/pages/Desktop/Labware/index.tsx | 1 + 3 files changed, 5 insertions(+) diff --git a/app/src/local-resources/labware/types.ts b/app/src/local-resources/labware/types.ts index da55c9d7004..3ab026b9603 100644 --- a/app/src/local-resources/labware/types.ts +++ b/app/src/local-resources/labware/types.ts @@ -21,6 +21,7 @@ export type LabwareFilter = | 'aluminumBlock' | 'customLabware' | 'adapter' + | 'lid' export type LabwareSort = 'alphabetical' | 'reverse' diff --git a/app/src/pages/Desktop/Labware/__tests__/Labware.test.tsx b/app/src/pages/Desktop/Labware/__tests__/Labware.test.tsx index 3c919b7f295..40cfb02c57c 100644 --- a/app/src/pages/Desktop/Labware/__tests__/Labware.test.tsx +++ b/app/src/pages/Desktop/Labware/__tests__/Labware.test.tsx @@ -121,6 +121,9 @@ describe('Labware', () => { screen.getByRole('button', { name: 'Tube Rack' }) screen.getByRole('button', { name: 'Reservoir' }) screen.getByRole('button', { name: 'Aluminum Block' }) + screen.getByRole('button', { name: 'Adapter' }) + screen.getByRole('button', { name: 'Lid' }) + screen.getByRole('button', { name: 'Custom Labware' }) }) it('renders changes filter menu button when an option is selected', () => { render() diff --git a/app/src/pages/Desktop/Labware/index.tsx b/app/src/pages/Desktop/Labware/index.tsx index 159e57c306e..83f9dd94f3f 100644 --- a/app/src/pages/Desktop/Labware/index.tsx +++ b/app/src/pages/Desktop/Labware/index.tsx @@ -56,6 +56,7 @@ const labwareDisplayCategoryFilters: LabwareFilter[] = [ 'adapter', 'aluminumBlock', 'customLabware', + 'lid', 'reservoir', 'tipRack', 'tubeRack', From 965bdf21eeb1a3016c1831122450ba5ba813a348 Mon Sep 17 00:00:00 2001 From: Max Marrone Date: Tue, 29 Oct 2024 11:40:55 -0400 Subject: [PATCH 20/81] refactor(api): Delete dead `private_result` supporting code (#16621) --- .../protocol_engine/actions/actions.py | 5 -- .../protocol_engine/commands/__init__.py | 1 - .../commands/absorbance_reader/close_lid.py | 9 +- .../commands/absorbance_reader/initialize.py | 7 +- .../commands/absorbance_reader/open_lid.py | 5 +- .../commands/absorbance_reader/read.py | 6 +- .../protocol_engine/commands/aspirate.py | 3 +- .../commands/aspirate_in_place.py | 3 +- .../protocol_engine/commands/blow_out.py | 3 +- .../commands/blow_out_in_place.py | 6 +- .../commands/calibration/calibrate_gripper.py | 7 +- .../commands/calibration/calibrate_module.py | 5 +- .../commands/calibration/calibrate_pipette.py | 7 +- .../move_to_maintenance_position.py | 8 +- .../protocol_engine/commands/command.py | 14 +--- .../commands/command_unions.py | 5 +- .../protocol_engine/commands/comment.py | 8 +- .../commands/configure_for_volume.py | 5 +- .../commands/configure_nozzle_layout.py | 5 +- .../protocol_engine/commands/custom.py | 8 +- .../protocol_engine/commands/dispense.py | 3 +- .../commands/dispense_in_place.py | 3 +- .../protocol_engine/commands/drop_tip.py | 3 +- .../commands/drop_tip_in_place.py | 7 +- .../commands/get_tip_presence.py | 8 +- .../heater_shaker/close_labware_latch.py | 10 +-- .../heater_shaker/deactivate_heater.py | 10 +-- .../heater_shaker/deactivate_shaker.py | 10 +-- .../heater_shaker/open_labware_latch.py | 7 +- .../set_and_wait_for_shake_speed.py | 5 +- .../heater_shaker/set_target_temperature.py | 8 +- .../heater_shaker/wait_for_temperature.py | 10 +-- .../protocol_engine/commands/home.py | 8 +- .../protocol_engine/commands/liquid_probe.py | 6 +- .../protocol_engine/commands/load_labware.py | 5 +- .../protocol_engine/commands/load_liquid.py | 10 +-- .../protocol_engine/commands/load_module.py | 7 +- .../protocol_engine/commands/load_pipette.py | 5 +- .../commands/magnetic_module/disengage.py | 10 +-- .../commands/magnetic_module/engage.py | 8 +- .../protocol_engine/commands/move_labware.py | 5 +- .../protocol_engine/commands/move_relative.py | 5 +- .../commands/move_to_addressable_area.py | 5 +- .../move_to_addressable_area_for_drop_tip.py | 5 +- .../commands/move_to_coordinates.py | 7 +- .../protocol_engine/commands/move_to_well.py | 7 +- .../protocol_engine/commands/pick_up_tip.py | 5 +- .../commands/prepare_to_aspirate.py | 6 +- .../commands/reload_labware.py | 5 +- .../protocol_engine/commands/retract_axis.py | 8 +- .../protocol_engine/commands/save_position.py | 5 +- .../commands/set_rail_lights.py | 8 +- .../commands/set_status_bar.py | 8 +- .../commands/temperature_module/deactivate.py | 8 +- .../set_target_temperature.py | 5 +- .../wait_for_temperature.py | 10 +-- .../commands/thermocycler/close_lid.py | 12 +-- .../commands/thermocycler/deactivate_block.py | 8 +- .../commands/thermocycler/deactivate_lid.py | 8 +- .../commands/thermocycler/open_lid.py | 8 +- .../thermocycler/run_extended_profile.py | 11 ++- .../commands/thermocycler/run_profile.py | 10 +-- .../set_target_block_temperature.py | 5 +- .../set_target_lid_temperature.py | 5 +- .../wait_for_block_temperature.py | 8 +- .../thermocycler/wait_for_lid_temperature.py | 8 +- .../protocol_engine/commands/touch_tip.py | 7 +- .../unsafe/unsafe_blow_out_in_place.py | 8 +- .../unsafe/unsafe_drop_tip_in_place.py | 6 +- .../commands/unsafe/unsafe_engage_axes.py | 8 +- .../commands/unsafe/unsafe_ungrip_labware.py | 8 +- .../unsafe/update_position_estimators.py | 8 +- .../commands/verify_tip_presence.py | 10 +-- .../commands/wait_for_duration.py | 8 +- .../commands/wait_for_resume.py | 8 +- .../execution/command_executor.py | 1 - .../protocol_runner/legacy_command_mapper.py | 5 +- .../calibration/test_calibrate_gripper.py | 1 - .../calibration/test_calibrate_module.py | 1 - .../calibration/test_calibrate_pipette.py | 1 - .../test_move_to_maintenance_position.py | 12 ++- .../heater_shaker/test_close_labware_latch.py | 4 +- .../heater_shaker/test_deactivate_heater.py | 2 +- .../heater_shaker/test_deactivate_shaker.py | 4 +- .../heater_shaker/test_open_labware_latch.py | 1 - .../test_set_and_wait_for_shake_speed.py | 1 - .../test_set_target_temperature.py | 2 +- .../test_wait_for_temperature.py | 2 +- .../magnetic_module/test_disengage.py | 2 +- .../commands/magnetic_module/test_engage.py | 2 +- .../temperature_module/test_deactivate.py | 2 +- .../test_set_target_temperature.py | 1 - .../test_wait_for_temperature.py | 4 +- .../protocol_engine/commands/test_aspirate.py | 3 - .../commands/test_aspirate_in_place.py | 2 - .../protocol_engine/commands/test_blow_out.py | 1 - .../commands/test_blow_out_in_place.py | 2 +- .../protocol_engine/commands/test_comment.py | 2 +- .../commands/test_configure_for_volume.py | 1 - .../commands/test_configure_nozzle_layout.py | 1 - .../protocol_engine/commands/test_dispense.py | 1 - .../commands/test_dispense_in_place.py | 2 - .../protocol_engine/commands/test_drop_tip.py | 2 - .../commands/test_drop_tip_in_place.py | 1 - .../commands/test_get_tip_presence.py | 2 +- .../protocol_engine/commands/test_home.py | 4 - .../commands/test_liquid_probe.py | 2 - .../commands/test_load_labware.py | 2 - .../commands/test_load_liquid.py | 1 - .../commands/test_load_module.py | 3 - .../commands/test_load_pipette.py | 2 - .../commands/test_move_labware.py | 4 - .../commands/test_move_relative.py | 1 - .../commands/test_move_to_addressable_area.py | 2 - ...t_move_to_addressable_area_for_drop_tip.py | 1 - .../commands/test_move_to_coordinates.py | 1 - .../commands/test_move_to_well.py | 1 - .../commands/test_pick_up_tip.py | 1 - .../commands/test_prepare_to_aspirate.py | 2 +- .../commands/test_reload_labware.py | 1 - .../commands/test_retract_axis.py | 1 - .../commands/test_save_position.py | 1 - .../commands/test_set_rail_lights.py | 2 +- .../commands/test_set_status_bar.py | 4 +- .../commands/test_touch_tip.py | 1 - .../commands/test_verify_tip_presence.py | 2 +- .../commands/test_wait_for_duration.py | 2 +- .../commands/test_wait_for_resume.py | 2 +- .../commands/thermocycler/test_close_lid.py | 1 - .../thermocycler/test_deactivate_block.py | 2 +- .../thermocycler/test_deactivate_lid.py | 2 +- .../commands/thermocycler/test_open_lid.py | 1 - .../thermocycler/test_run_extended_profile.py | 2 +- .../commands/thermocycler/test_run_profile.py | 2 +- .../test_set_target_block_temperature.py | 2 +- .../test_set_target_lid_temperature.py | 2 +- .../test_wait_for_block_temperature.py | 2 +- .../test_wait_for_lid_temperature.py | 2 +- .../commands/unsafe/test_engage_axes.py | 2 +- .../commands/unsafe/test_ungrip_labware.py | 2 +- .../unsafe/test_unsafe_blow_out_in_place.py | 2 +- .../unsafe/test_unsafe_drop_tip_in_place.py | 1 - .../unsafe/test_update_position_estimators.py | 2 +- .../execution/test_command_executor.py | 8 +- .../state/test_addressable_area_store.py | 6 +- .../state/test_command_store_old.py | 4 - .../state/test_geometry_view.py | 7 -- .../state/test_labware_store.py | 7 -- .../state/test_module_store.py | 82 +++++-------------- .../state/test_pipette_store.py | 62 +++----------- .../protocol_engine/state/test_tip_state.py | 31 +------ .../protocol_engine/state/test_well_store.py | 7 -- .../test_legacy_command_mapper.py | 7 -- .../test_legacy_context_plugin.py | 14 +--- 154 files changed, 316 insertions(+), 576 deletions(-) diff --git a/api/src/opentrons/protocol_engine/actions/actions.py b/api/src/opentrons/protocol_engine/actions/actions.py index 4cdcb771616..6260a6d4614 100644 --- a/api/src/opentrons/protocol_engine/actions/actions.py +++ b/api/src/opentrons/protocol_engine/actions/actions.py @@ -18,7 +18,6 @@ Command, CommandCreate, CommandDefinedErrorData, - CommandPrivateResult, ) from ..error_recovery_policy import ErrorRecoveryPolicy, ErrorRecoveryType from ..notes.notes import CommandNote @@ -146,10 +145,6 @@ class SucceedCommandAction: command: Command """The command in its new succeeded state.""" - # todo(mm, 2024-08-26): Remove when no state stores use this anymore. - # https://opentrons.atlassian.net/browse/EXEC-639 - private_result: CommandPrivateResult - state_update: StateUpdate = dataclasses.field( # todo(mm, 2024-08-26): This has a default only to make it easier to transition # old tests while https://opentrons.atlassian.net/browse/EXEC-639 is in diff --git a/api/src/opentrons/protocol_engine/commands/__init__.py b/api/src/opentrons/protocol_engine/commands/__init__.py index 3be0917b835..649bb4b6507 100644 --- a/api/src/opentrons/protocol_engine/commands/__init__.py +++ b/api/src/opentrons/protocol_engine/commands/__init__.py @@ -38,7 +38,6 @@ CommandCreate, CommandResult, CommandType, - CommandPrivateResult, CommandDefinedErrorData, ) 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 b5131d76bcf..2f7f96d9523 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 @@ -37,9 +37,7 @@ class CloseLidResult(BaseModel): """Result data from closing the lid on an aborbance reading.""" -class CloseLidImpl( - AbstractCommandImpl[CloseLidParams, SuccessData[CloseLidResult, None]] -): +class CloseLidImpl(AbstractCommandImpl[CloseLidParams, SuccessData[CloseLidResult]]): """Execution implementation of closing the lid on an Absorbance Reader.""" def __init__( @@ -53,9 +51,7 @@ def __init__( self._equipment = equipment self._labware_movement = labware_movement - async def execute( - self, params: CloseLidParams - ) -> SuccessData[CloseLidResult, None]: + async def execute(self, params: CloseLidParams) -> SuccessData[CloseLidResult]: """Execute the close lid command.""" mod_substate = self._state_view.modules.get_absorbance_reader_substate( module_id=params.moduleId @@ -142,7 +138,6 @@ async def execute( return SuccessData( 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 314645b39b2..4b28154ed17 100644 --- a/api/src/opentrons/protocol_engine/commands/absorbance_reader/initialize.py +++ b/api/src/opentrons/protocol_engine/commands/absorbance_reader/initialize.py @@ -37,7 +37,7 @@ class InitializeResult(BaseModel): class InitializeImpl( - AbstractCommandImpl[InitializeParams, SuccessData[InitializeResult, None]] + AbstractCommandImpl[InitializeParams, SuccessData[InitializeResult]] ): """Execution implementation of initializing an Absorbance Reader.""" @@ -50,9 +50,7 @@ def __init__( self._state_view = state_view self._equipment = equipment - async def execute( - self, params: InitializeParams - ) -> SuccessData[InitializeResult, None]: + async def execute(self, params: InitializeParams) -> SuccessData[InitializeResult]: """Initiate a single absorbance measurement.""" abs_reader_substate = self._state_view.modules.get_absorbance_reader_substate( module_id=params.moduleId @@ -105,7 +103,6 @@ async def execute( return SuccessData( public=InitializeResult(), - private=None, ) 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 7a048a69b52..5f3eed57199 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 @@ -38,7 +38,7 @@ class OpenLidResult(BaseModel): """Result data from opening the lid on an aborbance reading.""" -class OpenLidImpl(AbstractCommandImpl[OpenLidParams, SuccessData[OpenLidResult, None]]): +class OpenLidImpl(AbstractCommandImpl[OpenLidParams, SuccessData[OpenLidResult]]): """Execution implementation of opening the lid on an Absorbance Reader.""" def __init__( @@ -52,7 +52,7 @@ def __init__( self._equipment = equipment self._labware_movement = labware_movement - async def execute(self, params: OpenLidParams) -> SuccessData[OpenLidResult, None]: + async def execute(self, params: OpenLidParams) -> SuccessData[OpenLidResult]: """Move the absorbance reader lid from the module to the lid dock.""" mod_substate = self._state_view.modules.get_absorbance_reader_substate( module_id=params.moduleId @@ -137,7 +137,6 @@ async def execute(self, params: OpenLidParams) -> SuccessData[OpenLidResult, Non return SuccessData( 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 caf8a738f09..8743fd1383b 100644 --- a/api/src/opentrons/protocol_engine/commands/absorbance_reader/read.py +++ b/api/src/opentrons/protocol_engine/commands/absorbance_reader/read.py @@ -48,7 +48,7 @@ class ReadAbsorbanceResult(BaseModel): class ReadAbsorbanceImpl( - AbstractCommandImpl[ReadAbsorbanceParams, SuccessData[ReadAbsorbanceResult, None]] + AbstractCommandImpl[ReadAbsorbanceParams, SuccessData[ReadAbsorbanceResult]] ): """Execution implementation of an Absorbance Reader measurement.""" @@ -65,7 +65,7 @@ def __init__( async def execute( # noqa: C901 self, params: ReadAbsorbanceParams - ) -> SuccessData[ReadAbsorbanceResult, None]: + ) -> SuccessData[ReadAbsorbanceResult]: """Initiate an absorbance measurement.""" abs_reader_substate = self._state_view.modules.get_absorbance_reader_substate( module_id=params.moduleId @@ -168,12 +168,10 @@ async def execute( # noqa: C901 public=ReadAbsorbanceResult( data=asbsorbance_result, fileIds=file_ids ), - private=None, ) return SuccessData( public=ReadAbsorbanceResult(data=asbsorbance_result, fileIds=file_ids), - private=None, ) diff --git a/api/src/opentrons/protocol_engine/commands/aspirate.py b/api/src/opentrons/protocol_engine/commands/aspirate.py index bbeb089182d..00d57a93e9a 100644 --- a/api/src/opentrons/protocol_engine/commands/aspirate.py +++ b/api/src/opentrons/protocol_engine/commands/aspirate.py @@ -52,7 +52,7 @@ class AspirateResult(BaseLiquidHandlingResult, DestinationPositionResult): _ExecuteReturn = Union[ - SuccessData[AspirateResult, None], + SuccessData[AspirateResult], DefinedErrorData[OverpressureError], ] @@ -167,7 +167,6 @@ async def execute(self, params: AspirateParams) -> _ExecuteReturn: volume=volume_aspirated, position=deck_point, ), - private=None, state_update=state_update, ) 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 23d331cd19b..4c7ab2cc01c 100644 --- a/api/src/opentrons/protocol_engine/commands/aspirate_in_place.py +++ b/api/src/opentrons/protocol_engine/commands/aspirate_in_place.py @@ -49,7 +49,7 @@ class AspirateInPlaceResult(BaseLiquidHandlingResult): _ExecuteReturn = Union[ - SuccessData[AspirateInPlaceResult, None], + SuccessData[AspirateInPlaceResult], DefinedErrorData[OverpressureError], ] @@ -150,7 +150,6 @@ async def execute(self, params: AspirateInPlaceParams) -> _ExecuteReturn: ) return SuccessData( public=AspirateInPlaceResult(volume=volume), - private=None, state_update=state_update, ) diff --git a/api/src/opentrons/protocol_engine/commands/blow_out.py b/api/src/opentrons/protocol_engine/commands/blow_out.py index c8a6b65ce63..e13378b5541 100644 --- a/api/src/opentrons/protocol_engine/commands/blow_out.py +++ b/api/src/opentrons/protocol_engine/commands/blow_out.py @@ -48,7 +48,7 @@ class BlowOutResult(DestinationPositionResult): _ExecuteReturn = Union[ - SuccessData[BlowOutResult, None], + SuccessData[BlowOutResult], DefinedErrorData[OverpressureError], ] @@ -116,7 +116,6 @@ async def execute(self, params: BlowOutParams) -> _ExecuteReturn: else: return SuccessData( public=BlowOutResult(position=deck_point), - private=None, state_update=state_update, ) diff --git a/api/src/opentrons/protocol_engine/commands/blow_out_in_place.py b/api/src/opentrons/protocol_engine/commands/blow_out_in_place.py index 38165a4a626..0b9aaec77b2 100644 --- a/api/src/opentrons/protocol_engine/commands/blow_out_in_place.py +++ b/api/src/opentrons/protocol_engine/commands/blow_out_in_place.py @@ -45,7 +45,7 @@ class BlowOutInPlaceResult(BaseModel): _ExecuteReturn = Union[ - SuccessData[BlowOutInPlaceResult, None], + SuccessData[BlowOutInPlaceResult], DefinedErrorData[OverpressureError], ] @@ -99,7 +99,9 @@ async def execute(self, params: BlowOutInPlaceParams) -> _ExecuteReturn: ), ) else: - return SuccessData(public=BlowOutInPlaceResult(), private=None) + return SuccessData( + public=BlowOutInPlaceResult(), + ) class BlowOutInPlace( diff --git a/api/src/opentrons/protocol_engine/commands/calibration/calibrate_gripper.py b/api/src/opentrons/protocol_engine/commands/calibration/calibrate_gripper.py index b400e2dd33a..0333a171077 100644 --- a/api/src/opentrons/protocol_engine/commands/calibration/calibrate_gripper.py +++ b/api/src/opentrons/protocol_engine/commands/calibration/calibrate_gripper.py @@ -71,9 +71,7 @@ class CalibrateGripperResult(BaseModel): class CalibrateGripperImplementation( - AbstractCommandImpl[ - CalibrateGripperParams, SuccessData[CalibrateGripperResult, None] - ] + AbstractCommandImpl[CalibrateGripperParams, SuccessData[CalibrateGripperResult]] ): """The implementation of a `calibrateGripper` command.""" @@ -87,7 +85,7 @@ def __init__( async def execute( self, params: CalibrateGripperParams - ) -> SuccessData[CalibrateGripperResult, None]: + ) -> SuccessData[CalibrateGripperResult]: """Execute a `calibrateGripper` command. 1. Move from the current location to the calibration area on the deck. @@ -126,7 +124,6 @@ async def execute( ), savedCalibration=calibration_data, ), - private=None, ) @staticmethod diff --git a/api/src/opentrons/protocol_engine/commands/calibration/calibrate_module.py b/api/src/opentrons/protocol_engine/commands/calibration/calibrate_module.py index 8eee75c6207..f488e8eab97 100644 --- a/api/src/opentrons/protocol_engine/commands/calibration/calibrate_module.py +++ b/api/src/opentrons/protocol_engine/commands/calibration/calibrate_module.py @@ -49,7 +49,7 @@ class CalibrateModuleResult(BaseModel): class CalibrateModuleImplementation( - AbstractCommandImpl[CalibrateModuleParams, SuccessData[CalibrateModuleResult, None]] + AbstractCommandImpl[CalibrateModuleParams, SuccessData[CalibrateModuleResult]] ): """CalibrateModule command implementation.""" @@ -64,7 +64,7 @@ def __init__( async def execute( self, params: CalibrateModuleParams - ) -> SuccessData[CalibrateModuleResult, None]: + ) -> SuccessData[CalibrateModuleResult]: """Execute calibrate-module command.""" ot3_api = ensure_ot3_hardware( self._hardware_api, @@ -91,7 +91,6 @@ async def execute( ), location=slot, ), - private=None, ) diff --git a/api/src/opentrons/protocol_engine/commands/calibration/calibrate_pipette.py b/api/src/opentrons/protocol_engine/commands/calibration/calibrate_pipette.py index 4369f88a9c5..fbe754f6389 100644 --- a/api/src/opentrons/protocol_engine/commands/calibration/calibrate_pipette.py +++ b/api/src/opentrons/protocol_engine/commands/calibration/calibrate_pipette.py @@ -34,9 +34,7 @@ class CalibratePipetteResult(BaseModel): class CalibratePipetteImplementation( - AbstractCommandImpl[ - CalibratePipetteParams, SuccessData[CalibratePipetteResult, None] - ] + AbstractCommandImpl[CalibratePipetteParams, SuccessData[CalibratePipetteResult]] ): """CalibratePipette command implementation.""" @@ -49,7 +47,7 @@ def __init__( async def execute( self, params: CalibratePipetteParams - ) -> SuccessData[CalibratePipetteResult, None]: + ) -> SuccessData[CalibratePipetteResult]: """Execute calibrate-pipette command.""" # TODO (tz, 20-9-22): Add a better solution to determine if a command can be executed on an OT-3/OT-2 ot3_api = ensure_ot3_hardware( @@ -72,7 +70,6 @@ async def execute( x=pipette_offset.x, y=pipette_offset.y, z=pipette_offset.z ) ), - private=None, ) diff --git a/api/src/opentrons/protocol_engine/commands/calibration/move_to_maintenance_position.py b/api/src/opentrons/protocol_engine/commands/calibration/move_to_maintenance_position.py index 73a0a8c2511..afb178cae99 100644 --- a/api/src/opentrons/protocol_engine/commands/calibration/move_to_maintenance_position.py +++ b/api/src/opentrons/protocol_engine/commands/calibration/move_to_maintenance_position.py @@ -57,7 +57,7 @@ class MoveToMaintenancePositionResult(BaseModel): class MoveToMaintenancePositionImplementation( AbstractCommandImpl[ MoveToMaintenancePositionParams, - SuccessData[MoveToMaintenancePositionResult, None], + SuccessData[MoveToMaintenancePositionResult], ] ): """Calibration set up position command implementation.""" @@ -73,7 +73,7 @@ def __init__( async def execute( self, params: MoveToMaintenancePositionParams - ) -> SuccessData[MoveToMaintenancePositionResult, None]: + ) -> SuccessData[MoveToMaintenancePositionResult]: """Move the requested mount to a maintenance deck slot.""" ot3_api = ensure_ot3_hardware( self._hardware_api, @@ -118,7 +118,9 @@ async def execute( ) await ot3_api.disengage_axes([Axis.Z_R]) - return SuccessData(public=MoveToMaintenancePositionResult(), private=None) + return SuccessData( + public=MoveToMaintenancePositionResult(), + ) class MoveToMaintenancePosition( diff --git a/api/src/opentrons/protocol_engine/commands/command.py b/api/src/opentrons/protocol_engine/commands/command.py index 813a038d7ec..1fefcbf7315 100644 --- a/api/src/opentrons/protocol_engine/commands/command.py +++ b/api/src/opentrons/protocol_engine/commands/command.py @@ -39,7 +39,6 @@ _ResultT_co = TypeVar("_ResultT_co", bound=BaseModel, covariant=True) _ErrorT = TypeVar("_ErrorT", bound=ErrorOccurrence) _ErrorT_co = TypeVar("_ErrorT_co", bound=ErrorOccurrence, covariant=True) -_PrivateResultT_co = TypeVar("_PrivateResultT_co", covariant=True) class CommandStatus(str, Enum): @@ -108,19 +107,12 @@ class BaseCommandCreate( @dataclasses.dataclass(frozen=True) -class SuccessData(Generic[_ResultT_co, _PrivateResultT_co]): +class SuccessData(Generic[_ResultT_co]): """Data from the successful completion of a command.""" public: _ResultT_co """Public result data. Exposed over HTTP and stored in databases.""" - private: _PrivateResultT_co - """Additional result data, only given to `opentrons.protocol_engine` internals. - - Deprecated: - Use `state_update` instead. - """ - state_update: StateUpdate = dataclasses.field( # todo(mm, 2024-08-22): Remove the default once all command implementations # use this, to make it harder to forget in new command implementations. @@ -239,8 +231,6 @@ class BaseCommand( # Our _ImplementationCls must return public result data that can fit # in our `result` field: _ResultT, - # But we don't care (here) what kind of private result data it returns: - object, ], DefinedErrorData[ # Our _ImplementationCls must return public error data that can fit @@ -255,7 +245,7 @@ class BaseCommand( _ExecuteReturnT_co = TypeVar( "_ExecuteReturnT_co", bound=Union[ - SuccessData[BaseModel, object], + SuccessData[BaseModel], DefinedErrorData[ErrorOccurrence], ], covariant=True, diff --git a/api/src/opentrons/protocol_engine/commands/command_unions.py b/api/src/opentrons/protocol_engine/commands/command_unions.py index c86724c1124..146b688253f 100644 --- a/api/src/opentrons/protocol_engine/commands/command_unions.py +++ b/api/src/opentrons/protocol_engine/commands/command_unions.py @@ -1,7 +1,7 @@ """Union types of concrete command definitions.""" from collections.abc import Collection -from typing import Annotated, Literal, Type, Union, get_type_hints +from typing import Annotated, Type, Union, get_type_hints from pydantic import Field @@ -699,9 +699,6 @@ unsafe.UnsafeUngripLabwareResult, ] -# todo(mm, 2024-10-28): This has been obsoleted by StateUpdate. Delete this. -# https://opentrons.atlassian.net/browse/EXEC-639 -CommandPrivateResult = Literal[None] # All `DefinedErrorData`s that implementations will actually return in practice. CommandDefinedErrorData = Union[ diff --git a/api/src/opentrons/protocol_engine/commands/comment.py b/api/src/opentrons/protocol_engine/commands/comment.py index d411b6b4047..5cd0b0c3113 100644 --- a/api/src/opentrons/protocol_engine/commands/comment.py +++ b/api/src/opentrons/protocol_engine/commands/comment.py @@ -24,16 +24,18 @@ class CommentResult(BaseModel): class CommentImplementation( - AbstractCommandImpl[CommentParams, SuccessData[CommentResult, None]] + AbstractCommandImpl[CommentParams, SuccessData[CommentResult]] ): """Comment command implementation.""" def __init__(self, **kwargs: object) -> None: pass - async def execute(self, params: CommentParams) -> SuccessData[CommentResult, None]: + async def execute(self, params: CommentParams) -> SuccessData[CommentResult]: """No operation taken other than capturing message in command.""" - return SuccessData(public=CommentResult(), private=None) + return SuccessData( + public=CommentResult(), + ) class Comment(BaseCommand[CommentParams, CommentResult, ErrorOccurrence]): 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 f4caee72c7f..1c8aa21f491 100644 --- a/api/src/opentrons/protocol_engine/commands/configure_for_volume.py +++ b/api/src/opentrons/protocol_engine/commands/configure_for_volume.py @@ -43,7 +43,7 @@ class ConfigureForVolumeResult(BaseModel): class ConfigureForVolumeImplementation( AbstractCommandImpl[ ConfigureForVolumeParams, - SuccessData[ConfigureForVolumeResult, None], + SuccessData[ConfigureForVolumeResult], ] ): """Configure for volume command implementation.""" @@ -53,7 +53,7 @@ def __init__(self, equipment: EquipmentHandler, **kwargs: object) -> None: async def execute( self, params: ConfigureForVolumeParams - ) -> SuccessData[ConfigureForVolumeResult, None]: + ) -> SuccessData[ConfigureForVolumeResult]: """Check that requested pipette can be configured for the given volume.""" pipette_result = await self._equipment.configure_for_volume( pipette_id=params.pipetteId, @@ -70,7 +70,6 @@ async def execute( return SuccessData( public=ConfigureForVolumeResult(), - private=None, 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 d04eee55c94..f78839773ec 100644 --- a/api/src/opentrons/protocol_engine/commands/configure_nozzle_layout.py +++ b/api/src/opentrons/protocol_engine/commands/configure_nozzle_layout.py @@ -46,7 +46,7 @@ class ConfigureNozzleLayoutResult(BaseModel): class ConfigureNozzleLayoutImplementation( AbstractCommandImpl[ ConfigureNozzleLayoutParams, - SuccessData[ConfigureNozzleLayoutResult, None], + SuccessData[ConfigureNozzleLayoutResult], ] ): """Configure nozzle layout command implementation.""" @@ -59,7 +59,7 @@ def __init__( async def execute( self, params: ConfigureNozzleLayoutParams - ) -> SuccessData[ConfigureNozzleLayoutResult, None]: + ) -> SuccessData[ConfigureNozzleLayoutResult]: """Check that requested pipette can support the requested nozzle layout.""" primary_nozzle = params.configurationParams.dict().get("primaryNozzle") front_right_nozzle = params.configurationParams.dict().get("frontRightNozzle") @@ -84,7 +84,6 @@ async def execute( return SuccessData( public=ConfigureNozzleLayoutResult(), - private=None, state_update=update_state, ) diff --git a/api/src/opentrons/protocol_engine/commands/custom.py b/api/src/opentrons/protocol_engine/commands/custom.py index 2ceebda764c..1bdf07084be 100644 --- a/api/src/opentrons/protocol_engine/commands/custom.py +++ b/api/src/opentrons/protocol_engine/commands/custom.py @@ -40,16 +40,18 @@ class Config: class CustomImplementation( - AbstractCommandImpl[CustomParams, SuccessData[CustomResult, None]] + AbstractCommandImpl[CustomParams, SuccessData[CustomResult]] ): """Custom command implementation.""" # TODO(mm, 2022-11-09): figure out how a plugin can specify a custom command # implementation. For now, always no-op, so we can use custom commands as containers # for legacy RPC (pre-ProtocolEngine) payloads. - async def execute(self, params: CustomParams) -> SuccessData[CustomResult, None]: + async def execute(self, params: CustomParams) -> SuccessData[CustomResult]: """A custom command does nothing when executed directly.""" - return SuccessData(public=CustomResult.construct(), private=None) + return SuccessData( + public=CustomResult.construct(), + ) class Custom(BaseCommand[CustomParams, CustomResult, ErrorOccurrence]): diff --git a/api/src/opentrons/protocol_engine/commands/dispense.py b/api/src/opentrons/protocol_engine/commands/dispense.py index ad57cb1882f..a7fee20c762 100644 --- a/api/src/opentrons/protocol_engine/commands/dispense.py +++ b/api/src/opentrons/protocol_engine/commands/dispense.py @@ -54,7 +54,7 @@ class DispenseResult(BaseLiquidHandlingResult, DestinationPositionResult): _ExecuteReturn = Union[ - SuccessData[DispenseResult, None], + SuccessData[DispenseResult], DefinedErrorData[OverpressureError], ] @@ -135,7 +135,6 @@ async def execute(self, params: DispenseParams) -> _ExecuteReturn: ) return SuccessData( public=DispenseResult(volume=volume, position=deck_point), - private=None, state_update=state_update, ) 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 b6eac561559..7df9471b038 100644 --- a/api/src/opentrons/protocol_engine/commands/dispense_in_place.py +++ b/api/src/opentrons/protocol_engine/commands/dispense_in_place.py @@ -49,7 +49,7 @@ class DispenseInPlaceResult(BaseLiquidHandlingResult): _ExecuteReturn = Union[ - SuccessData[DispenseInPlaceResult, None], + SuccessData[DispenseInPlaceResult], DefinedErrorData[OverpressureError], ] @@ -129,7 +129,6 @@ async def execute(self, params: DispenseInPlaceParams) -> _ExecuteReturn: ) return SuccessData( public=DispenseInPlaceResult(volume=volume), - private=None, state_update=state_update, ) diff --git a/api/src/opentrons/protocol_engine/commands/drop_tip.py b/api/src/opentrons/protocol_engine/commands/drop_tip.py index 114a97b0467..81a34a5ad39 100644 --- a/api/src/opentrons/protocol_engine/commands/drop_tip.py +++ b/api/src/opentrons/protocol_engine/commands/drop_tip.py @@ -68,7 +68,7 @@ class DropTipResult(DestinationPositionResult): _ExecuteReturn = ( - SuccessData[DropTipResult, None] | DefinedErrorData[TipPhysicallyAttachedError] + SuccessData[DropTipResult] | DefinedErrorData[TipPhysicallyAttachedError] ) @@ -161,7 +161,6 @@ async def execute(self, params: DropTipParams) -> _ExecuteReturn: ) return SuccessData( public=DropTipResult(position=deck_point), - private=None, state_update=state_update, ) 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 49d44d6b563..aa40384ac6a 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 @@ -44,8 +44,7 @@ class DropTipInPlaceResult(BaseModel): _ExecuteReturn = ( - SuccessData[DropTipInPlaceResult, None] - | DefinedErrorData[TipPhysicallyAttachedError] + SuccessData[DropTipInPlaceResult] | DefinedErrorData[TipPhysicallyAttachedError] ) @@ -96,9 +95,7 @@ async def execute(self, params: DropTipInPlaceParams) -> _ExecuteReturn: state_update.update_pipette_tip_state( pipette_id=params.pipetteId, tip_geometry=None ) - return SuccessData( - public=DropTipInPlaceResult(), private=None, state_update=state_update - ) + return SuccessData(public=DropTipInPlaceResult(), state_update=state_update) class DropTipInPlace( diff --git a/api/src/opentrons/protocol_engine/commands/get_tip_presence.py b/api/src/opentrons/protocol_engine/commands/get_tip_presence.py index 6c4eea93a84..6bbe5fa2fe3 100644 --- a/api/src/opentrons/protocol_engine/commands/get_tip_presence.py +++ b/api/src/opentrons/protocol_engine/commands/get_tip_presence.py @@ -38,7 +38,7 @@ class GetTipPresenceResult(BaseModel): class GetTipPresenceImplementation( - AbstractCommandImpl[GetTipPresenceParams, SuccessData[GetTipPresenceResult, None]] + AbstractCommandImpl[GetTipPresenceParams, SuccessData[GetTipPresenceResult]] ): """GetTipPresence command implementation.""" @@ -51,7 +51,7 @@ def __init__( async def execute( self, params: GetTipPresenceParams - ) -> SuccessData[GetTipPresenceResult, None]: + ) -> SuccessData[GetTipPresenceResult]: """Verify if tip presence is as expected for the requested pipette.""" pipette_id = params.pipetteId @@ -59,7 +59,9 @@ async def execute( pipette_id=pipette_id, ) - return SuccessData(public=GetTipPresenceResult(status=result), private=None) + return SuccessData( + public=GetTipPresenceResult(status=result), + ) class GetTipPresence( diff --git a/api/src/opentrons/protocol_engine/commands/heater_shaker/close_labware_latch.py b/api/src/opentrons/protocol_engine/commands/heater_shaker/close_labware_latch.py index f9af6438958..2151fb05877 100644 --- a/api/src/opentrons/protocol_engine/commands/heater_shaker/close_labware_latch.py +++ b/api/src/opentrons/protocol_engine/commands/heater_shaker/close_labware_latch.py @@ -27,9 +27,7 @@ class CloseLabwareLatchResult(BaseModel): class CloseLabwareLatchImpl( - AbstractCommandImpl[ - CloseLabwareLatchParams, SuccessData[CloseLabwareLatchResult, None] - ] + AbstractCommandImpl[CloseLabwareLatchParams, SuccessData[CloseLabwareLatchResult]] ): """Execution implementation of a Heater-Shaker's close labware latch command.""" @@ -44,7 +42,7 @@ def __init__( async def execute( self, params: CloseLabwareLatchParams - ) -> SuccessData[CloseLabwareLatchResult, None]: + ) -> SuccessData[CloseLabwareLatchResult]: """Close a Heater-Shaker's labware latch.""" # Allow propagation of ModuleNotLoadedError and WrongModuleTypeError. hs_module_substate = self._state_view.modules.get_heater_shaker_module_substate( @@ -59,7 +57,9 @@ async def execute( if hs_hardware_module is not None: await hs_hardware_module.close_labware_latch() - return SuccessData(public=CloseLabwareLatchResult(), private=None) + return SuccessData( + public=CloseLabwareLatchResult(), + ) class CloseLabwareLatch( diff --git a/api/src/opentrons/protocol_engine/commands/heater_shaker/deactivate_heater.py b/api/src/opentrons/protocol_engine/commands/heater_shaker/deactivate_heater.py index fb512b72319..3932f1d6490 100644 --- a/api/src/opentrons/protocol_engine/commands/heater_shaker/deactivate_heater.py +++ b/api/src/opentrons/protocol_engine/commands/heater_shaker/deactivate_heater.py @@ -27,9 +27,7 @@ class DeactivateHeaterResult(BaseModel): class DeactivateHeaterImpl( - AbstractCommandImpl[ - DeactivateHeaterParams, SuccessData[DeactivateHeaterResult, None] - ] + AbstractCommandImpl[DeactivateHeaterParams, SuccessData[DeactivateHeaterResult]] ): """Execution implementation of a Heater-Shaker's deactivate heater command.""" @@ -44,7 +42,7 @@ def __init__( async def execute( self, params: DeactivateHeaterParams - ) -> SuccessData[DeactivateHeaterResult, None]: + ) -> SuccessData[DeactivateHeaterResult]: """Unset a Heater-Shaker's target temperature.""" hs_module_substate = self._state_view.modules.get_heater_shaker_module_substate( module_id=params.moduleId @@ -58,7 +56,9 @@ async def execute( if hs_hardware_module is not None: await hs_hardware_module.deactivate_heater() - return SuccessData(public=DeactivateHeaterResult(), private=None) + return SuccessData( + public=DeactivateHeaterResult(), + ) class DeactivateHeater( diff --git a/api/src/opentrons/protocol_engine/commands/heater_shaker/deactivate_shaker.py b/api/src/opentrons/protocol_engine/commands/heater_shaker/deactivate_shaker.py index bc06b9767c4..b259745ea3d 100644 --- a/api/src/opentrons/protocol_engine/commands/heater_shaker/deactivate_shaker.py +++ b/api/src/opentrons/protocol_engine/commands/heater_shaker/deactivate_shaker.py @@ -26,9 +26,7 @@ class DeactivateShakerResult(BaseModel): class DeactivateShakerImpl( - AbstractCommandImpl[ - DeactivateShakerParams, SuccessData[DeactivateShakerResult, None] - ] + AbstractCommandImpl[DeactivateShakerParams, SuccessData[DeactivateShakerResult]] ): """Execution implementation of a Heater-Shaker's deactivate shaker command.""" @@ -43,7 +41,7 @@ def __init__( async def execute( self, params: DeactivateShakerParams - ) -> SuccessData[DeactivateShakerResult, None]: + ) -> SuccessData[DeactivateShakerResult]: """Deactivate shaker for a Heater-Shaker.""" # Allow propagation of ModuleNotLoadedError and WrongModuleTypeError. hs_module_substate = self._state_view.modules.get_heater_shaker_module_substate( @@ -60,7 +58,9 @@ async def execute( if hs_hardware_module is not None: await hs_hardware_module.deactivate_shaker() - return SuccessData(public=DeactivateShakerResult(), private=None) + return SuccessData( + public=DeactivateShakerResult(), + ) class DeactivateShaker( diff --git a/api/src/opentrons/protocol_engine/commands/heater_shaker/open_labware_latch.py b/api/src/opentrons/protocol_engine/commands/heater_shaker/open_labware_latch.py index e39a2e200bf..9c3a9d8ae7d 100644 --- a/api/src/opentrons/protocol_engine/commands/heater_shaker/open_labware_latch.py +++ b/api/src/opentrons/protocol_engine/commands/heater_shaker/open_labware_latch.py @@ -34,9 +34,7 @@ class OpenLabwareLatchResult(BaseModel): class OpenLabwareLatchImpl( - AbstractCommandImpl[ - OpenLabwareLatchParams, SuccessData[OpenLabwareLatchResult, None] - ] + AbstractCommandImpl[OpenLabwareLatchParams, SuccessData[OpenLabwareLatchResult]] ): """Execution implementation of a Heater-Shaker's open latch labware command.""" @@ -53,7 +51,7 @@ def __init__( async def execute( self, params: OpenLabwareLatchParams - ) -> SuccessData[OpenLabwareLatchResult, None]: + ) -> SuccessData[OpenLabwareLatchResult]: """Open a Heater-Shaker's labware latch.""" state_update = update_types.StateUpdate() @@ -87,7 +85,6 @@ async def execute( return SuccessData( public=OpenLabwareLatchResult(pipetteRetracted=pipette_should_retract), - private=None, state_update=state_update, ) diff --git a/api/src/opentrons/protocol_engine/commands/heater_shaker/set_and_wait_for_shake_speed.py b/api/src/opentrons/protocol_engine/commands/heater_shaker/set_and_wait_for_shake_speed.py index e3cf35142d6..8828195c658 100644 --- a/api/src/opentrons/protocol_engine/commands/heater_shaker/set_and_wait_for_shake_speed.py +++ b/api/src/opentrons/protocol_engine/commands/heater_shaker/set_and_wait_for_shake_speed.py @@ -36,7 +36,7 @@ class SetAndWaitForShakeSpeedResult(BaseModel): class SetAndWaitForShakeSpeedImpl( AbstractCommandImpl[ - SetAndWaitForShakeSpeedParams, SuccessData[SetAndWaitForShakeSpeedResult, None] + SetAndWaitForShakeSpeedParams, SuccessData[SetAndWaitForShakeSpeedResult] ] ): """Execution implementation of Heater-Shaker's set and wait shake speed command.""" @@ -55,7 +55,7 @@ def __init__( async def execute( self, params: SetAndWaitForShakeSpeedParams, - ) -> SuccessData[SetAndWaitForShakeSpeedResult, None]: + ) -> SuccessData[SetAndWaitForShakeSpeedResult]: """Set and wait for a Heater-Shaker's target shake speed.""" state_update = update_types.StateUpdate() @@ -94,7 +94,6 @@ async def execute( public=SetAndWaitForShakeSpeedResult( pipetteRetracted=pipette_should_retract ), - private=None, state_update=state_update, ) diff --git a/api/src/opentrons/protocol_engine/commands/heater_shaker/set_target_temperature.py b/api/src/opentrons/protocol_engine/commands/heater_shaker/set_target_temperature.py index 854004dabae..fa29390b910 100644 --- a/api/src/opentrons/protocol_engine/commands/heater_shaker/set_target_temperature.py +++ b/api/src/opentrons/protocol_engine/commands/heater_shaker/set_target_temperature.py @@ -29,7 +29,7 @@ class SetTargetTemperatureResult(BaseModel): class SetTargetTemperatureImpl( AbstractCommandImpl[ - SetTargetTemperatureParams, SuccessData[SetTargetTemperatureResult, None] + SetTargetTemperatureParams, SuccessData[SetTargetTemperatureResult] ] ): """Execution implementation of a Heater-Shaker's set temperature command.""" @@ -46,7 +46,7 @@ def __init__( async def execute( self, params: SetTargetTemperatureParams, - ) -> SuccessData[SetTargetTemperatureResult, None]: + ) -> SuccessData[SetTargetTemperatureResult]: """Set a Heater-Shaker's target temperature.""" # Allow propagation of ModuleNotLoadedError and WrongModuleTypeError. hs_module_substate = self._state_view.modules.get_heater_shaker_module_substate( @@ -64,7 +64,9 @@ async def execute( if hs_hardware_module is not None: await hs_hardware_module.start_set_temperature(validated_temp) - return SuccessData(public=SetTargetTemperatureResult(), private=None) + return SuccessData( + public=SetTargetTemperatureResult(), + ) class SetTargetTemperature( diff --git a/api/src/opentrons/protocol_engine/commands/heater_shaker/wait_for_temperature.py b/api/src/opentrons/protocol_engine/commands/heater_shaker/wait_for_temperature.py index fbd7ee24743..bb440a2674c 100644 --- a/api/src/opentrons/protocol_engine/commands/heater_shaker/wait_for_temperature.py +++ b/api/src/opentrons/protocol_engine/commands/heater_shaker/wait_for_temperature.py @@ -36,9 +36,7 @@ class WaitForTemperatureResult(BaseModel): class WaitForTemperatureImpl( - AbstractCommandImpl[ - WaitForTemperatureParams, SuccessData[WaitForTemperatureResult, None] - ] + AbstractCommandImpl[WaitForTemperatureParams, SuccessData[WaitForTemperatureResult]] ): """Execution implementation of a Heater-Shaker's wait for temperature command.""" @@ -53,7 +51,7 @@ def __init__( async def execute( self, params: WaitForTemperatureParams - ) -> SuccessData[WaitForTemperatureResult, None]: + ) -> SuccessData[WaitForTemperatureResult]: """Wait for a Heater-Shaker's target temperature to be reached.""" hs_module_substate = self._state_view.modules.get_heater_shaker_module_substate( module_id=params.moduleId @@ -72,7 +70,9 @@ async def execute( if hs_hardware_module is not None: await hs_hardware_module.await_temperature(awaiting_temperature=target_temp) - return SuccessData(public=WaitForTemperatureResult(), private=None) + return SuccessData( + public=WaitForTemperatureResult(), + ) class WaitForTemperature( diff --git a/api/src/opentrons/protocol_engine/commands/home.py b/api/src/opentrons/protocol_engine/commands/home.py index 93d988772dc..7b82f90e1fd 100644 --- a/api/src/opentrons/protocol_engine/commands/home.py +++ b/api/src/opentrons/protocol_engine/commands/home.py @@ -42,15 +42,13 @@ class HomeResult(BaseModel): """Result data from the execution of a Home command.""" -class HomeImplementation( - AbstractCommandImpl[HomeParams, SuccessData[HomeResult, None]] -): +class HomeImplementation(AbstractCommandImpl[HomeParams, SuccessData[HomeResult]]): """Home command implementation.""" def __init__(self, movement: MovementHandler, **kwargs: object) -> None: self._movement = movement - async def execute(self, params: HomeParams) -> SuccessData[HomeResult, None]: + async def execute(self, params: HomeParams) -> SuccessData[HomeResult]: """Home some or all motors to establish positional accuracy.""" state_update = update_types.StateUpdate() @@ -66,7 +64,7 @@ async def execute(self, params: HomeParams) -> SuccessData[HomeResult, None]: # preserve prior behavior, but we might only want to do this if we actually home. state_update.clear_all_pipette_locations() - return SuccessData(public=HomeResult(), private=None, state_update=state_update) + return SuccessData(public=HomeResult(), state_update=state_update) class Home(BaseCommand[HomeParams, HomeResult, ErrorOccurrence]): diff --git a/api/src/opentrons/protocol_engine/commands/liquid_probe.py b/api/src/opentrons/protocol_engine/commands/liquid_probe.py index 677d62731f9..f78cd5bb55c 100644 --- a/api/src/opentrons/protocol_engine/commands/liquid_probe.py +++ b/api/src/opentrons/protocol_engine/commands/liquid_probe.py @@ -86,10 +86,10 @@ class TryLiquidProbeResult(DestinationPositionResult): _LiquidProbeExecuteReturn = Union[ - SuccessData[LiquidProbeResult, None], + SuccessData[LiquidProbeResult], DefinedErrorData[LiquidNotFoundError], ] -_TryLiquidProbeExecuteReturn = SuccessData[TryLiquidProbeResult, None] +_TryLiquidProbeExecuteReturn = SuccessData[TryLiquidProbeResult] class _ExecuteCommonResult(NamedTuple): @@ -249,7 +249,6 @@ async def execute(self, params: _CommonParams) -> _LiquidProbeExecuteReturn: public=LiquidProbeResult( z_position=z_pos_or_error, position=deck_point ), - private=None, state_update=state_update, ) @@ -308,7 +307,6 @@ async def execute(self, params: _CommonParams) -> _TryLiquidProbeExecuteReturn: z_position=z_pos, position=deck_point, ), - private=None, state_update=state_update, ) diff --git a/api/src/opentrons/protocol_engine/commands/load_labware.py b/api/src/opentrons/protocol_engine/commands/load_labware.py index 2de394c482c..05eccb95a7a 100644 --- a/api/src/opentrons/protocol_engine/commands/load_labware.py +++ b/api/src/opentrons/protocol_engine/commands/load_labware.py @@ -88,7 +88,7 @@ class LoadLabwareResult(BaseModel): class LoadLabwareImplementation( - AbstractCommandImpl[LoadLabwareParams, SuccessData[LoadLabwareResult, None]] + AbstractCommandImpl[LoadLabwareParams, SuccessData[LoadLabwareResult]] ): """Load labware command implementation.""" @@ -100,7 +100,7 @@ def __init__( async def execute( self, params: LoadLabwareParams - ) -> SuccessData[LoadLabwareResult, None]: + ) -> SuccessData[LoadLabwareResult]: """Load definition and calibration data necessary for a labware.""" # TODO (tz, 8-15-2023): extend column validation to column 1 when working # on https://opentrons.atlassian.net/browse/RSS-258 and completing @@ -167,7 +167,6 @@ async def execute( definition=loaded_labware.definition, offsetId=loaded_labware.offsetId, ), - private=None, state_update=state_update, ) diff --git a/api/src/opentrons/protocol_engine/commands/load_liquid.py b/api/src/opentrons/protocol_engine/commands/load_liquid.py index d37bc537b2d..5dd4737410e 100644 --- a/api/src/opentrons/protocol_engine/commands/load_liquid.py +++ b/api/src/opentrons/protocol_engine/commands/load_liquid.py @@ -40,7 +40,7 @@ class LoadLiquidResult(BaseModel): class LoadLiquidImplementation( - AbstractCommandImpl[LoadLiquidParams, SuccessData[LoadLiquidResult, None]] + AbstractCommandImpl[LoadLiquidParams, SuccessData[LoadLiquidResult]] ): """Load liquid command implementation.""" @@ -50,9 +50,7 @@ def __init__( self._state_view = state_view self._model_utils = model_utils - async def execute( - self, params: LoadLiquidParams - ) -> SuccessData[LoadLiquidResult, None]: + async def execute(self, params: LoadLiquidParams) -> SuccessData[LoadLiquidResult]: """Load data necessary for a liquid.""" self._state_view.liquid.validate_liquid_id(params.liquidId) @@ -67,9 +65,7 @@ async def execute( last_loaded=self._model_utils.get_timestamp(), ) - return SuccessData( - public=LoadLiquidResult(), private=None, state_update=state_update - ) + return SuccessData(public=LoadLiquidResult(), state_update=state_update) class LoadLiquid(BaseCommand[LoadLiquidParams, LoadLiquidResult, ErrorOccurrence]): diff --git a/api/src/opentrons/protocol_engine/commands/load_module.py b/api/src/opentrons/protocol_engine/commands/load_module.py index f8127658ea0..9560f4931c3 100644 --- a/api/src/opentrons/protocol_engine/commands/load_module.py +++ b/api/src/opentrons/protocol_engine/commands/load_module.py @@ -106,7 +106,7 @@ class LoadModuleResult(BaseModel): class LoadModuleImplementation( - AbstractCommandImpl[LoadModuleParams, SuccessData[LoadModuleResult, None]] + AbstractCommandImpl[LoadModuleParams, SuccessData[LoadModuleResult]] ): """The implementation of the load module command.""" @@ -116,9 +116,7 @@ def __init__( self._equipment = equipment self._state_view = state_view - async def execute( - self, params: LoadModuleParams - ) -> SuccessData[LoadModuleResult, None]: + async def execute(self, params: LoadModuleParams) -> SuccessData[LoadModuleResult]: """Check that the requested module is attached and assign its identifier.""" module_type = params.model.as_type() self._ensure_module_location(params.location.slotName, module_type) @@ -198,7 +196,6 @@ async def execute( model=loaded_module.definition.model, definition=loaded_module.definition, ), - private=None, ) def _ensure_module_location( diff --git a/api/src/opentrons/protocol_engine/commands/load_pipette.py b/api/src/opentrons/protocol_engine/commands/load_pipette.py index 3d9bdd83050..7d09bf33028 100644 --- a/api/src/opentrons/protocol_engine/commands/load_pipette.py +++ b/api/src/opentrons/protocol_engine/commands/load_pipette.py @@ -66,7 +66,7 @@ class LoadPipetteResult(BaseModel): class LoadPipetteImplementation( - AbstractCommandImpl[LoadPipetteParams, SuccessData[LoadPipetteResult, None]] + AbstractCommandImpl[LoadPipetteParams, SuccessData[LoadPipetteResult]] ): """Load pipette command implementation.""" @@ -78,7 +78,7 @@ def __init__( async def execute( self, params: LoadPipetteParams - ) -> SuccessData[LoadPipetteResult, None]: + ) -> SuccessData[LoadPipetteResult]: """Check that requested pipette is attached and assign its identifier.""" pipette_generation = convert_to_pipette_name_type( params.pipetteName.value @@ -130,7 +130,6 @@ async def execute( return SuccessData( public=LoadPipetteResult(pipetteId=loaded_pipette.pipette_id), - private=None, state_update=state_update, ) diff --git a/api/src/opentrons/protocol_engine/commands/magnetic_module/disengage.py b/api/src/opentrons/protocol_engine/commands/magnetic_module/disengage.py index a1be2c8480f..c20b18e481d 100644 --- a/api/src/opentrons/protocol_engine/commands/magnetic_module/disengage.py +++ b/api/src/opentrons/protocol_engine/commands/magnetic_module/disengage.py @@ -38,7 +38,7 @@ class DisengageResult(BaseModel): class DisengageImplementation( - AbstractCommandImpl[DisengageParams, SuccessData[DisengageResult, None]] + AbstractCommandImpl[DisengageParams, SuccessData[DisengageResult]] ): """The implementation of a Magnetic Module disengage command.""" @@ -51,9 +51,7 @@ def __init__( self._state_view = state_view self._equipment = equipment - async def execute( - self, params: DisengageParams - ) -> SuccessData[DisengageResult, None]: + async def execute(self, params: DisengageParams) -> SuccessData[DisengageResult]: """Execute a Magnetic Module disengage command. Raises: @@ -75,7 +73,9 @@ async def execute( if hardware_module is not None: # Not virtualizing modules. await hardware_module.deactivate() - return SuccessData(public=DisengageResult(), private=None) + return SuccessData( + public=DisengageResult(), + ) class Disengage(BaseCommand[DisengageParams, DisengageResult, ErrorOccurrence]): diff --git a/api/src/opentrons/protocol_engine/commands/magnetic_module/engage.py b/api/src/opentrons/protocol_engine/commands/magnetic_module/engage.py index 3796f43a022..62f4e24eef4 100644 --- a/api/src/opentrons/protocol_engine/commands/magnetic_module/engage.py +++ b/api/src/opentrons/protocol_engine/commands/magnetic_module/engage.py @@ -54,7 +54,7 @@ class EngageResult(BaseModel): class EngageImplementation( - AbstractCommandImpl[EngageParams, SuccessData[EngageResult, None]] + AbstractCommandImpl[EngageParams, SuccessData[EngageResult]] ): """The implementation of a Magnetic Module engage command.""" @@ -67,7 +67,7 @@ def __init__( self._state_view = state_view self._equipment = equipment - async def execute(self, params: EngageParams) -> SuccessData[EngageResult, None]: + async def execute(self, params: EngageParams) -> SuccessData[EngageResult]: """Execute a Magnetic Module engage command. Raises: @@ -95,7 +95,9 @@ async def execute(self, params: EngageParams) -> SuccessData[EngageResult, None] if hardware_module is not None: # Not virtualizing modules. await hardware_module.engage(height=hardware_height) - return SuccessData(public=EngageResult(), private=None) + return SuccessData( + public=EngageResult(), + ) class Engage(BaseCommand[EngageParams, EngageResult, ErrorOccurrence]): diff --git a/api/src/opentrons/protocol_engine/commands/move_labware.py b/api/src/opentrons/protocol_engine/commands/move_labware.py index 7f52a8e83e4..0d2967e87d5 100644 --- a/api/src/opentrons/protocol_engine/commands/move_labware.py +++ b/api/src/opentrons/protocol_engine/commands/move_labware.py @@ -98,9 +98,7 @@ class GripperMovementError(ErrorOccurrence): errorType: Literal["gripperMovement"] = "gripperMovement" -_ExecuteReturn = ( - SuccessData[MoveLabwareResult, None] | DefinedErrorData[GripperMovementError] -) +_ExecuteReturn = SuccessData[MoveLabwareResult] | DefinedErrorData[GripperMovementError] class MoveLabwareImplementation(AbstractCommandImpl[MoveLabwareParams, _ExecuteReturn]): @@ -301,7 +299,6 @@ async def execute(self, params: MoveLabwareParams) -> _ExecuteReturn: # noqa: C return SuccessData( public=MoveLabwareResult(offsetId=new_offset_id), - private=None, state_update=state_update, ) diff --git a/api/src/opentrons/protocol_engine/commands/move_relative.py b/api/src/opentrons/protocol_engine/commands/move_relative.py index dc559648ea3..9133725727d 100644 --- a/api/src/opentrons/protocol_engine/commands/move_relative.py +++ b/api/src/opentrons/protocol_engine/commands/move_relative.py @@ -39,7 +39,7 @@ class MoveRelativeResult(DestinationPositionResult): class MoveRelativeImplementation( - AbstractCommandImpl[MoveRelativeParams, SuccessData[MoveRelativeResult, None]] + AbstractCommandImpl[MoveRelativeParams, SuccessData[MoveRelativeResult]] ): """Move relative command implementation.""" @@ -48,7 +48,7 @@ def __init__(self, movement: MovementHandler, **kwargs: object) -> None: async def execute( self, params: MoveRelativeParams - ) -> SuccessData[MoveRelativeResult, None]: + ) -> SuccessData[MoveRelativeResult]: """Move (jog) a given pipette a relative distance.""" state_update = update_types.StateUpdate() @@ -67,7 +67,6 @@ async def execute( return SuccessData( public=MoveRelativeResult(position=deck_point), - private=None, state_update=state_update, ) diff --git a/api/src/opentrons/protocol_engine/commands/move_to_addressable_area.py b/api/src/opentrons/protocol_engine/commands/move_to_addressable_area.py index cfdfbe77133..8247f54a266 100644 --- a/api/src/opentrons/protocol_engine/commands/move_to_addressable_area.py +++ b/api/src/opentrons/protocol_engine/commands/move_to_addressable_area.py @@ -76,7 +76,7 @@ class MoveToAddressableAreaResult(DestinationPositionResult): class MoveToAddressableAreaImplementation( AbstractCommandImpl[ - MoveToAddressableAreaParams, SuccessData[MoveToAddressableAreaResult, None] + MoveToAddressableAreaParams, SuccessData[MoveToAddressableAreaResult] ] ): """Move to addressable area command implementation.""" @@ -89,7 +89,7 @@ def __init__( async def execute( self, params: MoveToAddressableAreaParams - ) -> SuccessData[MoveToAddressableAreaResult, None]: + ) -> SuccessData[MoveToAddressableAreaResult]: """Move the requested pipette to the requested addressable area.""" state_update = update_types.StateUpdate() @@ -134,7 +134,6 @@ async def execute( return SuccessData( public=MoveToAddressableAreaResult(position=DeckPoint(x=x, y=y, z=z)), - private=None, state_update=state_update, ) diff --git a/api/src/opentrons/protocol_engine/commands/move_to_addressable_area_for_drop_tip.py b/api/src/opentrons/protocol_engine/commands/move_to_addressable_area_for_drop_tip.py index 44244dcb25c..1c151f1e605 100644 --- a/api/src/opentrons/protocol_engine/commands/move_to_addressable_area_for_drop_tip.py +++ b/api/src/opentrons/protocol_engine/commands/move_to_addressable_area_for_drop_tip.py @@ -86,7 +86,7 @@ class MoveToAddressableAreaForDropTipResult(DestinationPositionResult): class MoveToAddressableAreaForDropTipImplementation( AbstractCommandImpl[ MoveToAddressableAreaForDropTipParams, - SuccessData[MoveToAddressableAreaForDropTipResult, None], + SuccessData[MoveToAddressableAreaForDropTipResult], ] ): """Move to addressable area for drop tip command implementation.""" @@ -99,7 +99,7 @@ def __init__( async def execute( self, params: MoveToAddressableAreaForDropTipParams - ) -> SuccessData[MoveToAddressableAreaForDropTipResult, None]: + ) -> SuccessData[MoveToAddressableAreaForDropTipResult]: """Move the requested pipette to the requested addressable area in preperation of a drop tip.""" state_update = update_types.StateUpdate() @@ -140,7 +140,6 @@ async def execute( public=MoveToAddressableAreaForDropTipResult( position=DeckPoint(x=x, y=y, z=z) ), - private=None, state_update=state_update, ) diff --git a/api/src/opentrons/protocol_engine/commands/move_to_coordinates.py b/api/src/opentrons/protocol_engine/commands/move_to_coordinates.py index fbc9f20e790..d7a0919d238 100644 --- a/api/src/opentrons/protocol_engine/commands/move_to_coordinates.py +++ b/api/src/opentrons/protocol_engine/commands/move_to_coordinates.py @@ -35,9 +35,7 @@ class MoveToCoordinatesResult(DestinationPositionResult): class MoveToCoordinatesImplementation( - AbstractCommandImpl[ - MoveToCoordinatesParams, SuccessData[MoveToCoordinatesResult, None] - ] + AbstractCommandImpl[MoveToCoordinatesParams, SuccessData[MoveToCoordinatesResult]] ): """Move to coordinates command implementation.""" @@ -50,7 +48,7 @@ def __init__( async def execute( self, params: MoveToCoordinatesParams - ) -> SuccessData[MoveToCoordinatesResult, None]: + ) -> SuccessData[MoveToCoordinatesResult]: """Move the requested pipette to the requested coordinates.""" state_update = update_types.StateUpdate() @@ -68,7 +66,6 @@ async def execute( return SuccessData( public=MoveToCoordinatesResult(position=DeckPoint(x=x, y=y, z=z)), - private=None, state_update=state_update, ) diff --git a/api/src/opentrons/protocol_engine/commands/move_to_well.py b/api/src/opentrons/protocol_engine/commands/move_to_well.py index 309f2e89513..49ab10111a4 100644 --- a/api/src/opentrons/protocol_engine/commands/move_to_well.py +++ b/api/src/opentrons/protocol_engine/commands/move_to_well.py @@ -35,7 +35,7 @@ class MoveToWellResult(DestinationPositionResult): class MoveToWellImplementation( - AbstractCommandImpl[MoveToWellParams, SuccessData[MoveToWellResult, None]] + AbstractCommandImpl[MoveToWellParams, SuccessData[MoveToWellResult]] ): """Move to well command implementation.""" @@ -45,9 +45,7 @@ def __init__( self._state_view = state_view self._movement = movement - async def execute( - self, params: MoveToWellParams - ) -> SuccessData[MoveToWellResult, None]: + async def execute(self, params: MoveToWellParams) -> SuccessData[MoveToWellResult]: """Move the requested pipette to the requested well.""" pipette_id = params.pipetteId labware_id = params.labwareId @@ -83,7 +81,6 @@ async def execute( return SuccessData( public=MoveToWellResult(position=deck_point), - private=None, state_update=state_update, ) 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 bf8492cc74b..898929566fe 100644 --- a/api/src/opentrons/protocol_engine/commands/pick_up_tip.py +++ b/api/src/opentrons/protocol_engine/commands/pick_up_tip.py @@ -86,7 +86,7 @@ class TipPhysicallyMissingError(ErrorOccurrence): _ExecuteReturn = Union[ - SuccessData[PickUpTipResult, None], + SuccessData[PickUpTipResult], DefinedErrorData[TipPhysicallyMissingError], ] @@ -109,7 +109,7 @@ def __init__( async def execute( self, params: PickUpTipParams - ) -> Union[SuccessData[PickUpTipResult, None], _ExecuteReturn]: + ) -> Union[SuccessData[PickUpTipResult], _ExecuteReturn]: """Move to and pick up a tip using the requested pipette.""" pipette_id = params.pipetteId labware_id = params.labwareId @@ -179,7 +179,6 @@ async def execute( tipDiameter=tip_geometry.diameter, position=deck_point, ), - private=None, state_update=state_update, ) diff --git a/api/src/opentrons/protocol_engine/commands/prepare_to_aspirate.py b/api/src/opentrons/protocol_engine/commands/prepare_to_aspirate.py index d63e42a7f90..01012be1d7f 100644 --- a/api/src/opentrons/protocol_engine/commands/prepare_to_aspirate.py +++ b/api/src/opentrons/protocol_engine/commands/prepare_to_aspirate.py @@ -40,7 +40,7 @@ class PrepareToAspirateResult(BaseModel): _ExecuteReturn = Union[ - SuccessData[PrepareToAspirateResult, None], + SuccessData[PrepareToAspirateResult], DefinedErrorData[OverpressureError], ] @@ -92,7 +92,9 @@ async def execute(self, params: PrepareToAspirateParams) -> _ExecuteReturn: ), ) else: - return SuccessData(public=PrepareToAspirateResult(), private=None) + return SuccessData( + public=PrepareToAspirateResult(), + ) class PrepareToAspirate( diff --git a/api/src/opentrons/protocol_engine/commands/reload_labware.py b/api/src/opentrons/protocol_engine/commands/reload_labware.py index 25f545736be..60230a1c6dd 100644 --- a/api/src/opentrons/protocol_engine/commands/reload_labware.py +++ b/api/src/opentrons/protocol_engine/commands/reload_labware.py @@ -47,7 +47,7 @@ class ReloadLabwareResult(BaseModel): class ReloadLabwareImplementation( - AbstractCommandImpl[ReloadLabwareParams, SuccessData[ReloadLabwareResult, None]] + AbstractCommandImpl[ReloadLabwareParams, SuccessData[ReloadLabwareResult]] ): """Reload labware command implementation.""" @@ -59,7 +59,7 @@ def __init__( async def execute( self, params: ReloadLabwareParams - ) -> SuccessData[ReloadLabwareResult, None]: + ) -> SuccessData[ReloadLabwareResult]: """Reload the definition and calibration data for a specific labware.""" reloaded_labware = await self._equipment.reload_labware( labware_id=params.labwareId, @@ -78,7 +78,6 @@ async def execute( labwareId=params.labwareId, offsetId=reloaded_labware.offsetId, ), - private=None, state_update=state_update, ) diff --git a/api/src/opentrons/protocol_engine/commands/retract_axis.py b/api/src/opentrons/protocol_engine/commands/retract_axis.py index 29e09acc064..49020eb517e 100644 --- a/api/src/opentrons/protocol_engine/commands/retract_axis.py +++ b/api/src/opentrons/protocol_engine/commands/retract_axis.py @@ -39,7 +39,7 @@ class RetractAxisResult(BaseModel): class RetractAxisImplementation( - AbstractCommandImpl[RetractAxisParams, SuccessData[RetractAxisResult, None]] + AbstractCommandImpl[RetractAxisParams, SuccessData[RetractAxisResult]] ): """Retract Axis command implementation.""" @@ -48,14 +48,12 @@ def __init__(self, movement: MovementHandler, **kwargs: object) -> None: async def execute( self, params: RetractAxisParams - ) -> SuccessData[RetractAxisResult, None]: + ) -> SuccessData[RetractAxisResult]: """Retract the specified axis.""" state_update = update_types.StateUpdate() await self._movement.retract_axis(axis=params.axis) state_update.clear_all_pipette_locations() - return SuccessData( - public=RetractAxisResult(), private=None, state_update=state_update - ) + return SuccessData(public=RetractAxisResult(), state_update=state_update) class RetractAxis(BaseCommand[RetractAxisParams, RetractAxisResult, ErrorOccurrence]): diff --git a/api/src/opentrons/protocol_engine/commands/save_position.py b/api/src/opentrons/protocol_engine/commands/save_position.py index 988e4b762a7..4bc208d1421 100644 --- a/api/src/opentrons/protocol_engine/commands/save_position.py +++ b/api/src/opentrons/protocol_engine/commands/save_position.py @@ -46,7 +46,7 @@ class SavePositionResult(BaseModel): class SavePositionImplementation( - AbstractCommandImpl[SavePositionParams, SuccessData[SavePositionResult, None]] + AbstractCommandImpl[SavePositionParams, SuccessData[SavePositionResult]] ): """Save position command implementation.""" @@ -61,7 +61,7 @@ def __init__( async def execute( self, params: SavePositionParams - ) -> SuccessData[SavePositionResult, None]: + ) -> SuccessData[SavePositionResult]: """Check the requested pipette's current position.""" position_id = self._model_utils.ensure_id(params.positionId) fail_on_not_homed = ( @@ -76,7 +76,6 @@ async def execute( positionId=position_id, position=DeckPoint(x=x, y=y, z=z), ), - private=None, ) diff --git a/api/src/opentrons/protocol_engine/commands/set_rail_lights.py b/api/src/opentrons/protocol_engine/commands/set_rail_lights.py index 6235e0d9bb6..09254dbe966 100644 --- a/api/src/opentrons/protocol_engine/commands/set_rail_lights.py +++ b/api/src/opentrons/protocol_engine/commands/set_rail_lights.py @@ -29,7 +29,7 @@ class SetRailLightsResult(BaseModel): class SetRailLightsImplementation( - AbstractCommandImpl[SetRailLightsParams, SuccessData[SetRailLightsResult, None]] + AbstractCommandImpl[SetRailLightsParams, SuccessData[SetRailLightsResult]] ): """setRailLights command implementation.""" @@ -38,10 +38,12 @@ def __init__(self, rail_lights: RailLightsHandler, **kwargs: object) -> None: async def execute( self, params: SetRailLightsParams - ) -> SuccessData[SetRailLightsResult, None]: + ) -> SuccessData[SetRailLightsResult]: """Dispatch a set lights command setting the state of the rail lights.""" await self._rail_lights.set_rail_lights(params.on) - return SuccessData(public=SetRailLightsResult(), private=None) + return SuccessData( + public=SetRailLightsResult(), + ) class SetRailLights( diff --git a/api/src/opentrons/protocol_engine/commands/set_status_bar.py b/api/src/opentrons/protocol_engine/commands/set_status_bar.py index cb83aa56ce2..2e1483f6d93 100644 --- a/api/src/opentrons/protocol_engine/commands/set_status_bar.py +++ b/api/src/opentrons/protocol_engine/commands/set_status_bar.py @@ -49,7 +49,7 @@ class SetStatusBarResult(BaseModel): class SetStatusBarImplementation( - AbstractCommandImpl[SetStatusBarParams, SuccessData[SetStatusBarResult, None]] + AbstractCommandImpl[SetStatusBarParams, SuccessData[SetStatusBarResult]] ): """setStatusBar command implementation.""" @@ -58,12 +58,14 @@ def __init__(self, status_bar: StatusBarHandler, **kwargs: object) -> None: async def execute( self, params: SetStatusBarParams - ) -> SuccessData[SetStatusBarResult, None]: + ) -> SuccessData[SetStatusBarResult]: """Execute the setStatusBar command.""" if not self._status_bar.status_bar_should_not_be_changed(): state = _animation_to_status_bar_state(params.animation) await self._status_bar.set_status_bar(state) - return SuccessData(public=SetStatusBarResult(), private=None) + return SuccessData( + public=SetStatusBarResult(), + ) class SetStatusBar( diff --git a/api/src/opentrons/protocol_engine/commands/temperature_module/deactivate.py b/api/src/opentrons/protocol_engine/commands/temperature_module/deactivate.py index 52e988b179d..e56c98e6e30 100644 --- a/api/src/opentrons/protocol_engine/commands/temperature_module/deactivate.py +++ b/api/src/opentrons/protocol_engine/commands/temperature_module/deactivate.py @@ -27,7 +27,7 @@ class DeactivateTemperatureResult(BaseModel): class DeactivateTemperatureImpl( AbstractCommandImpl[ - DeactivateTemperatureParams, SuccessData[DeactivateTemperatureResult, None] + DeactivateTemperatureParams, SuccessData[DeactivateTemperatureResult] ] ): """Execution implementation of a Temperature Module's deactivate command.""" @@ -43,7 +43,7 @@ def __init__( async def execute( self, params: DeactivateTemperatureParams - ) -> SuccessData[DeactivateTemperatureResult, None]: + ) -> SuccessData[DeactivateTemperatureResult]: """Deactivate a Temperature Module.""" # Allow propagation of ModuleNotLoadedError and WrongModuleTypeError. module_substate = self._state_view.modules.get_temperature_module_substate( @@ -57,7 +57,9 @@ async def execute( if temp_hardware_module is not None: await temp_hardware_module.deactivate() - return SuccessData(public=DeactivateTemperatureResult(), private=None) + return SuccessData( + public=DeactivateTemperatureResult(), + ) class DeactivateTemperature( diff --git a/api/src/opentrons/protocol_engine/commands/temperature_module/set_target_temperature.py b/api/src/opentrons/protocol_engine/commands/temperature_module/set_target_temperature.py index 7e76de7d561..6d65bf47bb0 100644 --- a/api/src/opentrons/protocol_engine/commands/temperature_module/set_target_temperature.py +++ b/api/src/opentrons/protocol_engine/commands/temperature_module/set_target_temperature.py @@ -34,7 +34,7 @@ class SetTargetTemperatureResult(BaseModel): class SetTargetTemperatureImpl( AbstractCommandImpl[ - SetTargetTemperatureParams, SuccessData[SetTargetTemperatureResult, None] + SetTargetTemperatureParams, SuccessData[SetTargetTemperatureResult] ] ): """Execution implementation of a Temperature Module's set temperature command.""" @@ -50,7 +50,7 @@ def __init__( async def execute( self, params: SetTargetTemperatureParams - ) -> SuccessData[SetTargetTemperatureResult, None]: + ) -> SuccessData[SetTargetTemperatureResult]: """Set a Temperature Module's target temperature.""" # Allow propagation of ModuleNotLoadedError and WrongModuleTypeError. module_substate = self._state_view.modules.get_temperature_module_substate( @@ -69,7 +69,6 @@ async def execute( await temp_hardware_module.start_set_temperature(celsius=validated_temp) return SuccessData( public=SetTargetTemperatureResult(targetTemperature=validated_temp), - private=None, ) diff --git a/api/src/opentrons/protocol_engine/commands/temperature_module/wait_for_temperature.py b/api/src/opentrons/protocol_engine/commands/temperature_module/wait_for_temperature.py index 7a96be35242..fa7784de141 100644 --- a/api/src/opentrons/protocol_engine/commands/temperature_module/wait_for_temperature.py +++ b/api/src/opentrons/protocol_engine/commands/temperature_module/wait_for_temperature.py @@ -35,9 +35,7 @@ class WaitForTemperatureResult(BaseModel): class WaitForTemperatureImpl( - AbstractCommandImpl[ - WaitForTemperatureParams, SuccessData[WaitForTemperatureResult, None] - ] + AbstractCommandImpl[WaitForTemperatureParams, SuccessData[WaitForTemperatureResult]] ): """Execution implementation of Temperature Module's wait for temperature command.""" @@ -52,7 +50,7 @@ def __init__( async def execute( self, params: WaitForTemperatureParams - ) -> SuccessData[WaitForTemperatureResult, None]: + ) -> SuccessData[WaitForTemperatureResult]: """Wait for a Temperature Module's target temperature.""" # Allow propagation of ModuleNotLoadedError and WrongModuleTypeError. module_substate = self._state_view.modules.get_temperature_module_substate( @@ -74,7 +72,9 @@ async def execute( await temp_hardware_module.await_temperature( awaiting_temperature=target_temp ) - return SuccessData(public=WaitForTemperatureResult(), private=None) + return SuccessData( + public=WaitForTemperatureResult(), + ) class WaitForTemperature( diff --git a/api/src/opentrons/protocol_engine/commands/thermocycler/close_lid.py b/api/src/opentrons/protocol_engine/commands/thermocycler/close_lid.py index 12e1ab4b13f..578a5d6b7a7 100644 --- a/api/src/opentrons/protocol_engine/commands/thermocycler/close_lid.py +++ b/api/src/opentrons/protocol_engine/commands/thermocycler/close_lid.py @@ -28,9 +28,7 @@ class CloseLidResult(BaseModel): """Result data from closing a Thermocycler's lid.""" -class CloseLidImpl( - AbstractCommandImpl[CloseLidParams, SuccessData[CloseLidResult, None]] -): +class CloseLidImpl(AbstractCommandImpl[CloseLidParams, SuccessData[CloseLidResult]]): """Execution implementation of a Thermocycler's close lid command.""" def __init__( @@ -44,9 +42,7 @@ def __init__( self._equipment = equipment self._movement = movement - async def execute( - self, params: CloseLidParams - ) -> SuccessData[CloseLidResult, None]: + async def execute(self, params: CloseLidParams) -> SuccessData[CloseLidResult]: """Close a Thermocycler's lid.""" state_update = update_types.StateUpdate() @@ -69,9 +65,7 @@ async def execute( if thermocycler_hardware is not None: await thermocycler_hardware.close() - return SuccessData( - public=CloseLidResult(), private=None, state_update=state_update - ) + return SuccessData(public=CloseLidResult(), state_update=state_update) class CloseLid(BaseCommand[CloseLidParams, CloseLidResult, ErrorOccurrence]): diff --git a/api/src/opentrons/protocol_engine/commands/thermocycler/deactivate_block.py b/api/src/opentrons/protocol_engine/commands/thermocycler/deactivate_block.py index fd108dc9568..67199577d53 100644 --- a/api/src/opentrons/protocol_engine/commands/thermocycler/deactivate_block.py +++ b/api/src/opentrons/protocol_engine/commands/thermocycler/deactivate_block.py @@ -27,7 +27,7 @@ class DeactivateBlockResult(BaseModel): class DeactivateBlockImpl( - AbstractCommandImpl[DeactivateBlockParams, SuccessData[DeactivateBlockResult, None]] + AbstractCommandImpl[DeactivateBlockParams, SuccessData[DeactivateBlockResult]] ): """Execution implementation of a Thermocycler's deactivate block command.""" @@ -42,7 +42,7 @@ def __init__( async def execute( self, params: DeactivateBlockParams - ) -> SuccessData[DeactivateBlockResult, None]: + ) -> SuccessData[DeactivateBlockResult]: """Unset a Thermocycler's target block temperature.""" thermocycler_state = self._state_view.modules.get_thermocycler_module_substate( params.moduleId @@ -54,7 +54,9 @@ async def execute( if thermocycler_hardware is not None: await thermocycler_hardware.deactivate_block() - return SuccessData(public=DeactivateBlockResult(), private=None) + return SuccessData( + public=DeactivateBlockResult(), + ) class DeactivateBlock( diff --git a/api/src/opentrons/protocol_engine/commands/thermocycler/deactivate_lid.py b/api/src/opentrons/protocol_engine/commands/thermocycler/deactivate_lid.py index ff0fabc1e88..9c3541efb12 100644 --- a/api/src/opentrons/protocol_engine/commands/thermocycler/deactivate_lid.py +++ b/api/src/opentrons/protocol_engine/commands/thermocycler/deactivate_lid.py @@ -27,7 +27,7 @@ class DeactivateLidResult(BaseModel): class DeactivateLidImpl( - AbstractCommandImpl[DeactivateLidParams, SuccessData[DeactivateLidResult, None]] + AbstractCommandImpl[DeactivateLidParams, SuccessData[DeactivateLidResult]] ): """Execution implementation of a Thermocycler's deactivate lid command.""" @@ -42,7 +42,7 @@ def __init__( async def execute( self, params: DeactivateLidParams - ) -> SuccessData[DeactivateLidResult, None]: + ) -> SuccessData[DeactivateLidResult]: """Unset a Thermocycler's target lid temperature.""" thermocycler_state = self._state_view.modules.get_thermocycler_module_substate( params.moduleId @@ -54,7 +54,9 @@ async def execute( if thermocycler_hardware is not None: await thermocycler_hardware.deactivate_lid() - return SuccessData(public=DeactivateLidResult(), private=None) + return SuccessData( + public=DeactivateLidResult(), + ) class DeactivateLid( diff --git a/api/src/opentrons/protocol_engine/commands/thermocycler/open_lid.py b/api/src/opentrons/protocol_engine/commands/thermocycler/open_lid.py index e874a0b678c..3df32d1ec99 100644 --- a/api/src/opentrons/protocol_engine/commands/thermocycler/open_lid.py +++ b/api/src/opentrons/protocol_engine/commands/thermocycler/open_lid.py @@ -28,7 +28,7 @@ class OpenLidResult(BaseModel): """Result data from opening a Thermocycler's lid.""" -class OpenLidImpl(AbstractCommandImpl[OpenLidParams, SuccessData[OpenLidResult, None]]): +class OpenLidImpl(AbstractCommandImpl[OpenLidParams, SuccessData[OpenLidResult]]): """Execution implementation of a Thermocycler's open lid command.""" def __init__( @@ -42,7 +42,7 @@ def __init__( self._equipment = equipment self._movement = movement - async def execute(self, params: OpenLidParams) -> SuccessData[OpenLidResult, None]: + async def execute(self, params: OpenLidParams) -> SuccessData[OpenLidResult]: """Open a Thermocycler's lid.""" state_update = update_types.StateUpdate() @@ -65,9 +65,7 @@ async def execute(self, params: OpenLidParams) -> SuccessData[OpenLidResult, Non if thermocycler_hardware is not None: await thermocycler_hardware.open() - return SuccessData( - public=OpenLidResult(), private=None, state_update=state_update - ) + return SuccessData(public=OpenLidResult(), state_update=state_update) class OpenLid(BaseCommand[OpenLidParams, OpenLidResult, ErrorOccurrence]): 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 index 3cf8a67bf41..6f63aed8fe3 100644 --- a/api/src/opentrons/protocol_engine/commands/thermocycler/run_extended_profile.py +++ b/api/src/opentrons/protocol_engine/commands/thermocycler/run_extended_profile.py @@ -59,7 +59,6 @@ class RunExtendedProfileResult(BaseModel): 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, @@ -97,9 +96,7 @@ def _transform_profile_element( class RunExtendedProfileImpl( - AbstractCommandImpl[ - RunExtendedProfileParams, SuccessData[RunExtendedProfileResult, None] - ] + AbstractCommandImpl[RunExtendedProfileParams, SuccessData[RunExtendedProfileResult]] ): """Execution implementation of a Thermocycler's run profile command.""" @@ -114,7 +111,7 @@ def __init__( async def execute( self, params: RunExtendedProfileParams - ) -> SuccessData[RunExtendedProfileResult, None]: + ) -> SuccessData[RunExtendedProfileResult]: """Run a Thermocycler profile.""" thermocycler_state = self._state_view.modules.get_thermocycler_module_substate( params.moduleId @@ -142,7 +139,9 @@ async def execute( profile=profile, volume=target_volume ) - return SuccessData(public=RunExtendedProfileResult(), private=None) + return SuccessData( + public=RunExtendedProfileResult(), + ) class RunExtendedProfile( diff --git a/api/src/opentrons/protocol_engine/commands/thermocycler/run_profile.py b/api/src/opentrons/protocol_engine/commands/thermocycler/run_profile.py index c0b5189afcb..02aa7ad93e2 100644 --- a/api/src/opentrons/protocol_engine/commands/thermocycler/run_profile.py +++ b/api/src/opentrons/protocol_engine/commands/thermocycler/run_profile.py @@ -47,7 +47,7 @@ class RunProfileResult(BaseModel): class RunProfileImpl( - AbstractCommandImpl[RunProfileParams, SuccessData[RunProfileResult, None]] + AbstractCommandImpl[RunProfileParams, SuccessData[RunProfileResult]] ): """Execution implementation of a Thermocycler's run profile command.""" @@ -60,9 +60,7 @@ def __init__( self._state_view = state_view self._equipment = equipment - async def execute( - self, params: RunProfileParams - ) -> SuccessData[RunProfileResult, None]: + async def execute(self, params: RunProfileParams) -> SuccessData[RunProfileResult]: """Run a Thermocycler profile.""" thermocycler_state = self._state_view.modules.get_thermocycler_module_substate( params.moduleId @@ -96,7 +94,9 @@ async def execute( steps=steps, repetitions=1, volume=target_volume ) - return SuccessData(public=RunProfileResult(), private=None) + return SuccessData( + public=RunProfileResult(), + ) class RunProfile(BaseCommand[RunProfileParams, RunProfileResult, ErrorOccurrence]): diff --git a/api/src/opentrons/protocol_engine/commands/thermocycler/set_target_block_temperature.py b/api/src/opentrons/protocol_engine/commands/thermocycler/set_target_block_temperature.py index 587369b733b..b69bb15ea90 100644 --- a/api/src/opentrons/protocol_engine/commands/thermocycler/set_target_block_temperature.py +++ b/api/src/opentrons/protocol_engine/commands/thermocycler/set_target_block_temperature.py @@ -46,7 +46,7 @@ class SetTargetBlockTemperatureResult(BaseModel): class SetTargetBlockTemperatureImpl( AbstractCommandImpl[ SetTargetBlockTemperatureParams, - SuccessData[SetTargetBlockTemperatureResult, None], + SuccessData[SetTargetBlockTemperatureResult], ] ): """Execution implementation of a Thermocycler's set block temperature command.""" @@ -63,7 +63,7 @@ def __init__( async def execute( self, params: SetTargetBlockTemperatureParams, - ) -> SuccessData[SetTargetBlockTemperatureResult, None]: + ) -> SuccessData[SetTargetBlockTemperatureResult]: """Set a Thermocycler's target block temperature.""" thermocycler_state = self._state_view.modules.get_thermocycler_module_substate( params.moduleId @@ -97,7 +97,6 @@ async def execute( public=SetTargetBlockTemperatureResult( targetBlockTemperature=target_temperature ), - private=None, ) diff --git a/api/src/opentrons/protocol_engine/commands/thermocycler/set_target_lid_temperature.py b/api/src/opentrons/protocol_engine/commands/thermocycler/set_target_lid_temperature.py index 5e7efa6bfd2..37217e047ae 100644 --- a/api/src/opentrons/protocol_engine/commands/thermocycler/set_target_lid_temperature.py +++ b/api/src/opentrons/protocol_engine/commands/thermocycler/set_target_lid_temperature.py @@ -34,7 +34,7 @@ class SetTargetLidTemperatureResult(BaseModel): class SetTargetLidTemperatureImpl( AbstractCommandImpl[ - SetTargetLidTemperatureParams, SuccessData[SetTargetLidTemperatureResult, None] + SetTargetLidTemperatureParams, SuccessData[SetTargetLidTemperatureResult] ] ): """Execution implementation of a Thermocycler's set lid temperature command.""" @@ -51,7 +51,7 @@ def __init__( async def execute( self, params: SetTargetLidTemperatureParams, - ) -> SuccessData[SetTargetLidTemperatureResult, None]: + ) -> SuccessData[SetTargetLidTemperatureResult]: """Set a Thermocycler's target lid temperature.""" thermocycler_state = self._state_view.modules.get_thermocycler_module_substate( params.moduleId @@ -70,7 +70,6 @@ async def execute( public=SetTargetLidTemperatureResult( targetLidTemperature=target_temperature ), - private=None, ) diff --git a/api/src/opentrons/protocol_engine/commands/thermocycler/wait_for_block_temperature.py b/api/src/opentrons/protocol_engine/commands/thermocycler/wait_for_block_temperature.py index dabe351f352..8e8c9b1a4ec 100644 --- a/api/src/opentrons/protocol_engine/commands/thermocycler/wait_for_block_temperature.py +++ b/api/src/opentrons/protocol_engine/commands/thermocycler/wait_for_block_temperature.py @@ -28,7 +28,7 @@ class WaitForBlockTemperatureResult(BaseModel): class WaitForBlockTemperatureImpl( AbstractCommandImpl[ - WaitForBlockTemperatureParams, SuccessData[WaitForBlockTemperatureResult, None] + WaitForBlockTemperatureParams, SuccessData[WaitForBlockTemperatureResult] ] ): """Execution implementation of Thermocycler's wait for block temperature command.""" @@ -45,7 +45,7 @@ def __init__( async def execute( self, params: WaitForBlockTemperatureParams, - ) -> SuccessData[WaitForBlockTemperatureResult, None]: + ) -> SuccessData[WaitForBlockTemperatureResult]: """Wait for a Thermocycler's target block temperature.""" thermocycler_state = self._state_view.modules.get_thermocycler_module_substate( params.moduleId @@ -61,7 +61,9 @@ async def execute( if thermocycler_hardware is not None: await thermocycler_hardware.wait_for_block_target() - return SuccessData(public=WaitForBlockTemperatureResult(), private=None) + return SuccessData( + public=WaitForBlockTemperatureResult(), + ) class WaitForBlockTemperature( diff --git a/api/src/opentrons/protocol_engine/commands/thermocycler/wait_for_lid_temperature.py b/api/src/opentrons/protocol_engine/commands/thermocycler/wait_for_lid_temperature.py index d15eb4f3238..95e5fbc4f0a 100644 --- a/api/src/opentrons/protocol_engine/commands/thermocycler/wait_for_lid_temperature.py +++ b/api/src/opentrons/protocol_engine/commands/thermocycler/wait_for_lid_temperature.py @@ -28,7 +28,7 @@ class WaitForLidTemperatureResult(BaseModel): class WaitForLidTemperatureImpl( AbstractCommandImpl[ - WaitForLidTemperatureParams, SuccessData[WaitForLidTemperatureResult, None] + WaitForLidTemperatureParams, SuccessData[WaitForLidTemperatureResult] ] ): """Execution implementation of Thermocycler's wait for lid temperature command.""" @@ -45,7 +45,7 @@ def __init__( async def execute( self, params: WaitForLidTemperatureParams, - ) -> SuccessData[WaitForLidTemperatureResult, None]: + ) -> SuccessData[WaitForLidTemperatureResult]: """Wait for a Thermocycler's lid temperature.""" thermocycler_state = self._state_view.modules.get_thermocycler_module_substate( params.moduleId @@ -61,7 +61,9 @@ async def execute( if thermocycler_hardware is not None: await thermocycler_hardware.wait_for_lid_target() - return SuccessData(public=WaitForLidTemperatureResult(), private=None) + return SuccessData( + public=WaitForLidTemperatureResult(), + ) class WaitForLidTemperature( diff --git a/api/src/opentrons/protocol_engine/commands/touch_tip.py b/api/src/opentrons/protocol_engine/commands/touch_tip.py index 744b1c14107..48c947abcbd 100644 --- a/api/src/opentrons/protocol_engine/commands/touch_tip.py +++ b/api/src/opentrons/protocol_engine/commands/touch_tip.py @@ -50,7 +50,7 @@ class TouchTipResult(DestinationPositionResult): class TouchTipImplementation( - AbstractCommandImpl[TouchTipParams, SuccessData[TouchTipResult, None]] + AbstractCommandImpl[TouchTipParams, SuccessData[TouchTipResult]] ): """Touch tip command implementation.""" @@ -65,9 +65,7 @@ def __init__( self._movement = movement self._gantry_mover = gantry_mover - async def execute( - self, params: TouchTipParams - ) -> SuccessData[TouchTipResult, None]: + async def execute(self, params: TouchTipParams) -> SuccessData[TouchTipResult]: """Touch tip to sides of a well using the requested pipette.""" pipette_id = params.pipetteId labware_id = params.labwareId @@ -119,7 +117,6 @@ async def execute( return SuccessData( public=TouchTipResult(position=final_deck_point), - private=None, state_update=state_update, ) diff --git a/api/src/opentrons/protocol_engine/commands/unsafe/unsafe_blow_out_in_place.py b/api/src/opentrons/protocol_engine/commands/unsafe/unsafe_blow_out_in_place.py index d9ef8e1d15d..4738b7c9b97 100644 --- a/api/src/opentrons/protocol_engine/commands/unsafe/unsafe_blow_out_in_place.py +++ b/api/src/opentrons/protocol_engine/commands/unsafe/unsafe_blow_out_in_place.py @@ -36,7 +36,7 @@ class UnsafeBlowOutInPlaceResult(BaseModel): class UnsafeBlowOutInPlaceImplementation( AbstractCommandImpl[ - UnsafeBlowOutInPlaceParams, SuccessData[UnsafeBlowOutInPlaceResult, None] + UnsafeBlowOutInPlaceParams, SuccessData[UnsafeBlowOutInPlaceResult] ] ): """UnsafeBlowOutInPlace command implementation.""" @@ -54,7 +54,7 @@ def __init__( async def execute( self, params: UnsafeBlowOutInPlaceParams - ) -> SuccessData[UnsafeBlowOutInPlaceResult, None]: + ) -> SuccessData[UnsafeBlowOutInPlaceResult]: """Blow-out without moving the pipette even when position is unknown.""" ot3_hardware_api = ensure_ot3_hardware(self._hardware_api) pipette_location = self._state_view.motion.get_pipette_location( @@ -67,7 +67,9 @@ async def execute( pipette_id=params.pipetteId, flow_rate=params.flowRate ) - return SuccessData(public=UnsafeBlowOutInPlaceResult(), private=None) + return SuccessData( + public=UnsafeBlowOutInPlaceResult(), + ) class UnsafeBlowOutInPlace( 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 33d4baebeea..ff749711cfb 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 @@ -42,7 +42,7 @@ class UnsafeDropTipInPlaceResult(BaseModel): class UnsafeDropTipInPlaceImplementation( AbstractCommandImpl[ - UnsafeDropTipInPlaceParams, SuccessData[UnsafeDropTipInPlaceResult, None] + UnsafeDropTipInPlaceParams, SuccessData[UnsafeDropTipInPlaceResult] ] ): """Unsafe drop tip in place command implementation.""" @@ -60,7 +60,7 @@ def __init__( async def execute( self, params: UnsafeDropTipInPlaceParams - ) -> SuccessData[UnsafeDropTipInPlaceResult, None]: + ) -> SuccessData[UnsafeDropTipInPlaceResult]: """Drop a tip using the requested pipette, even if the plunger position is not known.""" ot3_hardware_api = ensure_ot3_hardware(self._hardware_api) pipette_location = self._state_view.motion.get_pipette_location( @@ -79,7 +79,7 @@ async def execute( ) return SuccessData( - public=UnsafeDropTipInPlaceResult(), private=None, state_update=state_update + public=UnsafeDropTipInPlaceResult(), state_update=state_update ) diff --git a/api/src/opentrons/protocol_engine/commands/unsafe/unsafe_engage_axes.py b/api/src/opentrons/protocol_engine/commands/unsafe/unsafe_engage_axes.py index 500347d84b0..02bc22b0396 100644 --- a/api/src/opentrons/protocol_engine/commands/unsafe/unsafe_engage_axes.py +++ b/api/src/opentrons/protocol_engine/commands/unsafe/unsafe_engage_axes.py @@ -32,7 +32,7 @@ class UnsafeEngageAxesResult(BaseModel): class UnsafeEngageAxesImplementation( AbstractCommandImpl[ UnsafeEngageAxesParams, - SuccessData[UnsafeEngageAxesResult, None], + SuccessData[UnsafeEngageAxesResult], ] ): """Enable axes command implementation.""" @@ -48,7 +48,7 @@ def __init__( async def execute( self, params: UnsafeEngageAxesParams - ) -> SuccessData[UnsafeEngageAxesResult, None]: + ) -> SuccessData[UnsafeEngageAxesResult]: """Enable exes.""" ot3_hardware_api = ensure_ot3_hardware(self._hardware_api) await ot3_hardware_api.engage_axes( @@ -57,7 +57,9 @@ async def execute( for axis in params.axes ] ) - return SuccessData(public=UnsafeEngageAxesResult(), private=None) + return SuccessData( + public=UnsafeEngageAxesResult(), + ) class UnsafeEngageAxes( 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 index e64beaa7ea7..9674513d749 100644 --- a/api/src/opentrons/protocol_engine/commands/unsafe/unsafe_ungrip_labware.py +++ b/api/src/opentrons/protocol_engine/commands/unsafe/unsafe_ungrip_labware.py @@ -27,7 +27,7 @@ class UnsafeUngripLabwareResult(BaseModel): class UnsafeUngripLabwareImplementation( AbstractCommandImpl[ UnsafeUngripLabwareParams, - SuccessData[UnsafeUngripLabwareResult, None], + SuccessData[UnsafeUngripLabwareResult], ] ): """Ungrip labware command implementation.""" @@ -41,13 +41,15 @@ def __init__( async def execute( self, params: UnsafeUngripLabwareParams - ) -> SuccessData[UnsafeUngripLabwareResult, None]: + ) -> SuccessData[UnsafeUngripLabwareResult]: """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) + return SuccessData( + public=UnsafeUngripLabwareResult(), + ) class UnsafeUngripLabware( diff --git a/api/src/opentrons/protocol_engine/commands/unsafe/update_position_estimators.py b/api/src/opentrons/protocol_engine/commands/unsafe/update_position_estimators.py index 96be2eb8551..cf5454db332 100644 --- a/api/src/opentrons/protocol_engine/commands/unsafe/update_position_estimators.py +++ b/api/src/opentrons/protocol_engine/commands/unsafe/update_position_estimators.py @@ -34,7 +34,7 @@ class UpdatePositionEstimatorsResult(BaseModel): class UpdatePositionEstimatorsImplementation( AbstractCommandImpl[ UpdatePositionEstimatorsParams, - SuccessData[UpdatePositionEstimatorsResult, None], + SuccessData[UpdatePositionEstimatorsResult], ] ): """Update position estimators command implementation.""" @@ -50,7 +50,7 @@ def __init__( async def execute( self, params: UpdatePositionEstimatorsParams - ) -> SuccessData[UpdatePositionEstimatorsResult, None]: + ) -> SuccessData[UpdatePositionEstimatorsResult]: """Update axis position estimators from their encoders.""" ot3_hardware_api = ensure_ot3_hardware(self._hardware_api) await ot3_hardware_api.update_axis_position_estimations( @@ -59,7 +59,9 @@ async def execute( for axis in params.axes ] ) - return SuccessData(public=UpdatePositionEstimatorsResult(), private=None) + return SuccessData( + public=UpdatePositionEstimatorsResult(), + ) class UpdatePositionEstimators( diff --git a/api/src/opentrons/protocol_engine/commands/verify_tip_presence.py b/api/src/opentrons/protocol_engine/commands/verify_tip_presence.py index 9816e03cf33..e0412022e85 100644 --- a/api/src/opentrons/protocol_engine/commands/verify_tip_presence.py +++ b/api/src/opentrons/protocol_engine/commands/verify_tip_presence.py @@ -36,9 +36,7 @@ class VerifyTipPresenceResult(BaseModel): class VerifyTipPresenceImplementation( - AbstractCommandImpl[ - VerifyTipPresenceParams, SuccessData[VerifyTipPresenceResult, None] - ] + AbstractCommandImpl[VerifyTipPresenceParams, SuccessData[VerifyTipPresenceResult]] ): """VerifyTipPresence command implementation.""" @@ -51,7 +49,7 @@ def __init__( async def execute( self, params: VerifyTipPresenceParams - ) -> SuccessData[VerifyTipPresenceResult, None]: + ) -> SuccessData[VerifyTipPresenceResult]: """Verify if tip presence is as expected for the requested pipette.""" pipette_id = params.pipetteId expected_state = params.expectedState @@ -67,7 +65,9 @@ async def execute( follow_singular_sensor=follow_singular_sensor, ) - return SuccessData(public=VerifyTipPresenceResult(), private=None) + return SuccessData( + public=VerifyTipPresenceResult(), + ) class VerifyTipPresence( diff --git a/api/src/opentrons/protocol_engine/commands/wait_for_duration.py b/api/src/opentrons/protocol_engine/commands/wait_for_duration.py index df1eae28aa4..04f8693386e 100644 --- a/api/src/opentrons/protocol_engine/commands/wait_for_duration.py +++ b/api/src/opentrons/protocol_engine/commands/wait_for_duration.py @@ -29,7 +29,7 @@ class WaitForDurationResult(BaseModel): class WaitForDurationImplementation( - AbstractCommandImpl[WaitForDurationParams, SuccessData[WaitForDurationResult, None]] + AbstractCommandImpl[WaitForDurationParams, SuccessData[WaitForDurationResult]] ): """Wait for duration command implementation.""" @@ -38,10 +38,12 @@ def __init__(self, run_control: RunControlHandler, **kwargs: object) -> None: async def execute( self, params: WaitForDurationParams - ) -> SuccessData[WaitForDurationResult, None]: + ) -> SuccessData[WaitForDurationResult]: """Wait for a duration of time.""" await self._run_control.wait_for_duration(params.seconds) - return SuccessData(public=WaitForDurationResult(), private=None) + return SuccessData( + public=WaitForDurationResult(), + ) class WaitForDuration( diff --git a/api/src/opentrons/protocol_engine/commands/wait_for_resume.py b/api/src/opentrons/protocol_engine/commands/wait_for_resume.py index c6036f852e2..f5066d52521 100644 --- a/api/src/opentrons/protocol_engine/commands/wait_for_resume.py +++ b/api/src/opentrons/protocol_engine/commands/wait_for_resume.py @@ -30,7 +30,7 @@ class WaitForResumeResult(BaseModel): class WaitForResumeImplementation( - AbstractCommandImpl[WaitForResumeParams, SuccessData[WaitForResumeResult, None]] + AbstractCommandImpl[WaitForResumeParams, SuccessData[WaitForResumeResult]] ): """Wait for resume command implementation.""" @@ -39,10 +39,12 @@ def __init__(self, run_control: RunControlHandler, **kwargs: object) -> None: async def execute( self, params: WaitForResumeParams - ) -> SuccessData[WaitForResumeResult, None]: + ) -> SuccessData[WaitForResumeResult]: """Dispatch a PauseAction to the store to pause the protocol.""" await self._run_control.wait_for_resume() - return SuccessData(public=WaitForResumeResult(), private=None) + return SuccessData( + public=WaitForResumeResult(), + ) class WaitForResume( diff --git a/api/src/opentrons/protocol_engine/execution/command_executor.py b/api/src/opentrons/protocol_engine/execution/command_executor.py index e534001ef12..b6c686e0b11 100644 --- a/api/src/opentrons/protocol_engine/execution/command_executor.py +++ b/api/src/opentrons/protocol_engine/execution/command_executor.py @@ -192,7 +192,6 @@ async def execute(self, command_id: str) -> None: self._action_dispatcher.dispatch( SucceedCommandAction( command=succeeded_command, - private_result=result.private, state_update=result.state_update, ), ) diff --git a/api/src/opentrons/protocol_runner/legacy_command_mapper.py b/api/src/opentrons/protocol_runner/legacy_command_mapper.py index 2a1ef28a359..27b1c7ea331 100644 --- a/api/src/opentrons/protocol_runner/legacy_command_mapper.py +++ b/api/src/opentrons/protocol_runner/legacy_command_mapper.py @@ -271,7 +271,6 @@ def map_command( # noqa: C901 results.append( pe_actions.SucceedCommandAction( completed_command, - private_result=None, state_update=StateUpdate(), ) ) @@ -689,7 +688,6 @@ def _map_labware_load( succeed_action = pe_actions.SucceedCommandAction( command=succeeded_command, - private_result=None, state_update=state_update, ) @@ -764,7 +762,6 @@ def _map_instrument_load( succeed_action = pe_actions.SucceedCommandAction( command=succeeded_command, - private_result=None, state_update=state_update, ) @@ -830,7 +827,7 @@ def _map_module_load( started_at=succeeded_command.startedAt, # type: ignore[arg-type] ) succeed_action = pe_actions.SucceedCommandAction( - command=succeeded_command, private_result=None, state_update=StateUpdate() + command=succeeded_command, state_update=StateUpdate() ) self._command_count["LOAD_MODULE"] = count + 1 diff --git a/api/tests/opentrons/protocol_engine/commands/calibration/test_calibrate_gripper.py b/api/tests/opentrons/protocol_engine/commands/calibration/test_calibrate_gripper.py index 6ecf768c4eb..4145e1f0b5c 100644 --- a/api/tests/opentrons/protocol_engine/commands/calibration/test_calibrate_gripper.py +++ b/api/tests/opentrons/protocol_engine/commands/calibration/test_calibrate_gripper.py @@ -72,7 +72,6 @@ async def test_calibrate_gripper( result = await subject.execute(params) assert result == SuccessData( public=CalibrateGripperResult(jawOffset=Vec3f(x=1.1, y=2.2, z=3.3)), - private=None, ) diff --git a/api/tests/opentrons/protocol_engine/commands/calibration/test_calibrate_module.py b/api/tests/opentrons/protocol_engine/commands/calibration/test_calibrate_module.py index 0226453c72e..0713bfa37d1 100644 --- a/api/tests/opentrons/protocol_engine/commands/calibration/test_calibrate_module.py +++ b/api/tests/opentrons/protocol_engine/commands/calibration/test_calibrate_module.py @@ -95,7 +95,6 @@ async def test_calibrate_module_implementation( ), location=location, ), - private=None, ) diff --git a/api/tests/opentrons/protocol_engine/commands/calibration/test_calibrate_pipette.py b/api/tests/opentrons/protocol_engine/commands/calibration/test_calibrate_pipette.py index ba949f0e2df..073db3bf295 100644 --- a/api/tests/opentrons/protocol_engine/commands/calibration/test_calibrate_pipette.py +++ b/api/tests/opentrons/protocol_engine/commands/calibration/test_calibrate_pipette.py @@ -64,7 +64,6 @@ async def test_calibrate_pipette_implementation( public=CalibratePipetteResult( pipetteOffset=InstrumentOffsetVector(x=3, y=4, z=6) ), - private=None, ) diff --git a/api/tests/opentrons/protocol_engine/commands/calibration/test_move_to_maintenance_position.py b/api/tests/opentrons/protocol_engine/commands/calibration/test_move_to_maintenance_position.py index ca8bb9de5bd..7051d1e44fc 100644 --- a/api/tests/opentrons/protocol_engine/commands/calibration/test_move_to_maintenance_position.py +++ b/api/tests/opentrons/protocol_engine/commands/calibration/test_move_to_maintenance_position.py @@ -56,7 +56,9 @@ async def test_calibration_move_to_location_implementation_for_attach_instrument decoy.when(ot3_hardware_api.get_instrument_max_height(Mount.LEFT)).then_return(300) result = await subject.execute(params=params) - assert result == SuccessData(public=MoveToMaintenancePositionResult(), private=None) + assert result == SuccessData( + public=MoveToMaintenancePositionResult(), + ) hw_mount = mount_type.to_hw_mount() decoy.verify( @@ -100,7 +102,9 @@ async def test_calibration_move_to_location_implementation_for_attach_plate( decoy.when(ot3_hardware_api.get_instrument_max_height(Mount.LEFT)).then_return(300) result = await subject.execute(params=params) - assert result == SuccessData(public=MoveToMaintenancePositionResult(), private=None) + assert result == SuccessData( + public=MoveToMaintenancePositionResult(), + ) decoy.verify( await ot3_hardware_api.prepare_for_mount_movement(Mount.LEFT), @@ -150,7 +154,9 @@ async def test_calibration_move_to_location_implementation_for_gripper( decoy.when(ot3_hardware_api.get_instrument_max_height(Mount.LEFT)).then_return(300) result = await subject.execute(params=params) - assert result == SuccessData(public=MoveToMaintenancePositionResult(), private=None) + assert result == SuccessData( + public=MoveToMaintenancePositionResult(), + ) decoy.verify( await ot3_hardware_api.prepare_for_mount_movement(Mount.LEFT), diff --git a/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_close_labware_latch.py b/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_close_labware_latch.py index fbd1fadcc23..d481ef33b9b 100644 --- a/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_close_labware_latch.py +++ b/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_close_labware_latch.py @@ -45,7 +45,7 @@ async def test_close_labware_latch( result = await subject.execute(data) decoy.verify(await heater_shaker_hardware.close_labware_latch(), times=1) assert result == SuccessData( - public=heater_shaker.CloseLabwareLatchResult(), private=None + public=heater_shaker.CloseLabwareLatchResult(), ) @@ -77,5 +77,5 @@ async def test_close_labware_latch_virtual( result = await subject.execute(data) assert result == SuccessData( - public=heater_shaker.CloseLabwareLatchResult(), private=None + public=heater_shaker.CloseLabwareLatchResult(), ) diff --git a/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_deactivate_heater.py b/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_deactivate_heater.py index 5e8a65a06e8..6ce4336c9a3 100644 --- a/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_deactivate_heater.py +++ b/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_deactivate_heater.py @@ -46,5 +46,5 @@ async def test_deactivate_heater( result = await subject.execute(data) decoy.verify(await hs_hardware.deactivate_heater(), times=1) assert result == SuccessData( - public=heater_shaker.DeactivateHeaterResult(), private=None + public=heater_shaker.DeactivateHeaterResult(), ) diff --git a/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_deactivate_shaker.py b/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_deactivate_shaker.py index db5e1aba138..466fa79dcc5 100644 --- a/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_deactivate_shaker.py +++ b/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_deactivate_shaker.py @@ -46,7 +46,7 @@ async def test_deactivate_shaker( result = await subject.execute(data) decoy.verify(await hs_hardware.deactivate_shaker(), times=1) assert result == SuccessData( - public=heater_shaker.DeactivateShakerResult(), private=None + public=heater_shaker.DeactivateShakerResult(), ) @@ -78,5 +78,5 @@ async def test_deactivate_shaker_virtual( result = await subject.execute(data) assert result == SuccessData( - public=heater_shaker.DeactivateShakerResult(), private=None + public=heater_shaker.DeactivateShakerResult(), ) diff --git a/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_open_labware_latch.py b/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_open_labware_latch.py index 6a5e7e97db2..4b122f2d7e2 100644 --- a/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_open_labware_latch.py +++ b/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_open_labware_latch.py @@ -81,7 +81,6 @@ async def test_open_labware_latch( public=heater_shaker.OpenLabwareLatchResult( pipetteRetracted=expect_pipette_retracted ), - private=None, state_update=update_types.StateUpdate(pipette_location=update_types.CLEAR) if expect_pipette_retracted else update_types.StateUpdate(), diff --git a/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_set_and_wait_for_shake_speed.py b/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_set_and_wait_for_shake_speed.py index 005f46f89cb..9db4bb27d00 100644 --- a/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_set_and_wait_for_shake_speed.py +++ b/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_set_and_wait_for_shake_speed.py @@ -84,7 +84,6 @@ async def test_set_and_wait_for_shake_speed( public=heater_shaker.SetAndWaitForShakeSpeedResult( pipetteRetracted=expect_pipette_retracted ), - private=None, state_update=update_types.StateUpdate(pipette_location=update_types.CLEAR) if expect_pipette_retracted else update_types.StateUpdate(), diff --git a/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_set_target_temperature.py b/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_set_target_temperature.py index 51df5f560b3..977a76bfdf2 100644 --- a/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_set_target_temperature.py +++ b/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_set_target_temperature.py @@ -55,5 +55,5 @@ async def test_set_target_temperature( result = await subject.execute(data) decoy.verify(await hs_hardware.start_set_temperature(celsius=45.6), times=1) assert result == SuccessData( - public=heater_shaker.SetTargetTemperatureResult(), private=None + public=heater_shaker.SetTargetTemperatureResult(), ) diff --git a/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_wait_for_temperature.py b/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_wait_for_temperature.py index c256a480f16..f9804b90944 100644 --- a/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_wait_for_temperature.py +++ b/api/tests/opentrons/protocol_engine/commands/heater_shaker/test_wait_for_temperature.py @@ -50,5 +50,5 @@ async def test_wait_for_temperature( await hs_hardware.await_temperature(awaiting_temperature=123.45), times=1 ) assert result == SuccessData( - public=heater_shaker.WaitForTemperatureResult(), private=None + public=heater_shaker.WaitForTemperatureResult(), ) diff --git a/api/tests/opentrons/protocol_engine/commands/magnetic_module/test_disengage.py b/api/tests/opentrons/protocol_engine/commands/magnetic_module/test_disengage.py index e1103518178..03d76db9e03 100644 --- a/api/tests/opentrons/protocol_engine/commands/magnetic_module/test_disengage.py +++ b/api/tests/opentrons/protocol_engine/commands/magnetic_module/test_disengage.py @@ -46,4 +46,4 @@ async def test_magnetic_module_disengage_implementation( result = await subject.execute(params=params) decoy.verify(await magnetic_module_hw.deactivate(), times=1) - assert result == SuccessData(public=DisengageResult(), private=None) + assert result == SuccessData(public=DisengageResult()) diff --git a/api/tests/opentrons/protocol_engine/commands/magnetic_module/test_engage.py b/api/tests/opentrons/protocol_engine/commands/magnetic_module/test_engage.py index 5feddee3e2e..e1f14cb3f24 100644 --- a/api/tests/opentrons/protocol_engine/commands/magnetic_module/test_engage.py +++ b/api/tests/opentrons/protocol_engine/commands/magnetic_module/test_engage.py @@ -51,4 +51,4 @@ async def test_magnetic_module_engage_implementation( result = await subject.execute(params=params) decoy.verify(await magnetic_module_hw.engage(9001), times=1) - assert result == SuccessData(public=EngageResult(), private=None) + assert result == SuccessData(public=EngageResult()) diff --git a/api/tests/opentrons/protocol_engine/commands/temperature_module/test_deactivate.py b/api/tests/opentrons/protocol_engine/commands/temperature_module/test_deactivate.py index dfe821c6bbb..91dc274f14c 100644 --- a/api/tests/opentrons/protocol_engine/commands/temperature_module/test_deactivate.py +++ b/api/tests/opentrons/protocol_engine/commands/temperature_module/test_deactivate.py @@ -45,5 +45,5 @@ async def test_await_temperature( result = await subject.execute(data) decoy.verify(await tempdeck_hardware.deactivate(), times=1) assert result == SuccessData( - public=temperature_module.DeactivateTemperatureResult(), private=None + public=temperature_module.DeactivateTemperatureResult(), ) diff --git a/api/tests/opentrons/protocol_engine/commands/temperature_module/test_set_target_temperature.py b/api/tests/opentrons/protocol_engine/commands/temperature_module/test_set_target_temperature.py index 0af71263e96..0bbd31f7a1d 100644 --- a/api/tests/opentrons/protocol_engine/commands/temperature_module/test_set_target_temperature.py +++ b/api/tests/opentrons/protocol_engine/commands/temperature_module/test_set_target_temperature.py @@ -52,5 +52,4 @@ async def test_set_target_temperature( decoy.verify(await tempdeck_hardware.start_set_temperature(celsius=1), times=1) assert result == SuccessData( public=temperature_module.SetTargetTemperatureResult(targetTemperature=1), - private=None, ) diff --git a/api/tests/opentrons/protocol_engine/commands/temperature_module/test_wait_for_temperature.py b/api/tests/opentrons/protocol_engine/commands/temperature_module/test_wait_for_temperature.py index fb9456321b9..99e76f68774 100644 --- a/api/tests/opentrons/protocol_engine/commands/temperature_module/test_wait_for_temperature.py +++ b/api/tests/opentrons/protocol_engine/commands/temperature_module/test_wait_for_temperature.py @@ -48,7 +48,7 @@ async def test_wait_for_temperature( await tempdeck_hardware.await_temperature(awaiting_temperature=123), times=1 ) assert result == SuccessData( - public=temperature_module.WaitForTemperatureResult(), private=None + public=temperature_module.WaitForTemperatureResult(), ) @@ -90,5 +90,5 @@ async def test_wait_for_temperature_requested_celsius( await tempdeck_hardware.await_temperature(awaiting_temperature=12), times=1 ) assert result == SuccessData( - public=temperature_module.WaitForTemperatureResult(), private=None + public=temperature_module.WaitForTemperatureResult(), ) diff --git a/api/tests/opentrons/protocol_engine/commands/test_aspirate.py b/api/tests/opentrons/protocol_engine/commands/test_aspirate.py index ccaac0b6748..102114b1cc8 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_aspirate.py +++ b/api/tests/opentrons/protocol_engine/commands/test_aspirate.py @@ -103,7 +103,6 @@ async def test_aspirate_implementation_no_prep( assert result == SuccessData( public=AspirateResult(volume=50, position=DeckPoint(x=1, y=2, z=3)), - private=None, state_update=update_types.StateUpdate( pipette_location=update_types.PipetteLocationUpdate( pipette_id="abc", @@ -177,7 +176,6 @@ async def test_aspirate_implementation_with_prep( assert result == SuccessData( public=AspirateResult(volume=50, position=DeckPoint(x=1, y=2, z=3)), - private=None, state_update=update_types.StateUpdate( pipette_location=update_types.PipetteLocationUpdate( pipette_id="abc", @@ -383,7 +381,6 @@ async def test_aspirate_implementation_meniscus( assert result == SuccessData( public=AspirateResult(volume=50, position=DeckPoint(x=1, y=2, z=3)), - private=None, state_update=update_types.StateUpdate( pipette_location=update_types.PipetteLocationUpdate( pipette_id="abc", diff --git a/api/tests/opentrons/protocol_engine/commands/test_aspirate_in_place.py b/api/tests/opentrons/protocol_engine/commands/test_aspirate_in_place.py index f639033d157..85d8f4fab84 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_aspirate_in_place.py +++ b/api/tests/opentrons/protocol_engine/commands/test_aspirate_in_place.py @@ -123,7 +123,6 @@ async def test_aspirate_in_place_implementation( if isinstance(location, CurrentWell): assert result == SuccessData( public=AspirateInPlaceResult(volume=123), - private=None, state_update=update_types.StateUpdate( liquid_operated=update_types.LiquidOperatedUpdate( labware_id=stateupdateLabware, @@ -135,7 +134,6 @@ async def test_aspirate_in_place_implementation( else: assert result == SuccessData( public=AspirateInPlaceResult(volume=123), - private=None, ) diff --git a/api/tests/opentrons/protocol_engine/commands/test_blow_out.py b/api/tests/opentrons/protocol_engine/commands/test_blow_out.py index 93504c6904d..3e9aa6d82b8 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_blow_out.py +++ b/api/tests/opentrons/protocol_engine/commands/test_blow_out.py @@ -76,7 +76,6 @@ async def test_blow_out_implementation( assert result == SuccessData( public=BlowOutResult(position=DeckPoint(x=1, y=2, z=3)), - private=None, state_update=update_types.StateUpdate( pipette_location=update_types.PipetteLocationUpdate( pipette_id="pipette-id", diff --git a/api/tests/opentrons/protocol_engine/commands/test_blow_out_in_place.py b/api/tests/opentrons/protocol_engine/commands/test_blow_out_in_place.py index e2735709253..49eced0670b 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_blow_out_in_place.py +++ b/api/tests/opentrons/protocol_engine/commands/test_blow_out_in_place.py @@ -52,7 +52,7 @@ async def test_blow_out_in_place_implementation( result = await subject.execute(data) - assert result == SuccessData(public=BlowOutInPlaceResult(), private=None) + assert result == SuccessData(public=BlowOutInPlaceResult()) decoy.verify( await pipetting.blow_out_in_place(pipette_id="pipette-id", flow_rate=1.234) diff --git a/api/tests/opentrons/protocol_engine/commands/test_comment.py b/api/tests/opentrons/protocol_engine/commands/test_comment.py index 4010f2ec56c..9b62afa7fe3 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_comment.py +++ b/api/tests/opentrons/protocol_engine/commands/test_comment.py @@ -15,4 +15,4 @@ async def test_comment_implementation() -> None: result = await subject.execute(data) - assert result == SuccessData(public=CommentResult(), private=None) + assert result == SuccessData(public=CommentResult()) 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 59e65ede181..d237c9e6090 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 @@ -84,7 +84,6 @@ async def test_configure_for_volume_implementation( assert result == SuccessData( public=ConfigureForVolumeResult(), - private=None, 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 e72b659a83c..cfe6f80c3a8 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 @@ -145,7 +145,6 @@ async def test_configure_nozzle_layout_implementation( assert result == SuccessData( public=ConfigureNozzleLayoutResult(), - private=None, state_update=StateUpdate( pipette_nozzle_map=PipetteNozzleMapUpdate( pipette_id="pipette-id", diff --git a/api/tests/opentrons/protocol_engine/commands/test_dispense.py b/api/tests/opentrons/protocol_engine/commands/test_dispense.py index 106bf197e11..a996e6915e8 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_dispense.py +++ b/api/tests/opentrons/protocol_engine/commands/test_dispense.py @@ -82,7 +82,6 @@ async def test_dispense_implementation( assert result == SuccessData( public=DispenseResult(volume=42, position=DeckPoint(x=1, y=2, z=3)), - private=None, state_update=update_types.StateUpdate( pipette_location=update_types.PipetteLocationUpdate( pipette_id="pipette-id-abc123", diff --git a/api/tests/opentrons/protocol_engine/commands/test_dispense_in_place.py b/api/tests/opentrons/protocol_engine/commands/test_dispense_in_place.py index 56090ec63a7..5e432bef80a 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_dispense_in_place.py +++ b/api/tests/opentrons/protocol_engine/commands/test_dispense_in_place.py @@ -85,7 +85,6 @@ async def test_dispense_in_place_implementation( if isinstance(location, CurrentWell): assert result == SuccessData( public=DispenseInPlaceResult(volume=42), - private=None, state_update=update_types.StateUpdate( liquid_operated=update_types.LiquidOperatedUpdate( labware_id=stateupdateLabware, @@ -97,7 +96,6 @@ async def test_dispense_in_place_implementation( else: assert result == SuccessData( public=DispenseInPlaceResult(volume=42), - private=None, ) 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 8ba2c9c1d97..1d113c999c3 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_drop_tip.py +++ b/api/tests/opentrons/protocol_engine/commands/test_drop_tip.py @@ -129,7 +129,6 @@ async def test_drop_tip_implementation( assert result == SuccessData( public=DropTipResult(position=DeckPoint(x=111, y=222, z=333)), - private=None, state_update=update_types.StateUpdate( pipette_location=update_types.PipetteLocationUpdate( pipette_id="abc", @@ -207,7 +206,6 @@ async def test_drop_tip_with_alternating_locations( result = await subject.execute(params) assert result == SuccessData( public=DropTipResult(position=DeckPoint(x=111, y=222, z=333)), - private=None, state_update=update_types.StateUpdate( pipette_location=update_types.PipetteLocationUpdate( pipette_id="abc", 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 fde82626969..292aa532879 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 @@ -49,7 +49,6 @@ async def test_success( assert result == SuccessData( public=DropTipInPlaceResult(), - private=None, state_update=StateUpdate( pipette_tip_state=PipetteTipStateUpdate(pipette_id="abc", tip_geometry=None) ), diff --git a/api/tests/opentrons/protocol_engine/commands/test_get_tip_presence.py b/api/tests/opentrons/protocol_engine/commands/test_get_tip_presence.py index a1d0230f74a..99e5b231e1a 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_get_tip_presence.py +++ b/api/tests/opentrons/protocol_engine/commands/test_get_tip_presence.py @@ -41,5 +41,5 @@ async def test_get_tip_presence_implementation( result = await subject.execute(data) assert result == SuccessData( - public=GetTipPresenceResult(status=status), private=None + public=GetTipPresenceResult(status=status), ) diff --git a/api/tests/opentrons/protocol_engine/commands/test_home.py b/api/tests/opentrons/protocol_engine/commands/test_home.py index 5a9446d6308..b3578c400e5 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_home.py +++ b/api/tests/opentrons/protocol_engine/commands/test_home.py @@ -24,7 +24,6 @@ async def test_home_implementation(decoy: Decoy, movement: MovementHandler) -> N assert result == SuccessData( public=HomeResult(), - private=None, state_update=update_types.StateUpdate(pipette_location=update_types.CLEAR), ) decoy.verify(await movement.home(axes=[MotorAxis.X, MotorAxis.Y])) @@ -40,7 +39,6 @@ async def test_home_all_implementation(decoy: Decoy, movement: MovementHandler) assert result == SuccessData( public=HomeResult(), - private=None, state_update=update_types.StateUpdate(pipette_location=update_types.CLEAR), ) decoy.verify(await movement.home(axes=None)) @@ -63,7 +61,6 @@ async def test_home_with_invalid_position( result = await subject.execute(data) assert result == SuccessData( public=HomeResult(), - private=None, state_update=update_types.StateUpdate(pipette_location=update_types.CLEAR), ) @@ -76,7 +73,6 @@ async def test_home_with_invalid_position( result = await subject.execute(data) assert result == SuccessData( public=HomeResult(), - private=None, state_update=update_types.StateUpdate(pipette_location=update_types.CLEAR), ) 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 5593ac9ca66..2cada4f3e24 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_liquid_probe.py +++ b/api/tests/opentrons/protocol_engine/commands/test_liquid_probe.py @@ -154,7 +154,6 @@ async def test_liquid_probe_implementation( assert type(result.public) is result_type # Pydantic v1 only compares the fields. assert result == SuccessData( public=result_type(z_position=15.0, position=DeckPoint(x=1, y=2, z=3)), - private=None, state_update=update_types.StateUpdate( pipette_location=update_types.PipetteLocationUpdate( pipette_id="abc", @@ -255,7 +254,6 @@ async def test_liquid_not_found_error( z_position=None, position=DeckPoint(x=position.x, y=position.y, z=position.z), ), - private=None, state_update=expected_state_update, ) 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 85cb7794d76..3873f9854b4 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_load_labware.py +++ b/api/tests/opentrons/protocol_engine/commands/test_load_labware.py @@ -94,7 +94,6 @@ async def test_load_labware_implementation( definition=well_plate_def, offsetId="labware-offset-id", ), - private=None, state_update=StateUpdate( loaded_labware=LoadedLabwareUpdate( labware_id="labware-id", @@ -178,7 +177,6 @@ async def test_load_labware_on_labware( definition=well_plate_def, offsetId="labware-offset-id", ), - private=None, state_update=StateUpdate( loaded_labware=LoadedLabwareUpdate( labware_id="labware-id", diff --git a/api/tests/opentrons/protocol_engine/commands/test_load_liquid.py b/api/tests/opentrons/protocol_engine/commands/test_load_liquid.py index d8641b1eb4b..dbc584ae2a3 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_load_liquid.py +++ b/api/tests/opentrons/protocol_engine/commands/test_load_liquid.py @@ -48,7 +48,6 @@ async def test_load_liquid_implementation( assert result == SuccessData( public=LoadLiquidResult(), - private=None, state_update=update_types.StateUpdate( liquid_loaded=update_types.LiquidLoadedUpdate( labware_id="labware-id", diff --git a/api/tests/opentrons/protocol_engine/commands/test_load_module.py b/api/tests/opentrons/protocol_engine/commands/test_load_module.py index 9479a724110..ce68f5c9f8a 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_load_module.py +++ b/api/tests/opentrons/protocol_engine/commands/test_load_module.py @@ -92,7 +92,6 @@ async def test_load_module_implementation( model=ModuleModel.TEMPERATURE_MODULE_V2, definition=tempdeck_v2_def, ), - private=None, ) @@ -148,7 +147,6 @@ async def test_load_module_implementation_mag_block( model=ModuleModel.MAGNETIC_BLOCK_V1, definition=mag_block_v1_def, ), - private=None, ) @@ -204,7 +202,6 @@ async def test_load_module_implementation_abs_reader( model=ModuleModel.ABSORBANCE_READER_V1, definition=abs_reader_v1_def, ), - private=None, ) 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 4d757f49a54..44a9db61863 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_load_pipette.py +++ b/api/tests/opentrons/protocol_engine/commands/test_load_pipette.py @@ -89,7 +89,6 @@ async def test_load_pipette_implementation( assert result == SuccessData( public=LoadPipetteResult(pipetteId="some id"), - private=None, state_update=StateUpdate( loaded_pipette=LoadPipetteUpdate( pipette_name=PipetteNameType.P300_SINGLE, @@ -155,7 +154,6 @@ async def test_load_pipette_implementation_96_channel( assert result == SuccessData( public=LoadPipetteResult(pipetteId="pipette-id"), - private=None, state_update=StateUpdate( loaded_pipette=LoadPipetteUpdate( pipette_name=PipetteNameType.P1000_96, 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 aa02d85349a..a946eccf05d 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_move_labware.py +++ b/api/tests/opentrons/protocol_engine/commands/test_move_labware.py @@ -126,7 +126,6 @@ async def test_manual_move_labware_implementation( public=MoveLabwareResult( offsetId="wowzers-a-new-offset-id", ), - private=None, state_update=update_types.StateUpdate( labware_location=update_types.LabwareLocationUpdate( labware_id="my-cool-labware-id", @@ -192,7 +191,6 @@ async def test_move_labware_implementation_on_labware( public=MoveLabwareResult( offsetId="wowzers-a-new-offset-id", ), - private=None, state_update=update_types.StateUpdate( labware_location=update_types.LabwareLocationUpdate( labware_id="my-cool-labware-id", @@ -280,7 +278,6 @@ async def test_gripper_move_labware_implementation( public=MoveLabwareResult( offsetId="wowzers-a-new-offset-id", ), - private=None, state_update=update_types.StateUpdate( pipette_location=update_types.CLEAR, labware_location=update_types.LabwareLocationUpdate( @@ -516,7 +513,6 @@ async def test_gripper_move_to_waste_chute_implementation( public=MoveLabwareResult( offsetId="wowzers-a-new-offset-id", ), - private=None, state_update=update_types.StateUpdate( pipette_location=update_types.CLEAR, labware_location=update_types.LabwareLocationUpdate( diff --git a/api/tests/opentrons/protocol_engine/commands/test_move_relative.py b/api/tests/opentrons/protocol_engine/commands/test_move_relative.py index ee874206f92..01522e4dc45 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_move_relative.py +++ b/api/tests/opentrons/protocol_engine/commands/test_move_relative.py @@ -38,7 +38,6 @@ async def test_move_relative_implementation( assert result == SuccessData( public=MoveRelativeResult(position=DeckPoint(x=1, y=2, z=3)), - private=None, state_update=update_types.StateUpdate( pipette_location=update_types.PipetteLocationUpdate( pipette_id="pipette-id", diff --git a/api/tests/opentrons/protocol_engine/commands/test_move_to_addressable_area.py b/api/tests/opentrons/protocol_engine/commands/test_move_to_addressable_area.py index 2b64f617b9f..6925fd7cce4 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_move_to_addressable_area.py +++ b/api/tests/opentrons/protocol_engine/commands/test_move_to_addressable_area.py @@ -75,7 +75,6 @@ async def test_move_to_addressable_area_implementation_non_gen1( assert result == SuccessData( public=MoveToAddressableAreaResult(position=DeckPoint(x=9, y=8, z=7)), - private=None, state_update=update_types.StateUpdate( pipette_location=update_types.PipetteLocationUpdate( pipette_id="abc", @@ -139,7 +138,6 @@ async def test_move_to_addressable_area_implementation_with_gen1( assert result == SuccessData( public=MoveToAddressableAreaResult(position=DeckPoint(x=9, y=8, z=7)), - private=None, state_update=update_types.StateUpdate( pipette_location=update_types.PipetteLocationUpdate( pipette_id="abc", diff --git a/api/tests/opentrons/protocol_engine/commands/test_move_to_addressable_area_for_drop_tip.py b/api/tests/opentrons/protocol_engine/commands/test_move_to_addressable_area_for_drop_tip.py index ebcb3db1243..faca36d8121 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_move_to_addressable_area_for_drop_tip.py +++ b/api/tests/opentrons/protocol_engine/commands/test_move_to_addressable_area_for_drop_tip.py @@ -58,7 +58,6 @@ async def test_move_to_addressable_area_for_drop_tip_implementation( assert result == SuccessData( public=MoveToAddressableAreaForDropTipResult(position=DeckPoint(x=9, y=8, z=7)), - private=None, state_update=update_types.StateUpdate( pipette_location=update_types.PipetteLocationUpdate( pipette_id="abc", diff --git a/api/tests/opentrons/protocol_engine/commands/test_move_to_coordinates.py b/api/tests/opentrons/protocol_engine/commands/test_move_to_coordinates.py index 81d74657953..2e3ada1d3d3 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_move_to_coordinates.py +++ b/api/tests/opentrons/protocol_engine/commands/test_move_to_coordinates.py @@ -58,7 +58,6 @@ async def test_move_to_coordinates_implementation( assert result == SuccessData( public=MoveToCoordinatesResult(position=DeckPoint(x=4.44, y=5.55, z=6.66)), - private=None, state_update=update_types.StateUpdate( pipette_location=update_types.PipetteLocationUpdate( pipette_id="pipette-id", diff --git a/api/tests/opentrons/protocol_engine/commands/test_move_to_well.py b/api/tests/opentrons/protocol_engine/commands/test_move_to_well.py index 1b01009dc0e..fdfcfb45af7 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_move_to_well.py +++ b/api/tests/opentrons/protocol_engine/commands/test_move_to_well.py @@ -61,7 +61,6 @@ async def test_move_to_well_implementation( assert result == SuccessData( public=MoveToWellResult(position=DeckPoint(x=9, y=8, z=7)), - private=None, state_update=update_types.StateUpdate( pipette_location=update_types.PipetteLocationUpdate( pipette_id="abc", 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 2203f514cf4..00a3bc1c8a8 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 @@ -84,7 +84,6 @@ async def test_success( tipDiameter=5, position=DeckPoint(x=111, y=222, z=333), ), - private=None, state_update=update_types.StateUpdate( pipette_location=update_types.PipetteLocationUpdate( pipette_id="pipette-id", diff --git a/api/tests/opentrons/protocol_engine/commands/test_prepare_to_aspirate.py b/api/tests/opentrons/protocol_engine/commands/test_prepare_to_aspirate.py index 45e8db96837..bb4f8c5f4d9 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_prepare_to_aspirate.py +++ b/api/tests/opentrons/protocol_engine/commands/test_prepare_to_aspirate.py @@ -43,7 +43,7 @@ async def test_prepare_to_aspirate_implmenetation( ) result = await subject.execute(data) - assert result == SuccessData(public=PrepareToAspirateResult(), private=None) + assert result == SuccessData(public=PrepareToAspirateResult()) async def test_overpressure_error( 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 c79727c9a31..51779c427d7 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_reload_labware.py +++ b/api/tests/opentrons/protocol_engine/commands/test_reload_labware.py @@ -66,7 +66,6 @@ async def test_reload_labware_implementation( labwareId="my-labware-id", offsetId="labware-offset-id", ), - private=None, state_update=StateUpdate( labware_location=LabwareLocationUpdate( labware_id="my-labware-id", diff --git a/api/tests/opentrons/protocol_engine/commands/test_retract_axis.py b/api/tests/opentrons/protocol_engine/commands/test_retract_axis.py index 7442460f9b1..6dedf5b2f19 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_retract_axis.py +++ b/api/tests/opentrons/protocol_engine/commands/test_retract_axis.py @@ -25,7 +25,6 @@ async def test_retract_axis_implementation( assert result == SuccessData( public=RetractAxisResult(), - private=None, state_update=update_types.StateUpdate(pipette_location=update_types.CLEAR), ) decoy.verify(await movement.retract_axis(axis=MotorAxis.Y)) diff --git a/api/tests/opentrons/protocol_engine/commands/test_save_position.py b/api/tests/opentrons/protocol_engine/commands/test_save_position.py index c0f5e091e30..bc6d8ed6668 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_save_position.py +++ b/api/tests/opentrons/protocol_engine/commands/test_save_position.py @@ -51,5 +51,4 @@ async def test_save_position_implementation( positionId="456", position=DeckPoint(x=1, y=2, z=3), ), - private=None, ) diff --git a/api/tests/opentrons/protocol_engine/commands/test_set_rail_lights.py b/api/tests/opentrons/protocol_engine/commands/test_set_rail_lights.py index 161fb2d3fcf..956473f264f 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_set_rail_lights.py +++ b/api/tests/opentrons/protocol_engine/commands/test_set_rail_lights.py @@ -26,6 +26,6 @@ async def test_set_rail_lights_implementation( result = await subject.execute(data) - assert result == SuccessData(public=SetRailLightsResult(), private=None) + assert result == SuccessData(public=SetRailLightsResult()) decoy.verify(await rail_lights.set_rail_lights(True), times=1) diff --git a/api/tests/opentrons/protocol_engine/commands/test_set_status_bar.py b/api/tests/opentrons/protocol_engine/commands/test_set_status_bar.py index 53652ce6b87..41ae6703c61 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_set_status_bar.py +++ b/api/tests/opentrons/protocol_engine/commands/test_set_status_bar.py @@ -35,7 +35,7 @@ async def test_status_bar_busy( result = await subject.execute(params=data) - assert result == SuccessData(public=SetStatusBarResult(), private=None) + assert result == SuccessData(public=SetStatusBarResult()) decoy.verify(await status_bar.set_status_bar(status=StatusBarState.OFF), times=0) @@ -63,6 +63,6 @@ async def test_set_status_bar_animation( data = SetStatusBarParams(animation=animation) result = await subject.execute(params=data) - assert result == SuccessData(public=SetStatusBarResult(), private=None) + assert result == SuccessData(public=SetStatusBarResult()) decoy.verify(await status_bar.set_status_bar(status=expected_state), times=1) diff --git a/api/tests/opentrons/protocol_engine/commands/test_touch_tip.py b/api/tests/opentrons/protocol_engine/commands/test_touch_tip.py index f18e79e0a55..d00f44fd108 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_touch_tip.py +++ b/api/tests/opentrons/protocol_engine/commands/test_touch_tip.py @@ -124,7 +124,6 @@ async def test_touch_tip_implementation( assert result == SuccessData( public=TouchTipResult(position=DeckPoint(x=4, y=5, z=6)), - private=None, state_update=update_types.StateUpdate( pipette_location=update_types.PipetteLocationUpdate( pipette_id="abc", diff --git a/api/tests/opentrons/protocol_engine/commands/test_verify_tip_presence.py b/api/tests/opentrons/protocol_engine/commands/test_verify_tip_presence.py index 087d924f0d2..53eb1f5a59e 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_verify_tip_presence.py +++ b/api/tests/opentrons/protocol_engine/commands/test_verify_tip_presence.py @@ -32,4 +32,4 @@ async def test_verify_tip_presence_implementation( result = await subject.execute(data) - assert result == SuccessData(public=VerifyTipPresenceResult(), private=None) + assert result == SuccessData(public=VerifyTipPresenceResult()) diff --git a/api/tests/opentrons/protocol_engine/commands/test_wait_for_duration.py b/api/tests/opentrons/protocol_engine/commands/test_wait_for_duration.py index 9d351ce00d3..bc535a4b6a1 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_wait_for_duration.py +++ b/api/tests/opentrons/protocol_engine/commands/test_wait_for_duration.py @@ -22,5 +22,5 @@ async def test_pause_implementation( result = await subject.execute(data) - assert result == SuccessData(public=WaitForDurationResult(), private=None) + assert result == SuccessData(public=WaitForDurationResult()) decoy.verify(await run_control.wait_for_duration(42.0), times=1) diff --git a/api/tests/opentrons/protocol_engine/commands/test_wait_for_resume.py b/api/tests/opentrons/protocol_engine/commands/test_wait_for_resume.py index 752b85d3446..7d4b3a32edd 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_wait_for_resume.py +++ b/api/tests/opentrons/protocol_engine/commands/test_wait_for_resume.py @@ -23,7 +23,7 @@ async def test_wait_for_resume_implementation( result = await subject.execute(data) - assert result == SuccessData(public=WaitForResumeResult(), private=None) + assert result == SuccessData(public=WaitForResumeResult()) decoy.verify(await run_control.wait_for_resume(), times=1) diff --git a/api/tests/opentrons/protocol_engine/commands/thermocycler/test_close_lid.py b/api/tests/opentrons/protocol_engine/commands/thermocycler/test_close_lid.py index 0a3fc6e9fdf..9eb5536632d 100644 --- a/api/tests/opentrons/protocol_engine/commands/thermocycler/test_close_lid.py +++ b/api/tests/opentrons/protocol_engine/commands/thermocycler/test_close_lid.py @@ -58,6 +58,5 @@ async def test_close_lid( ) assert result == SuccessData( public=expected_result, - private=None, state_update=update_types.StateUpdate(pipette_location=update_types.CLEAR), ) diff --git a/api/tests/opentrons/protocol_engine/commands/thermocycler/test_deactivate_block.py b/api/tests/opentrons/protocol_engine/commands/thermocycler/test_deactivate_block.py index 9f4ced905dc..676a11731a8 100644 --- a/api/tests/opentrons/protocol_engine/commands/thermocycler/test_deactivate_block.py +++ b/api/tests/opentrons/protocol_engine/commands/thermocycler/test_deactivate_block.py @@ -45,4 +45,4 @@ async def test_deactivate_block( result = await subject.execute(data) decoy.verify(await tc_hardware.deactivate_block(), times=1) - assert result == SuccessData(public=expected_result, private=None) + assert result == SuccessData(public=expected_result) diff --git a/api/tests/opentrons/protocol_engine/commands/thermocycler/test_deactivate_lid.py b/api/tests/opentrons/protocol_engine/commands/thermocycler/test_deactivate_lid.py index 1ea0e218c06..83fc347236b 100644 --- a/api/tests/opentrons/protocol_engine/commands/thermocycler/test_deactivate_lid.py +++ b/api/tests/opentrons/protocol_engine/commands/thermocycler/test_deactivate_lid.py @@ -45,4 +45,4 @@ async def test_deactivate_lid( result = await subject.execute(data) decoy.verify(await tc_hardware.deactivate_lid(), times=1) - assert result == SuccessData(public=expected_result, private=None) + assert result == SuccessData(public=expected_result) diff --git a/api/tests/opentrons/protocol_engine/commands/thermocycler/test_open_lid.py b/api/tests/opentrons/protocol_engine/commands/thermocycler/test_open_lid.py index a3e547a88d7..6c26b7d2877 100644 --- a/api/tests/opentrons/protocol_engine/commands/thermocycler/test_open_lid.py +++ b/api/tests/opentrons/protocol_engine/commands/thermocycler/test_open_lid.py @@ -56,6 +56,5 @@ async def test_open_lid( ) assert result == SuccessData( public=expected_result, - private=None, state_update=update_types.StateUpdate(pipette_location=update_types.CLEAR), ) 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 index 9dcefceb9f1..a4ed38a0dbf 100644 --- 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 @@ -112,4 +112,4 @@ async def test_run_extended_profile( ), times=1, ) - assert result == SuccessData(public=expected_result, private=None) + assert result == SuccessData(public=expected_result) diff --git a/api/tests/opentrons/protocol_engine/commands/thermocycler/test_run_profile.py b/api/tests/opentrons/protocol_engine/commands/thermocycler/test_run_profile.py index 9d3b79c66b1..6d6234a76e6 100644 --- a/api/tests/opentrons/protocol_engine/commands/thermocycler/test_run_profile.py +++ b/api/tests/opentrons/protocol_engine/commands/thermocycler/test_run_profile.py @@ -75,4 +75,4 @@ async def test_run_profile( ), times=1, ) - assert result == SuccessData(public=expected_result, private=None) + assert result == SuccessData(public=expected_result) diff --git a/api/tests/opentrons/protocol_engine/commands/thermocycler/test_set_target_block_temperature.py b/api/tests/opentrons/protocol_engine/commands/thermocycler/test_set_target_block_temperature.py index f05ac55c0ee..49d6dda3ca9 100644 --- a/api/tests/opentrons/protocol_engine/commands/thermocycler/test_set_target_block_temperature.py +++ b/api/tests/opentrons/protocol_engine/commands/thermocycler/test_set_target_block_temperature.py @@ -67,4 +67,4 @@ async def test_set_target_block_temperature( ), times=1, ) - assert result == SuccessData(public=expected_result, private=None) + assert result == SuccessData(public=expected_result) diff --git a/api/tests/opentrons/protocol_engine/commands/thermocycler/test_set_target_lid_temperature.py b/api/tests/opentrons/protocol_engine/commands/thermocycler/test_set_target_lid_temperature.py index b3565bc8a2d..372ae6a814c 100644 --- a/api/tests/opentrons/protocol_engine/commands/thermocycler/test_set_target_lid_temperature.py +++ b/api/tests/opentrons/protocol_engine/commands/thermocycler/test_set_target_lid_temperature.py @@ -56,4 +56,4 @@ async def test_set_target_lid_temperature( result = await subject.execute(data) decoy.verify(await tc_hardware.set_target_lid_temperature(celsius=45.6), times=1) - assert result == SuccessData(public=expected_result, private=None) + assert result == SuccessData(public=expected_result) diff --git a/api/tests/opentrons/protocol_engine/commands/thermocycler/test_wait_for_block_temperature.py b/api/tests/opentrons/protocol_engine/commands/thermocycler/test_wait_for_block_temperature.py index 880729bc149..426724cf16f 100644 --- a/api/tests/opentrons/protocol_engine/commands/thermocycler/test_wait_for_block_temperature.py +++ b/api/tests/opentrons/protocol_engine/commands/thermocycler/test_wait_for_block_temperature.py @@ -51,4 +51,4 @@ async def test_set_target_block_temperature( tc_module_substate.get_target_block_temperature(), await tc_hardware.wait_for_block_target(), ) - assert result == SuccessData(public=expected_result, private=None) + assert result == SuccessData(public=expected_result) diff --git a/api/tests/opentrons/protocol_engine/commands/thermocycler/test_wait_for_lid_temperature.py b/api/tests/opentrons/protocol_engine/commands/thermocycler/test_wait_for_lid_temperature.py index 47b4b006342..e358e80d6f4 100644 --- a/api/tests/opentrons/protocol_engine/commands/thermocycler/test_wait_for_lid_temperature.py +++ b/api/tests/opentrons/protocol_engine/commands/thermocycler/test_wait_for_lid_temperature.py @@ -51,4 +51,4 @@ async def test_set_target_block_temperature( tc_module_substate.get_target_lid_temperature(), await tc_hardware.wait_for_lid_target(), ) - assert result == SuccessData(public=expected_result, private=None) + assert result == SuccessData(public=expected_result) diff --git a/api/tests/opentrons/protocol_engine/commands/unsafe/test_engage_axes.py b/api/tests/opentrons/protocol_engine/commands/unsafe/test_engage_axes.py index 0130d7ce16b..72fb761ad23 100644 --- a/api/tests/opentrons/protocol_engine/commands/unsafe/test_engage_axes.py +++ b/api/tests/opentrons/protocol_engine/commands/unsafe/test_engage_axes.py @@ -45,7 +45,7 @@ async def test_engage_axes_implementation( result = await subject.execute(data) - assert result == SuccessData(public=UnsafeEngageAxesResult(), private=None) + assert result == SuccessData(public=UnsafeEngageAxesResult()) decoy.verify( await ot3_hardware_api.engage_axes([Axis.Z_L, Axis.P_L, Axis.X, Axis.Y]), 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 index 1a41244d556..a4eae34a08d 100644 --- a/api/tests/opentrons/protocol_engine/commands/unsafe/test_ungrip_labware.py +++ b/api/tests/opentrons/protocol_engine/commands/unsafe/test_ungrip_labware.py @@ -22,7 +22,7 @@ async def test_ungrip_labware_implementation( result = await subject.execute(params=UnsafeUngripLabwareParams()) - assert result == SuccessData(public=UnsafeUngripLabwareResult(), private=None) + assert result == SuccessData(public=UnsafeUngripLabwareResult()) decoy.verify( await ot3_hardware_api.ungrip(), diff --git a/api/tests/opentrons/protocol_engine/commands/unsafe/test_unsafe_blow_out_in_place.py b/api/tests/opentrons/protocol_engine/commands/unsafe/test_unsafe_blow_out_in_place.py index a40f914e049..aec5df2620d 100644 --- a/api/tests/opentrons/protocol_engine/commands/unsafe/test_unsafe_blow_out_in_place.py +++ b/api/tests/opentrons/protocol_engine/commands/unsafe/test_unsafe_blow_out_in_place.py @@ -41,7 +41,7 @@ async def test_blow_out_in_place_implementation( result = await subject.execute(data) - assert result == SuccessData(public=UnsafeBlowOutInPlaceResult(), private=None) + assert result == SuccessData(public=UnsafeBlowOutInPlaceResult()) decoy.verify( await ot3_hardware_api.update_axis_position_estimations([Axis.P_L]), 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 4913fe3c444..fb23d96d987 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 @@ -50,7 +50,6 @@ async def test_drop_tip_implementation( assert result == SuccessData( public=UnsafeDropTipInPlaceResult(), - private=None, state_update=StateUpdate( pipette_tip_state=PipetteTipStateUpdate(pipette_id="abc", tip_geometry=None) ), diff --git a/api/tests/opentrons/protocol_engine/commands/unsafe/test_update_position_estimators.py b/api/tests/opentrons/protocol_engine/commands/unsafe/test_update_position_estimators.py index da7ffe75012..79131994299 100644 --- a/api/tests/opentrons/protocol_engine/commands/unsafe/test_update_position_estimators.py +++ b/api/tests/opentrons/protocol_engine/commands/unsafe/test_update_position_estimators.py @@ -45,7 +45,7 @@ async def test_update_position_estimators_implementation( result = await subject.execute(data) - assert result == SuccessData(public=UpdatePositionEstimatorsResult(), private=None) + assert result == SuccessData(public=UpdatePositionEstimatorsResult()) decoy.verify( await ot3_hardware_api.update_axis_position_estimations( diff --git a/api/tests/opentrons/protocol_engine/execution/test_command_executor.py b/api/tests/opentrons/protocol_engine/execution/test_command_executor.py index f5f0ec063b0..eb84ceb018b 100644 --- a/api/tests/opentrons/protocol_engine/execution/test_command_executor.py +++ b/api/tests/opentrons/protocol_engine/execution/test_command_executor.py @@ -220,7 +220,7 @@ class _TestCommandDefinedError(ErrorOccurrence): _TestCommandReturn = Union[ - SuccessData[_TestCommandResult, None], + SuccessData[_TestCommandResult], DefinedErrorData[_TestCommandDefinedError], ] @@ -263,7 +263,7 @@ class _TestCommand( _ImplementationCls: Type[_TestCommandImpl] = TestCommandImplCls command_params = _TestCommandParams() - command_result = SuccessData(public=_TestCommandResult(), private=None) + command_result = SuccessData(public=_TestCommandResult()) queued_command = cast( Command, @@ -362,9 +362,7 @@ class _TestCommand( decoy.verify( action_dispatcher.dispatch( - SucceedCommandAction( - private_result=None, command=expected_completed_command - ) + SucceedCommandAction(command=expected_completed_command) ), ) diff --git a/api/tests/opentrons/protocol_engine/state/test_addressable_area_store.py b/api/tests/opentrons/protocol_engine/state/test_addressable_area_store.py index b259e6a3f96..44c72e38e86 100644 --- a/api/tests/opentrons/protocol_engine/state/test_addressable_area_store.py +++ b/api/tests/opentrons/protocol_engine/state/test_addressable_area_store.py @@ -234,9 +234,7 @@ def test_addressable_area_referencing_commands_load_on_simulated_deck( simulated_subject: AddressableAreaStore, ) -> None: """It should check and store the addressable area when referenced in a command.""" - simulated_subject.handle_action( - SucceedCommandAction(private_result=None, command=command) - ) + simulated_subject.handle_action(SucceedCommandAction(command=command)) assert expected_area in simulated_subject.state.loaded_addressable_areas_by_name @@ -301,7 +299,7 @@ def test_addressable_area_referencing_commands_load( subject: AddressableAreaStore, ) -> None: """It should check that the addressable area is in the deck config.""" - subject.handle_action(SucceedCommandAction(private_result=None, command=command)) + subject.handle_action(SucceedCommandAction(command=command)) assert expected_area in subject.state.loaded_addressable_areas_by_name diff --git a/api/tests/opentrons/protocol_engine/state/test_command_store_old.py b/api/tests/opentrons/protocol_engine/state/test_command_store_old.py index 5dc3c4a4ee9..d5f171b7ea9 100644 --- a/api/tests/opentrons/protocol_engine/state/test_command_store_old.py +++ b/api/tests/opentrons/protocol_engine/state/test_command_store_old.py @@ -84,7 +84,6 @@ def test_command_queue_and_unqueue() -> None: started_at=datetime(year=2022, month=2, day=2), ) succeed_2 = SucceedCommandAction( - private_result=None, command=create_succeeded_command(command_id="command-id-2"), ) @@ -137,7 +136,6 @@ def test_setup_command_queue_and_unqueue() -> None: command_id="command-id-2", started_at=datetime(year=2022, month=2, day=2) ) succeed_2 = SucceedCommandAction( - private_result=None, command=create_succeeded_command(command_id="command-id-2"), ) @@ -214,7 +212,6 @@ def test_running_command_id() -> None: started_at=datetime(year=2021, month=1, day=1), ) succeed = SucceedCommandAction( - private_result=None, command=create_succeeded_command(command_id="command-id-1"), ) @@ -303,7 +300,6 @@ def test_command_store_keeps_commands_in_queue_order() -> None: command=create_succeeded_command( command_id="command-id-2", ), - private_result=None, ) ) assert subject.state.command_history.get_all_ids() == [ 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 1a0e27d2bb5..3f7ad59bda2 100644 --- a/api/tests/opentrons/protocol_engine/state/test_geometry_view.py +++ b/api/tests/opentrons/protocol_engine/state/test_geometry_view.py @@ -2937,7 +2937,6 @@ def test_get_offset_location_deck_slot( version=nice_labware_definition.version, ), ), - private_result=None, state_update=StateUpdate( loaded_labware=LoadedLabwareUpdate( labware_id="labware-id-1", @@ -2982,7 +2981,6 @@ def test_get_offset_location_module( model=tempdeck_v2_def.model, ), ), - private_result=None, ) load_labware = SucceedCommandAction( command=LoadLabware( @@ -3002,7 +3000,6 @@ def test_get_offset_location_module( version=nice_labware_definition.version, ), ), - private_result=None, state_update=StateUpdate( loaded_labware=LoadedLabwareUpdate( labware_id="labware-id-1", @@ -3051,7 +3048,6 @@ def test_get_offset_location_module_with_adapter( model=tempdeck_v2_def.model, ), ), - private_result=None, ) load_adapter = SucceedCommandAction( command=LoadLabware( @@ -3071,7 +3067,6 @@ def test_get_offset_location_module_with_adapter( version=nice_adapter_definition.version, ), ), - private_result=None, state_update=StateUpdate( loaded_labware=LoadedLabwareUpdate( labware_id="adapter-id-1", @@ -3100,7 +3095,6 @@ def test_get_offset_location_module_with_adapter( version=nice_labware_definition.version, ), ), - private_result=None, state_update=StateUpdate( loaded_labware=LoadedLabwareUpdate( labware_id="labware-id-1", @@ -3149,7 +3143,6 @@ def test_get_offset_fails_with_off_deck_labware( version=nice_labware_definition.version, ), ), - private_result=None, state_update=StateUpdate( loaded_labware=LoadedLabwareUpdate( labware_id="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 68c7e86c5ff..47150ec425f 100644 --- a/api/tests/opentrons/protocol_engine/state/test_labware_store.py +++ b/api/tests/opentrons/protocol_engine/state/test_labware_store.py @@ -126,7 +126,6 @@ def test_handles_load_labware( ) subject.handle_action( SucceedCommandAction( - private_result=None, command=command, state_update=update_types.StateUpdate( loaded_labware=update_types.LoadedLabwareUpdate( @@ -154,7 +153,6 @@ def test_handles_reload_labware( subject.handle_action( SucceedCommandAction( - private_result=None, command=command, state_update=update_types.StateUpdate( loaded_labware=update_types.LoadedLabwareUpdate( @@ -194,7 +192,6 @@ def test_handles_reload_labware( ) subject.handle_action( SucceedCommandAction( - private_result=None, command=comment_command_2, state_update=update_types.StateUpdate( labware_location=update_types.LabwareLocationUpdate( @@ -254,7 +251,6 @@ def test_handles_move_labware( ) subject.handle_action( SucceedCommandAction( - private_result=None, command=comment_command, state_update=update_types.StateUpdate( loaded_labware=update_types.LoadedLabwareUpdate( @@ -273,7 +269,6 @@ def test_handles_move_labware( ) subject.handle_action( SucceedCommandAction( - private_result=None, command=comment_2, state_update=update_types.StateUpdate( labware_location=update_types.LabwareLocationUpdate( @@ -311,7 +306,6 @@ def test_handles_move_labware_off_deck( ) subject.handle_action( SucceedCommandAction( - private_result=None, command=comment_command, state_update=update_types.StateUpdate( loaded_labware=update_types.LoadedLabwareUpdate( @@ -330,7 +324,6 @@ def test_handles_move_labware_off_deck( ) subject.handle_action( SucceedCommandAction( - private_result=None, command=comment_2, state_update=update_types.StateUpdate( labware_location=update_types.LabwareLocationUpdate( diff --git a/api/tests/opentrons/protocol_engine/state/test_module_store.py b/api/tests/opentrons/protocol_engine/state/test_module_store.py index 4f94ed314d5..832713ed0a4 100644 --- a/api/tests/opentrons/protocol_engine/state/test_module_store.py +++ b/api/tests/opentrons/protocol_engine/state/test_module_store.py @@ -197,7 +197,6 @@ def test_load_module( ) -> None: """It should handle a successful LoadModule command.""" action = actions.SucceedCommandAction( - private_result=None, command=commands.LoadModule.construct( # type: ignore[call-arg] params=commands.LoadModuleParams( model=params_model, @@ -261,7 +260,6 @@ def test_load_thermocycler_in_thermocycler_slot( ) -> None: """It should update additional slots for thermocycler module.""" action = actions.SucceedCommandAction( - private_result=None, command=commands.LoadModule.construct( # type: ignore[call-arg] params=commands.LoadModuleParams( model=ModuleModel.THERMOCYCLER_MODULE_V2, @@ -411,12 +409,8 @@ def test_handle_hs_temperature_commands(heater_shaker_v1_def: ModuleDefinition) deck_fixed_labware=[], ) - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=load_module_cmd) - ) - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=set_temp_cmd) - ) + subject.handle_action(actions.SucceedCommandAction(command=load_module_cmd)) + subject.handle_action(actions.SucceedCommandAction(command=set_temp_cmd)) assert subject.state.substate_by_module_id == { "module-id": HeaterShakerModuleSubState( module_id=HeaterShakerModuleId("module-id"), @@ -425,9 +419,7 @@ def test_handle_hs_temperature_commands(heater_shaker_v1_def: ModuleDefinition) plate_target_temperature=42, ) } - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=deactivate_cmd) - ) + subject.handle_action(actions.SucceedCommandAction(command=deactivate_cmd)) assert subject.state.substate_by_module_id == { "module-id": HeaterShakerModuleSubState( module_id=HeaterShakerModuleId("module-id"), @@ -465,12 +457,8 @@ def test_handle_hs_shake_commands(heater_shaker_v1_def: ModuleDefinition) -> Non deck_fixed_labware=[], ) - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=load_module_cmd) - ) - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=set_shake_cmd) - ) + subject.handle_action(actions.SucceedCommandAction(command=load_module_cmd)) + subject.handle_action(actions.SucceedCommandAction(command=set_shake_cmd)) assert subject.state.substate_by_module_id == { "module-id": HeaterShakerModuleSubState( module_id=HeaterShakerModuleId("module-id"), @@ -479,9 +467,7 @@ def test_handle_hs_shake_commands(heater_shaker_v1_def: ModuleDefinition) -> Non plate_target_temperature=None, ) } - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=deactivate_cmd) - ) + subject.handle_action(actions.SucceedCommandAction(command=deactivate_cmd)) assert subject.state.substate_by_module_id == { "module-id": HeaterShakerModuleSubState( module_id=HeaterShakerModuleId("module-id"), @@ -521,9 +507,7 @@ def test_handle_hs_labware_latch_commands( deck_fixed_labware=[], ) - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=load_module_cmd) - ) + subject.handle_action(actions.SucceedCommandAction(command=load_module_cmd)) assert subject.state.substate_by_module_id == { "module-id": HeaterShakerModuleSubState( module_id=HeaterShakerModuleId("module-id"), @@ -533,9 +517,7 @@ def test_handle_hs_labware_latch_commands( ) } - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=close_latch_cmd) - ) + subject.handle_action(actions.SucceedCommandAction(command=close_latch_cmd)) assert subject.state.substate_by_module_id == { "module-id": HeaterShakerModuleSubState( module_id=HeaterShakerModuleId("module-id"), @@ -544,9 +526,7 @@ def test_handle_hs_labware_latch_commands( plate_target_temperature=None, ) } - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=open_latch_cmd) - ) + subject.handle_action(actions.SucceedCommandAction(command=open_latch_cmd)) assert subject.state.substate_by_module_id == { "module-id": HeaterShakerModuleSubState( module_id=HeaterShakerModuleId("module-id"), @@ -588,20 +568,14 @@ def test_handle_tempdeck_temperature_commands( deck_fixed_labware=[], ) - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=load_module_cmd) - ) - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=set_temp_cmd) - ) + subject.handle_action(actions.SucceedCommandAction(command=load_module_cmd)) + subject.handle_action(actions.SucceedCommandAction(command=set_temp_cmd)) assert subject.state.substate_by_module_id == { "module-id": TemperatureModuleSubState( module_id=TemperatureModuleId("module-id"), plate_target_temperature=42 ) } - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=deactivate_cmd) - ) + subject.handle_action(actions.SucceedCommandAction(command=deactivate_cmd)) assert subject.state.substate_by_module_id == { "module-id": TemperatureModuleSubState( module_id=TemperatureModuleId("module-id"), plate_target_temperature=None @@ -650,12 +624,8 @@ def test_handle_thermocycler_temperature_commands( deck_fixed_labware=[], ) - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=load_module_cmd) - ) - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=set_block_temp_cmd) - ) + subject.handle_action(actions.SucceedCommandAction(command=load_module_cmd)) + subject.handle_action(actions.SucceedCommandAction(command=set_block_temp_cmd)) assert subject.state.substate_by_module_id == { "module-id": ThermocyclerModuleSubState( module_id=ThermocyclerModuleId("module-id"), @@ -664,9 +634,7 @@ def test_handle_thermocycler_temperature_commands( target_lid_temperature=None, ) } - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=set_lid_temp_cmd) - ) + subject.handle_action(actions.SucceedCommandAction(command=set_lid_temp_cmd)) assert subject.state.substate_by_module_id == { "module-id": ThermocyclerModuleSubState( module_id=ThermocyclerModuleId("module-id"), @@ -675,9 +643,7 @@ def test_handle_thermocycler_temperature_commands( target_lid_temperature=35.3, ) } - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=deactivate_lid_cmd) - ) + subject.handle_action(actions.SucceedCommandAction(command=deactivate_lid_cmd)) assert subject.state.substate_by_module_id == { "module-id": ThermocyclerModuleSubState( module_id=ThermocyclerModuleId("module-id"), @@ -686,9 +652,7 @@ def test_handle_thermocycler_temperature_commands( target_lid_temperature=None, ) } - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=deactivate_block_cmd) - ) + subject.handle_action(actions.SucceedCommandAction(command=deactivate_block_cmd)) assert subject.state.substate_by_module_id == { "module-id": ThermocyclerModuleSubState( module_id=ThermocyclerModuleId("module-id"), @@ -734,12 +698,8 @@ def test_handle_thermocycler_lid_commands( deck_fixed_labware=[], ) - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=load_module_cmd) - ) - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=open_lid_cmd) - ) + subject.handle_action(actions.SucceedCommandAction(command=load_module_cmd)) + subject.handle_action(actions.SucceedCommandAction(command=open_lid_cmd)) assert subject.state.substate_by_module_id == { "module-id": ThermocyclerModuleSubState( module_id=ThermocyclerModuleId("module-id"), @@ -749,9 +709,7 @@ def test_handle_thermocycler_lid_commands( ) } - subject.handle_action( - actions.SucceedCommandAction(private_result=None, command=close_lid_cmd) - ) + subject.handle_action(actions.SucceedCommandAction(command=close_lid_cmd)) assert subject.state.substate_by_module_id == { "module-id": ThermocyclerModuleSubState( module_id=ThermocyclerModuleId("module-id"), 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 10ae35e5f4a..c8eab566abe 100644 --- a/api/tests/opentrons/protocol_engine/state/test_pipette_store.py +++ b/api/tests/opentrons/protocol_engine/state/test_pipette_store.py @@ -81,16 +81,13 @@ def test_location_state_update(subject: PipetteStore) -> None: pipette_name=PipetteNameType.P300_SINGLE, mount=MountType.RIGHT, ) - subject.handle_action( - SucceedCommandAction(command=load_command, private_result=None) - ) + subject.handle_action(SucceedCommandAction(command=load_command)) # Update the location to a well: dummy_command = create_succeeded_command() subject.handle_action( SucceedCommandAction( command=dummy_command, - private_result=None, state_update=update_types.StateUpdate( pipette_location=update_types.PipetteLocationUpdate( pipette_id="pipette-id", @@ -120,7 +117,6 @@ def test_location_state_update(subject: PipetteStore) -> None: subject.handle_action( SucceedCommandAction( command=dummy_command, - private_result=None, state_update=update_types.StateUpdate( pipette_location=update_types.PipetteLocationUpdate( pipette_id="pipette-id", @@ -143,7 +139,6 @@ def test_location_state_update(subject: PipetteStore) -> None: subject.handle_action( SucceedCommandAction( command=dummy_command, - private_result=None, state_update=update_types.StateUpdate( pipette_location=update_types.PipetteLocationUpdate( pipette_id="pipette-id", @@ -162,7 +157,6 @@ def test_location_state_update(subject: PipetteStore) -> None: subject.handle_action( SucceedCommandAction( command=dummy_command, - private_result=None, state_update=update_types.StateUpdate( pipette_location=update_types.PipetteLocationUpdate( pipette_id="pipette-id", @@ -181,7 +175,6 @@ def test_location_state_update(subject: PipetteStore) -> None: subject.handle_action( SucceedCommandAction( command=dummy_command, - private_result=None, state_update=update_types.StateUpdate(pipette_location=update_types.CLEAR), ) ) @@ -233,7 +226,6 @@ def test_handles_load_pipette( subject.handle_action( SucceedCommandAction( - private_result=None, command=dummy_command, state_update=update_types.StateUpdate( loaded_pipette=load_pipette_update, pipette_config=config_update @@ -271,7 +263,6 @@ def test_handles_pick_up_and_drop_tip(subject: PipetteStore) -> None: subject.handle_action( SucceedCommandAction( - private_result=None, command=load_pipette_command, state_update=update_types.StateUpdate( loaded_pipette=update_types.LoadPipetteUpdate( @@ -286,7 +277,6 @@ def test_handles_pick_up_and_drop_tip(subject: PipetteStore) -> None: subject.handle_action( SucceedCommandAction( - private_result=None, command=pick_up_tip_command, state_update=update_types.StateUpdate( pipette_tip_state=update_types.PipetteTipStateUpdate( @@ -303,7 +293,6 @@ def test_handles_pick_up_and_drop_tip(subject: PipetteStore) -> None: subject.handle_action( SucceedCommandAction( - private_result=None, command=drop_tip_command, state_update=update_types.StateUpdate( pipette_tip_state=update_types.PipetteTipStateUpdate( @@ -334,7 +323,6 @@ def test_handles_drop_tip_in_place(subject: PipetteStore) -> None: subject.handle_action( SucceedCommandAction( - private_result=None, command=load_pipette_command, state_update=update_types.StateUpdate( loaded_pipette=update_types.LoadPipetteUpdate( @@ -348,7 +336,6 @@ def test_handles_drop_tip_in_place(subject: PipetteStore) -> None: ) subject.handle_action( SucceedCommandAction( - private_result=None, command=pick_up_tip_command, state_update=update_types.StateUpdate( pipette_tip_state=update_types.PipetteTipStateUpdate( @@ -365,7 +352,6 @@ def test_handles_drop_tip_in_place(subject: PipetteStore) -> None: subject.handle_action( SucceedCommandAction( - private_result=None, command=drop_tip_in_place_command, state_update=update_types.StateUpdate( pipette_tip_state=update_types.PipetteTipStateUpdate( @@ -396,7 +382,6 @@ def test_handles_unsafe_drop_tip_in_place(subject: PipetteStore) -> None: subject.handle_action( SucceedCommandAction( - private_result=None, command=load_pipette_command, state_update=update_types.StateUpdate( loaded_pipette=update_types.LoadPipetteUpdate( @@ -410,7 +395,6 @@ def test_handles_unsafe_drop_tip_in_place(subject: PipetteStore) -> None: ) subject.handle_action( SucceedCommandAction( - private_result=None, command=pick_up_tip_command, state_update=update_types.StateUpdate( pipette_tip_state=update_types.PipetteTipStateUpdate( @@ -427,7 +411,6 @@ 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, state_update=update_types.StateUpdate( pipette_tip_state=update_types.PipetteTipStateUpdate( @@ -461,7 +444,6 @@ def test_aspirate_adds_volume( subject.handle_action( SucceedCommandAction( - private_result=None, command=load_command, state_update=update_types.StateUpdate( loaded_pipette=update_types.LoadPipetteUpdate( @@ -473,15 +455,11 @@ def test_aspirate_adds_volume( ), ) ) - subject.handle_action( - SucceedCommandAction(private_result=None, command=aspirate_command) - ) + subject.handle_action(SucceedCommandAction(command=aspirate_command)) assert subject.state.aspirated_volume_by_id["pipette-id"] == 42 - subject.handle_action( - SucceedCommandAction(private_result=None, command=aspirate_command) - ) + subject.handle_action(SucceedCommandAction(command=aspirate_command)) assert subject.state.aspirated_volume_by_id["pipette-id"] == 84 @@ -514,7 +492,6 @@ def test_dispense_subtracts_volume( subject.handle_action( SucceedCommandAction( - private_result=None, command=load_command, state_update=update_types.StateUpdate( loaded_pipette=update_types.LoadPipetteUpdate( @@ -526,18 +503,12 @@ def test_dispense_subtracts_volume( ), ) ) - subject.handle_action( - SucceedCommandAction(private_result=None, command=aspirate_command) - ) - subject.handle_action( - SucceedCommandAction(private_result=None, command=dispense_command) - ) + subject.handle_action(SucceedCommandAction(command=aspirate_command)) + subject.handle_action(SucceedCommandAction(command=dispense_command)) assert subject.state.aspirated_volume_by_id["pipette-id"] == 21 - subject.handle_action( - SucceedCommandAction(private_result=None, command=dispense_command) - ) + subject.handle_action(SucceedCommandAction(command=dispense_command)) assert subject.state.aspirated_volume_by_id["pipette-id"] == 0 @@ -567,7 +538,6 @@ def test_blow_out_clears_volume( subject.handle_action( SucceedCommandAction( - private_result=None, command=load_command, state_update=update_types.StateUpdate( loaded_pipette=update_types.LoadPipetteUpdate( @@ -579,12 +549,8 @@ def test_blow_out_clears_volume( ), ) ) - subject.handle_action( - SucceedCommandAction(private_result=None, command=aspirate_command) - ) - subject.handle_action( - SucceedCommandAction(private_result=None, command=blow_out_command) - ) + subject.handle_action(SucceedCommandAction(command=aspirate_command)) + subject.handle_action(SucceedCommandAction(command=blow_out_command)) assert subject.state.aspirated_volume_by_id["pipette-id"] is None @@ -597,9 +563,7 @@ def test_set_movement_speed(subject: PipetteStore) -> None: pipette_name=PipetteNameType.P300_SINGLE, mount=MountType.LEFT, ) - subject.handle_action( - SucceedCommandAction(private_result=None, command=load_pipette_command) - ) + subject.handle_action(SucceedCommandAction(command=load_pipette_command)) subject.handle_action( SetPipetteMovementSpeedAction(pipette_id=pipette_id, speed=123.456) ) @@ -641,7 +605,6 @@ def test_add_pipette_config( subject.handle_action( SucceedCommandAction( command=command, - private_result=None, state_update=update_types.StateUpdate( pipette_config=update_types.PipetteConfigUpdate( pipette_id="pipette-id", @@ -702,7 +665,6 @@ def test_prepare_to_aspirate_marks_pipette_ready( ) subject.handle_action( SucceedCommandAction( - private_result=None, command=load_pipette_command, state_update=update_types.StateUpdate( loaded_pipette=update_types.LoadPipetteUpdate( @@ -716,7 +678,6 @@ def test_prepare_to_aspirate_marks_pipette_ready( ) subject.handle_action( SucceedCommandAction( - private_result=None, command=pick_up_tip_command, state_update=update_types.StateUpdate( pipette_tip_state=update_types.PipetteTipStateUpdate( @@ -729,7 +690,6 @@ def test_prepare_to_aspirate_marks_pipette_ready( subject.handle_action( SucceedCommandAction( - private_result=None, command=previous, ) ) @@ -737,7 +697,5 @@ def test_prepare_to_aspirate_marks_pipette_ready( prepare_to_aspirate_command = create_prepare_to_aspirate_command( pipette_id="pipette-id" ) - subject.handle_action( - SucceedCommandAction(private_result=None, command=prepare_to_aspirate_command) - ) + subject.handle_action(SucceedCommandAction(command=prepare_to_aspirate_command)) assert subject.state.aspirated_volume_by_id["pipette-id"] == 0.0 diff --git a/api/tests/opentrons/protocol_engine/state/test_tip_state.py b/api/tests/opentrons/protocol_engine/state/test_tip_state.py index 96e0451dbbe..abb408d7418 100644 --- a/api/tests/opentrons/protocol_engine/state/test_tip_state.py +++ b/api/tests/opentrons/protocol_engine/state/test_tip_state.py @@ -66,7 +66,6 @@ def load_labware_action( ) -> actions.SucceedCommandAction: """Get a load labware command value object.""" return actions.SucceedCommandAction( - private_result=None, command=_dummy_command(), state_update=update_types.StateUpdate( loaded_labware=update_types.LoadedLabwareUpdate( @@ -124,7 +123,6 @@ def test_get_next_tip_returns_none( ) subject.handle_action( actions.SucceedCommandAction( - private_result=None, state_update=update_types.StateUpdate(pipette_config=config_update), command=_dummy_command(), ) @@ -183,7 +181,6 @@ def test_get_next_tip_returns_first_tip( ) subject.handle_action( actions.SucceedCommandAction( - private_result=None, state_update=update_types.StateUpdate(pipette_config=config_update), command=_dummy_command(), ) @@ -236,7 +233,6 @@ def test_get_next_tip_used_starting_tip( ) subject.handle_action( actions.SucceedCommandAction( - private_result=None, state_update=update_types.StateUpdate(pipette_config=config_update), command=_dummy_command(), ) @@ -322,7 +318,6 @@ def test_get_next_tip_skips_picked_up_tip( ) subject.handle_action( actions.SucceedCommandAction( - private_result=None, state_update=update_types.StateUpdate(pipette_config=config_update), command=_dummy_command(), ) @@ -338,7 +333,6 @@ def test_get_next_tip_skips_picked_up_tip( subject.handle_action( actions.SucceedCommandAction( command=_dummy_command(), - private_result=None, state_update=pick_up_tip_state_update, ) ) @@ -387,7 +381,6 @@ def test_get_next_tip_with_starting_tip( ) subject.handle_action( actions.SucceedCommandAction( - private_result=None, state_update=update_types.StateUpdate(pipette_config=config_update), command=_dummy_command(), ) @@ -407,7 +400,6 @@ def test_get_next_tip_with_starting_tip( subject.handle_action( actions.SucceedCommandAction( command=_dummy_command(), - private_result=None, state_update=pick_up_tip_state_update, ) ) @@ -456,7 +448,6 @@ def test_get_next_tip_with_starting_tip_8_channel( ) subject.handle_action( actions.SucceedCommandAction( - private_result=None, state_update=update_types.StateUpdate(pipette_config=config_update), command=_dummy_command(), ) @@ -479,7 +470,6 @@ def test_get_next_tip_with_starting_tip_8_channel( subject.handle_action( actions.SucceedCommandAction( command=_dummy_command(), - private_result=None, state_update=pick_up_tip_state_update, ) ) @@ -528,7 +518,6 @@ def test_get_next_tip_with_1_channel_followed_by_8_channel( ) subject.handle_action( actions.SucceedCommandAction( - private_result=None, state_update=update_types.StateUpdate(pipette_config=config_update), command=_dummy_command(), ) @@ -560,7 +549,6 @@ def test_get_next_tip_with_1_channel_followed_by_8_channel( ) subject.handle_action( actions.SucceedCommandAction( - private_result=None, state_update=update_types.StateUpdate(pipette_config=config_update_2), command=_dummy_command(), ) @@ -583,7 +571,6 @@ def test_get_next_tip_with_1_channel_followed_by_8_channel( subject.handle_action( actions.SucceedCommandAction( command=_dummy_command(), - private_result=None, state_update=pick_up_tip_2_state_update, ) ) @@ -632,7 +619,6 @@ def test_get_next_tip_with_starting_tip_out_of_tips( ) subject.handle_action( actions.SucceedCommandAction( - private_result=None, state_update=update_types.StateUpdate(pipette_config=config_update), command=_dummy_command(), ) @@ -655,7 +641,6 @@ def test_get_next_tip_with_starting_tip_out_of_tips( subject.handle_action( actions.SucceedCommandAction( command=_dummy_command(), - private_result=None, state_update=pick_up_tip_state_update, ) ) @@ -704,7 +689,6 @@ def test_get_next_tip_with_column_and_starting_tip( ) subject.handle_action( actions.SucceedCommandAction( - private_result=None, state_update=update_types.StateUpdate(pipette_config=config_update), command=_dummy_command(), ) @@ -755,7 +739,6 @@ def test_reset_tips( subject.handle_action( actions.SucceedCommandAction( - private_result=None, state_update=update_types.StateUpdate(pipette_config=config_update), command=_dummy_command(), ) @@ -764,7 +747,6 @@ def test_reset_tips( subject.handle_action( actions.SucceedCommandAction( command=_dummy_command(), - private_result=None, state_update=update_types.StateUpdate( tips_used=update_types.TipsUsedUpdate( pipette_id="pipette-id", @@ -818,7 +800,6 @@ def test_handle_pipette_config_action( ) subject.handle_action( actions.SucceedCommandAction( - private_result=None, state_update=update_types.StateUpdate(pipette_config=config_update), command=_dummy_command(), ) @@ -952,7 +933,6 @@ def test_active_channels( ) subject.handle_action( actions.SucceedCommandAction( - private_result=None, state_update=update_types.StateUpdate(pipette_config=config_update), command=_dummy_command(), ) @@ -968,7 +948,6 @@ def test_active_channels( subject.handle_action( actions.SucceedCommandAction( command=_dummy_command(), - private_result=None, state_update=state_update, ) ) @@ -1014,7 +993,6 @@ def test_next_tip_uses_active_channels( ) subject.handle_action( actions.SucceedCommandAction( - private_result=None, state_update=update_types.StateUpdate(pipette_config=config_update), command=_dummy_command(), ) @@ -1051,7 +1029,6 @@ def test_next_tip_uses_active_channels( subject.handle_action( actions.SucceedCommandAction( command=_dummy_command(), - private_result=None, state_update=state_update, ) ) @@ -1059,7 +1036,6 @@ def test_next_tip_uses_active_channels( subject.handle_action( actions.SucceedCommandAction( command=_dummy_command(), - private_result=None, state_update=update_types.StateUpdate( tips_used=update_types.TipsUsedUpdate( pipette_id="pipette-id", @@ -1115,7 +1091,6 @@ def test_next_tip_automatic_tip_tracking_with_partial_configurations( ) subject.handle_action( actions.SucceedCommandAction( - private_result=None, state_update=update_types.StateUpdate(pipette_config=config_update), command=_dummy_command(), ) @@ -1141,7 +1116,6 @@ def _assert_and_pickup(well: str, nozzle_map: NozzleMap) -> None: subject.handle_action( actions.SucceedCommandAction( command=_dummy_command(), - private_result=None, state_update=pick_up_tip_state_update, ) ) @@ -1212,7 +1186,6 @@ def _reconfigure_nozzle_layout(start: str, back_l: str, front_r: str) -> NozzleM subject.handle_action( actions.SucceedCommandAction( command=_dummy_command(), - private_result=None, state_update=state_update, ) ) @@ -1270,7 +1243,6 @@ def test_next_tip_automatic_tip_tracking_tiprack_limits( ) subject.handle_action( actions.SucceedCommandAction( - private_result=None, state_update=update_types.StateUpdate(pipette_config=config_update), command=_dummy_command(), ) @@ -1293,7 +1265,6 @@ def _get_next_and_pickup(nozzle_map: NozzleMap) -> str | None: subject.handle_action( actions.SucceedCommandAction( command=_dummy_command(), - private_result=None, state_update=pick_up_tip_state_update, ) ) @@ -1337,7 +1308,7 @@ def _reconfigure_nozzle_layout(start: str, back_l: str, front_r: str) -> NozzleM ) subject.handle_action( actions.SucceedCommandAction( - command=_dummy_command(), private_result=None, state_update=state_update + command=_dummy_command(), state_update=state_update ) ) return nozzle_map diff --git a/api/tests/opentrons/protocol_engine/state/test_well_store.py b/api/tests/opentrons/protocol_engine/state/test_well_store.py index 822329aa874..ec59a643db0 100644 --- a/api/tests/opentrons/protocol_engine/state/test_well_store.py +++ b/api/tests/opentrons/protocol_engine/state/test_well_store.py @@ -27,7 +27,6 @@ def test_handles_liquid_probe_success(subject: WellStore) -> None: subject.handle_action( SucceedCommandAction( - private_result=None, command=liquid_probe, state_update=update_types.StateUpdate( liquid_probed=update_types.LiquidProbedUpdate( @@ -65,7 +64,6 @@ def test_handles_load_liquid_success(subject: WellStore) -> None: subject.handle_action( SucceedCommandAction( - private_result=None, command=load_liquid, state_update=update_types.StateUpdate( liquid_loaded=update_types.LiquidLoadedUpdate( @@ -124,7 +122,6 @@ def test_handles_load_liquid_and_aspirate(subject: WellStore) -> None: subject.handle_action( SucceedCommandAction( - private_result=None, command=load_liquid, state_update=update_types.StateUpdate( liquid_loaded=update_types.LiquidLoadedUpdate( @@ -137,7 +134,6 @@ def test_handles_load_liquid_and_aspirate(subject: WellStore) -> None: ) subject.handle_action( SucceedCommandAction( - private_result=None, command=aspirate_1, state_update=update_types.StateUpdate( liquid_operated=update_types.LiquidOperatedUpdate( @@ -150,7 +146,6 @@ def test_handles_load_liquid_and_aspirate(subject: WellStore) -> None: ) subject.handle_action( SucceedCommandAction( - private_result=None, command=aspirate_2, state_update=update_types.StateUpdate( liquid_operated=update_types.LiquidOperatedUpdate( @@ -199,7 +194,6 @@ def test_handles_liquid_probe_and_aspirate(subject: WellStore) -> None: subject.handle_action( SucceedCommandAction( - private_result=None, command=liquid_probe, state_update=update_types.StateUpdate( liquid_probed=update_types.LiquidProbedUpdate( @@ -214,7 +208,6 @@ def test_handles_liquid_probe_and_aspirate(subject: WellStore) -> None: ) subject.handle_action( SucceedCommandAction( - private_result=None, command=aspirate, state_update=update_types.StateUpdate( liquid_operated=update_types.LiquidOperatedUpdate( 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 c31c6a2e551..42c589ba7d3 100644 --- a/api/tests/opentrons/protocol_runner/test_legacy_command_mapper.py +++ b/api/tests/opentrons/protocol_runner/test_legacy_command_mapper.py @@ -117,7 +117,6 @@ def test_map_after_command() -> None: assert result == [ pe_actions.SucceedCommandAction( - private_result=None, command=pe_commands.Comment.construct( id="command.COMMENT-0", key="command.COMMENT-0", @@ -241,7 +240,6 @@ def test_command_stack() -> None: command_id="command.COMMENT-1", started_at=matchers.IsA(datetime) ), pe_actions.SucceedCommandAction( - private_result=None, command=pe_commands.Comment.construct( id="command.COMMENT-0", key="command.COMMENT-0", @@ -321,7 +319,6 @@ def test_map_labware_load(minimal_labware_def: LabwareDefinition) -> None: ), notes=[], ), - private_result=None, state_update=StateUpdate( loaded_labware=LoadedLabwareUpdate( labware_id="labware-0", @@ -381,7 +378,6 @@ def test_map_instrument_load(decoy: Decoy) -> None: result=pe_commands.LoadPipetteResult(pipetteId="pipette-0"), notes=[], ), - private_result=None, state_update=StateUpdate( loaded_pipette=LoadPipetteUpdate( pipette_id="pipette-0", @@ -460,7 +456,6 @@ def test_map_module_load( ), notes=[], ), - private_result=None, ) [result_queue, result_run, result_succeed] = LegacyCommandMapper( @@ -525,7 +520,6 @@ 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", @@ -584,7 +578,6 @@ def test_map_pause() -> None: started_at=matchers.IsA(datetime), ), pe_actions.SucceedCommandAction( - private_result=None, command=pe_commands.WaitForResume.construct( id="command.PAUSE-0", key="command.PAUSE-0", diff --git a/api/tests/opentrons/protocol_runner/test_legacy_context_plugin.py b/api/tests/opentrons/protocol_runner/test_legacy_context_plugin.py index 1714064bfa5..0ccc616012a 100644 --- a/api/tests/opentrons/protocol_runner/test_legacy_context_plugin.py +++ b/api/tests/opentrons/protocol_runner/test_legacy_context_plugin.py @@ -163,18 +163,14 @@ async def test_command_broker_messages( decoy.when( mock_legacy_command_mapper.map_command(command=legacy_command) - ).then_return( - [pe_actions.SucceedCommandAction(engine_command, private_result=None)] - ) + ).then_return([pe_actions.SucceedCommandAction(engine_command)]) await to_thread.run_sync(handler, legacy_command) await subject.teardown() decoy.verify( - mock_action_dispatcher.dispatch( - pe_actions.SucceedCommandAction(engine_command, private_result=None) - ) + mock_action_dispatcher.dispatch(pe_actions.SucceedCommandAction(engine_command)) ) @@ -222,9 +218,7 @@ async def test_equipment_broker_messages( decoy.when( mock_legacy_command_mapper.map_equipment_load(load_info=load_info) - ).then_return( - [pe_actions.SucceedCommandAction(command=engine_command, private_result=None)] - ) + ).then_return([pe_actions.SucceedCommandAction(command=engine_command)]) await to_thread.run_sync(handler, load_info) @@ -232,6 +226,6 @@ async def test_equipment_broker_messages( decoy.verify( mock_action_dispatcher.dispatch( - pe_actions.SucceedCommandAction(command=engine_command, private_result=None) + pe_actions.SucceedCommandAction(command=engine_command) ), ) From 5be0fa21925ce98e6cc04fb86786c86ee8f87114 Mon Sep 17 00:00:00 2001 From: Jethary Alcid <66035149+jerader@users.noreply.github.com> Date: Tue, 29 Oct 2024 12:19:15 -0400 Subject: [PATCH 21/81] fix(protocol-designer): custom labware should be uploadable (#16624) closes RQA-3427 --- .../pages/Designer/DeckSetup/HoveredItems.tsx | 8 +++- .../DeckSetup/SelectedHoveredItems.tsx | 44 +++++++++++-------- 2 files changed, 32 insertions(+), 20 deletions(-) diff --git a/protocol-designer/src/pages/Designer/DeckSetup/HoveredItems.tsx b/protocol-designer/src/pages/Designer/DeckSetup/HoveredItems.tsx index d2497cb200a..79bba166f88 100644 --- a/protocol-designer/src/pages/Designer/DeckSetup/HoveredItems.tsx +++ b/protocol-designer/src/pages/Designer/DeckSetup/HoveredItems.tsx @@ -58,6 +58,10 @@ export const HoveredItems = ( hoveredLabware != null ? defs[hoveredLabware] ?? customLabwareDefs[hoveredLabware] ?? null : null + const selectedLabwareDef = + selectedLabwareDefUri != null + ? defs[selectedLabwareDefUri] ?? customLabwareDefs[selectedLabwareDefUri] + : null const orientation = hoveredSlotPosition != null @@ -65,11 +69,11 @@ export const HoveredItems = ( : null const nestedInfo: DeckLabelProps[] = - selectedLabwareDefUri != null && + selectedLabwareDef != null && (hoveredLabware == null || hoveredLabware !== selectedLabwareDefUri) ? [ { - text: defs[selectedLabwareDefUri].metadata.displayName, + text: selectedLabwareDef.metadata.displayName, isLast: false, isSelected: true, }, diff --git a/protocol-designer/src/pages/Designer/DeckSetup/SelectedHoveredItems.tsx b/protocol-designer/src/pages/Designer/DeckSetup/SelectedHoveredItems.tsx index 78686519452..258f5fe07d6 100644 --- a/protocol-designer/src/pages/Designer/DeckSetup/SelectedHoveredItems.tsx +++ b/protocol-designer/src/pages/Designer/DeckSetup/SelectedHoveredItems.tsx @@ -53,6 +53,16 @@ export const SelectedHoveredItems = ( hoveredLabware != null ? defs[hoveredLabware] ?? customLabwareDefs[hoveredLabware] ?? null : null + const selectedLabwareDef = + selectedLabwareDefUri != null + ? defs[selectedLabwareDefUri] ?? customLabwareDefs[selectedLabwareDefUri] + : null + const selectedNestedLabwareDef = + selectedNestedLabwareDefUri != null + ? defs[selectedNestedLabwareDefUri] ?? + customLabwareDefs[selectedNestedLabwareDefUri] + : null + const orientation = slotPosition != null ? inferModuleOrientationFromXCoordinate(slotPosition[0]) @@ -64,7 +74,8 @@ export const SelectedHoveredItems = ( selectedLabwareDefUri != null && (hoveredLabware == null || hoveredLabware !== selectedLabwareDefUri) ) { - const def = defs[selectedLabwareDefUri] + const def = + defs[selectedLabwareDefUri] ?? customLabwareDefs[selectedLabwareDefUri] const selectedLabwareLabel = { text: def.metadata.displayName, isSelected: true, @@ -72,10 +83,9 @@ export const SelectedHoveredItems = ( } labwareInfos.push(selectedLabwareLabel) } - if (selectedNestedLabwareDefUri != null && hoveredLabware == null) { - const def = defs[selectedNestedLabwareDefUri] + if (selectedNestedLabwareDef != null && hoveredLabware == null) { const selectedNestedLabwareLabel = { - text: def.metadata.displayName, + text: selectedNestedLabwareDef.metadata.displayName, isSelected: true, isLast: hoveredLabware == null, } @@ -122,20 +132,18 @@ export const SelectedHoveredItems = ( orientation={orientation} > <> - {selectedLabwareDefUri != null && + {selectedLabwareDef != null && selectedModuleModel != null && hoveredLabware == null ? ( - + ) : null} - {selectedNestedLabwareDefUri != null && + {selectedNestedLabwareDef != null && selectedModuleModel != null && hoveredLabware == null ? ( - + ) : null} {hoveredLabwareDef != null && selectedModuleModel != null ? ( @@ -157,41 +165,41 @@ export const SelectedHoveredItems = ( ) : null} ) : null} - {selectedLabwareDefUri != null && + {selectedLabwareDef != null && slotPosition != null && selectedModuleModel == null && hoveredLabware == null ? ( <> - + {selectedNestedLabwareDefUri == null ? ( ) : null} ) : null} - {selectedNestedLabwareDefUri != null && + {selectedNestedLabwareDef != null && slotPosition != null && selectedModuleModel == null && hoveredLabware == null ? ( <> - + - {selectedLabwareDefUri != null ? ( + {selectedLabwareDef != null ? ( Date: Tue, 29 Oct 2024 12:19:39 -0400 Subject: [PATCH 22/81] fix(protocol-designer): hide flex deck riser from PD for now (#16625) closes RQA-3444 --- shared-data/js/getLabware.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/shared-data/js/getLabware.ts b/shared-data/js/getLabware.ts index 6fd22f1f5d4..41949e01d9a 100644 --- a/shared-data/js/getLabware.ts +++ b/shared-data/js/getLabware.ts @@ -57,8 +57,9 @@ export const PD_DO_NOT_LIST = [ 'opentrons_96_flat_bottom_adapter_nest_wellplate_200ul_flat', 'opentrons_96_deep_well_adapter_nest_wellplate_2ml_deep', 'opentrons_96_pcr_adapter_armadillo_wellplate_200ul', - // temporarily blocking TC lid adapter until it is supported in PD + // temporarily blocking TC lid adapter and deck riser until it is supported in PD 'opentrons_tough_pcr_auto_sealing_lid', + 'opentrons_flex_deck_riser', ] export function getIsLabwareV1Tiprack(def: LabwareDefinition1): boolean { From 4530e4e3279f6d264b1e44830ef1b38c8029b20d Mon Sep 17 00:00:00 2001 From: Jethary Alcid <66035149+jerader@users.noreply.github.com> Date: Tue, 29 Oct 2024 12:21:39 -0400 Subject: [PATCH 23/81] =?UTF-8?q?fix(protocol-designer):=20deck=20thumbnai?= =?UTF-8?q?l=20reflects=20liquids=20at=20starting=20d=E2=80=A6=20(#16626)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …eck state closes AUTH-816 --- protocol-designer/src/pages/Designer/index.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/protocol-designer/src/pages/Designer/index.tsx b/protocol-designer/src/pages/Designer/index.tsx index 6dfd952ba97..84b1f7f20d8 100644 --- a/protocol-designer/src/pages/Designer/index.tsx +++ b/protocol-designer/src/pages/Designer/index.tsx @@ -181,6 +181,7 @@ export function Designer(): JSX.Element { onClick={() => { if (hasTrashEntity) { navigate('/overview') + dispatch(selectTerminalItem('__initial_setup__')) } else { makeSnackbar(t('trash_required') as string) } From 417451c91bc32edb59aa54d826fa79d7a277a3aa Mon Sep 17 00:00:00 2001 From: Sarah Breen Date: Tue, 29 Oct 2024 14:58:43 -0400 Subject: [PATCH 24/81] feat(app): special case absorbance reader setup modal (#16629) Fix PLAT-570 --- ...orbance_reader_instruction_manual_code.png | Bin 0 -> 1327 bytes .../localization/en/protocol_setup.json | 1 + .../SetupModuleAndDeck/SetupModulesList.tsx | 24 ++++++++------- .../__tests__/SetupModulesList.test.tsx | 1 + .../organisms/ModuleCard/ModuleSetupModal.tsx | 28 ++++++++++++++---- .../__tests__/ModuleSetupModal.test.tsx | 19 ++++++++++++ 6 files changed, 57 insertions(+), 16 deletions(-) create mode 100644 app/src/assets/images/absorbance_reader_instruction_manual_code.png diff --git a/app/src/assets/images/absorbance_reader_instruction_manual_code.png b/app/src/assets/images/absorbance_reader_instruction_manual_code.png new file mode 100644 index 0000000000000000000000000000000000000000..70c45ab3b5670226f4132e60e9833148d5a678bc GIT binary patch literal 1327 zcmV+~1!wRyd=kr&fugiNcqG*fO5c&@? zXbu{Z2!ob}h9GK)sIAGVprzz??tOwnv3!rQ|Rw@}+R?};W z?;Rd`vUI~{F-=<#EdM|C_2gzB#>K2gvw9dkNZypsuNHTogOli9{%p=R0Q`_b2D2Q% zqY`V|4imgbJZ#ZY#1+8>mrn#|T)vQ*F|wb@|`>Abj{|%U_bIvc@-h3T6n+E)~wl@|92K#~A8q+OZT0JChJ`a4H0t0Da=$?Ak z?R+HcZXbvPeXpE$+08b{#>DJe4OA0y{O4wLFfTfJ%+JNTh;Y;3PEzazd31_tJ4 zW;4a)?w@8)_s!67?_tZ-x_D5XU8>KT095_2IlpQw>T=_ zW0IWa#lBkv3=GT*7(XHy>r-Jd7orDZ_ypF1al6$7NOx;e}sX7DPa5@Ut3v=vFhPJmB#~B>2Yn9FfcF`jMiP( zepN)FRoWQA#HJ?<3`_|Vp`lc3y6X0S91&8tw+RLYriA(Rc53+?g66~eUvPvy&eOII z0|QgQ==UVgJ>9f~89n^$%xOMsKmQA0U|FLg2?hq{ex^lg5utHb=lzD0M(a6)ZUF-Wb3e14omiZDxaWu^CJnl+ zMLZA&2Bw6W&gPes3;D2ue#GgSTVP;dGUIWzH}^fyUA2=E&rqfxO=J}?FfcbW>fuW2 zqZ6`cQXd_#ReAy~|E%UMU|?YGW;CQ)-#k$&Jk4$oMlI5EtzJN3U|s?NLpu+H@Fc=t^`( - false - ) + const [showModuleSetupModal, setShowModuleSetupModal] = useState< + string | null + >(null) const [ showLocationConflictModal, setShowLocationConflictModal, @@ -204,7 +204,10 @@ export function ModulesListItem({ }) let subText: JSX.Element | null = null - if (moduleModel === HEATERSHAKER_MODULE_V1) { + if ( + moduleModel === HEATERSHAKER_MODULE_V1 || + moduleModel === ABSORBANCE_READER_V1 + ) { subText = ( { - setShowModuleSetupModal(true) + setShowModuleSetupModal(displayName) }} > @@ -328,14 +331,13 @@ export function ModulesListItem({ padding={SPACING.spacing16} backgroundColor={COLORS.white} > - {showModuleSetupModal && heaterShakerModuleFromProtocol != null ? ( + {showModuleSetupModal != null ? ( { - setShowModuleSetupModal(false) + setShowModuleSetupModal(null) }} - moduleDisplayName={ - heaterShakerModuleFromProtocol.moduleDef.displayName - } + moduleDisplayName={showModuleSetupModal} + isAbsorbanceReader={moduleModel === ABSORBANCE_READER_V1} /> ) : null} { id: 'heatershaker_id', model: 'heaterShakerModuleV1', moduleType: 'heaterShakerModuleType', + displayName: 'mockHeaterShakerName', serialNumber: 'jkl123', hardwareRevision: 'heatershaker_v4.0', firmwareVersion: 'v2.0.0', diff --git a/app/src/organisms/ModuleCard/ModuleSetupModal.tsx b/app/src/organisms/ModuleCard/ModuleSetupModal.tsx index 16d3dec77d2..91696be776f 100644 --- a/app/src/organisms/ModuleCard/ModuleSetupModal.tsx +++ b/app/src/organisms/ModuleCard/ModuleSetupModal.tsx @@ -1,6 +1,7 @@ import { useTranslation } from 'react-i18next' import { createPortal } from 'react-dom' -import code from '/app/assets/images/module_instruction_code.png' +import helpCenterQRCode from '/app/assets/images/module_instruction_code.png' +import absorbanceReaderManualQRCode from '/app/assets/images/absorbance_reader_instruction_manual_code.png' import { ALIGN_FLEX_END, DIRECTION_COLUMN, @@ -17,14 +18,17 @@ import { import { getTopPortalEl } from '/app/App/portal' const MODULE_SETUP_URL = 'https://support.opentrons.com/s/modules' +const ABSORBANCE_READER_MANUAL_URL = + 'https://insights.opentrons.com/hubfs/Absorbance%20Plate%20Reader%20Instruction%20Manual.pdf' interface ModuleSetupModalProps { close: () => void moduleDisplayName: string + isAbsorbanceReader?: boolean } export const ModuleSetupModal = (props: ModuleSetupModalProps): JSX.Element => { - const { moduleDisplayName } = props + const { moduleDisplayName, isAbsorbanceReader } = props const { t, i18n } = useTranslation(['protocol_setup', 'shared', 'branded']) return createPortal( @@ -41,12 +45,18 @@ export const ModuleSetupModal = (props: ModuleSetupModalProps): JSX.Element => { width="50%" > - {t('branded:modal_instructions')} + {isAbsorbanceReader + ? t('module_instructions_manual') + : t('branded:modal_instructions')} { /> - + {i18n.format(t('shared:close'), 'capitalize')} diff --git a/app/src/organisms/ModuleCard/__tests__/ModuleSetupModal.test.tsx b/app/src/organisms/ModuleCard/__tests__/ModuleSetupModal.test.tsx index 7f24a60bc7c..87f340b2845 100644 --- a/app/src/organisms/ModuleCard/__tests__/ModuleSetupModal.test.tsx +++ b/app/src/organisms/ModuleCard/__tests__/ModuleSetupModal.test.tsx @@ -47,4 +47,23 @@ describe('ModuleSetupModal', () => { fireEvent.click(closeButton) expect(props.close).toHaveBeenCalled() }) + it('should render variable copy and link if absorbance reader', () => { + props = { + ...props, + isAbsorbanceReader: true, + } + render(props) + screen.getByText( + 'For step-by-step instructions on setting up your module, consult the Quickstart Guide that came in its box. You can also click the link below or scan the QR code to read the module Instruction Manual.' + ) + expect( + screen + .getByRole('link', { + name: 'mockModuleDisplayName setup instructions', + }) + .getAttribute('href') + ).toBe( + 'https://insights.opentrons.com/hubfs/Absorbance%20Plate%20Reader%20Instruction%20Manual.pdf' + ) + }) }) From 272c4b6cd2daa0751875d014e38e9113abe9b4c6 Mon Sep 17 00:00:00 2001 From: Brayan Almonte Date: Tue, 29 Oct 2024 15:51:04 -0400 Subject: [PATCH 25/81] feat(api, robot-server, app): Handle the Plate Reader lid while held by the gripper when the Estop is pressed. (#16574) We don't want customers manually handling the Plate Reader lid as this can cause damage to the device when you press the estop while the gripper is holding the plate reader lid it will eventually home the gantry and hold onto the lid. When a new protocol is started the gripper jaws will open, causing the plate reader lid to fall and potentially get damaged. This pull request makes it so we automatically place the plate reader lid in its dock (staging area) when the robot resumes operating after physically and logically disengaging the e-stop. - Add a new `unsafe/placeLabware` command to PE to place labware the gripper is already holding on to. - Add a new `placeLabwareState` to the `runs/{run_id}/currentState` endpoint to inform the client of the plate reader lid. - Add a new `usePlacePlateReaderLid` hook on the client to conditionally call the `unsafe/placeLabware` command when the `placeLabwareState` returns the appropriate values. - Fix an issue with the plate reader disconnecting when the estop was pressed - Fix an issue where the plate reader lid was not loaded if the module was added during module setup. --- api-client/src/runs/types.ts | 9 + .../modules/absorbance_reader.py | 11 +- api/src/opentrons/motion_planning/__init__.py | 2 + .../opentrons/motion_planning/waypoints.py | 32 +++ .../protocol_api/core/engine/module_core.py | 2 +- .../protocol_api/core/engine/protocol.py | 35 ++-- api/src/opentrons/protocol_api/core/module.py | 2 +- .../opentrons/protocol_api/module_contexts.py | 4 +- .../commands/command_unions.py | 5 + .../commands/unsafe/__init__.py | 15 ++ .../commands/unsafe/unsafe_place_labware.py | 194 ++++++++++++++++++ app/src/App/OnDeviceDisplayApp.tsx | 2 +- .../EmergencyStop/EstopMissingModal.tsx | 6 +- .../EmergencyStop/EstopPressedModal.tsx | 101 +++++---- .../organisms/EmergencyStop/EstopTakeover.tsx | 96 ++++----- .../__tests__/EstopPressedModal.test.tsx | 48 ++++- app/src/resources/modules/hooks/index.ts | 1 + .../modules/hooks/usePlacePlateReaderLid.ts | 82 ++++++++ .../robot_server/runs/router/base_router.py | 71 ++++++- robot-server/robot_server/runs/run_models.py | 17 +- .../notifications/publisher_notifier.py | 2 + robot-server/tests/runs/router/conftest.py | 7 + .../tests/runs/router/test_base_router.py | 37 +++- shared-data/command/schemas/10.json | 67 +++++- shared-data/command/types/setup.ts | 6 + shared-data/command/types/unsafe.ts | 22 +- 26 files changed, 714 insertions(+), 162 deletions(-) create mode 100644 api/src/opentrons/protocol_engine/commands/unsafe/unsafe_place_labware.py create mode 100644 app/src/resources/modules/hooks/usePlacePlateReaderLid.ts diff --git a/api-client/src/runs/types.ts b/api-client/src/runs/types.ts index 9a34c2b4978..621443dce03 100644 --- a/api-client/src/runs/types.ts +++ b/api-client/src/runs/types.ts @@ -8,6 +8,7 @@ import type { RunTimeCommand, RunTimeParameter, NozzleLayoutConfig, + OnDeckLabwareLocation, } from '@opentrons/shared-data' import type { ResourceLink, ErrorDetails } from '../types' export * from './commands/types' @@ -117,7 +118,9 @@ export interface Runs { } export interface RunCurrentStateData { + estopEngaged: boolean activeNozzleLayouts: Record // keyed by pipetteId + placeLabwareState?: PlaceLabwareState } export const RUN_ACTION_TYPE_PLAY: 'play' = 'play' @@ -209,3 +212,9 @@ export interface NozzleLayoutValues { activeNozzles: string[] config: NozzleLayoutConfig } + +export interface PlaceLabwareState { + labwareId: string + location: OnDeckLabwareLocation + shouldPlaceDown: boolean +} diff --git a/api/src/opentrons/hardware_control/modules/absorbance_reader.py b/api/src/opentrons/hardware_control/modules/absorbance_reader.py index da7c4746086..ab6ce1bb22b 100644 --- a/api/src/opentrons/hardware_control/modules/absorbance_reader.py +++ b/api/src/opentrons/hardware_control/modules/absorbance_reader.py @@ -272,12 +272,8 @@ def usb_port(self) -> USBPort: return self._usb_port async def deactivate(self, must_be_running: bool = True) -> None: - """Deactivate the module. - - Contains an override to the `wait_for_is_running` step in cases where the - module must be deactivated regardless of context.""" - await self._poller.stop() - await self._driver.disconnect() + """Deactivate the module.""" + pass async def wait_for_is_running(self) -> None: if not self.is_simulated: @@ -336,7 +332,8 @@ async def cleanup(self) -> None: Clean up, i.e. stop pollers, disconnect serial, etc in preparation for object destruction. """ - await self.deactivate() + await self._poller.stop() + await self._driver.disconnect() async def set_sample_wavelength( self, diff --git a/api/src/opentrons/motion_planning/__init__.py b/api/src/opentrons/motion_planning/__init__.py index 570d4250ebe..2b304ecb74d 100644 --- a/api/src/opentrons/motion_planning/__init__.py +++ b/api/src/opentrons/motion_planning/__init__.py @@ -6,6 +6,7 @@ MINIMUM_Z_MARGIN, get_waypoints, get_gripper_labware_movement_waypoints, + get_gripper_labware_placement_waypoints, ) from .types import Waypoint, MoveType @@ -27,4 +28,5 @@ "ArcOutOfBoundsError", "get_waypoints", "get_gripper_labware_movement_waypoints", + "get_gripper_labware_placement_waypoints", ] diff --git a/api/src/opentrons/motion_planning/waypoints.py b/api/src/opentrons/motion_planning/waypoints.py index b9c62114215..bcc56ad7eda 100644 --- a/api/src/opentrons/motion_planning/waypoints.py +++ b/api/src/opentrons/motion_planning/waypoints.py @@ -181,3 +181,35 @@ def get_gripper_labware_movement_waypoints( ) ) return waypoints_with_jaw_status + + +def get_gripper_labware_placement_waypoints( + to_labware_center: Point, + gripper_home_z: float, + drop_offset: Optional[Point], +) -> List[GripperMovementWaypointsWithJawStatus]: + """Get waypoints for placing labware using a gripper.""" + drop_offset = drop_offset or Point() + + drop_location = to_labware_center + Point( + drop_offset.x, drop_offset.y, drop_offset.z + ) + + post_drop_home_pos = Point(drop_location.x, drop_location.y, gripper_home_z) + + return [ + GripperMovementWaypointsWithJawStatus( + position=Point(drop_location.x, drop_location.y, gripper_home_z), + jaw_open=False, + dropping=False, + ), + GripperMovementWaypointsWithJawStatus( + position=drop_location, jaw_open=False, dropping=False + ), + # Gripper ungrips here + GripperMovementWaypointsWithJawStatus( + position=post_drop_home_pos, + jaw_open=True, + dropping=True, + ), + ] 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 1d800dee7ea..9f2785b7432 100644 --- a/api/src/opentrons/protocol_api/core/engine/module_core.py +++ b/api/src/opentrons/protocol_api/core/engine/module_core.py @@ -586,7 +586,7 @@ def initialize( ) self._initialized_value = wavelengths - def read(self, filename: Optional[str]) -> Dict[int, Dict[str, float]]: + def read(self, filename: Optional[str] = None) -> Dict[int, Dict[str, float]]: """Initiate a read on the Absorbance Reader, and return the results. During Analysis, this will return a measurement of zero for all wells.""" wavelengths = self._engine_client.state.modules.get_absorbance_reader_substate( self.module_id diff --git a/api/src/opentrons/protocol_api/core/engine/protocol.py b/api/src/opentrons/protocol_api/core/engine/protocol.py index 0ed5270320a..dac8bc44a5b 100644 --- a/api/src/opentrons/protocol_api/core/engine/protocol.py +++ b/api/src/opentrons/protocol_api/core/engine/protocol.py @@ -449,9 +449,10 @@ def load_module( # When the protocol engine is created, we add Module Lids as part of the deck fixed labware # If a valid module exists in the deck config. For analysis, we add the labware here since - # deck fixed labware is not created under the same conditions. - if self._engine_client.state.config.use_virtual_modules: - self._load_virtual_module_lid(module_core) + # deck fixed labware is not created under the same conditions. We also need to inject the Module + # lids when the module isnt already on the deck config, like when adding a new + # module during a protocol setup. + self._load_virtual_module_lid(module_core) self._module_cores_by_id[module_core.module_id] = module_core @@ -461,20 +462,24 @@ def _load_virtual_module_lid( self, module_core: Union[ModuleCore, NonConnectedModuleCore] ) -> None: if isinstance(module_core, AbsorbanceReaderCore): - lid = self._engine_client.execute_command_without_recovery( - cmd.LoadLabwareParams( - loadName="opentrons_flex_lid_absorbance_plate_reader_module", - location=ModuleLocation(moduleId=module_core.module_id), - namespace="opentrons", - version=1, - displayName="Absorbance Reader Lid", - ) + substate = self._engine_client.state.modules.get_absorbance_reader_substate( + module_core.module_id ) + if substate.lid_id is None: + lid = self._engine_client.execute_command_without_recovery( + cmd.LoadLabwareParams( + loadName="opentrons_flex_lid_absorbance_plate_reader_module", + location=ModuleLocation(moduleId=module_core.module_id), + namespace="opentrons", + version=1, + displayName="Absorbance Reader Lid", + ) + ) - self._engine_client.add_absorbance_reader_lid( - module_id=module_core.module_id, - lid_id=lid.labwareId, - ) + self._engine_client.add_absorbance_reader_lid( + module_id=module_core.module_id, + lid_id=lid.labwareId, + ) def _create_non_connected_module_core( self, load_module_result: LoadModuleResult diff --git a/api/src/opentrons/protocol_api/core/module.py b/api/src/opentrons/protocol_api/core/module.py index c93e8ce8de8..e24fbbc54b0 100644 --- a/api/src/opentrons/protocol_api/core/module.py +++ b/api/src/opentrons/protocol_api/core/module.py @@ -365,7 +365,7 @@ def initialize( """Initialize the Absorbance Reader by taking zero reading.""" @abstractmethod - def read(self, filename: Optional[str]) -> Dict[int, Dict[str, float]]: + def read(self, filename: Optional[str] = None) -> Dict[int, Dict[str, float]]: """Get an absorbance reading from the Absorbance Reader.""" @abstractmethod diff --git a/api/src/opentrons/protocol_api/module_contexts.py b/api/src/opentrons/protocol_api/module_contexts.py index f7541da1836..9ae550f8d3f 100644 --- a/api/src/opentrons/protocol_api/module_contexts.py +++ b/api/src/opentrons/protocol_api/module_contexts.py @@ -1035,7 +1035,9 @@ def initialize( ) @requires_version(2, 21) - def read(self, export_filename: Optional[str]) -> Dict[int, Dict[str, float]]: + def read( + self, export_filename: Optional[str] = None + ) -> Dict[int, Dict[str, float]]: """Initiate read on the Absorbance Reader. Returns a dictionary of wavelengths to dictionary of values ordered by well name. diff --git a/api/src/opentrons/protocol_engine/commands/command_unions.py b/api/src/opentrons/protocol_engine/commands/command_unions.py index 146b688253f..0e0a4cf3112 100644 --- a/api/src/opentrons/protocol_engine/commands/command_unions.py +++ b/api/src/opentrons/protocol_engine/commands/command_unions.py @@ -392,6 +392,7 @@ unsafe.UpdatePositionEstimators, unsafe.UnsafeEngageAxes, unsafe.UnsafeUngripLabware, + unsafe.UnsafePlaceLabware, ], Field(discriminator="commandType"), ] @@ -469,6 +470,7 @@ unsafe.UpdatePositionEstimatorsParams, unsafe.UnsafeEngageAxesParams, unsafe.UnsafeUngripLabwareParams, + unsafe.UnsafePlaceLabwareParams, ] CommandType = Union[ @@ -544,6 +546,7 @@ unsafe.UpdatePositionEstimatorsCommandType, unsafe.UnsafeEngageAxesCommandType, unsafe.UnsafeUngripLabwareCommandType, + unsafe.UnsafePlaceLabwareCommandType, ] CommandCreate = Annotated[ @@ -620,6 +623,7 @@ unsafe.UpdatePositionEstimatorsCreate, unsafe.UnsafeEngageAxesCreate, unsafe.UnsafeUngripLabwareCreate, + unsafe.UnsafePlaceLabwareCreate, ], Field(discriminator="commandType"), ] @@ -697,6 +701,7 @@ unsafe.UpdatePositionEstimatorsResult, unsafe.UnsafeEngageAxesResult, unsafe.UnsafeUngripLabwareResult, + unsafe.UnsafePlaceLabwareResult, ] diff --git a/api/src/opentrons/protocol_engine/commands/unsafe/__init__.py b/api/src/opentrons/protocol_engine/commands/unsafe/__init__.py index 72698a3b0f2..eb138d89914 100644 --- a/api/src/opentrons/protocol_engine/commands/unsafe/__init__.py +++ b/api/src/opentrons/protocol_engine/commands/unsafe/__init__.py @@ -40,6 +40,15 @@ ) +from .unsafe_place_labware import ( + UnsafePlaceLabwareCommandType, + UnsafePlaceLabwareParams, + UnsafePlaceLabwareResult, + UnsafePlaceLabware, + UnsafePlaceLabwareCreate, +) + + __all__ = [ # Unsafe blow-out-in-place command models "UnsafeBlowOutInPlaceCommandType", @@ -71,4 +80,10 @@ "UnsafeUngripLabwareResult", "UnsafeUngripLabware", "UnsafeUngripLabwareCreate", + # Unsafe place labware + "UnsafePlaceLabwareCommandType", + "UnsafePlaceLabwareParams", + "UnsafePlaceLabwareResult", + "UnsafePlaceLabware", + "UnsafePlaceLabwareCreate", ] diff --git a/api/src/opentrons/protocol_engine/commands/unsafe/unsafe_place_labware.py b/api/src/opentrons/protocol_engine/commands/unsafe/unsafe_place_labware.py new file mode 100644 index 00000000000..547b8416637 --- /dev/null +++ b/api/src/opentrons/protocol_engine/commands/unsafe/unsafe_place_labware.py @@ -0,0 +1,194 @@ +"""Place labware payload, result, and implementaiton.""" + +from __future__ import annotations +from pydantic import BaseModel, Field +from typing import TYPE_CHECKING, Optional, Type, cast +from typing_extensions import Literal + +from opentrons.hardware_control.types import Axis, OT3Mount +from opentrons.motion_planning.waypoints import get_gripper_labware_placement_waypoints +from opentrons.protocol_engine.errors.exceptions import ( + CannotPerformGripperAction, + GripperNotAttachedError, +) +from opentrons.types import Point + +from ...types import DeckSlotLocation, ModuleModel, OnDeckLabwareLocation +from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData +from ...errors.error_occurrence import ErrorOccurrence +from ...resources import ensure_ot3_hardware +from ...state.update_types import StateUpdate + +from opentrons.hardware_control import HardwareControlAPI, OT3HardwareControlAPI + +if TYPE_CHECKING: + from ...state.state import StateView + from ...execution.equipment import EquipmentHandler + + +UnsafePlaceLabwareCommandType = Literal["unsafe/placeLabware"] + + +class UnsafePlaceLabwareParams(BaseModel): + """Payload required for an UnsafePlaceLabware command.""" + + labwareId: str = Field(..., description="The id of the labware to place.") + location: OnDeckLabwareLocation = Field( + ..., description="Where to place the labware." + ) + + +class UnsafePlaceLabwareResult(BaseModel): + """Result data from the execution of an UnsafePlaceLabware command.""" + + +class UnsafePlaceLabwareImplementation( + AbstractCommandImpl[ + UnsafePlaceLabwareParams, + SuccessData[UnsafePlaceLabwareResult], + ] +): + """The UnsafePlaceLabware command implementation.""" + + def __init__( + self, + hardware_api: HardwareControlAPI, + state_view: StateView, + equipment: EquipmentHandler, + **kwargs: object, + ) -> None: + self._hardware_api = hardware_api + self._state_view = state_view + self._equipment = equipment + + async def execute( + self, params: UnsafePlaceLabwareParams + ) -> SuccessData[UnsafePlaceLabwareResult]: + """Place Labware. + + This command is used only when the gripper is in the middle of moving + labware but is interrupted before completing the move. (i.e., the e-stop + is pressed, get into error recovery, etc). + + Unlike the `moveLabware` command, where you pick a source and destination + location, this command takes the labwareId to be moved and location to + move it to. + + """ + ot3api = ensure_ot3_hardware(self._hardware_api) + if not ot3api.has_gripper(): + raise GripperNotAttachedError("No gripper found to perform labware place.") + + if ot3api.gripper_jaw_can_home(): + raise CannotPerformGripperAction( + "Cannot place labware when gripper is not gripping." + ) + + # Allow propagation of LabwareNotLoadedError. + labware_id = params.labwareId + definition_uri = self._state_view.labware.get(labware_id).definitionUri + final_offsets = self._state_view.labware.get_labware_gripper_offsets( + labware_id, None + ) + drop_offset = cast(Point, final_offsets.dropOffset) if final_offsets else None + + if isinstance(params.location, DeckSlotLocation): + self._state_view.addressable_areas.raise_if_area_not_in_deck_configuration( + params.location.slotName.id + ) + + location = self._state_view.geometry.ensure_valid_gripper_location( + params.location, + ) + + # This is an absorbance reader, move the lid to its dock (staging area). + if isinstance(location, DeckSlotLocation): + module = self._state_view.modules.get_by_slot(location.slotName) + if module and module.model == ModuleModel.ABSORBANCE_READER_V1: + location = self._state_view.modules.absorbance_reader_dock_location( + module.id + ) + + new_offset_id = self._equipment.find_applicable_labware_offset_id( + labware_definition_uri=definition_uri, + labware_location=location, + ) + + # NOTE: When the estop is pressed, the gantry loses position, + # so the robot needs to home x, y to sync. + await ot3api.home(axes=[Axis.Z_L, Axis.Z_R, Axis.Z_G, Axis.X, Axis.Y]) + state_update = StateUpdate() + + # Place the labware down + await self._start_movement(ot3api, labware_id, location, drop_offset) + + state_update.set_labware_location( + labware_id=labware_id, + new_location=location, + new_offset_id=new_offset_id, + ) + return SuccessData(public=UnsafePlaceLabwareResult(), state_update=state_update) + + async def _start_movement( + self, + ot3api: OT3HardwareControlAPI, + labware_id: str, + location: OnDeckLabwareLocation, + drop_offset: Optional[Point], + ) -> None: + gripper_homed_position = await ot3api.gantry_position( + mount=OT3Mount.GRIPPER, + refresh=True, + ) + + to_labware_center = self._state_view.geometry.get_labware_grip_point( + labware_id=labware_id, location=location + ) + + movement_waypoints = get_gripper_labware_placement_waypoints( + to_labware_center=to_labware_center, + gripper_home_z=gripper_homed_position.z, + drop_offset=drop_offset, + ) + + # start movement + for waypoint_data in movement_waypoints: + if waypoint_data.jaw_open: + if waypoint_data.dropping: + # This `disengage_axes` step is important in order to engage + # the electronic brake on the Z axis of the gripper. The brake + # has a stronger holding force on the axis than the hold current, + # and prevents the axis from spuriously dropping when e.g. the notch + # on the side of a falling tiprack catches the jaw. + await ot3api.disengage_axes([Axis.Z_G]) + await ot3api.ungrip() + if waypoint_data.dropping: + # We lost the position estimation after disengaging the axis, so + # it is necessary to home it next + await ot3api.home_z(OT3Mount.GRIPPER) + await ot3api.move_to( + mount=OT3Mount.GRIPPER, abs_position=waypoint_data.position + ) + + +class UnsafePlaceLabware( + BaseCommand[UnsafePlaceLabwareParams, UnsafePlaceLabwareResult, ErrorOccurrence] +): + """UnsafePlaceLabware command model.""" + + commandType: UnsafePlaceLabwareCommandType = "unsafe/placeLabware" + params: UnsafePlaceLabwareParams + result: Optional[UnsafePlaceLabwareResult] + + _ImplementationCls: Type[ + UnsafePlaceLabwareImplementation + ] = UnsafePlaceLabwareImplementation + + +class UnsafePlaceLabwareCreate(BaseCommandCreate[UnsafePlaceLabwareParams]): + """UnsafePlaceLabware command request model.""" + + commandType: UnsafePlaceLabwareCommandType = "unsafe/placeLabware" + params: UnsafePlaceLabwareParams + + _CommandCls: Type[UnsafePlaceLabware] = UnsafePlaceLabware diff --git a/app/src/App/OnDeviceDisplayApp.tsx b/app/src/App/OnDeviceDisplayApp.tsx index 7be1070ca12..2e2217ce20e 100644 --- a/app/src/App/OnDeviceDisplayApp.tsx +++ b/app/src/App/OnDeviceDisplayApp.tsx @@ -191,9 +191,9 @@ export const OnDeviceDisplayApp = (): JSX.Element => { ) : ( <> - + diff --git a/app/src/organisms/EmergencyStop/EstopMissingModal.tsx b/app/src/organisms/EmergencyStop/EstopMissingModal.tsx index 3b862a94a9d..07fe453c932 100644 --- a/app/src/organisms/EmergencyStop/EstopMissingModal.tsx +++ b/app/src/organisms/EmergencyStop/EstopMissingModal.tsx @@ -42,7 +42,7 @@ export function EstopMissingModal({ ) : ( <> - {isDismissedModal === false ? ( + {!isDismissedModal ? ( - {t('estop_missing_description', { robotName: robotName })} + {t('estop_missing_description', { robotName })}
    @@ -121,7 +121,7 @@ function DesktopModal({ {t('connect_the_estop_to_continue')} - {t('estop_missing_description', { robotName: robotName })} + {t('estop_missing_description', { robotName })}
    diff --git a/app/src/organisms/EmergencyStop/EstopPressedModal.tsx b/app/src/organisms/EmergencyStop/EstopPressedModal.tsx index 8dc996c3374..7c78de6b8e2 100644 --- a/app/src/organisms/EmergencyStop/EstopPressedModal.tsx +++ b/app/src/organisms/EmergencyStop/EstopPressedModal.tsx @@ -24,6 +24,7 @@ import { import { useAcknowledgeEstopDisengageMutation } from '@opentrons/react-api-client' +import { usePlacePlateReaderLid } from '/app/resources/modules' import { getTopPortalEl } from '/app/App/portal' import { SmallButton } from '/app/atoms/buttons' import { OddModal } from '/app/molecules/OddModal' @@ -40,19 +41,15 @@ import type { ModalProps } from '@opentrons/components' interface EstopPressedModalProps { isEngaged: boolean closeModal: () => void - isDismissedModal?: boolean - setIsDismissedModal?: (isDismissedModal: boolean) => void - isWaitingForLogicalDisengage: boolean - setShouldSeeLogicalDisengage: () => void + isWaitingForResumeOperation: boolean + setIsWaitingForResumeOperation: () => void } export function EstopPressedModal({ isEngaged, closeModal, - isDismissedModal, - setIsDismissedModal, - isWaitingForLogicalDisengage, - setShouldSeeLogicalDisengage, + isWaitingForResumeOperation, + setIsWaitingForResumeOperation, }: EstopPressedModalProps): JSX.Element { const isOnDevice = useSelector(getIsOnDevice) return createPortal( @@ -60,20 +57,17 @@ export function EstopPressedModal({ ) : ( <> - {isDismissedModal === false ? ( - - ) : null} + ), getTopPortalEl() @@ -83,12 +77,19 @@ export function EstopPressedModal({ function TouchscreenModal({ isEngaged, closeModal, - isWaitingForLogicalDisengage, - setShouldSeeLogicalDisengage, + isWaitingForResumeOperation, + setIsWaitingForResumeOperation, }: EstopPressedModalProps): JSX.Element { const { t } = useTranslation(['device_settings', 'branded']) const [isResuming, setIsResuming] = React.useState(false) const { acknowledgeEstopDisengage } = useAcknowledgeEstopDisengageMutation() + + const { + handlePlaceReaderLid, + isValidPlateReaderMove, + } = usePlacePlateReaderLid({ + onSettled: closeModal, + }) const modalHeader: OddModalHeaderBaseProps = { title: t('estop_pressed'), iconName: 'ot-alert', @@ -100,9 +101,12 @@ function TouchscreenModal({ } const handleClick = (): void => { setIsResuming(true) + setIsWaitingForResumeOperation() acknowledgeEstopDisengage(null) - setShouldSeeLogicalDisengage() - closeModal() + handlePlaceReaderLid() + if (!isValidPlateReaderMove) { + closeModal() + } } return ( @@ -131,15 +135,13 @@ function TouchscreenModal({ data-testid="Estop_pressed_button" width="100%" iconName={ - isResuming || isWaitingForLogicalDisengage - ? 'ot-spinner' - : undefined + isResuming || isWaitingForResumeOperation ? 'ot-spinner' : undefined } iconPlacement={ - isResuming || isWaitingForLogicalDisengage ? 'startIcon' : undefined + isResuming || isWaitingForResumeOperation ? 'startIcon' : undefined } buttonText={t('resume_robot_operations')} - disabled={isEngaged || isResuming || isWaitingForLogicalDisengage} + disabled={isEngaged || isResuming || isWaitingForResumeOperation} onClick={handleClick} />
    @@ -150,25 +152,23 @@ function TouchscreenModal({ function DesktopModal({ isEngaged, closeModal, - setIsDismissedModal, - isWaitingForLogicalDisengage, - setShouldSeeLogicalDisengage, + isWaitingForResumeOperation, + setIsWaitingForResumeOperation, }: EstopPressedModalProps): JSX.Element { const { t } = useTranslation('device_settings') const [isResuming, setIsResuming] = React.useState(false) const { acknowledgeEstopDisengage } = useAcknowledgeEstopDisengageMutation() - - const handleCloseModal = (): void => { - if (setIsDismissedModal != null) { - setIsDismissedModal(true) - } - closeModal() - } + const { + handlePlaceReaderLid, + isValidPlateReaderMove, + } = usePlacePlateReaderLid({ + onSettled: closeModal, + }) const modalProps: ModalProps = { type: 'error', title: t('estop_pressed'), - onClose: handleCloseModal, + onClose: closeModal, closeOnOutsideClick: false, childrenPadding: SPACING.spacing24, width: '47rem', @@ -177,19 +177,12 @@ function DesktopModal({ const handleClick: React.MouseEventHandler = (e): void => { e.preventDefault() setIsResuming(true) - acknowledgeEstopDisengage( - {}, - { - onSuccess: () => { - setShouldSeeLogicalDisengage() - closeModal() - }, - onError: (error: any) => { - setIsResuming(false) - console.error(error) - }, - } - ) + setIsWaitingForResumeOperation() + acknowledgeEstopDisengage(null) + handlePlaceReaderLid() + if (!isValidPlateReaderMove) { + closeModal() + } } return ( @@ -204,14 +197,14 @@ function DesktopModal({ - {isResuming || isWaitingForLogicalDisengage ? ( + {isResuming || isWaitingForResumeOperation ? ( ) : null} {t('resume_robot_operations')} diff --git a/app/src/organisms/EmergencyStop/EstopTakeover.tsx b/app/src/organisms/EmergencyStop/EstopTakeover.tsx index 5967edae75a..cbd9ba1a310 100644 --- a/app/src/organisms/EmergencyStop/EstopTakeover.tsx +++ b/app/src/organisms/EmergencyStop/EstopTakeover.tsx @@ -1,18 +1,13 @@ -import { useState } from 'react' +import { useEffect, 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 '/app/redux-resources/config' import { getLocalRobot } from '/app/redux/discovery' -import { - PHYSICALLY_ENGAGED, - LOGICALLY_ENGAGED, - NOT_PRESENT, - DISENGAGED, -} from './constants' +import { PHYSICALLY_ENGAGED, NOT_PRESENT, DISENGAGED } from './constants' +import type { EstopState } from '@opentrons/api-client' const ESTOP_CURRENTLY_DISENGAGED_REFETCH_INTERVAL_MS = 10000 const ESTOP_CURRENTLY_ENGAGED_REFETCH_INTERVAL_MS = 1000 @@ -22,71 +17,62 @@ interface EstopTakeoverProps { } export function EstopTakeover({ robotName }: EstopTakeoverProps): JSX.Element { - const [estopEngaged, setEstopEngaged] = useState(false) + const [isDismissedModal, setIsDismissedModal] = useState(false) const [ - isWaitingForLogicalDisengage, - setIsWaitingForLogicalDisengage, + isWaitingForResumeOperation, + setIsWatingForResumeOperation, ] = useState(false) + + const [estopState, setEstopState] = useState() + const [showEmergencyStopModal, setShowEmergencyStopModal] = useState( + false + ) + + // TODO: (ba, 2024-10-24): Use notifications instead of polling const { data: estopStatus } = useEstopQuery({ - refetchInterval: estopEngaged + refetchInterval: showEmergencyStopModal ? ESTOP_CURRENTLY_ENGAGED_REFETCH_INTERVAL_MS : ESTOP_CURRENTLY_DISENGAGED_REFETCH_INTERVAL_MS, - onSuccess: response => { - setEstopEngaged( - [PHYSICALLY_ENGAGED || LOGICALLY_ENGAGED].includes( - response?.data.status - ) - ) - setIsWaitingForLogicalDisengage(false) - }, }) + useEffect(() => { + if (estopStatus) { + setEstopState(estopStatus.data.status) + setShowEmergencyStopModal( + estopStatus.data.status !== DISENGAGED || isWaitingForResumeOperation + ) + } + }, [estopStatus]) - const { - isEmergencyStopModalDismissed, - setIsEmergencyStopModalDismissed, - } = useEstopContext() const isUnboxingFlowOngoing = useIsUnboxingFlowOngoing() const closeModal = (): void => { - if (estopStatus?.data.status === DISENGAGED) { - setIsEmergencyStopModalDismissed(false) - } + setIsWatingForResumeOperation(false) } const localRobot = useSelector(getLocalRobot) const localRobotName = localRobot?.name ?? 'no name' const TargetEstopModal = (): JSX.Element | null => { - switch (estopStatus?.data.status) { - case PHYSICALLY_ENGAGED: - case LOGICALLY_ENGAGED: - return ( - { - setIsWaitingForLogicalDisengage(true) - }} - /> - ) - case NOT_PRESENT: - return ( - - ) - default: - return null - } + return estopState === NOT_PRESENT ? ( + + ) : estopState !== DISENGAGED || isWaitingForResumeOperation ? ( + { + setIsWatingForResumeOperation(true) + }} + /> + ) : null } return ( <> - {estopStatus?.data.status !== DISENGAGED && !isUnboxingFlowOngoing ? ( + {showEmergencyStopModal && !isUnboxingFlowOngoing ? ( ) : null} diff --git a/app/src/organisms/EmergencyStop/__tests__/EstopPressedModal.test.tsx b/app/src/organisms/EmergencyStop/__tests__/EstopPressedModal.test.tsx index 124ea72b3ed..067211c4c06 100644 --- a/app/src/organisms/EmergencyStop/__tests__/EstopPressedModal.test.tsx +++ b/app/src/organisms/EmergencyStop/__tests__/EstopPressedModal.test.tsx @@ -8,9 +8,11 @@ import { useAcknowledgeEstopDisengageMutation } from '@opentrons/react-api-clien import { i18n } from '/app/i18n' import { getIsOnDevice } from '/app/redux/config' import { EstopPressedModal } from '../EstopPressedModal' +import { usePlacePlateReaderLid } from '/app/resources/modules' vi.mock('@opentrons/react-api-client') vi.mock('/app/redux/config') +vi.mock('/app/resources/modules') const render = (props: React.ComponentProps) => { return renderWithProviders(, { @@ -25,13 +27,19 @@ describe('EstopPressedModal - Touchscreen', () => { props = { isEngaged: true, closeModal: vi.fn(), - isWaitingForLogicalDisengage: false, - setShouldSeeLogicalDisengage: vi.fn(), + isWaitingForResumeOperation: false, + setIsWaitingForResumeOperation: vi.fn(), } vi.mocked(getIsOnDevice).mockReturnValue(true) vi.mocked(useAcknowledgeEstopDisengageMutation).mockReturnValue({ setEstopPhysicalStatus: vi.fn(), } as any) + + vi.mocked(usePlacePlateReaderLid).mockReturnValue({ + handlePlaceReaderLid: vi.fn(), + isValidPlateReaderMove: false, + isExecuting: false, + }) }) it('should render text and button', () => { @@ -59,6 +67,20 @@ describe('EstopPressedModal - Touchscreen', () => { render(props) fireEvent.click(screen.getByText('Resume robot operations')) expect(useAcknowledgeEstopDisengageMutation).toHaveBeenCalled() + expect(usePlacePlateReaderLid).toHaveBeenCalled() + }) + + it('should call a mock function to place the labware to a slot', () => { + vi.mocked(usePlacePlateReaderLid).mockReturnValue({ + handlePlaceReaderLid: vi.fn(), + isValidPlateReaderMove: true, + isExecuting: true, + }) + + render(props) + fireEvent.click(screen.getByText('Resume robot operations')) + expect(useAcknowledgeEstopDisengageMutation).toHaveBeenCalled() + expect(usePlacePlateReaderLid).toHaveBeenCalled() }) }) @@ -69,15 +91,19 @@ describe('EstopPressedModal - Desktop', () => { props = { isEngaged: true, closeModal: vi.fn(), - isDismissedModal: false, - setIsDismissedModal: vi.fn(), - isWaitingForLogicalDisengage: false, - setShouldSeeLogicalDisengage: vi.fn(), + isWaitingForResumeOperation: false, + setIsWaitingForResumeOperation: vi.fn(), } vi.mocked(getIsOnDevice).mockReturnValue(false) vi.mocked(useAcknowledgeEstopDisengageMutation).mockReturnValue({ setEstopPhysicalStatus: vi.fn(), } as any) + + vi.mocked(usePlacePlateReaderLid).mockReturnValue({ + handlePlaceReaderLid: vi.fn(), + isValidPlateReaderMove: false, + isExecuting: false, + }) }) it('should render text and button', () => { render(props) @@ -99,10 +125,18 @@ describe('EstopPressedModal - Desktop', () => { ).not.toBeDisabled() }) + it('should resume robot operation button is disabled when waiting for labware plate to finish', () => { + props.isEngaged = false + props.isWaitingForResumeOperation = true + render(props) + expect( + screen.getByRole('button', { name: 'Resume robot operations' }) + ).toBeDisabled() + }) + it('should call a mock function when clicking close icon', () => { render(props) fireEvent.click(screen.getByTestId('ModalHeader_icon_close_E-stop pressed')) - expect(props.setIsDismissedModal).toHaveBeenCalled() expect(props.closeModal).toHaveBeenCalled() }) diff --git a/app/src/resources/modules/hooks/index.ts b/app/src/resources/modules/hooks/index.ts index c38e5f46140..c26e43c8bfc 100644 --- a/app/src/resources/modules/hooks/index.ts +++ b/app/src/resources/modules/hooks/index.ts @@ -1 +1,2 @@ export * from './useAttachedModules' +export * from './usePlacePlateReaderLid' diff --git a/app/src/resources/modules/hooks/usePlacePlateReaderLid.ts b/app/src/resources/modules/hooks/usePlacePlateReaderLid.ts new file mode 100644 index 00000000000..0e4dabcb660 --- /dev/null +++ b/app/src/resources/modules/hooks/usePlacePlateReaderLid.ts @@ -0,0 +1,82 @@ +import { useRunCurrentState } from '@opentrons/react-api-client' +import { useCurrentRunId } from '../../runs' +import { useRobotControlCommands } from '/app/resources/maintenance_runs' + +import type { + CreateCommand, + OnDeckLabwareLocation, + ModuleLocation, +} from '@opentrons/shared-data' +import type { UseRobotControlCommandsProps } from '/app/resources/maintenance_runs' + +interface UsePlacePlateReaderLidResult { + handlePlaceReaderLid: () => Promise + isExecuting: boolean + isValidPlateReaderMove: boolean +} + +type UsePlacePlateReaderLidProps = Pick< + UseRobotControlCommandsProps, + 'onSettled' +> + +export function usePlacePlateReaderLid( + props: UsePlacePlateReaderLidProps +): UsePlacePlateReaderLidResult { + const runId = useCurrentRunId() + const { data: runCurrentState } = useRunCurrentState(runId) + + const placeLabware = runCurrentState?.data.placeLabwareState ?? null + const isValidPlateReaderMove = + placeLabware !== null && placeLabware.shouldPlaceDown + + // TODO eventually load module support for useRobotControlCommands + let commandsToExecute: CreateCommand[] = [] + if (isValidPlateReaderMove) { + const location = placeLabware.location + const loadModuleCommand = buildLoadModuleCommand(location as ModuleLocation) + const placeLabwareCommand = buildPlaceLabwareCommand( + placeLabware.labwareId as string, + location + ) + commandsToExecute = [loadModuleCommand, placeLabwareCommand] + } + + const { executeCommands, isExecuting } = useRobotControlCommands({ + ...props, + pipetteInfo: null, + commands: commandsToExecute, + continuePastCommandFailure: true, + }) + + const handlePlaceReaderLid = (): Promise => { + if (isValidPlateReaderMove) { + return executeCommands().then(() => Promise.resolve()) + } else { + return Promise.resolve() + } + } + + return { + handlePlaceReaderLid, + isExecuting, + isValidPlateReaderMove, + } +} + +const buildLoadModuleCommand = (location: ModuleLocation): CreateCommand => { + return { + commandType: 'loadModule' as const, + params: { model: 'absorbanceReaderV1', location }, + } +} + +const buildPlaceLabwareCommand = ( + labwareId: string, + location: OnDeckLabwareLocation +): CreateCommand => { + return { + commandType: 'unsafe/placeLabware' as const, + params: { labwareId, location }, + } +} diff --git a/robot-server/robot_server/runs/router/base_router.py b/robot-server/robot_server/runs/router/base_router.py index c108fa60a74..b7df09f8992 100644 --- a/robot-server/robot_server/runs/router/base_router.py +++ b/robot-server/robot_server/runs/router/base_router.py @@ -12,7 +12,13 @@ from pydantic import BaseModel, Field from opentrons_shared_data.errors import ErrorCodes -from opentrons.protocol_engine.types import CSVRuntimeParamPaths +from opentrons_shared_data.robot.types import RobotTypeEnum +from opentrons.hardware_control import HardwareControlAPI +from opentrons.hardware_control.modules.absorbance_reader import AbsorbanceReader +from opentrons.hardware_control.types import EstopState +from opentrons.protocol_engine.commands.absorbance_reader import CloseLid, OpenLid +from opentrons.protocol_engine.commands.move_labware import MoveLabware +from opentrons.protocol_engine.types import CSVRuntimeParamPaths, DeckSlotLocation from opentrons.protocol_engine import ( errors as pe_errors, ) @@ -27,6 +33,7 @@ from robot_server.protocols.protocol_models import ProtocolKind from robot_server.service.dependencies import get_current_time, get_unique_id from robot_server.robot.control.dependencies import require_estop_in_good_state +from robot_server.hardware import get_hardware, get_robot_type_enum from robot_server.service.json_api import ( RequestModel, @@ -48,6 +55,7 @@ from robot_server.protocols.router import ProtocolNotFound from ..run_models import ( + PlaceLabwareState, RunNotFoundError, ActiveNozzleLayout, RunCurrentState, @@ -567,17 +575,22 @@ async def get_run_commands_error( status.HTTP_409_CONFLICT: {"model": ErrorBody[RunStopped]}, }, ) -async def get_current_state( +async def get_current_state( # noqa: C901 runId: str, run_data_manager: Annotated[RunDataManager, Depends(get_run_data_manager)], + hardware: Annotated[HardwareControlAPI, Depends(get_hardware)], + robot_type: Annotated[RobotTypeEnum, Depends(get_robot_type_enum)], ) -> PydanticResponse[Body[RunCurrentState, CurrentStateLinks]]: """Get current state associated with a run if the run is current. Arguments: runId: Run ID pulled from URL. run_data_manager: Run data retrieval interface. + hardware: Hardware control interface. + robot_type: The type of robot. """ try: + run = run_data_manager.get(run_id=runId) active_nozzle_maps = run_data_manager.get_nozzle_maps(run_id=runId) nozzle_layouts = { @@ -589,6 +602,7 @@ async def get_current_state( for pipetteId, nozzle_map in active_nozzle_maps.items() } + current_command = run_data_manager.get_current_command(run_id=runId) last_completed_command = run_data_manager.get_last_completed_command( run_id=runId ) @@ -604,9 +618,60 @@ async def get_current_state( else None ) + estop_engaged = False + place_labware = None + if robot_type == RobotTypeEnum.FLEX: + estop_engaged = hardware.get_estop_state() in [ + EstopState.PHYSICALLY_ENGAGED, + EstopState.LOGICALLY_ENGAGED, + ] + + command = ( + run_data_manager.get_command(runId, current_command.command_id) + if current_command + else None + ) + + # Labware state when estop is engaged + if isinstance(command, MoveLabware): + location = command.params.newLocation + if isinstance(location, DeckSlotLocation): + place_labware = PlaceLabwareState( + location=location, + labwareId=command.params.labwareId, + shouldPlaceDown=False, + ) + # Handle absorbance reader lid + elif isinstance(command, (OpenLid, CloseLid)): + for mod in run.modules: + if ( + not isinstance(mod, AbsorbanceReader) + and mod.id != command.params.moduleId + ): + continue + for hw_mod in hardware.attached_modules: + if ( + mod.location is not None + and hw_mod.serial_number == mod.serialNumber + ): + location = mod.location + labware_id = f"{mod.model}Lid{location.slotName}" + place_labware = PlaceLabwareState( + location=location, + labwareId=labware_id, + shouldPlaceDown=estop_engaged, + ) + break + if place_labware: + break + return await PydanticResponse.create( content=Body.construct( - data=RunCurrentState.construct(activeNozzleLayouts=nozzle_layouts), + data=RunCurrentState.construct( + estopEngaged=estop_engaged, + activeNozzleLayouts=nozzle_layouts, + placeLabwareState=place_labware, + ), links=links, ), status_code=status.HTTP_200_OK, diff --git a/robot-server/robot_server/runs/run_models.py b/robot-server/robot_server/runs/run_models.py index bac7c4c740c..8baedb97a3b 100644 --- a/robot-server/robot_server/runs/run_models.py +++ b/robot-server/robot_server/runs/run_models.py @@ -21,6 +21,7 @@ CommandNote, ) from opentrons.protocol_engine.types import ( + OnDeckLabwareLocation, RunTimeParameter, PrimitiveRunTimeParamValuesType, CSVRunTimeParamFilesType, @@ -315,10 +316,24 @@ class ActiveNozzleLayout(BaseModel): ) +class PlaceLabwareState(BaseModel): + """Details the labware being placed by the gripper.""" + + labwareId: str = Field(..., description="The ID of the labware to place.") + location: OnDeckLabwareLocation = Field( + ..., description="The location the labware should be in." + ) + shouldPlaceDown: bool = Field( + ..., description="Whether the gripper should place down the labware." + ) + + class RunCurrentState(BaseModel): """Current details about a run.""" - activeNozzleLayouts: Dict[str, ActiveNozzleLayout] = Field(..., description="") + estopEngaged: bool = Field(..., description="") + activeNozzleLayouts: Dict[str, ActiveNozzleLayout] = Field(...) + placeLabwareState: Optional[PlaceLabwareState] = Field(None) class CommandLinkNoMeta(BaseModel): diff --git a/robot-server/robot_server/service/notifications/publisher_notifier.py b/robot-server/robot_server/service/notifications/publisher_notifier.py index 89a53e27b64..4701aa83718 100644 --- a/robot-server/robot_server/service/notifications/publisher_notifier.py +++ b/robot-server/robot_server/service/notifications/publisher_notifier.py @@ -51,6 +51,8 @@ async def _wait_for_event(self) -> None: LOG.exception( f'PublisherNotifier: exception in callback {getattr(callback, "__name__", "")}' ) + except asyncio.exceptions.CancelledError: + LOG.warning("PublisherNotifuer task cancelled.") except BaseException: LOG.exception("PublisherNotifer notify task failed") diff --git a/robot-server/tests/runs/router/conftest.py b/robot-server/tests/runs/router/conftest.py index 0ca0c5cc4f5..957f01c10dd 100644 --- a/robot-server/tests/runs/router/conftest.py +++ b/robot-server/tests/runs/router/conftest.py @@ -1,4 +1,5 @@ """Common test fixtures for runs route tests.""" +from opentrons.hardware_control import HardwareControlAPI, OT3HardwareControlAPI import pytest from decoy import Decoy @@ -80,3 +81,9 @@ def mock_file_provider( ) -> FileProvider: """Return a mock FileProvider.""" return decoy.mock(cls=FileProvider) + + +@pytest.fixture +def mock_hardware_api(decoy: Decoy) -> HardwareControlAPI: + """Get a mock HardwareControlAPI.""" + return decoy.mock(cls=OT3HardwareControlAPI) diff --git a/robot-server/tests/runs/router/test_base_router.py b/robot-server/tests/runs/router/test_base_router.py index 894950343e4..0a0266c0c65 100644 --- a/robot-server/tests/runs/router/test_base_router.py +++ b/robot-server/tests/runs/router/test_base_router.py @@ -1,6 +1,8 @@ """Tests for base /runs routes.""" from typing import Dict +from opentrons.hardware_control import HardwareControlAPI +from opentrons_shared_data.robot.types import RobotTypeEnum import pytest from datetime import datetime from decoy import Decoy @@ -868,44 +870,54 @@ async def test_get_run_commands_errors_defualt_cursor( async def test_get_current_state_success( decoy: Decoy, mock_run_data_manager: RunDataManager, + mock_hardware_api: HardwareControlAPI, mock_nozzle_maps: Dict[str, NozzleMap], ) -> None: - """It should return the active nozzle layout for a specific pipette.""" + """It should return different state from the current run. + + - the active nozzle layout for a specific pipette. + - place plate reader state for absorbance reader. + """ run_id = "test-run-id" decoy.when(mock_run_data_manager.get_nozzle_maps(run_id=run_id)).then_return( mock_nozzle_maps ) + command_pointer = CommandPointer( + command_id="command-id", + command_key="command-key", + created_at=datetime(year=2024, month=4, day=4), + index=101, + ) decoy.when( mock_run_data_manager.get_last_completed_command(run_id=run_id) - ).then_return( - CommandPointer( - command_id="last-command-id", - command_key="last-command-key", - created_at=datetime(year=2024, month=4, day=4), - index=101, - ) + ).then_return(command_pointer) + decoy.when(mock_run_data_manager.get_current_command(run_id=run_id)).then_return( + command_pointer ) result = await get_current_state( runId=run_id, run_data_manager=mock_run_data_manager, + hardware=mock_hardware_api, + robot_type=RobotTypeEnum.FLEX, ) assert result.status_code == 200 assert result.content.data == RunCurrentState.construct( + estopEngaged=False, activeNozzleLayouts={ "mock-pipette-id": ActiveNozzleLayout( startingNozzle="A1", activeNozzles=["A1"], config=NozzleLayoutConfig.FULL, ) - } + }, ) assert result.content.links == CurrentStateLinks( lastCompleted=CommandLinkNoMeta( - href="/runs/test-run-id/commands/last-command-id", - id="last-command-id", + href="/runs/test-run-id/commands/command-id", + id="command-id", ) ) @@ -913,6 +925,7 @@ async def test_get_current_state_success( async def test_get_current_state_run_not_current( decoy: Decoy, mock_run_data_manager: RunDataManager, + mock_hardware_api: HardwareControlAPI, ) -> None: """It should raise RunStopped when the run is not current.""" run_id = "non-current-run-id" @@ -925,6 +938,8 @@ async def test_get_current_state_run_not_current( await get_current_state( runId=run_id, run_data_manager=mock_run_data_manager, + hardware=mock_hardware_api, + robot_type=RobotTypeEnum.FLEX, ) assert exc_info.value.status_code == 409 diff --git a/shared-data/command/schemas/10.json b/shared-data/command/schemas/10.json index be8e870c5bb..93bc2387d63 100644 --- a/shared-data/command/schemas/10.json +++ b/shared-data/command/schemas/10.json @@ -76,7 +76,8 @@ "unsafe/dropTipInPlace": "#/definitions/UnsafeDropTipInPlaceCreate", "unsafe/updatePositionEstimators": "#/definitions/UpdatePositionEstimatorsCreate", "unsafe/engageAxes": "#/definitions/UnsafeEngageAxesCreate", - "unsafe/ungripLabware": "#/definitions/UnsafeUngripLabwareCreate" + "unsafe/ungripLabware": "#/definitions/UnsafeUngripLabwareCreate", + "unsafe/placeLabware": "#/definitions/UnsafePlaceLabwareCreate" } }, "oneOf": [ @@ -295,6 +296,9 @@ }, { "$ref": "#/definitions/UnsafeUngripLabwareCreate" + }, + { + "$ref": "#/definitions/UnsafePlaceLabwareCreate" } ], "definitions": { @@ -4739,6 +4743,67 @@ } }, "required": ["params"] + }, + "UnsafePlaceLabwareParams": { + "title": "UnsafePlaceLabwareParams", + "description": "Payload required for an UnsafePlaceLabware command.", + "type": "object", + "properties": { + "labwareId": { + "title": "Labwareid", + "description": "The id of the labware to place.", + "type": "string" + }, + "location": { + "title": "Location", + "description": "Where to place the labware.", + "anyOf": [ + { + "$ref": "#/definitions/DeckSlotLocation" + }, + { + "$ref": "#/definitions/ModuleLocation" + }, + { + "$ref": "#/definitions/OnLabwareLocation" + }, + { + "$ref": "#/definitions/AddressableAreaLocation" + } + ] + } + }, + "required": ["labwareId", "location"] + }, + "UnsafePlaceLabwareCreate": { + "title": "UnsafePlaceLabwareCreate", + "description": "UnsafePlaceLabware command request model.", + "type": "object", + "properties": { + "commandType": { + "title": "Commandtype", + "default": "unsafe/placeLabware", + "enum": ["unsafe/placeLabware"], + "type": "string" + }, + "params": { + "$ref": "#/definitions/UnsafePlaceLabwareParams" + }, + "intent": { + "description": "The reason the command was added. If not specified or `protocol`, the command will be treated as part of the protocol run itself, and added to the end of the existing command queue.\n\nIf `setup`, the command will be treated as part of run setup. A setup command may only be enqueued if the run has not started.\n\nUse setup commands for activities like pre-run calibration checks and module setup, like pre-heating.", + "allOf": [ + { + "$ref": "#/definitions/CommandIntent" + } + ] + }, + "key": { + "title": "Key", + "description": "A key value, unique in this run, that can be used to track the same logical command across multiple runs of the same protocol. If a value is not provided, one will be generated.", + "type": "string" + } + }, + "required": ["params"] } }, "$id": "opentronsCommandSchemaV10", diff --git a/shared-data/command/types/setup.ts b/shared-data/command/types/setup.ts index 0be40e6de13..13d29c682b4 100644 --- a/shared-data/command/types/setup.ts +++ b/shared-data/command/types/setup.ts @@ -106,6 +106,12 @@ export type LabwareLocation = | { labwareId: string } | { addressableAreaName: AddressableAreaName } +export type OnDeckLabwareLocation = + | { slotName: string } + | { moduleId: string } + | { labwareId: string } + | { addressableAreaName: AddressableAreaName } + export type NonStackedLocation = | 'offDeck' | { slotName: string } diff --git a/shared-data/command/types/unsafe.ts b/shared-data/command/types/unsafe.ts index d24a6f8e054..3875aaa3036 100644 --- a/shared-data/command/types/unsafe.ts +++ b/shared-data/command/types/unsafe.ts @@ -1,4 +1,8 @@ -import type { CommonCommandRunTimeInfo, CommonCommandCreateInfo } from '.' +import type { + CommonCommandRunTimeInfo, + CommonCommandCreateInfo, + OnDeckLabwareLocation, +} from '.' import type { MotorAxes } from '../../js/types' export type UnsafeRunTimeCommand = @@ -7,6 +11,7 @@ export type UnsafeRunTimeCommand = | UnsafeUpdatePositionEstimatorsRunTimeCommand | UnsafeEngageAxesRunTimeCommand | UnsafeUngripLabwareRunTimeCommand + | UnsafePlaceLabwareRunTimeCommand export type UnsafeCreateCommand = | UnsafeBlowoutInPlaceCreateCommand @@ -14,6 +19,7 @@ export type UnsafeCreateCommand = | UnsafeUpdatePositionEstimatorsCreateCommand | UnsafeEngageAxesCreateCommand | UnsafeUngripLabwareCreateCommand + | UnsafePlaceLabwareCreateCommand export interface UnsafeBlowoutInPlaceParams { pipetteId: string @@ -85,3 +91,17 @@ export interface UnsafeUngripLabwareRunTimeCommand UnsafeUngripLabwareCreateCommand { result?: any } +export interface UnsafePlaceLabwareParams { + labwareId: string + location: OnDeckLabwareLocation +} +export interface UnsafePlaceLabwareCreateCommand + extends CommonCommandCreateInfo { + commandType: 'unsafe/placeLabware' + params: UnsafePlaceLabwareParams +} +export interface UnsafePlaceLabwareRunTimeCommand + extends CommonCommandRunTimeInfo, + UnsafePlaceLabwareCreateCommand { + result?: any +} From b27a22c502078e38f20720ef19831ab188cc5719 Mon Sep 17 00:00:00 2001 From: Max Marrone Date: Tue, 29 Oct 2024 16:07:32 -0400 Subject: [PATCH 26/81] fix(api): Fix certain failed runs showing a stale recovery target (#16630) --- .../protocol_engine/state/commands.py | 4 +- .../state/test_command_state.py | 52 +++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/api/src/opentrons/protocol_engine/state/commands.py b/api/src/opentrons/protocol_engine/state/commands.py index dc9e0c7ee49..4d2009aae80 100644 --- a/api/src/opentrons/protocol_engine/state/commands.py +++ b/api/src/opentrons/protocol_engine/state/commands.py @@ -450,8 +450,8 @@ def _handle_resume_from_recovery_action( def _handle_stop_action(self, action: StopAction) -> None: if not self._state.run_result: self._state.recovery_target = None - self._state.queue_status = QueueStatus.PAUSED + if action.from_estop: self._state.stopped_by_estop = True self._state.run_result = RunResult.FAILED @@ -460,7 +460,9 @@ def _handle_stop_action(self, action: StopAction) -> None: def _handle_finish_action(self, action: FinishAction) -> None: if not self._state.run_result: + self._state.recovery_target = None self._state.queue_status = QueueStatus.PAUSED + if action.set_run_status: self._state.run_result = ( RunResult.SUCCEEDED 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 9df52541f02..fde0d66e654 100644 --- a/api/tests/opentrons/protocol_engine/state/test_command_state.py +++ b/api/tests/opentrons/protocol_engine/state/test_command_state.py @@ -838,6 +838,58 @@ def test_recovery_target_tracking() -> None: assert subject_view.get_has_entered_recovery_mode() is True +@pytest.mark.parametrize( + "ending_action", + [ + actions.StopAction(from_estop=False), + actions.StopAction(from_estop=True), + actions.FinishAction(set_run_status=False), + actions.FinishAction( + set_run_status=True, + error_details=actions.FinishErrorDetails( + error=Exception("blimey"), + error_id="error-id", + created_at=datetime.now(), + ), + ), + ], +) +def test_recovery_target_clears_when_run_ends(ending_action: actions.Action) -> None: + """There should never be an error recovery target when the run is done.""" + subject = CommandStore( + config=_make_config(), + error_recovery_policy=_placeholder_error_recovery_policy, + is_door_open=False, + ) + subject_view = CommandView(subject.state) + + # Setup: Put the run in error recovery mode. + queue = actions.QueueCommandAction( + "c1", + created_at=datetime.now(), + request=commands.CommentCreate(params=commands.CommentParams(message="")), + request_hash=None, + ) + subject.handle_action(queue) + run = actions.RunCommandAction(command_id="c1", started_at=datetime.now()) + subject.handle_action(run) + fail = actions.FailCommandAction( + command_id="c1", + error_id="c1-error", + failed_at=datetime.now(), + error=PythonException(RuntimeError()), + notes=[], + type=ErrorRecoveryType.WAIT_FOR_RECOVERY, + running_command=subject_view.get("c1"), + ) + subject.handle_action(fail) + + # Test: Assert that the ending action clears the recovery target. + assert subject_view.get_recovery_target() is not None + subject.handle_action(ending_action) + assert subject_view.get_recovery_target() is None + + def test_final_state_after_estop() -> None: """Test the final state of the run after it's E-stopped.""" subject = CommandStore( From 20ed43d693a4dfb98fc4ccbd53eb2fcabd16dde1 Mon Sep 17 00:00:00 2001 From: Jamey Huffnagle Date: Tue, 29 Oct 2024 16:25:46 -0400 Subject: [PATCH 27/81] fix(app): fix stale well location in Error Recovery (#16628) Closes RQA-3438 The logic for determining the default well used during tip selection is calculated as soon as Error Recovery renders. After the initial well is determined, this state is set and then never updated for the remainder of Error Recovery. The current logic works well if there never has been a recentRelevantFailedLabwareCmd, however, if this is the 2nd+ instance of error recovery in the run, the recentRelevantFailedLabwareCmd is stale until the fetch for the newrecentRelevantFailedLabwareCmd completes. Instead of gating the state setting behavior by whether or not there is a recentRelevantFailedLabwareCmd, we should gate it by whether the relevant data within recentRelevantFailedLabwareCmd has changed. --- .../__tests__/useFailedLabwareUtils.test.tsx | 20 +++++++++++++++++++ .../hooks/useFailedLabwareUtils.ts | 12 +++++++---- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useFailedLabwareUtils.test.tsx b/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useFailedLabwareUtils.test.tsx index b0716af5c8a..a24afb09b29 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useFailedLabwareUtils.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useFailedLabwareUtils.test.tsx @@ -7,6 +7,7 @@ import { getRelevantWellName, getRelevantFailedLabwareCmdFrom, useRelevantFailedLwLocations, + useInitialSelectedLocationsFrom, } from '../useFailedLabwareUtils' import { DEFINED_ERROR_TYPES } from '../../constants' @@ -241,3 +242,22 @@ describe('useRelevantFailedLwLocations', () => { expect(result.current.newLoc).toStrictEqual({ slotName: 'C2' }) }) }) + +describe('useInitialSelectedLocationsFrom', () => { + it('updates result if the relevant command changes', () => { + const cmd = { commandType: 'pickUpTip', params: { wellName: 'A1' } } as any + const cmd2 = { commandType: 'pickUpTip', params: { wellName: 'A2' } } as any + + const { result, rerender } = renderHook((cmd: any) => + useInitialSelectedLocationsFrom(cmd) + ) + + rerender(cmd) + + expect(result.current).toStrictEqual({ A1: null }) + + rerender(cmd2) + + expect(result.current).toStrictEqual({ A2: null }) + }) +}) diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/useFailedLabwareUtils.ts b/app/src/organisms/ErrorRecoveryFlows/hooks/useFailedLabwareUtils.ts index d108bfb7d0a..9ce04df1bdf 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/useFailedLabwareUtils.ts +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/useFailedLabwareUtils.ts @@ -214,8 +214,9 @@ function useTipSelectionUtils( const initialLocs = useInitialSelectedLocationsFrom( recentRelevantFailedLabwareCmd ) - // Set the initial locs when they first become available. - if (selectedLocs == null && initialLocs != null) { + + // Set the initial locs when they first become available or update. + if (selectedLocs !== initialLocs) { setSelectedLocs(initialLocs) } @@ -253,17 +254,20 @@ function useTipSelectionUtils( } // Set the initial well selection to be the last pickup tip location for the pipette used in the failed command. -function useInitialSelectedLocationsFrom( +export function useInitialSelectedLocationsFrom( recentRelevantFailedLabwareCmd: FailedCommandRelevantLabware ): WellGroup | 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. + // Support state updates if the underlying data changes, since this data is lazily loaded and may change shortly + // after Error Recovery launches. if ( recentRelevantFailedLabwareCmd != null && recentRelevantFailedLabwareCmd.commandType === 'pickUpTip' && - initialWells == null + (initialWells == null || + !(recentRelevantFailedLabwareCmd.params.wellName in initialWells)) ) { setInitialWells({ [recentRelevantFailedLabwareCmd.params.wellName]: null }) } From 82cb47bd15b3db7d85d0315dfe1be3478bfe0834 Mon Sep 17 00:00:00 2001 From: Brayan Almonte Date: Tue, 29 Oct 2024 16:31:26 -0400 Subject: [PATCH 28/81] fix(shared-data): add -6.125mm cornerOffsetFromSlot to deck riser (#16622) --- .../labware/definitions/2/opentrons_flex_deck_riser/1.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shared-data/labware/definitions/2/opentrons_flex_deck_riser/1.json b/shared-data/labware/definitions/2/opentrons_flex_deck_riser/1.json index 6c0cd91a11b..59f0548ca32 100644 --- a/shared-data/labware/definitions/2/opentrons_flex_deck_riser/1.json +++ b/shared-data/labware/definitions/2/opentrons_flex_deck_riser/1.json @@ -34,8 +34,8 @@ "schemaVersion": 2, "allowedRoles": ["adapter"], "cornerOffsetFromSlot": { - "x": 0, - "y": 0, + "x": -6.125, + "y": -6.125, "z": 0 } } From a77ce13e6b42986f75a31480a5e9a45678b598e7 Mon Sep 17 00:00:00 2001 From: Brayan Almonte Date: Tue, 29 Oct 2024 16:43:42 -0400 Subject: [PATCH 29/81] feat(api, robot-server): Add source key to the data_files database to support generated CSV files from the plate reader + other plate reader fixes. (#16603) The Plate Reader generates absorbance readings that can be optionally saved as a CSV file on the robot with the `read(export_filename='filename.csv')` PAPI command. This generated data needs to be stored on the robot so the client can download them later on for post-processing or re-upload them to be used as RTP CSV for a different protocol. Unlike RTP CSV that are uploaded by a user from the client, generated readings are produced by the robot. Because of this, we need to keep track of the source these data files originate from, so we can limit their count independently of RTP CSVs. A typical absorbance protocol makes about 40 readings per run, so we could hit our maximum number of data files in one run. This pull request adds a `source` key to the `data_files` table to keep track of the origin of the data files, changes to support the new functionality, and other fixes relating to the plate reader. - Raise `CannotPerformModuleAction` analysis error if `initialize` is called before `close_lid` - Add a `source` column to the `data_files` in the database to keep track of the origin of the data file. - Use the `source` key to determine the number of uploaded files stored on the bot to prevent file creation. - Use the `source` key to determine the number of generated files stored on the bot to prevent file creation. - Increase the maximum number of generated CSV files to 400 to account for the average case of number of reads a plate reader could make per protocol run. --- .../protocol_api/core/engine/module_core.py | 7 ++++ .../resources/file_provider.py | 2 +- .../engine/test_absorbance_reader_core.py | 10 ++++++ .../data_files/data_files_store.py | 24 ++++++++++--- .../data_files/file_auto_deleter.py | 11 +++--- .../robot_server/data_files/models.py | 19 +++++++++-- .../robot_server/data_files/router.py | 15 ++++++-- .../file_provider/fastapi_dependencies.py | 2 +- .../robot_server/file_provider/provider.py | 15 +++++--- .../persistence/_migrations/v6_to_v7.py | 34 +++++++++++++++++-- .../persistence/tables/__init__.py | 2 ++ .../persistence/tables/schema_7.py | 20 ++++++++++- .../robot_server/protocols/protocol_store.py | 3 +- .../runs/run_orchestrator_store.py | 1 + robot-server/robot_server/settings.py | 2 +- .../tests/data_files/test_data_files_store.py | 14 +++++++- .../data_files/test_file_auto_deleter.py | 5 ++- robot-server/tests/data_files/test_router.py | 25 ++++++++++++-- .../data_files/test_deletion.tavern.yaml | 1 + .../test_upload_data_file.tavern.yaml | 3 ++ ...lyses_with_csv_file_parameters.tavern.yaml | 4 +++ ...t_csv_files_used_with_protocol.tavern.yaml | 3 ++ ...t_run_with_run_time_parameters.tavern.yaml | 1 + robot-server/tests/persistence/test_tables.py | 7 +++- .../test_completed_analysis_store.py | 8 ++++- .../tests/protocols/test_protocol_store.py | 13 +++++-- .../tests/protocols/test_protocols_router.py | 12 +++++-- .../tests/runs/router/test_base_router.py | 7 +++- robot-server/tests/runs/test_run_store.py | 8 ++++- 29 files changed, 239 insertions(+), 39 deletions(-) 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 9f2785b7432..1e6d4e26b2f 100644 --- a/api/src/opentrons/protocol_api/core/engine/module_core.py +++ b/api/src/opentrons/protocol_api/core/engine/module_core.py @@ -567,6 +567,7 @@ class AbsorbanceReaderCore(ModuleCore, AbstractAbsorbanceReaderCore): _sync_module_hardware: SynchronousAdapter[hw_modules.AbsorbanceReader] _initialized_value: Optional[List[int]] = None + _ready_to_initialize: bool = False def initialize( self, @@ -575,6 +576,11 @@ def initialize( reference_wavelength: Optional[int] = None, ) -> None: """Initialize the Absorbance Reader by taking zero reading.""" + if not self._ready_to_initialize: + raise CannotPerformModuleAction( + "Cannot perform Initialize action on Absorbance Reader without calling `.close_lid()` first." + ) + # TODO: check that the wavelengths are within the supported wavelengths self._engine_client.execute_command( cmd.absorbance_reader.InitializeParams( @@ -633,6 +639,7 @@ def close_lid( moduleId=self.module_id, ) ) + self._ready_to_initialize = True def open_lid(self) -> None: """Close the Absorbance Reader's lid.""" diff --git a/api/src/opentrons/protocol_engine/resources/file_provider.py b/api/src/opentrons/protocol_engine/resources/file_provider.py index d4ed7b71522..e1299605e76 100644 --- a/api/src/opentrons/protocol_engine/resources/file_provider.py +++ b/api/src/opentrons/protocol_engine/resources/file_provider.py @@ -5,7 +5,7 @@ from ..errors import StorageLimitReachedError -MAXIMUM_CSV_FILE_LIMIT = 40 +MAXIMUM_CSV_FILE_LIMIT = 400 class GenericCsvTransform: 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 a5fadde09cc..fd537d4cad9 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 @@ -11,6 +11,7 @@ from opentrons.protocol_engine.clients import SyncClient as EngineClient from opentrons.protocol_api.core.engine.module_core import AbsorbanceReaderCore from opentrons.protocol_api import MAX_SUPPORTED_VERSION +from opentrons.protocol_engine.errors.exceptions import CannotPerformModuleAction from opentrons.protocol_engine.state.module_substates import AbsorbanceReaderSubState from opentrons.protocol_engine.state.module_substates.absorbance_reader_substate import ( AbsorbanceReaderId, @@ -67,6 +68,7 @@ def test_initialize( decoy: Decoy, mock_engine_client: EngineClient, subject: AbsorbanceReaderCore ) -> None: """It should set the sample wavelength with the engine client.""" + subject._ready_to_initialize = True subject.initialize("single", [123]) decoy.verify( @@ -115,10 +117,18 @@ def test_initialize( assert subject._initialized_value == [124, 125, 126] +def test_initialize_not_ready(subject: AbsorbanceReaderCore) -> None: + """It should raise CannotPerformModuleAction if you dont call .close_lid() command.""" + subject._ready_to_initialize = False + with pytest.raises(CannotPerformModuleAction): + subject.initialize("single", [123]) + + def test_read( decoy: Decoy, mock_engine_client: EngineClient, subject: AbsorbanceReaderCore ) -> None: """It should call absorbance reader to read with the engine client.""" + subject._ready_to_initialize = True subject._initialized_value = [123] substate = AbsorbanceReaderSubState( module_id=AbsorbanceReaderId(subject.module_id), diff --git a/robot-server/robot_server/data_files/data_files_store.py b/robot-server/robot_server/data_files/data_files_store.py index a209dfc8e3a..28257dbb8d2 100644 --- a/robot-server/robot_server/data_files/data_files_store.py +++ b/robot-server/robot_server/data_files/data_files_store.py @@ -15,8 +15,9 @@ analysis_csv_rtp_table, run_csv_rtp_table, ) +from robot_server.persistence.tables.schema_7 import DataFileSourceSQLEnum -from .models import FileIdNotFoundError, FileInUseError +from .models import DataFileSource, FileIdNotFoundError, FileInUseError @dataclass(frozen=True) @@ -27,6 +28,7 @@ class DataFileInfo: name: str file_hash: str created_at: datetime + source: DataFileSource class DataFilesStore: @@ -53,6 +55,7 @@ async def insert(self, file_info: DataFileInfo) -> None: file_info_dict = { "id": file_info.id, "name": file_info.name, + "source": DataFileSourceSQLEnum(file_info.source.value), "created_at": file_info.created_at, "file_hash": file_info.file_hash, } @@ -80,14 +83,24 @@ def sql_get_all_from_engine(self) -> List[DataFileInfo]: all_rows = transaction.execute(statement).all() return [_convert_row_data_file_info(sql_row) for sql_row in all_rows] - def get_usage_info(self) -> List[FileUsageInfo]: + def get_usage_info( + self, source: Optional[DataFileSource] = None + ) -> List[FileUsageInfo]: """Return information about usage of all the existing data files in runs & analyses. Results are ordered with the oldest-added data file first. """ - select_all_data_file_ids = sqlalchemy.select(data_files_table.c.id).order_by( - sqlite_rowid - ) + if source is None: + select_all_data_file_ids = sqlalchemy.select( + data_files_table.c.id + ).order_by(sqlite_rowid) + else: + select_all_data_file_ids = ( + sqlalchemy.select(data_files_table.c.id) + .where(data_files_table.c.source.name == source.name) + .order_by(sqlite_rowid) + ) + select_ids_used_in_analyses = sqlalchemy.select( analysis_csv_rtp_table.c.file_id ).where(analysis_csv_rtp_table.c.file_id.is_not(None)) @@ -165,6 +178,7 @@ def _convert_row_data_file_info(row: sqlalchemy.engine.Row) -> DataFileInfo: return DataFileInfo( id=row.id, name=row.name, + source=DataFileSource(row.source.value), created_at=row.created_at, file_hash=row.file_hash, ) diff --git a/robot-server/robot_server/data_files/file_auto_deleter.py b/robot-server/robot_server/data_files/file_auto_deleter.py index 46c26eb866a..7f6c1e06493 100644 --- a/robot-server/robot_server/data_files/file_auto_deleter.py +++ b/robot-server/robot_server/data_files/file_auto_deleter.py @@ -1,14 +1,15 @@ -"""Auto-delete old data files to make room for new ones.""" +"""Auto-delete old user data files to make room for new ones.""" from logging import getLogger from robot_server.data_files.data_files_store import DataFilesStore +from robot_server.data_files.models import DataFileSource from robot_server.deletion_planner import DataFileDeletionPlanner _log = getLogger(__name__) class DataFileAutoDeleter: - """Auto deleter for data files.""" + """Auto deleter for uploaded data files.""" def __init__( self, @@ -22,9 +23,9 @@ async def make_room_for_new_file(self) -> None: """Delete old data files to make room for a new one.""" # It feels wasteful to collect usage info of upto 50 files # even when there's no need for deletion - data_file_usage_info = [ - usage_info for usage_info in self._data_files_store.get_usage_info() - ] + data_file_usage_info = self._data_files_store.get_usage_info( + DataFileSource.UPLOADED + ) if len(data_file_usage_info) < self._deletion_planner.maximum_allowed_files: return diff --git a/robot-server/robot_server/data_files/models.py b/robot-server/robot_server/data_files/models.py index f2da43bb0f6..5c279df6cc9 100644 --- a/robot-server/robot_server/data_files/models.py +++ b/robot-server/robot_server/data_files/models.py @@ -1,6 +1,7 @@ """Data files models.""" from datetime import datetime from typing import Literal, Set +from enum import Enum from pydantic import Field @@ -10,12 +11,24 @@ from robot_server.service.json_api import ResourceModel +class DataFileSource(Enum): + """The source this data file is from.""" + + UPLOADED = "uploaded" + GENERATED = "generated" + + class DataFile(ResourceModel): - """A model representing an uploaded data file.""" + """A model representing a data file.""" id: str = Field(..., description="A unique identifier for this file.") - name: str = Field(..., description="Name of the uploaded file.") - createdAt: datetime = Field(..., description="When this data file was *uploaded*.") + name: str = Field(..., description="Name of the data file.") + source: DataFileSource = Field( + ..., description="The origin of the file (uploaded or generated)" + ) + createdAt: datetime = Field( + ..., description="When this data file was uploaded or generated.." + ) class FileIdNotFoundError(GeneralError): diff --git a/robot-server/robot_server/data_files/router.py b/robot-server/robot_server/data_files/router.py index 39f191da553..cf4ba9fa649 100644 --- a/robot-server/robot_server/data_files/router.py +++ b/robot-server/robot_server/data_files/router.py @@ -22,7 +22,13 @@ ) from .data_files_store import DataFilesStore, DataFileInfo from .file_auto_deleter import DataFileAutoDeleter -from .models import DataFile, FileIdNotFoundError, FileIdNotFound, FileInUseError +from .models import ( + DataFile, + DataFileSource, + FileIdNotFoundError, + FileIdNotFound, + FileInUseError, +) from ..protocols.dependencies import get_file_hasher, get_file_reader_writer from ..service.dependencies import get_current_time, get_unique_id @@ -137,6 +143,7 @@ async def upload_data_file( id=existing_file_info.id, name=existing_file_info.name, createdAt=existing_file_info.created_at, + source=existing_file_info.source, ) ), status_code=status.HTTP_200_OK, @@ -151,6 +158,7 @@ async def upload_data_file( name=buffered_file.name, file_hash=file_hash, created_at=created_at, + source=DataFileSource.UPLOADED, ) await data_files_store.insert(file_info) return await PydanticResponse.create( @@ -159,6 +167,7 @@ async def upload_data_file( id=file_info.id, name=file_info.name, createdAt=created_at, + source=DataFileSource.UPLOADED, ) ), status_code=status.HTTP_201_CREATED, @@ -195,6 +204,7 @@ async def get_data_file_info_by_id( id=resource.id, name=resource.name, createdAt=resource.created_at, + source=resource.source, ) ), status_code=status.HTTP_200_OK, @@ -260,6 +270,7 @@ async def get_all_data_files( id=data_file_info.id, name=data_file_info.name, createdAt=data_file_info.created_at, + source=data_file_info.source, ) for data_file_info in data_files ], @@ -282,7 +293,7 @@ async def delete_file_by_id( dataFileId: str, data_files_store: DataFilesStore = Depends(get_data_files_store), ) -> PydanticResponse[SimpleEmptyBody]: - """Delete an uploaded data file by ID. + """Delete an uploaded or generated data file by ID. Arguments: dataFileId: ID of the data file to delete, pulled from URL. diff --git a/robot-server/robot_server/file_provider/fastapi_dependencies.py b/robot-server/robot_server/file_provider/fastapi_dependencies.py index 65042288f9a..7847e59b236 100644 --- a/robot-server/robot_server/file_provider/fastapi_dependencies.py +++ b/robot-server/robot_server/file_provider/fastapi_dependencies.py @@ -30,7 +30,7 @@ async def get_file_provider( FileProviderWrapper, fastapi.Depends(get_file_provider_wrapper) ], ) -> FileProvider: - """Return theengine `FileProvider` which accepts callbacks from FileProviderWrapper.""" + """Return the engine `FileProvider` which accepts callbacks from FileProviderWrapper.""" file_provider = FileProvider( data_files_write_csv_callback=file_provider_wrapper.write_csv_callback, data_files_filecount=file_provider_wrapper.csv_filecount_callback, diff --git a/robot-server/robot_server/file_provider/provider.py b/robot-server/robot_server/file_provider/provider.py index 5cfeb640fef..bbf05b40485 100644 --- a/robot-server/robot_server/file_provider/provider.py +++ b/robot-server/robot_server/file_provider/provider.py @@ -9,8 +9,12 @@ get_data_files_directory, get_data_files_store, ) +from robot_server.data_files.models import DataFileSource from ..service.dependencies import get_current_time, get_unique_id -from robot_server.data_files.data_files_store import DataFilesStore, DataFileInfo +from robot_server.data_files.data_files_store import ( + DataFilesStore, + DataFileInfo, +) from opentrons.protocol_engine.resources.file_provider import GenericCsvTransform @@ -62,13 +66,14 @@ async def write_csv_callback( name=csv_data.filename, file_hash="", created_at=created_at, + source=DataFileSource.GENERATED, ) await self._data_files_store.insert(file_info) return file_id async def csv_filecount_callback(self) -> int: - """Return the current count of files stored within the data files directory.""" - data_file_usage_info = [ - usage_info for usage_info in self._data_files_store.get_usage_info() - ] + """Return the current count of generated files stored within the data files directory.""" + data_file_usage_info = self._data_files_store.get_usage_info( + DataFileSource.GENERATED + ) return len(data_file_usage_info) diff --git a/robot-server/robot_server/persistence/_migrations/v6_to_v7.py b/robot-server/robot_server/persistence/_migrations/v6_to_v7.py index faae646e5b7..ce528a12ab7 100644 --- a/robot-server/robot_server/persistence/_migrations/v6_to_v7.py +++ b/robot-server/robot_server/persistence/_migrations/v6_to_v7.py @@ -3,6 +3,7 @@ Summary of changes from schema 6: - Adds a new command_intent to store the commands intent in the commands table +- Adds a new source to store the data files origin in the data_files table - Adds the `boolean_setting` table. """ @@ -15,7 +16,7 @@ import sqlalchemy from ..database import sql_engine_ctx, sqlite_rowid -from ..tables import schema_7 +from ..tables import DataFileSourceSQLEnum, schema_7 from .._folder_migrator import Migration from ..file_and_directory_names import ( @@ -35,7 +36,7 @@ def migrate(self, source_dir: Path, dest_dir: Path) -> None: dest_db_file = dest_dir / DB_FILE - # Append the new column to existing protocols in v4 database + # Append the new column to existing protocols and data_files in v6 database with ExitStack() as exit_stack: dest_engine = exit_stack.enter_context(sql_engine_ctx(dest_db_file)) @@ -59,10 +60,20 @@ def add_column( schema_7.run_command_table.c.command_intent, ) + add_column( + dest_engine, + schema_7.data_files_table.name, + schema_7.data_files_table.c.source, + ) + _migrate_command_table_with_new_command_intent_col( dest_transaction=dest_transaction ) + _migrate_data_files_table_with_new_source_col( + dest_transaction=dest_transaction + ) + def _migrate_command_table_with_new_command_intent_col( dest_transaction: sqlalchemy.engine.Connection, @@ -83,3 +94,22 @@ def _migrate_command_table_with_new_command_intent_col( dest_transaction.execute( f"UPDATE run_command SET command_intent='{new_command_intent}' WHERE row_id={row.row_id}" ) + + +def _migrate_data_files_table_with_new_source_col( + dest_transaction: sqlalchemy.engine.Connection, +) -> None: + """Add a new 'source' column to data_files table.""" + select_data_files = sqlalchemy.select(schema_7.data_files_table).order_by( + sqlite_rowid + ) + insert_new_data = sqlalchemy.insert(schema_7.data_files_table) + for old_row in dest_transaction.execute(select_data_files).all(): + dest_transaction.execute( + insert_new_data, + id=old_row.id, + name=old_row.name, + file_hash=old_row.file_hash, + created_at=old_row.created_at, + source=DataFileSourceSQLEnum.UPLOADED, + ) diff --git a/robot-server/robot_server/persistence/tables/__init__.py b/robot-server/robot_server/persistence/tables/__init__.py index 006f5356d76..fa0129a4ee6 100644 --- a/robot-server/robot_server/persistence/tables/__init__.py +++ b/robot-server/robot_server/persistence/tables/__init__.py @@ -16,6 +16,7 @@ PrimitiveParamSQLEnum, ProtocolKindSQLEnum, BooleanSettingKey, + DataFileSourceSQLEnum, ) @@ -34,4 +35,5 @@ "PrimitiveParamSQLEnum", "ProtocolKindSQLEnum", "BooleanSettingKey", + "DataFileSourceSQLEnum", ] diff --git a/robot-server/robot_server/persistence/tables/schema_7.py b/robot-server/robot_server/persistence/tables/schema_7.py index cf1e2d8d717..1690298007f 100644 --- a/robot-server/robot_server/persistence/tables/schema_7.py +++ b/robot-server/robot_server/persistence/tables/schema_7.py @@ -1,4 +1,4 @@ -"""v6 of our SQLite schema.""" +"""v7 of our SQLite schema.""" import enum import sqlalchemy @@ -23,6 +23,13 @@ class ProtocolKindSQLEnum(enum.Enum): QUICK_TRANSFER = "quick-transfer" +class DataFileSourceSQLEnum(enum.Enum): + """The source this data file is from.""" + + UPLOADED = "uploaded" + GENERATED = "generated" + + protocol_table = sqlalchemy.Table( "protocol", metadata, @@ -238,6 +245,17 @@ class ProtocolKindSQLEnum(enum.Enum): UTCDateTime, nullable=False, ), + sqlalchemy.Column( + "source", + sqlalchemy.Enum( + DataFileSourceSQLEnum, + values_callable=lambda obj: [e.value for e in obj], + validate_strings=True, + create_constraint=True, + ), + index=True, + nullable=False, + ), ) run_csv_rtp_table = sqlalchemy.Table( diff --git a/robot-server/robot_server/protocols/protocol_store.py b/robot-server/robot_server/protocols/protocol_store.py index a3a4a954961..ee769b47c01 100644 --- a/robot-server/robot_server/protocols/protocol_store.py +++ b/robot-server/robot_server/protocols/protocol_store.py @@ -15,7 +15,7 @@ from opentrons.protocols.parse import PythonParseMode from opentrons.protocol_reader import ProtocolReader, ProtocolSource -from robot_server.data_files.models import DataFile +from robot_server.data_files.models import DataFile, DataFileSource from robot_server.persistence.database import sqlite_rowid from robot_server.persistence.tables import ( analysis_table, @@ -346,6 +346,7 @@ async def get_referenced_data_files(self, protocol_id: str) -> List[DataFile]: id=sql_row.id, name=sql_row.name, createdAt=sql_row.created_at, + source=DataFileSource(sql_row.source.value), ) for sql_row in data_files_rows ] diff --git a/robot-server/robot_server/runs/run_orchestrator_store.py b/robot-server/robot_server/runs/run_orchestrator_store.py index bbc070c3b6f..ee82ea034ac 100644 --- a/robot-server/robot_server/runs/run_orchestrator_store.py +++ b/robot-server/robot_server/runs/run_orchestrator_store.py @@ -207,6 +207,7 @@ async def create( run_id: The run resource the run orchestrator is assigned to. labware_offsets: Labware offsets to create the run with. deck_configuration: A mapping of fixtures to cutout fixtures the deck will be loaded with. + file_provider: Wrapper to let the engine read/write data files. notify_publishers: Utilized by the engine to notify publishers of state changes. protocol: The protocol to load the runner with, if any. run_time_param_values: Any runtime parameter values to set. diff --git a/robot-server/robot_server/settings.py b/robot-server/robot_server/settings.py index d4508406510..40b0ed663bb 100644 --- a/robot-server/robot_server/settings.py +++ b/robot-server/robot_server/settings.py @@ -107,7 +107,7 @@ class RobotServerSettings(BaseSettings): default=50, gt=0, description=( - "The maximum number of data files to allow before auto-deleting old ones." + "The maximum number of uploaded data files to allow before auto-deleting old ones." ), ) diff --git a/robot-server/tests/data_files/test_data_files_store.py b/robot-server/tests/data_files/test_data_files_store.py index caef1599961..581577d0a16 100644 --- a/robot-server/tests/data_files/test_data_files_store.py +++ b/robot-server/tests/data_files/test_data_files_store.py @@ -13,7 +13,11 @@ DataFileInfo, ) from robot_server.deletion_planner import FileUsageInfo -from robot_server.data_files.models import FileIdNotFoundError, FileInUseError +from robot_server.data_files.models import ( + DataFileSource, + FileIdNotFoundError, + FileInUseError, +) from robot_server.protocols.analysis_memcache import MemoryCache from robot_server.protocols.analysis_models import ( CompletedAnalysis, @@ -107,6 +111,7 @@ async def test_insert_data_file_info_and_fetch_by_hash( id="file-id", name="file-name", file_hash="abc123", + source=DataFileSource.UPLOADED, created_at=datetime(year=2024, month=6, day=20, tzinfo=timezone.utc), ) assert subject.get_file_info_by_hash("abc123") is None @@ -122,12 +127,14 @@ async def test_insert_file_info_with_existing_id( id="file-id", name="file-name", file_hash="abc123", + source=DataFileSource.UPLOADED, created_at=datetime(year=2024, month=6, day=20, tzinfo=timezone.utc), ) data_file_info2 = DataFileInfo( id="file-id", name="file-name2", file_hash="abc1234", + source=DataFileSource.UPLOADED, created_at=datetime(year=2024, month=6, day=20, tzinfo=timezone.utc), ) await subject.insert(data_file_info1) @@ -143,6 +150,7 @@ async def test_insert_data_file_info_and_get_by_id( id="file-id", name="file-name", file_hash="abc", + source=DataFileSource.UPLOADED, created_at=datetime(year=2024, month=7, day=15, tzinfo=timezone.utc), ) await subject.insert(data_file_info) @@ -176,12 +184,14 @@ async def test_get_usage_info( id="file-id-1", name="file-name", file_hash="abc", + source=DataFileSource.UPLOADED, created_at=datetime(year=2024, month=7, day=15, tzinfo=timezone.utc), ) data_file_2 = DataFileInfo( id="file-id-2", name="file-name", file_hash="xyz", + source=DataFileSource.UPLOADED, created_at=datetime(year=2024, month=7, day=15, tzinfo=timezone.utc), ) await subject.insert(data_file_1) @@ -212,6 +222,7 @@ async def test_remove( id="file-id", name="file-name", file_hash="abc123", + source=DataFileSource.UPLOADED, created_at=datetime(year=2024, month=6, day=20, tzinfo=timezone.utc), ) await subject.insert(data_file_info) @@ -241,6 +252,7 @@ async def test_remove_raises_in_file_in_use( id="file-id", name="file-name", file_hash="abc123", + source=DataFileSource.UPLOADED, created_at=datetime(year=2024, month=6, day=20, tzinfo=timezone.utc), ) diff --git a/robot-server/tests/data_files/test_file_auto_deleter.py b/robot-server/tests/data_files/test_file_auto_deleter.py index 422af0891cb..000b55b4307 100644 --- a/robot-server/tests/data_files/test_file_auto_deleter.py +++ b/robot-server/tests/data_files/test_file_auto_deleter.py @@ -6,6 +6,7 @@ from robot_server.data_files.data_files_store import DataFilesStore from robot_server.data_files.file_auto_deleter import DataFileAutoDeleter +from robot_server.data_files.models import DataFileSource from robot_server.deletion_planner import DataFileDeletionPlanner, FileUsageInfo @@ -23,7 +24,9 @@ async def test_make_room_for_new_file( FileUsageInfo(file_id="file-2", used_by_run_or_analysis=True), ] decoy.when(mock_deletion_planner.maximum_allowed_files).then_return(1) - decoy.when(mock_data_files_store.get_usage_info()).then_return(files_usage) + decoy.when( + mock_data_files_store.get_usage_info(DataFileSource.UPLOADED) + ).then_return(files_usage) decoy.when(mock_deletion_planner.plan_for_new_file(files_usage)).then_return( {"id-to-be-deleted-1", "id-to-be-deleted-2"} ) diff --git a/robot-server/tests/data_files/test_router.py b/robot-server/tests/data_files/test_router.py index 751682fd422..ce10a9e56eb 100644 --- a/robot-server/tests/data_files/test_router.py +++ b/robot-server/tests/data_files/test_router.py @@ -10,8 +10,16 @@ from robot_server.service.json_api import MultiBodyMeta, SimpleEmptyBody -from robot_server.data_files.data_files_store import DataFilesStore, DataFileInfo -from robot_server.data_files.models import DataFile, FileIdNotFoundError, FileInUseError +from robot_server.data_files.data_files_store import ( + DataFilesStore, + DataFileInfo, +) +from robot_server.data_files.models import ( + DataFile, + DataFileSource, + FileIdNotFoundError, + FileInUseError, +) from robot_server.data_files.router import ( upload_data_file, get_data_file_info_by_id, @@ -84,6 +92,7 @@ async def test_upload_new_data_file( id="data-file-id", name="abc.csv", createdAt=datetime(year=2024, month=6, day=18), + source=DataFileSource.UPLOADED, ) assert result.status_code == 201 decoy.verify( @@ -97,6 +106,7 @@ async def test_upload_new_data_file( name="abc.csv", file_hash="abc123", created_at=datetime(year=2024, month=6, day=18), + source=DataFileSource.UPLOADED, ) ), ) @@ -127,6 +137,7 @@ async def test_upload_existing_data_file( name="abc.csv", file_hash="abc123", created_at=datetime(year=2023, month=6, day=18), + source=DataFileSource.UPLOADED, ) ) @@ -146,6 +157,7 @@ async def test_upload_existing_data_file( id="existing-file-id", name="abc.csv", createdAt=datetime(year=2023, month=6, day=18), + source=DataFileSource.UPLOADED, ) @@ -183,6 +195,7 @@ async def test_upload_new_data_file_path( id="data-file-id", name="abc.csv", createdAt=datetime(year=2024, month=6, day=18), + source=DataFileSource.UPLOADED, ) decoy.verify( await file_reader_writer.write( @@ -194,6 +207,7 @@ async def test_upload_new_data_file_path( name="abc.csv", file_hash="abc123", created_at=datetime(year=2024, month=6, day=18), + source=DataFileSource.UPLOADED, ) ), ) @@ -270,6 +284,7 @@ async def test_get_data_file_info( name="abc.xyz", file_hash="123", created_at=datetime(year=2024, month=7, day=15), + source=DataFileSource.UPLOADED, ) ) @@ -282,6 +297,7 @@ async def test_get_data_file_info( id="qwerty", name="abc.xyz", createdAt=datetime(year=2024, month=7, day=15), + source=DataFileSource.UPLOADED, ) @@ -317,6 +333,7 @@ async def test_get_data_file( name="abc.xyz", file_hash="123", created_at=datetime(year=2024, month=7, day=15), + source=DataFileSource.UPLOADED, ) ) @@ -358,12 +375,14 @@ async def test_get_all_data_file_info( name="abc.xyz", file_hash="123", created_at=datetime(year=2024, month=7, day=15), + source=DataFileSource.UPLOADED, ), DataFileInfo( id="hfhcjdeowjfie", name="mcd.kfc", file_hash="124", created_at=datetime(year=2024, month=7, day=22), + source=DataFileSource.UPLOADED, ), ] ) @@ -376,11 +395,13 @@ async def test_get_all_data_file_info( id="qwerty", name="abc.xyz", createdAt=datetime(year=2024, month=7, day=15), + source=DataFileSource.UPLOADED, ), DataFile( id="hfhcjdeowjfie", name="mcd.kfc", createdAt=datetime(year=2024, month=7, day=22), + source=DataFileSource.UPLOADED, ), ] assert result.content.meta == MultiBodyMeta(cursor=0, totalLength=2) diff --git a/robot-server/tests/integration/http_api/data_files/test_deletion.tavern.yaml b/robot-server/tests/integration/http_api/data_files/test_deletion.tavern.yaml index 7cc4f90c4cc..301127df89e 100644 --- a/robot-server/tests/integration/http_api/data_files/test_deletion.tavern.yaml +++ b/robot-server/tests/integration/http_api/data_files/test_deletion.tavern.yaml @@ -21,6 +21,7 @@ stages: id: !anystr name: "sample_record.csv" createdAt: !re_fullmatch "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d+(Z|([+-]\\d{2}:\\d{2}))" + source: "uploaded" - name: Delete the data file request: diff --git a/robot-server/tests/integration/http_api/data_files/test_upload_data_file.tavern.yaml b/robot-server/tests/integration/http_api/data_files/test_upload_data_file.tavern.yaml index 44c5b4700f7..ee10cdadd9e 100644 --- a/robot-server/tests/integration/http_api/data_files/test_upload_data_file.tavern.yaml +++ b/robot-server/tests/integration/http_api/data_files/test_upload_data_file.tavern.yaml @@ -21,6 +21,7 @@ stages: id: !anystr name: "color_codes.csv" createdAt: !re_fullmatch "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d+(Z|([+-]\\d{2}:\\d{2}))" + source: "uploaded" - name: Upload same file again. It should not create a new record. request: @@ -49,6 +50,7 @@ stages: id: !anystr name: "sample_record.csv" createdAt: !re_fullmatch "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d+(Z|([+-]\\d{2}:\\d{2}))" + source: "uploaded" - name: Get color_codes.csv file info request: @@ -61,3 +63,4 @@ stages: id: '{data_file_id}' name: "color_codes.csv" createdAt: !re_fullmatch "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d+(Z|([+-]\\d{2}:\\d{2}))" + source: "uploaded" diff --git a/robot-server/tests/integration/http_api/protocols/test_analyses_with_csv_file_parameters.tavern.yaml b/robot-server/tests/integration/http_api/protocols/test_analyses_with_csv_file_parameters.tavern.yaml index addd5a43c79..d9a55f023d1 100644 --- a/robot-server/tests/integration/http_api/protocols/test_analyses_with_csv_file_parameters.tavern.yaml +++ b/robot-server/tests/integration/http_api/protocols/test_analyses_with_csv_file_parameters.tavern.yaml @@ -17,6 +17,7 @@ stages: csv_file_id: data.id csv_file_name: data.name file_created_at: data.createdAt + source: "uploaded" status_code: - 201 json: @@ -24,6 +25,7 @@ stages: id: !anystr name: "sample_record.csv" createdAt: !re_fullmatch "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d+(Z|([+-]\\d{2}:\\d{2}))" + source: "uploaded" - name: Upload a protocol request: @@ -40,6 +42,7 @@ stages: protocol_id: data.id analysis_id: data.analysisSummaries[0].id run_time_parameters_data1: data.analysisSummaries[0].runTimeParameters + source: "uploaded" strict: - json:off status_code: 201 @@ -130,3 +133,4 @@ stages: - id: '{csv_file_id}' name: '{csv_file_name}' createdAt: '{file_created_at}' + source: 'uploaded' diff --git a/robot-server/tests/integration/http_api/protocols/test_get_csv_files_used_with_protocol.tavern.yaml b/robot-server/tests/integration/http_api/protocols/test_get_csv_files_used_with_protocol.tavern.yaml index 63ac864856e..9b82f473491 100644 --- a/robot-server/tests/integration/http_api/protocols/test_get_csv_files_used_with_protocol.tavern.yaml +++ b/robot-server/tests/integration/http_api/protocols/test_get_csv_files_used_with_protocol.tavern.yaml @@ -229,9 +229,12 @@ stages: - id: '{data_file_1_id}' name: "test.csv" createdAt: !re_fullmatch "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d+(Z|([+-]\\d{2}:\\d{2}))" + source: 'uploaded' - id: '{data_file_2_id}' name: "sample_record.csv" createdAt: !re_fullmatch "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d+(Z|([+-]\\d{2}:\\d{2}))" + source: 'uploaded' - id: '{data_file_3_id}' name: "sample_plates.csv" createdAt: !re_fullmatch "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d+(Z|([+-]\\d{2}:\\d{2}))" + source: 'uploaded' diff --git a/robot-server/tests/integration/http_api/runs/test_run_with_run_time_parameters.tavern.yaml b/robot-server/tests/integration/http_api/runs/test_run_with_run_time_parameters.tavern.yaml index 8916ebd1cf2..1f44f7101c7 100644 --- a/robot-server/tests/integration/http_api/runs/test_run_with_run_time_parameters.tavern.yaml +++ b/robot-server/tests/integration/http_api/runs/test_run_with_run_time_parameters.tavern.yaml @@ -34,6 +34,7 @@ stages: id: !anystr name: "sample_plates.csv" createdAt: !re_fullmatch "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d+(Z|([+-]\\d{2}:\\d{2}))" + source: "uploaded" - name: Create run from protocol request: diff --git a/robot-server/tests/persistence/test_tables.py b/robot-server/tests/persistence/test_tables.py index a970bb86d89..0277919aa30 100644 --- a/robot-server/tests/persistence/test_tables.py +++ b/robot-server/tests/persistence/test_tables.py @@ -117,6 +117,9 @@ CREATE UNIQUE INDEX ix_run_run_id_index_in_run ON run_command (run_id, index_in_run) """, """ + CREATE INDEX ix_data_files_source ON data_files (source) + """, + """ CREATE INDEX ix_protocol_protocol_kind ON protocol (protocol_kind) """, """ @@ -128,7 +131,9 @@ name VARCHAR NOT NULL, file_hash VARCHAR NOT NULL, created_at DATETIME NOT NULL, - PRIMARY KEY (id) + source VARCHAR(9) NOT NULL, + PRIMARY KEY (id), + CONSTRAINT datafilesourcesqlenum CHECK (source IN ('uploaded', 'generated')) ) """, """ diff --git a/robot-server/tests/protocols/test_completed_analysis_store.py b/robot-server/tests/protocols/test_completed_analysis_store.py index 4426ad062c7..42c12565c14 100644 --- a/robot-server/tests/protocols/test_completed_analysis_store.py +++ b/robot-server/tests/protocols/test_completed_analysis_store.py @@ -8,6 +8,7 @@ from sqlalchemy.engine import Engine from decoy import Decoy +from robot_server.data_files.models import DataFileSource from robot_server.persistence.tables import ( analysis_table, analysis_primitive_type_rtp_table, @@ -21,7 +22,10 @@ ProtocolSource, JsonProtocolConfig, ) -from robot_server.data_files.data_files_store import DataFilesStore, DataFileInfo +from robot_server.data_files.data_files_store import ( + DataFilesStore, + DataFileInfo, +) from robot_server.protocols.analysis_memcache import MemoryCache from robot_server.protocols.analysis_models import ( CompletedAnalysis, @@ -326,6 +330,7 @@ async def test_store_and_get_csv_rtps_by_analysis_id( id="file-id", name="my_csv_file.csv", file_hash="file-hash", + source=DataFileSource.UPLOADED, created_at=datetime(year=2024, month=1, day=1, tzinfo=timezone.utc), ) ) @@ -460,6 +465,7 @@ async def test_make_room_and_add_handles_rtp_tables_correctly( id="file-id", name="my_csv_file.csv", file_hash="file-hash", + source=DataFileSource.UPLOADED, created_at=datetime(year=2024, month=1, day=1, tzinfo=timezone.utc), ) ) diff --git a/robot-server/tests/protocols/test_protocol_store.py b/robot-server/tests/protocols/test_protocol_store.py index 5d413ad7fa3..ca965d471a8 100644 --- a/robot-server/tests/protocols/test_protocol_store.py +++ b/robot-server/tests/protocols/test_protocol_store.py @@ -14,8 +14,11 @@ PythonProtocolConfig, ) -from robot_server.data_files.data_files_store import DataFilesStore, DataFileInfo -from robot_server.data_files.models import DataFile +from robot_server.data_files.data_files_store import ( + DataFilesStore, + DataFileInfo, +) +from robot_server.data_files.models import DataFile, DataFileSource from robot_server.protocols.analysis_memcache import MemoryCache from robot_server.protocols.analysis_models import ( CompletedAnalysis, @@ -588,6 +591,7 @@ async def test_get_referenced_data_files( id="data-file-id-1", name="file-name", file_hash="abc123", + source=DataFileSource.UPLOADED, created_at=datetime(year=2021, month=1, day=1, tzinfo=timezone.utc), ) ) @@ -596,6 +600,7 @@ async def test_get_referenced_data_files( id="data-file-id-2", name="file-name", file_hash="abc123", + source=DataFileSource.UPLOADED, created_at=datetime(year=2021, month=1, day=1, tzinfo=timezone.utc), ) ) @@ -604,6 +609,7 @@ async def test_get_referenced_data_files( id="data-file-id-3", name="file-name", file_hash="abc123", + source=DataFileSource.UPLOADED, created_at=datetime(year=2021, month=1, day=1, tzinfo=timezone.utc), ) ) @@ -653,15 +659,18 @@ async def test_get_referenced_data_files( id="data-file-id-1", name="file-name", createdAt=datetime(year=2021, month=1, day=1, tzinfo=timezone.utc), + source=DataFileSource.UPLOADED, ), DataFile( id="data-file-id-2", name="file-name", createdAt=datetime(year=2021, month=1, day=1, tzinfo=timezone.utc), + source=DataFileSource.UPLOADED, ), DataFile( id="data-file-id-3", name="file-name", createdAt=datetime(year=2021, month=1, day=1, tzinfo=timezone.utc), + source=DataFileSource.UPLOADED, ), ] diff --git a/robot-server/tests/protocols/test_protocols_router.py b/robot-server/tests/protocols/test_protocols_router.py index a2ad10dbda0..637a2ee082f 100644 --- a/robot-server/tests/protocols/test_protocols_router.py +++ b/robot-server/tests/protocols/test_protocols_router.py @@ -30,8 +30,11 @@ BufferedFile, ) -from robot_server.data_files.data_files_store import DataFilesStore, DataFileInfo -from robot_server.data_files.models import DataFile +from robot_server.data_files.data_files_store import ( + DataFilesStore, + DataFileInfo, +) +from robot_server.data_files.models import DataFile, DataFileSource from robot_server.errors.error_responses import ApiError from robot_server.protocols.analyses_manager import AnalysesManager from robot_server.protocols.protocol_analyzer import ProtocolAnalyzer @@ -728,6 +731,7 @@ async def test_create_new_protocol_with_run_time_params( id="123", name="file.abc", file_hash="xyz", + source=DataFileSource.UPLOADED, created_at=datetime(year=2022, month=2, day=2), ) ) @@ -993,6 +997,7 @@ async def test_create_existing_protocol_with_different_run_time_params( id="123", name="file.abc", file_hash="xyz", + source=DataFileSource.UPLOADED, created_at=datetime(year=2022, month=2, day=2), ) ) @@ -1813,6 +1818,7 @@ async def test_update_protocol_analyses_with_new_rtp_values( id="123", name="foo.csv", file_hash="xyz", + source=DataFileSource.UPLOADED, created_at=datetime(year=2022, month=2, day=2), ) ) @@ -2172,11 +2178,13 @@ async def test_get_data_files( id="id1", name="csv-file1.csv", createdAt=datetime(year=2024, month=1, day=1), + source=DataFileSource.UPLOADED, ), DataFile( id="id2", name="csv-file2.csv", createdAt=datetime(year=2024, month=1, day=1), + source=DataFileSource.UPLOADED, ), ] decoy.when(protocol_store.has(protocol_id="protocol-id")).then_return(True) diff --git a/robot-server/tests/runs/router/test_base_router.py b/robot-server/tests/runs/router/test_base_router.py index 0a0266c0c65..9052b588bc9 100644 --- a/robot-server/tests/runs/router/test_base_router.py +++ b/robot-server/tests/runs/router/test_base_router.py @@ -20,8 +20,12 @@ from opentrons.hardware_control.nozzle_manager import NozzleConfigurationType, NozzleMap -from robot_server.data_files.data_files_store import DataFilesStore, DataFileInfo +from robot_server.data_files.data_files_store import ( + DataFilesStore, + DataFileInfo, +) +from robot_server.data_files.models import DataFileSource from robot_server.errors.error_responses import ApiError from robot_server.runs.error_recovery_models import ErrorRecoveryPolicy from robot_server.service.json_api import ( @@ -250,6 +254,7 @@ async def test_create_protocol_run( name="abc.xyz", file_hash="987", created_at=datetime(month=1, day=2, year=2024), + source=DataFileSource.UPLOADED, ) ) decoy.when( diff --git a/robot-server/tests/runs/test_run_store.py b/robot-server/tests/runs/test_run_store.py index ce6f8326c22..17a5c3b252f 100644 --- a/robot-server/tests/runs/test_run_store.py +++ b/robot-server/tests/runs/test_run_store.py @@ -5,13 +5,17 @@ import pytest from decoy import Decoy -from robot_server.data_files.data_files_store import DataFileInfo, DataFilesStore +from robot_server.data_files.data_files_store import ( + DataFileInfo, + DataFilesStore, +) from sqlalchemy.engine import Engine from unittest import mock from opentrons_shared_data.pipette.types import PipetteNameType from opentrons_shared_data.errors.codes import ErrorCodes +from robot_server.data_files.models import DataFileSource from robot_server.protocols.protocol_store import ProtocolNotFoundError from robot_server.runs.run_store import ( CSVParameterRunResource, @@ -296,6 +300,7 @@ async def test_insert_and_get_csv_rtp( id="file-id", name="my_csv_file.csv", file_hash="file-hash", + source=DataFileSource.UPLOADED, created_at=datetime(year=2024, month=1, day=1, tzinfo=timezone.utc), ) ) @@ -524,6 +529,7 @@ async def test_remove_run( id="file-id", name="my_csv_file.csv", file_hash="file-hash", + source=DataFileSource.UPLOADED, created_at=datetime(year=2024, month=1, day=1, tzinfo=timezone.utc), ) ) From 094be6ef5dd2ac26ae1d3b15faace83f36a9c5f2 Mon Sep 17 00:00:00 2001 From: Ed Cormany Date: Tue, 29 Oct 2024 21:08:49 -0400 Subject: [PATCH 30/81] chore(release): 8.2.0 alpha release notes (#16619) # Overview Release notes for 8.2.0 alpha 0. Addresses RTC-536. ## Test Plan and Hands on Testing To check in first alpha cut. ## Changelog Bullets for major new and improved features. ## Review requests Any bug fixes worth noting here? Can add to this PR or later in the alpha process. ## Risk assessment v low --- api/release-notes.md | 18 ++++++++++++++++++ app-shell/build/release-notes.md | 24 ++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/api/release-notes.md b/api/release-notes.md index 2a528502bef..e41d415d83e 100644 --- a/api/release-notes.md +++ b/api/release-notes.md @@ -8,6 +8,24 @@ By installing and using Opentrons software, you agree to the Opentrons End-User --- +## Opentrons Robot Software Changes in 8.2.0 + +Welcome to the v8.2.0 release of the Opentrons robot software! This release adds support for the Opentrons Absorbance Plate Reader Module. + +### New Features + +- Create and run Python protocols that use the Opentrons Absorbance Plate Reader. + +### Improved Features + +- Liquid presence detection no longer checks for liquid before every aspiration in a `mix()` command. + +### Bug Fixes + +- Error recovery no longer causes an `AssertionError` when a Python protocol changes the pipette speed. + +--- + ## Opentrons Robot Software Changes in 8.1.0 Welcome to the v8.1.0 release of the Opentrons robot software! diff --git a/app-shell/build/release-notes.md b/app-shell/build/release-notes.md index 27ff23e0909..a093e29e6ed 100644 --- a/app-shell/build/release-notes.md +++ b/app-shell/build/release-notes.md @@ -8,6 +8,30 @@ By installing and using Opentrons software, you agree to the Opentrons End-User --- +## Opentrons App Changes in 8.2.0 + +Welcome to the v8.2.0 release of the Opentrons App! This release adds support for the Opentrons Absorbance Plate Reader Module, as well as other features. + +### New Features + +- Run protocols that use the Absorbance Plate Reader and check the status of the module on the robot details screen for your Flex. +- Run protocols that use the new Opentrons Tough PCR Auto-Sealing Lid with the Thermocycler Module GEN2. Stacks of these lids appear in a consolidated view when setting up labware. + +### Improved Features + +- Error recovery now works in more situations and has more options. + - Recover from gripper errors. + - Recover from failure to drop tips. + - Indicate that an error was improperly detected and skip similar errors later in the run. + - Choose from more options of where to drop tips as part of recovery. + - Disable error recovery entirely, if your application requires it. Runs will fail on any error. + +### Bug Fixes + +- Fixed an app crash when performing certain error recovery steps with Python API version 2.15 protocols. + +--- + ## Opentrons App Changes in 8.1.0 Welcome to the v8.1.0 release of the Opentrons App! From cbadc4dfaf91ff1654a5555577324996c43cdc8e Mon Sep 17 00:00:00 2001 From: Jethary Alcid <66035149+jerader@users.noreply.github.com> Date: Wed, 30 Oct 2024 10:15:58 -0400 Subject: [PATCH 31/81] fix(protocol-designer): timeline warnings appear when reopening form (#16632) closes RQA-3450 --- .../src/organisms/Alerts/FormAlerts.tsx | 38 ++++++++++++------- .../Alerts/__tests__/FormAlerts.test.tsx | 2 + .../StepForm/StepFormToolbox.tsx | 8 ++-- .../StepTools/MoveLiquidTools/index.tsx | 2 +- 4 files changed, 32 insertions(+), 18 deletions(-) diff --git a/protocol-designer/src/organisms/Alerts/FormAlerts.tsx b/protocol-designer/src/organisms/Alerts/FormAlerts.tsx index 7897d86782d..ad470253e69 100644 --- a/protocol-designer/src/organisms/Alerts/FormAlerts.tsx +++ b/protocol-designer/src/organisms/Alerts/FormAlerts.tsx @@ -28,12 +28,14 @@ import type { ProfileFormError } from '../../steplist/formLevel/profileErrors' import type { MakeAlert } from './types' interface FormAlertsProps { + showFormErrorsAndWarnings: boolean focusedField?: StepFieldName | null dirtyFields?: StepFieldName[] } function FormAlertsComponent(props: FormAlertsProps): JSX.Element | null { - const { focusedField, dirtyFields } = props + const { showFormErrorsAndWarnings, focusedField, dirtyFields } = props + const { t } = useTranslation('alert') const dispatch = useDispatch() const formLevelErrorsForUnsavedForm = useSelector( @@ -120,17 +122,13 @@ function FormAlertsComponent(props: FormAlertsProps): JSX.Element | null { ) + const formErrors = [ - ...visibleFormErrors.reduce((acc, error) => { - return error.showAtForm ?? true - ? { - ...acc, - title: error.title, - description: error.body || null, - showAtForm: error.showAtForm ?? true, - } - : acc - }, []), + ...visibleFormErrors.map(error => ({ + title: error.title, + description: error.body ?? null, + showAtForm: error.showAtForm ?? true, + })), ...visibleDynamicFieldFormErrors.map(error => ({ title: error.title, description: error.body || null, @@ -161,14 +159,26 @@ function FormAlertsComponent(props: FormAlertsProps): JSX.Element | null { ) } } - return [...formErrors, ...formWarnings, ...timelineWarnings].length > 0 ? ( + + if (showFormErrorsAndWarnings) { + return [...formErrors, ...formWarnings].length > 0 ? ( + + {formErrors.map((error, key) => makeAlert('error', error, key))} + {formWarnings.map((warning, key) => makeAlert('warning', warning, key))} + + ) : null + } + + return timelineWarnings.length > 0 ? ( - {formErrors.map((error, key) => makeAlert('error', error, key))} - {formWarnings.map((warning, key) => makeAlert('warning', warning, key))} {timelineWarnings.map((warning, key) => makeAlert('warning', warning, key) )} diff --git a/protocol-designer/src/organisms/Alerts/__tests__/FormAlerts.test.tsx b/protocol-designer/src/organisms/Alerts/__tests__/FormAlerts.test.tsx index b069da5534f..26c5cdb02ce 100644 --- a/protocol-designer/src/organisms/Alerts/__tests__/FormAlerts.test.tsx +++ b/protocol-designer/src/organisms/Alerts/__tests__/FormAlerts.test.tsx @@ -37,6 +37,7 @@ describe('FormAlerts', () => { props = { focusedField: null, dirtyFields: [], + showFormErrorsAndWarnings: false, } vi.mocked(getFormLevelErrorsForUnsavedForm).mockReturnValue([]) vi.mocked(getFormWarningsForSelectedStep).mockReturnValue([]) @@ -62,6 +63,7 @@ describe('FormAlerts', () => { expect(vi.mocked(dismissTimelineWarning)).toHaveBeenCalled() }) it('renders a form level warning that is dismissible', () => { + props.showFormErrorsAndWarnings = true vi.mocked(getFormWarningsForSelectedStep).mockReturnValue([ { type: 'TIP_POSITIONED_LOW_IN_TUBE', diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx index 2f7ae836581..634bb422ecb 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx @@ -244,9 +244,11 @@ export function StepFormToolbox(props: StepFormToolboxProps): JSX.Element { } > - {showFormErrorsAndWarnings ? ( - - ) : null} + - error.dependentFields.includes('aspirate_labware') + error.dependentFields.includes('aspirate_wells') ) ?? false } /> From 31eb1a2c9d919ae5a52bf70e26120eb4389fb2be Mon Sep 17 00:00:00 2001 From: Jethary Alcid <66035149+jerader@users.noreply.github.com> Date: Wed, 30 Oct 2024 10:28:00 -0400 Subject: [PATCH 32/81] feat(protocol-designer): tip positioning modal and assets (#16612) closes AUTH-928 --- .../assets/images/tip_side_bottom_layer.svg | 12 + .../src/assets/images/tip_side_mid_layer.svg | 45 +++ .../src/assets/images/tip_side_top_layer.svg | 49 +++ .../assets/images/tip_top_bottom_layer.svg | 12 + .../src/assets/images/tip_top_mid_layer.svg | 37 ++ .../src/assets/images/tip_top_top_layer.svg | 40 ++ .../src/assets/localization/en/modal.json | 20 +- .../src/assets/localization/en/shared.json | 10 +- .../__tests__/TipPositionModal.test.tsx | 6 +- .../__tests__/ZTipPositionModal.test.tsx | 2 +- .../TipPositionModal/TipPositionSideView.tsx | 77 ++++ .../TipPositionModal/TipPositionTopView.tsx | 61 +++ .../TipPositionModal/TipPositionZOnlyView.tsx | 64 +++ .../TipPositionModal/ZTipPositionModal.tsx | 211 ++++++++++ .../__tests__/TipPositionModal.test.tsx | 132 +++++++ .../__tests__/ZTipPositionModal.test.tsx | 47 +++ .../organisms/TipPositionModal/constants.ts | 3 + .../src/organisms/TipPositionModal/index.tsx | 364 ++++++++++++++++++ .../src/organisms/TipPositionModal/utils.tsx | 120 ++++++ protocol-designer/src/organisms/index.ts | 2 + .../PipetteFields/BlowoutOffsetField.tsx | 2 +- .../StepForm/PipetteFields/PositionField.tsx | 9 +- 22 files changed, 1305 insertions(+), 20 deletions(-) create mode 100644 protocol-designer/src/assets/images/tip_side_bottom_layer.svg create mode 100644 protocol-designer/src/assets/images/tip_side_mid_layer.svg create mode 100644 protocol-designer/src/assets/images/tip_side_top_layer.svg create mode 100644 protocol-designer/src/assets/images/tip_top_bottom_layer.svg create mode 100644 protocol-designer/src/assets/images/tip_top_mid_layer.svg create mode 100644 protocol-designer/src/assets/images/tip_top_top_layer.svg create mode 100644 protocol-designer/src/organisms/TipPositionModal/TipPositionSideView.tsx create mode 100644 protocol-designer/src/organisms/TipPositionModal/TipPositionTopView.tsx create mode 100644 protocol-designer/src/organisms/TipPositionModal/TipPositionZOnlyView.tsx create mode 100644 protocol-designer/src/organisms/TipPositionModal/ZTipPositionModal.tsx create mode 100644 protocol-designer/src/organisms/TipPositionModal/__tests__/TipPositionModal.test.tsx create mode 100644 protocol-designer/src/organisms/TipPositionModal/__tests__/ZTipPositionModal.test.tsx create mode 100644 protocol-designer/src/organisms/TipPositionModal/constants.ts create mode 100644 protocol-designer/src/organisms/TipPositionModal/index.tsx create mode 100644 protocol-designer/src/organisms/TipPositionModal/utils.tsx diff --git a/protocol-designer/src/assets/images/tip_side_bottom_layer.svg b/protocol-designer/src/assets/images/tip_side_bottom_layer.svg new file mode 100644 index 00000000000..717282ed951 --- /dev/null +++ b/protocol-designer/src/assets/images/tip_side_bottom_layer.svg @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/protocol-designer/src/assets/images/tip_side_mid_layer.svg b/protocol-designer/src/assets/images/tip_side_mid_layer.svg new file mode 100644 index 00000000000..097f163b705 --- /dev/null +++ b/protocol-designer/src/assets/images/tip_side_mid_layer.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/protocol-designer/src/assets/images/tip_side_top_layer.svg b/protocol-designer/src/assets/images/tip_side_top_layer.svg new file mode 100644 index 00000000000..adf16b11691 --- /dev/null +++ b/protocol-designer/src/assets/images/tip_side_top_layer.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/protocol-designer/src/assets/images/tip_top_bottom_layer.svg b/protocol-designer/src/assets/images/tip_top_bottom_layer.svg new file mode 100644 index 00000000000..9def3aa184d --- /dev/null +++ b/protocol-designer/src/assets/images/tip_top_bottom_layer.svg @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/protocol-designer/src/assets/images/tip_top_mid_layer.svg b/protocol-designer/src/assets/images/tip_top_mid_layer.svg new file mode 100644 index 00000000000..7e97da22d38 --- /dev/null +++ b/protocol-designer/src/assets/images/tip_top_mid_layer.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/protocol-designer/src/assets/images/tip_top_top_layer.svg b/protocol-designer/src/assets/images/tip_top_top_layer.svg new file mode 100644 index 00000000000..d5c7edbbc9f --- /dev/null +++ b/protocol-designer/src/assets/images/tip_top_top_layer.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/protocol-designer/src/assets/localization/en/modal.json b/protocol-designer/src/assets/localization/en/modal.json index 65212e4ba4a..8b891c0f405 100644 --- a/protocol-designer/src/assets/localization/en/modal.json +++ b/protocol-designer/src/assets/localization/en/modal.json @@ -76,7 +76,7 @@ "tip_position": { "title": "Tip Positioning", "caption": "between {{min}} and {{max}}", - "warning": "One or more position offset values are close to the edge of the well and might collide with it", + "warning": "Tip position is close to the edge of the well and may cause collisions.", "radio_button": { "default": "{{defaultMmFromBottom}} mm from the bottom center (default)", "blowout": "0 mm from the top center (default)", @@ -84,15 +84,15 @@ "custom": "Custom" }, "body": { - "blowout_z_offset": "Change from where in the well the robot emits blowout", - "aspirate_mmFromBottom": "Change from where in the well the robot aspirates", - "dispense_mmFromBottom": "Change from where in the well the robot dispenses", - "mix_mmFromBottom": "Change from where in the well the robot aspirates and dispenses during the mix", - "aspirate_touchTip_mmFromBottom": "Change from where in the well the robot performs touch tip", - "dispense_touchTip_mmFromBottom": "Change from where in the well the robot performs touch tip", - "mix_touchTip_mmFromBottom": "Change from where in the well the robot performs touch tip", - "aspirate_delay_mmFromBottom": "Change from where in the well the robot delays after aspirating", - "dispense_delay_mmFromBottom": "Change from where in the well the robot delays after dispensing" + "blowout_z_offset": "Change where in the well the robot performs the blowout.", + "aspirate_mmFromBottom": "Change where in the well the robot aspirates from.", + "dispense_mmFromBottom": "Change where in the well the robot dispenses from.", + "mix_mmFromBottom": "Change from where in the well the robot aspirates and dispenses during the mix.", + "aspirate_touchTip_mmFromBottom": "Change from where in the well the robot performs the touch tip.", + "dispense_touchTip_mmFromBottom": "Change from where in the well the robot performs the touch tip.", + "mix_touchTip_mmFromBottom": "Change from where in the well the robot performs the touch tip.", + "aspirate_delay_mmFromBottom": "Change from where in the well the robot delays after aspirating.", + "dispense_delay_mmFromBottom": "Change from where in the well the robot delays after dispensing." }, "field_titles": { "z_position": "Z position", diff --git a/protocol-designer/src/assets/localization/en/shared.json b/protocol-designer/src/assets/localization/en/shared.json index 2758f7b9725..dafebf2b62d 100644 --- a/protocol-designer/src/assets/localization/en/shared.json +++ b/protocol-designer/src/assets/localization/en/shared.json @@ -98,9 +98,9 @@ "not_json": "Incompatible file type", "one_channel": "1-Channel", "only_tiprack": "Incompatible file type", - "opentrons_collects_data": "In order to improve our products, Opentrons would like to collect data related to your use of Protocol Designer. With your consent, Opentrons will collect and store analytics and session data, including through the use of cookies and similar technologies, solely for the purpose enhancing our products.", "opentrons_flex": "Opentrons Flex", "opentrons": "Opentrons", + "opentrons_collects_data": "In order to improve our products, Opentrons would like to collect data related to your use of Protocol Designer. With your consent, Opentrons will collect and store analytics and session data, including through the use of cookies and similar technologies, solely for the purpose enhancing our products.", "ot2": "Opentrons OT-2", "overwrite_labware": "Overwrite labware", "overwrite": "Click Overwrite to replace the existing labware with the new labware.", @@ -131,8 +131,16 @@ "stagingArea": "Staging area", "step_count": "Step {{current}}", "step": "Step {{current}} / {{max}}", + "swap_view": "Swap view", "temperaturemoduletype": "Temperature Module", "thermocyclermoduletype": "Thermocycler Module", + "tip_position_aspirate_delay_mmFromBottom": "Edit aspirate delay position", + "tip_position_aspirate_touchTip_mmFromBottom": "Edit aspirate touch tip position", + "tip_position_blowout_z_offset": "Edit blowout position", + "tip_position_dispense_delay_mmFromBottom": "Edit dispense delay position", + "tip_position_dispense_touchTip_mmFromBottom": "Edit dispense touch tip position", + "tip_position_mix_touchTip_mmFromBottom": "Edit touch tip position", + "tip_position": "Edit {{prefix}} tip position", "trashBin": "Trash Bin", "updated_protocol_designer": "We've updated Protocol Designer!", "user_settings": "User settings", diff --git a/protocol-designer/src/components/StepEditForm/fields/TipPositionField/__tests__/TipPositionModal.test.tsx b/protocol-designer/src/components/StepEditForm/fields/TipPositionField/__tests__/TipPositionModal.test.tsx index 00c59baae82..44443796a90 100644 --- a/protocol-designer/src/components/StepEditForm/fields/TipPositionField/__tests__/TipPositionModal.test.tsx +++ b/protocol-designer/src/components/StepEditForm/fields/TipPositionField/__tests__/TipPositionModal.test.tsx @@ -50,7 +50,7 @@ describe('TipPositionModal', () => { it('renders the modal text and radio button text', () => { render(props) screen.getByText('Tip Positioning') - screen.getByText('Change from where in the well the robot aspirates') + screen.getByText('Change where in the well the robot aspirates from.') screen.getByRole('radio', { name: '1 mm from the bottom center (default)' }) screen.getByRole('radio', { name: 'Custom' }) fireEvent.click(screen.getByText('cancel')) @@ -66,7 +66,7 @@ describe('TipPositionModal', () => { render(props) screen.getByText('warning') screen.getByText( - 'One or more position offset values are close to the edge of the well and might collide with it' + 'Tip position is close to the edge of the well and may cause collisions.' ) }) it('renders the alert if the x/y position values are too close to the max/min for y value', () => { @@ -74,7 +74,7 @@ describe('TipPositionModal', () => { render(props) screen.getByText('warning') screen.getByText( - 'One or more position offset values are close to the edge of the well and might collide with it' + 'Tip position is close to the edge of the well and may cause collisions.' ) }) it('renders the custom options, captions, and visual', () => { diff --git a/protocol-designer/src/components/StepEditForm/fields/TipPositionField/__tests__/ZTipPositionModal.test.tsx b/protocol-designer/src/components/StepEditForm/fields/TipPositionField/__tests__/ZTipPositionModal.test.tsx index 5db7590ed09..837739cdc02 100644 --- a/protocol-designer/src/components/StepEditForm/fields/TipPositionField/__tests__/ZTipPositionModal.test.tsx +++ b/protocol-designer/src/components/StepEditForm/fields/TipPositionField/__tests__/ZTipPositionModal.test.tsx @@ -31,7 +31,7 @@ describe('ZTipPositionModal', () => { it('renders the text and radio buttons', () => { render(props) screen.getByText('Tip Positioning') - screen.getByText('Change from where in the well the robot emits blowout') + screen.getByText('Change where in the well the robot performs the blowout.') screen.getByRole('radio', { name: '0 mm from the top center (default)' }) screen.getByRole('radio', { name: 'Custom' }) fireEvent.click(screen.getByText('cancel')) diff --git a/protocol-designer/src/organisms/TipPositionModal/TipPositionSideView.tsx b/protocol-designer/src/organisms/TipPositionModal/TipPositionSideView.tsx new file mode 100644 index 00000000000..291461da4f5 --- /dev/null +++ b/protocol-designer/src/organisms/TipPositionModal/TipPositionSideView.tsx @@ -0,0 +1,77 @@ +import round from 'lodash/round' +import { useTranslation } from 'react-i18next' +import { + Box, + COLORS, + OVERFLOW_HIDDEN, + POSITION_ABSOLUTE, + POSITION_RELATIVE, + StyledText, +} from '@opentrons/components' +import BOTTOM_LAYER from '../../assets/images/tip_side_bottom_layer.svg' +import MID_LAYER from '../../assets/images/tip_side_mid_layer.svg' +import TOP_LAYER from '../../assets/images/tip_side_top_layer.svg' + +const WELL_HEIGHT_PIXELS = 71 +const WELL_WIDTH_PIXELS = 70 +const PIXEL_DECIMALS = 2 + +interface TipPositionAllVizProps { + mmFromBottom: number + xPosition: number + wellDepthMm: number + xWidthMm: number +} + +export function TipPositionSideView( + props: TipPositionAllVizProps +): JSX.Element { + const { mmFromBottom, xPosition, wellDepthMm, xWidthMm } = props + const { t } = useTranslation('application') + const fractionOfWellHeight = mmFromBottom / wellDepthMm + const pixelsFromBottom = + fractionOfWellHeight * WELL_HEIGHT_PIXELS - WELL_HEIGHT_PIXELS + const roundedPixelsFromBottom = round(pixelsFromBottom, PIXEL_DECIMALS) + const bottomPx = wellDepthMm + ? roundedPixelsFromBottom * 2 + : mmFromBottom - WELL_HEIGHT_PIXELS + + const xPositionPixels = (WELL_WIDTH_PIXELS / xWidthMm) * xPosition + const roundedXPositionPixels = round(xPositionPixels, PIXEL_DECIMALS) + + return ( + + + + + {wellDepthMm !== null && ( + + + {round(wellDepthMm, 0)} + {t('units.millimeter')} + + + )} + {xWidthMm !== null && ( + + + {xWidthMm} + {t('units.millimeter')} + + + )} + + ) +} diff --git a/protocol-designer/src/organisms/TipPositionModal/TipPositionTopView.tsx b/protocol-designer/src/organisms/TipPositionModal/TipPositionTopView.tsx new file mode 100644 index 00000000000..3fa107264e2 --- /dev/null +++ b/protocol-designer/src/organisms/TipPositionModal/TipPositionTopView.tsx @@ -0,0 +1,61 @@ +import round from 'lodash/round' +import { useTranslation } from 'react-i18next' +import { + Box, + COLORS, + OVERFLOW_HIDDEN, + POSITION_ABSOLUTE, + POSITION_RELATIVE, + StyledText, +} from '@opentrons/components' +import BOTTOM_LAYER from '../../assets/images/tip_top_bottom_layer.svg' +import MID_LAYER from '../../assets/images/tip_top_mid_layer.svg' +import TOP_LAYER from '../../assets/images/tip_top_top_layer.svg' + +const WELL_WIDTH_PIXELS = 70 +const PIXEL_DECIMALS = 2 + +interface TipPositionAllVizProps { + xPosition: number + xWidthMm: number + yPosition: number + yWidthMm: number +} + +export function TipPositionTopView(props: TipPositionAllVizProps): JSX.Element { + const { yPosition, xPosition, yWidthMm, xWidthMm } = props + const { t } = useTranslation('application') + + const xPx = (WELL_WIDTH_PIXELS / xWidthMm) * xPosition + const yPx = (WELL_WIDTH_PIXELS / yWidthMm) * yPosition + + const roundedXPx = round(xPx, PIXEL_DECIMALS) + const roundedYPx = round(yPx, PIXEL_DECIMALS) + const translateY = roundedYPx < 0 ? Math.abs(roundedYPx) : -roundedYPx + return ( + + + + + {xWidthMm !== null && ( + + + {xWidthMm} + {t('units.millimeter')} + + + )} + + ) +} diff --git a/protocol-designer/src/organisms/TipPositionModal/TipPositionZOnlyView.tsx b/protocol-designer/src/organisms/TipPositionModal/TipPositionZOnlyView.tsx new file mode 100644 index 00000000000..3d7da97e75c --- /dev/null +++ b/protocol-designer/src/organisms/TipPositionModal/TipPositionZOnlyView.tsx @@ -0,0 +1,64 @@ +import round from 'lodash/round' +import { useTranslation } from 'react-i18next' +import { + Box, + COLORS, + OVERFLOW_HIDDEN, + POSITION_ABSOLUTE, + POSITION_RELATIVE, + StyledText, +} from '@opentrons/components' +import BOTTOM_LAYER from '../../assets/images/tip_side_bottom_layer.svg' +import MID_LAYER from '../../assets/images/tip_side_mid_layer.svg' +import TOP_LAYER from '../../assets/images/tip_side_top_layer.svg' + +const WELL_HEIGHT_PIXELS = 71 +const PIXEL_DECIMALS = 2 + +interface TipPositionZOnlyViewProps { + wellDepthMm: number + mmFromBottom?: number + mmFromTop?: number +} + +export function TipPositionZOnlyView( + props: TipPositionZOnlyViewProps +): JSX.Element { + const { mmFromBottom, mmFromTop, wellDepthMm } = props + const { t } = useTranslation('application') + const positionInTube = mmFromBottom ?? mmFromTop ?? 0 + const fractionOfWellHeight = positionInTube / wellDepthMm + const pixelsFromBottom = + fractionOfWellHeight * WELL_HEIGHT_PIXELS - + (mmFromBottom != null ? WELL_HEIGHT_PIXELS : 0) + const roundedPixelsFromBottom = round(pixelsFromBottom, PIXEL_DECIMALS) + + const bottomPx = roundedPixelsFromBottom * 2 + + return ( + + + + + {wellDepthMm !== null && ( + + + {round(wellDepthMm, 0)} + {t('units.millimeter')} + + + )} + + ) +} diff --git a/protocol-designer/src/organisms/TipPositionModal/ZTipPositionModal.tsx b/protocol-designer/src/organisms/TipPositionModal/ZTipPositionModal.tsx new file mode 100644 index 00000000000..266403b9c2c --- /dev/null +++ b/protocol-designer/src/organisms/TipPositionModal/ZTipPositionModal.tsx @@ -0,0 +1,211 @@ +import * as React from 'react' +import { createPortal } from 'react-dom' +import { useTranslation } from 'react-i18next' +import { + ALIGN_CENTER, + Btn, + DIRECTION_COLUMN, + Flex, + InputField, + JUSTIFY_END, + JUSTIFY_SPACE_BETWEEN, + Modal, + PrimaryButton, + SPACING, + SecondaryButton, + StyledText, +} from '@opentrons/components' +import { DEFAULT_MM_BLOWOUT_OFFSET_FROM_TOP } from '../../constants' +import { getIsTouchTipField } from '../../form-types' +import { BUTTON_LINK_STYLE } from '../../atoms' +import { getMainPagePortalEl } from '../../components/portals/MainPageModalPortal' +import * as utils from './utils' +import { TOO_MANY_DECIMALS } from './constants' +import { TipPositionZOnlyView } from './TipPositionZOnlyView' + +import type { StepFieldName } from '../../form-types' + +interface ZTipPositionModalProps { + closeModal: () => void + zValue: number | null + name: StepFieldName + updateValue: (val?: number | null) => void + wellDepthMm: number + isIndeterminate?: boolean +} + +export function ZTipPositionModal(props: ZTipPositionModalProps): JSX.Element { + const { + isIndeterminate, + name, + wellDepthMm, + zValue, + closeModal, + updateValue, + } = props + const { t } = useTranslation(['modal', 'button']) + + const isBlowout = name === 'blowout_z_offset' + const defaultMm = isBlowout + ? 0 + : utils.getDefaultMmFromBottom({ + name, + wellDepthMm, + }) + + const [value, setValue] = React.useState( + zValue !== null ? String(zValue) : null + ) + + // in this modal, pristinity hides the OUT_OF_BOUNDS error only. + const [isPristine, setPristine] = React.useState(true) + + const getMinMaxMmFromBottom = (): { + maxMmFromBottom: number + minMmFromBottom: number + } => { + if (getIsTouchTipField(name)) { + return { + maxMmFromBottom: utils.roundValue(wellDepthMm, 'up'), + minMmFromBottom: utils.roundValue(wellDepthMm / 2, 'up'), + } + } + return { + maxMmFromBottom: utils.roundValue(wellDepthMm, 'up'), + minMmFromBottom: 0, + } + } + const { maxMmFromBottom, minMmFromBottom } = getMinMaxMmFromBottom() + + // For blowout from the top of the well + const minFromTop = DEFAULT_MM_BLOWOUT_OFFSET_FROM_TOP + const maxFromTop = -wellDepthMm + + const minMm = isBlowout ? maxFromTop : minMmFromBottom + const maxMm = isBlowout ? minFromTop : maxMmFromBottom + + const errors = utils.getErrors({ + minMm, + maxMm, + value, + }) + const hasErrors = errors.length > 0 + const hasVisibleErrors = isPristine + ? errors.includes(TOO_MANY_DECIMALS) + : hasErrors + + const errorText = utils.getErrorText({ + errors, + minMm, + maxMm, + isPristine, + t, + }) + + const handleDone = (): void => { + if (!hasErrors) { + updateValue(value == null ? null : Number(value)) + closeModal() + } + } + + const handleCancel = (): void => { + closeModal() + } + + const handleChange = (newValueRaw: string | number): void => { + // if string, strip non-number characters from string and cast to number + const newValue = + typeof newValueRaw === 'string' + ? newValueRaw.replace(/[^-.0-9]/, '') + : String(newValueRaw) + + if (newValue === '.') { + setValue('0.') + } else if (newValue === '-0') { + setValue('0') + } else { + isBlowout + ? setValue(newValue) + : setValue(Number(newValue) >= 0 ? newValue : '0') + } + } + + const handleInputFieldChange = ( + e: React.ChangeEvent + ): void => { + handleChange(e.currentTarget.value) + setPristine(false) + } + + return createPortal( + + { + setValue(utils.roundValue(defaultMm, 'up').toString()) + }} + css={BUTTON_LINK_STYLE} + > + {t('shared:reset_to_default')} + + + + {t('shared:cancel')} + + + {t('shared:save')} + + + + } + > + + + + {t(`tip_position.body.${name}`)} + + + + + + + + , + getMainPagePortalEl() + ) +} diff --git a/protocol-designer/src/organisms/TipPositionModal/__tests__/TipPositionModal.test.tsx b/protocol-designer/src/organisms/TipPositionModal/__tests__/TipPositionModal.test.tsx new file mode 100644 index 00000000000..7a3c871d709 --- /dev/null +++ b/protocol-designer/src/organisms/TipPositionModal/__tests__/TipPositionModal.test.tsx @@ -0,0 +1,132 @@ +import { fireEvent, screen } from '@testing-library/react' +import { describe, it, expect, vi, beforeEach } from 'vitest' +import { renderWithProviders } from '../../../__testing-utils__' +import { i18n } from '../../../assets/localization' +import { TipPositionSideView } from '../TipPositionSideView' +import { TipPositionModal } from '..' + +import type * as React from 'react' + +vi.mock('../TipPositionSideView') +const render = (props: React.ComponentProps) => { + return renderWithProviders(, { + i18nInstance: i18n, + })[0] +} + +const mockUpdateZSpec = vi.fn() +const mockUpdateXSpec = vi.fn() +const mockUpdateYSpec = vi.fn() + +describe('TipPositionModal', () => { + let props: React.ComponentProps + + beforeEach(() => { + props = { + prefix: 'aspirate', + closeModal: vi.fn(), + wellDepthMm: 50, + wellXWidthMm: 10.3, + wellYWidthMm: 10.5, + isIndeterminate: false, + specs: { + z: { + name: 'aspirate_mmFromBottom', + value: null, + updateValue: mockUpdateZSpec, + }, + y: { + name: 'aspirate_y_position', + value: 0, + updateValue: mockUpdateXSpec, + }, + x: { + name: 'aspirate_x_position', + value: 0, + updateValue: mockUpdateYSpec, + }, + }, + } + vi.mocked(TipPositionSideView).mockReturnValue( +
    mock TipPositionSideView
    + ) + }) + it('renders the modal text', () => { + render(props) + screen.getByText('Edit aspirate tip position') + fireEvent.click(screen.getByText('Cancel')) + expect(props.closeModal).toHaveBeenCalled() + fireEvent.click(screen.getByText('Save')) + expect(props.closeModal).toHaveBeenCalled() + expect(mockUpdateXSpec).toHaveBeenCalled() + expect(mockUpdateYSpec).toHaveBeenCalled() + expect(mockUpdateZSpec).toHaveBeenCalled() + }) + it('renders the alert if the x/y position values are too close to the max/min for x value', () => { + props.specs.x.value = 9.7 + render(props) + screen.getByText( + 'Tip position is close to the edge of the well and may cause collisions.' + ) + }) + it('renders the alert if the x/y position values are too close to the max/min for y value', () => { + props.specs.y.value = -9.7 + render(props) + screen.getByText( + 'Tip position is close to the edge of the well and may cause collisions.' + ) + }) + it('renders the captions, and visual', () => { + render(props) + screen.getByText('X position') + screen.getByText('between -5.1 and 5.1') + screen.getByText('Y position') + screen.getByText('between -5.2 and 5.2') + screen.getByText('Z position') + screen.getByText('between 0 and 50') + screen.getByText('mock TipPositionSideView') + }) + it('renders a custom input field and clicks on it, calling the mock updates', () => { + render(props) + const xInputField = screen.getAllByRole('textbox', { name: '' })[0] + fireEvent.change(xInputField, { target: { value: 3 } }) + const yInputField = screen.getAllByRole('textbox', { name: '' })[1] + fireEvent.change(yInputField, { target: { value: -2 } }) + const zInputField = screen.getAllByRole('textbox', { name: '' })[2] + fireEvent.change(zInputField, { target: { value: 10 } }) + fireEvent.click(screen.getByText('Save')) + expect(props.closeModal).toHaveBeenCalled() + expect(mockUpdateXSpec).toHaveBeenCalled() + expect(mockUpdateYSpec).toHaveBeenCalled() + expect(mockUpdateZSpec).toHaveBeenCalled() + }) + it('renders custom input fields and displays error texts', () => { + props = { + ...props, + specs: { + z: { + name: 'aspirate_mmFromBottom', + value: 101, + updateValue: mockUpdateZSpec, + }, + y: { + name: 'aspirate_y_position', + value: -500, + updateValue: mockUpdateXSpec, + }, + x: { + name: 'aspirate_x_position', + value: 10.7, + updateValue: mockUpdateYSpec, + }, + }, + } + render(props) + fireEvent.click(screen.getByText('Save')) + const xInputField = screen.getAllByRole('textbox', { name: '' })[0] + fireEvent.change(xInputField, { target: { value: 3.55555 } }) + fireEvent.click(screen.getByText('Save')) + // display too many decimals error + screen.getByText('a max of 1 decimal place is allowed') + }) +}) diff --git a/protocol-designer/src/organisms/TipPositionModal/__tests__/ZTipPositionModal.test.tsx b/protocol-designer/src/organisms/TipPositionModal/__tests__/ZTipPositionModal.test.tsx new file mode 100644 index 00000000000..20e148af0de --- /dev/null +++ b/protocol-designer/src/organisms/TipPositionModal/__tests__/ZTipPositionModal.test.tsx @@ -0,0 +1,47 @@ +import { fireEvent, screen } from '@testing-library/react' +import { describe, it, expect, vi, beforeEach } from 'vitest' +import { renderWithProviders } from '../../../__testing-utils__' +import { i18n } from '../../../assets/localization' +import { ZTipPositionModal } from '../ZTipPositionModal' +import { TipPositionZOnlyView } from '../TipPositionZOnlyView' +import type * as React from 'react' + +vi.mock('../TipPositionZOnlyView') +const render = (props: React.ComponentProps) => { + return renderWithProviders(, { + i18nInstance: i18n, + })[0] +} + +describe('ZTipPositionModal', () => { + let props: React.ComponentProps + + beforeEach(() => { + props = { + closeModal: vi.fn(), + zValue: -2, + updateValue: vi.fn(), + wellDepthMm: 30, + name: 'blowout_z_offset', + } + vi.mocked(TipPositionZOnlyView).mockReturnValue( +
    mock TipPositionZOnlyView
    + ) + }) + it('renders the text and radio buttons', () => { + render(props) + screen.getByText('Edit blowout position') + screen.getByText('Change where in the well the robot performs the blowout.') + fireEvent.click(screen.getByText('Cancel')) + expect(props.closeModal).toHaveBeenCalled() + fireEvent.click(screen.getByText('Save')) + expect(props.closeModal).toHaveBeenCalled() + expect(props.updateValue).toHaveBeenCalled() + }) + it('renders the custom option, caption, and visual', () => { + render(props) + expect(screen.getAllByRole('textbox', { name: '' })).toHaveLength(1) + screen.getByText('between -30 and 0') + screen.getByText('mock TipPositionZOnlyView') + }) +}) diff --git a/protocol-designer/src/organisms/TipPositionModal/constants.ts b/protocol-designer/src/organisms/TipPositionModal/constants.ts new file mode 100644 index 00000000000..07ff520d143 --- /dev/null +++ b/protocol-designer/src/organisms/TipPositionModal/constants.ts @@ -0,0 +1,3 @@ +export const DECIMALS_ALLOWED = 1 +export const TOO_MANY_DECIMALS: 'TOO_MANY_DECIMALS' = 'TOO_MANY_DECIMALS' +export const PERCENT_RANGE_TO_SHOW_WARNING = 0.9 diff --git a/protocol-designer/src/organisms/TipPositionModal/index.tsx b/protocol-designer/src/organisms/TipPositionModal/index.tsx new file mode 100644 index 00000000000..9499d28b548 --- /dev/null +++ b/protocol-designer/src/organisms/TipPositionModal/index.tsx @@ -0,0 +1,364 @@ +import * as React from 'react' +import { createPortal } from 'react-dom' +import { useTranslation } from 'react-i18next' +import { + DIRECTION_COLUMN, + Flex, + SPACING, + Modal, + JUSTIFY_SPACE_BETWEEN, + ALIGN_CENTER, + Btn, + JUSTIFY_END, + SecondaryButton, + PrimaryButton, + StyledText, + Banner, + InputField, + TYPOGRAPHY, +} from '@opentrons/components' +import { getMainPagePortalEl } from '../../components/portals/MainPageModalPortal' +import { getIsTouchTipField } from '../../form-types' +import { BUTTON_LINK_STYLE } from '../../atoms' +import { TOO_MANY_DECIMALS, PERCENT_RANGE_TO_SHOW_WARNING } from './constants' +import * as utils from './utils' +import { TipPositionTopView } from './TipPositionTopView' +import { TipPositionSideView } from './TipPositionSideView' + +import type { StepFieldName } from '../../form-types' + +type Offset = 'x' | 'y' | 'z' +interface PositionSpec { + name: StepFieldName + value: number | null + updateValue: (val?: number | null) => void +} +export type PositionSpecs = Record + +interface TipPositionModalProps { + closeModal: () => void + specs: PositionSpecs + wellDepthMm: number + wellXWidthMm: number + wellYWidthMm: number + isIndeterminate?: boolean + prefix: 'aspirate' | 'dispense' | 'mix' +} + +export function TipPositionModal( + props: TipPositionModalProps +): JSX.Element | null { + const { + isIndeterminate, + specs, + wellDepthMm, + wellXWidthMm, + wellYWidthMm, + closeModal, + prefix, + } = props + const { t } = useTranslation([ + 'modal', + 'button', + 'tooltip', + 'shared', + 'application', + ]) + const [view, setView] = React.useState<'top' | 'side'>('side') + const zSpec = specs.z + const ySpec = specs.y + const xSpec = specs.x + + if (zSpec == null || xSpec == null || ySpec == null) { + console.error( + 'expected to find specs for one of the positions but could not' + ) + } + + const defaultMmFromBottom = utils.getDefaultMmFromBottom({ + name: zSpec.name, + wellDepthMm, + }) + + const [zValue, setZValue] = React.useState( + zSpec?.value == null ? String(defaultMmFromBottom) : String(zSpec?.value) + ) + const [yValue, setYValue] = React.useState( + ySpec?.value == null ? null : String(ySpec?.value) + ) + const [xValue, setXValue] = React.useState( + xSpec?.value == null ? null : String(xSpec?.value) + ) + + // in this modal, pristinity hides the OUT_OF_BOUNDS error only. + const [isPristine, setPristine] = React.useState(true) + const getMinMaxMmFromBottom = (): { + maxMmFromBottom: number + minMmFromBottom: number + } => { + if (getIsTouchTipField(zSpec?.name ?? '')) { + return { + maxMmFromBottom: utils.roundValue(wellDepthMm, 'up'), + minMmFromBottom: utils.roundValue(wellDepthMm / 2, 'up'), + } + } + return { + maxMmFromBottom: utils.roundValue(wellDepthMm, 'up'), + minMmFromBottom: 0, + } + } + + const { maxMmFromBottom, minMmFromBottom } = getMinMaxMmFromBottom() + const { minValue: yMinWidth, maxValue: yMaxWidth } = utils.getMinMaxWidth( + wellYWidthMm + ) + const { minValue: xMinWidth, maxValue: xMaxWidth } = utils.getMinMaxWidth( + wellXWidthMm + ) + + const createErrors = ( + value: string | null, + min: number, + max: number + ): utils.Error[] => { + return utils.getErrors({ minMm: min, maxMm: max, value }) + } + const zErrors = createErrors(zValue, minMmFromBottom, maxMmFromBottom) + const xErrors = createErrors(xValue, xMinWidth, xMaxWidth) + const yErrors = createErrors(yValue, yMinWidth, yMaxWidth) + + const hasErrors = + zErrors.length > 0 || xErrors.length > 0 || yErrors.length > 0 + const hasVisibleErrors = isPristine + ? zErrors.includes(TOO_MANY_DECIMALS) || + xErrors.includes(TOO_MANY_DECIMALS) || + yErrors.includes(TOO_MANY_DECIMALS) + : hasErrors + + const createErrorText = ( + errors: utils.Error[], + min: number, + max: number + ): string | null => { + return utils.getErrorText({ errors, minMm: min, maxMm: max, isPristine, t }) + } + + const roundedXMin = utils.roundValue(xMinWidth, 'up') + const roundedYMin = utils.roundValue(yMinWidth, 'up') + const roundedXMax = utils.roundValue(xMaxWidth, 'down') + const roundedYMax = utils.roundValue(yMaxWidth, 'down') + + const zErrorText = createErrorText(zErrors, minMmFromBottom, maxMmFromBottom) + const xErrorText = createErrorText(xErrors, roundedXMin, roundedXMax) + const yErrorText = createErrorText(yErrors, roundedYMin, roundedYMax) + + const handleDone = (): void => { + if (!hasErrors) { + zSpec?.updateValue(zValue === null ? null : Number(zValue)) + xSpec?.updateValue(xValue === null ? null : Number(xValue)) + ySpec?.updateValue(yValue === null ? null : Number(yValue)) + closeModal() + } + } + + const handleCancel = (): void => { + closeModal() + } + + const handleZChange = (newValueRaw: string | number): void => { + // if string, strip non-number characters from string and cast to number + const newValue = + typeof newValueRaw === 'string' + ? newValueRaw.replace(/[^.0-9]/, '') + : String(newValueRaw) + + if (newValue === '.') { + setZValue('0.') + } else { + setZValue(Number(newValue) >= 0 ? newValue : '0') + } + } + + const handleZInputFieldChange = ( + e: React.ChangeEvent + ): void => { + handleZChange(e.currentTarget.value) + setPristine(false) + } + + const handleXChange = (newValueRaw: string | number): void => { + // if string, strip non-number characters from string and cast to number + const newValue = + typeof newValueRaw === 'string' + ? newValueRaw.replace(/[^-.0-9]/g, '') + : String(newValueRaw) + + if (newValue === '.') { + setXValue('0.') + } else { + setXValue(newValue) + } + } + + const handleXInputFieldChange = ( + e: React.ChangeEvent + ): void => { + handleXChange(e.currentTarget.value) + setPristine(false) + } + + const handleYChange = (newValueRaw: string | number): void => { + // if string, strip non-number characters from string and cast to number + const newValue = + typeof newValueRaw === 'string' + ? newValueRaw.replace(/[^-.0-9]/g, '') + : String(newValueRaw) + + if (newValue === '.') { + setYValue('0.') + } else { + setYValue(newValue) + } + } + + const handleYInputFieldChange = ( + e: React.ChangeEvent + ): void => { + handleYChange(e.currentTarget.value) + setPristine(false) + } + const isXValueNearEdge = + xValue != null && + (parseInt(xValue) > PERCENT_RANGE_TO_SHOW_WARNING * xMaxWidth || + parseInt(xValue) < PERCENT_RANGE_TO_SHOW_WARNING * xMinWidth) + const isYValueNearEdge = + yValue != null && + (parseInt(yValue) > PERCENT_RANGE_TO_SHOW_WARNING * yMaxWidth || + parseInt(yValue) < PERCENT_RANGE_TO_SHOW_WARNING * yMinWidth) + const isZValueAtBottom = zValue != null && zValue === '0' + + return createPortal( + + { + setXValue('0') + setYValue('0') + setZValue('1') + }} + css={BUTTON_LINK_STYLE} + > + {t('shared:reset_to_default')} + + + + {t('shared:cancel')} + + + {t('shared:save')} + + + + } + > + + {isXValueNearEdge || isYValueNearEdge || isZValueAtBottom ? ( + + + {t('tip_position.warning')} + + + ) : null} + + + + {t(`tip_position.body.${zSpec?.name}`)} + + + + + + + + + {view === 'side' ? 'Side view' : 'Top view'} + + { + setView(view === 'side' ? 'top' : 'side') + }} + > + {t('shared:swap_view')} + + + {view === 'side' ? ( + + ) : ( + + )} + + + + , + getMainPagePortalEl() + ) +} diff --git a/protocol-designer/src/organisms/TipPositionModal/utils.tsx b/protocol-designer/src/organisms/TipPositionModal/utils.tsx new file mode 100644 index 00000000000..8c576c77f47 --- /dev/null +++ b/protocol-designer/src/organisms/TipPositionModal/utils.tsx @@ -0,0 +1,120 @@ +import floor from 'lodash/floor' +import round from 'lodash/round' +import { getIsTouchTipField } from '../../form-types' +import { + DEFAULT_MM_FROM_BOTTOM_ASPIRATE, + DEFAULT_MM_FROM_BOTTOM_DISPENSE, + DEFAULT_MM_TOUCH_TIP_OFFSET_FROM_TOP, +} from '../../constants' +import { DECIMALS_ALLOWED, TOO_MANY_DECIMALS } from './constants' +import type { StepFieldName } from '../../form-types' + +export function getDefaultMmFromBottom(args: { + name: StepFieldName + wellDepthMm: number +}): number { + const { name, wellDepthMm } = args + + switch (name) { + case 'aspirate_mmFromBottom': + return DEFAULT_MM_FROM_BOTTOM_ASPIRATE + + case 'aspirate_delay_mmFromBottom': + return DEFAULT_MM_FROM_BOTTOM_ASPIRATE + + case 'dispense_mmFromBottom': + return DEFAULT_MM_FROM_BOTTOM_DISPENSE + + case 'dispense_delay_mmFromBottom': + return DEFAULT_MM_FROM_BOTTOM_DISPENSE + + case 'mix_mmFromBottom': + // TODO: Ian 2018-11-131 figure out what offset makes most sense for mix + return DEFAULT_MM_FROM_BOTTOM_DISPENSE + + default: + // touch tip fields + console.assert( + getIsTouchTipField(name), + `getDefaultMmFromBottom fn does not know what to do with field ${name}` + ) + return DEFAULT_MM_TOUCH_TIP_OFFSET_FROM_TOP + wellDepthMm + } +} + +export const roundValue = ( + value: number | string | null, + direction: 'up' | 'down' +): number => { + if (value === null) return 0 + + switch (direction) { + case 'up': { + return round(Number(value), DECIMALS_ALLOWED) + } + case 'down': { + return floor(Number(value), DECIMALS_ALLOWED) + } + } +} + +const OUT_OF_BOUNDS: 'OUT_OF_BOUNDS' = 'OUT_OF_BOUNDS' +export type Error = typeof TOO_MANY_DECIMALS | typeof OUT_OF_BOUNDS + +export const getErrorText = (args: { + errors: Error[] + maxMm: number + minMm: number + isPristine: boolean + t: any +}): string | null => { + const { errors, minMm, maxMm, isPristine, t } = args + + if (errors.includes(TOO_MANY_DECIMALS)) { + return t('tip_position.errors.TOO_MANY_DECIMALS') + } else if (!isPristine && errors.includes(OUT_OF_BOUNDS)) { + return t('tip_position.errors.OUT_OF_BOUNDS', { + minMm, + maxMm, + }) + } else { + return null + } +} + +export const getErrors = (args: { + value: string | null + maxMm: number + minMm: number +}): Error[] => { + const { value: rawValue, maxMm, minMm } = args + const errors: Error[] = [] + + const value = Number(rawValue) + if (rawValue === null || Number.isNaN(value)) { + // blank or otherwise invalid should show this error as a fallback + return [OUT_OF_BOUNDS] + } + const hasIncorrectDecimals = round(value, DECIMALS_ALLOWED) !== value + const isOutOfBounds = value > maxMm || value < minMm + + if (hasIncorrectDecimals) { + errors.push(TOO_MANY_DECIMALS) + } + if (isOutOfBounds) { + errors.push(OUT_OF_BOUNDS) + } + return errors +} + +interface MinMaxValues { + minValue: number + maxValue: number +} + +export const getMinMaxWidth = (width: number): MinMaxValues => { + return { + minValue: -width * 0.5, + maxValue: width * 0.5, + } +} diff --git a/protocol-designer/src/organisms/index.ts b/protocol-designer/src/organisms/index.ts index a8581783e76..3d6fee9b662 100644 --- a/protocol-designer/src/organisms/index.ts +++ b/protocol-designer/src/organisms/index.ts @@ -16,4 +16,6 @@ export * from './ProtocolMetadataNav' export * from './SelectWellsModal' export * from './SlotDetailsContainer' export * from './SlotInformation' +export * from './TipPositionModal' +export * from './TipPositionModal/ZTipPositionModal' export * from './WellOrderModal' diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/BlowoutOffsetField.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/BlowoutOffsetField.tsx index 8678a558f62..bf6eaf690f5 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/BlowoutOffsetField.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/BlowoutOffsetField.tsx @@ -12,7 +12,7 @@ import { Tooltip, useHoverTooltip, } from '@opentrons/components' -import { ZTipPositionModal } from '../../../../../components/StepEditForm/fields/TipPositionField/ZTipPositionModal' +import { ZTipPositionModal } from '../../../../../organisms' import { getLabwareEntities } from '../../../../../step-forms/selectors' import type { FieldProps } from '../types' diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/PositionField.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/PositionField.tsx index 5023dca0a3f..01aee01f1a7 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/PositionField.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/PositionField.tsx @@ -13,18 +13,17 @@ import { useHoverTooltip, } from '@opentrons/components' import { getWellsDepth, getWellDimension } from '@opentrons/shared-data' +import { TipPositionModal, ZTipPositionModal } from '../../../../../organisms' import { getIsDelayPositionField } from '../../../../../form-types' +import { getDefaultMmFromBottom } from '../../../../../organisms/TipPositionModal/utils' import { selectors as stepFormSelectors } from '../../../../../step-forms' -import { TipPositionModal } from '../../../../../components/StepEditForm/fields/TipPositionField/TipPositionModal' -import { getDefaultMmFromBottom } from '../../../../../components/StepEditForm/fields/TipPositionField/utils' -import { ZTipPositionModal } from '../../../../../components/StepEditForm/fields/TipPositionField/ZTipPositionModal' import type { TipXOffsetFields, TipYOffsetFields, TipZOffsetFields, } from '../../../../../form-types' +import type { PositionSpecs } from '../../../../../organisms' import type { FieldPropsByName } from '../types' -import type { PositionSpecs } from '../../../../../components/StepEditForm/fields/TipPositionField/TipPositionModal' interface PositionFieldProps { prefix: 'aspirate' | 'dispense' | 'mix' propsForFields: FieldPropsByName @@ -91,6 +90,7 @@ export function PositionField(props: PositionFieldProps): JSX.Element { } const isDelayPositionField = getIsDelayPositionField(zName) let zValue: string | number = '0' + const mmFromBottom = typeof rawZValue === 'number' ? rawZValue : null if (wellDepthMm !== null) { // show default value for field in parens if no mmFromBottom value is selected @@ -145,6 +145,7 @@ export function PositionField(props: PositionFieldProps): JSX.Element { wellYWidthMm={wellYWidthMm} isIndeterminate={isIndeterminate} specs={specs} + prefix={prefix} /> ) } From 4e56d7a13fa0c1207df471ce4fcbcfdcde30e4be Mon Sep 17 00:00:00 2001 From: Nick Diehl <47604184+ncdiehl11@users.noreply.github.com> Date: Wed, 30 Oct 2024 10:42:36 -0400 Subject: [PATCH 33/81] feat(protocol-designer): add export warning modal (#16627) If a user exports a protocol that doesn't use some hardware (instruments, modules, staging areas, trash entities), we warn them on export with an itemized list of any implicated hardware. Here, I update the utility for getting content for this modal depending on the specific unused hardware. I also wire up the modal using our `useBlockingHint` hook in `ProtocolOverview` Closes AUTH-818 --- .../src/assets/localization/en/alert.json | 44 +- .../__tests__/BlockingHintModal.test.tsx | 1 - .../src/organisms/BlockingHintModal/index.tsx | 3 +- .../BlockingHintModal/useBlockingHint.tsx | 8 +- .../ProtocolOverview/UnusedModalContent.tsx | 393 +++++++++++------- .../__tests__/ProtocolOverview.test.tsx | 3 + .../src/pages/ProtocolOverview/index.tsx | 55 +-- .../dependentFieldsUpdatePause.ts | 3 +- protocol-designer/src/tutorial/index.ts | 2 + 9 files changed, 309 insertions(+), 203 deletions(-) diff --git a/protocol-designer/src/assets/localization/en/alert.json b/protocol-designer/src/assets/localization/en/alert.json index 248d70a0aec..ece60e77570 100644 --- a/protocol-designer/src/assets/localization/en/alert.json +++ b/protocol-designer/src/assets/localization/en/alert.json @@ -59,6 +59,12 @@ "body2": "7.3.0 or higher", "body3": ". Please ensure your robot is updated to the correct version." }, + "unused_hardware": { + "title": "Protocol has unused hardware" + }, + "no_commands": { + "title": "Protocol has no steps" + }, "change_magnet_module_model": { "title": "All existing engage heights will be cleared" }, @@ -269,10 +275,42 @@ "no_commands": { "heading": "Your protocol has no steps", "body1": "This protocol has no steps in it- there's nothing for the robot to do! Before trying to run this on your robot add at least one step between your Starting Deck State and Final Deck State.", - "body2": "Learn more about building steps ", - "redesign": { + "body2": "Learn more about building steps " + }, + "redesign": { + "unused_hardware": "Unused hardware:", + "unused_module": "{{module}} in slot {{slot}}", + "unused_pipette": "{{pipette}} on {{mount}} mount", + "unused_staging_area": "Staging area in slot {{slot}}", + "no_commands": { "heading": "Protocol has no steps", - "body": "This protocol has no steps. Before trying to run this protocol on your robot, add at least one step." + "body1": "This protocol has no steps. Before trying to run this protocol on your robot, add at least one step." + }, + "unused_gripper": { + "heading": "Protocol has unused gripper", + "body1": "The Flex Gripper is not used in any step. You won't be able to run this protocol unless the gripper is attached to your robot.", + "body2": "If you don’t intend to use the gripper, remove it from your protocol." + }, + "unused_hardware_content": { + "heading": "Protocol has unused hardware", + "body1": "The hardware listed below is not used in any step. You won't be able to run this protocol unless the hardware is attached to your robot.", + "body2": "If you don’t intend to use this hardware, remove it from your protocol." + }, + "unused_module_content": { + "heading": "Protocol has unused module", + "body1": "The {{module}} in slot {{slot}} is not used in any step. You won't be able to run this protocol unless the module is attached to your robot.", + "body2": "If you don’t intend to use the module, remove it from your protocol." + }, + "unused_pipette_content": { + "heading": "Protocol has unused pipette", + "body1": "The {{pipette}} on {{mount}} mount is currently not used in any step. You won't be able to run this protocol unless this pipette is attached to your robot.", + "body1_96ch": "The Flex 8-Channel 1000 μL is currently not used in any step. You won't be able to run this protocol unless this pipette is attached to your robot.", + "body2": "If you don’t intend to use the pipette, remove it from your protocol." + }, + "unused_staging_area_content": { + "heading": "Protocol has unused staging area", + "body1": "The staging area in {{slot}} is not used in any step. You won't be able to run this protocol unless it is in your robot's deck configuration.", + "body2": "If you don’t intend to use the staging area, remove it from your protocol." } }, "unused_pipette_and_module": { diff --git a/protocol-designer/src/organisms/BlockingHintModal/__tests__/BlockingHintModal.test.tsx b/protocol-designer/src/organisms/BlockingHintModal/__tests__/BlockingHintModal.test.tsx index b92295ff060..ee63ef87848 100644 --- a/protocol-designer/src/organisms/BlockingHintModal/__tests__/BlockingHintModal.test.tsx +++ b/protocol-designer/src/organisms/BlockingHintModal/__tests__/BlockingHintModal.test.tsx @@ -29,7 +29,6 @@ describe('BlockingHintModal', () => { render(props) fireEvent.click(screen.getByRole('button', { name: 'Cancel' })) expect(props.handleCancel).toHaveBeenCalled() - expect(vi.mocked(removeHint)).toHaveBeenCalled() fireEvent.click(screen.getByRole('button', { name: 'Continue' })) expect(props.handleContinue).toHaveBeenCalled() expect(vi.mocked(removeHint)).toHaveBeenCalled() diff --git a/protocol-designer/src/organisms/BlockingHintModal/index.tsx b/protocol-designer/src/organisms/BlockingHintModal/index.tsx index be33b06742f..22a6b5646a6 100644 --- a/protocol-designer/src/organisms/BlockingHintModal/index.tsx +++ b/protocol-designer/src/organisms/BlockingHintModal/index.tsx @@ -38,7 +38,6 @@ export function BlockingHintModal(props: HintProps): JSX.Element { }, []) const onCancelClick = (): void => { - dispatch(actions.removeHint(hintKey, rememberDismissal)) handleCancel() } @@ -56,7 +55,7 @@ export function BlockingHintModal(props: HintProps): JSX.Element { void handleContinue: () => void @@ -16,8 +16,8 @@ export interface HintProps { export const useBlockingHint = (args: HintProps): JSX.Element | null => { const { enabled, hintKey, handleCancel, handleContinue, content } = args - const isDismissed = useSelector(getDismissedHints).includes(hintKey) - + const dismissedHints = useSelector(getDismissedHints) + const isDismissed = hintKey != null && dismissedHints.includes(hintKey) if (isDismissed) { if (enabled) { handleContinue() @@ -25,7 +25,7 @@ export const useBlockingHint = (args: HintProps): JSX.Element | null => { return null } - if (!enabled) { + if (!enabled || hintKey == null) { return null } diff --git a/protocol-designer/src/pages/ProtocolOverview/UnusedModalContent.tsx b/protocol-designer/src/pages/ProtocolOverview/UnusedModalContent.tsx index d53c2169b8c..279bf5abe9f 100644 --- a/protocol-designer/src/pages/ProtocolOverview/UnusedModalContent.tsx +++ b/protocol-designer/src/pages/ProtocolOverview/UnusedModalContent.tsx @@ -1,7 +1,16 @@ import type * as React from 'react' -import { COLORS, Icon, StyledText } from '@opentrons/components' +import { + COLORS, + DIRECTION_COLUMN, + Flex, + Icon, + SPACING, + StyledText, +} from '@opentrons/components' +import { getModuleDisplayName } from '@opentrons/shared-data' import type { ModuleOnDeck, PipetteOnDeck } from '../../step-forms' +import type { HintKey } from '../../tutorial' import type { Fixture } from './index' interface MissingContent { @@ -11,12 +20,15 @@ interface MissingContent { gripperWithoutStep: boolean fixtureWithoutStep: Fixture t: any + enableRedesign?: boolean } -interface WarningContent { +// TODO (nd: 10/29/2024) refine interface once redesign FF is removed +export interface WarningContent { content: React.ReactNode - heading: string + heading?: string titleElement?: JSX.Element + hintKey?: HintKey } // TODO(ja): update this to use StyledText @@ -27,177 +39,250 @@ export function getWarningContent({ gripperWithoutStep, fixtureWithoutStep, t, + enableRedesign = true, }: MissingContent): WarningContent | null { - if (noCommands) { - return { - heading: t('alert:export_warnings.no_commands.redesign.heading'), - content: ( - - {t('alert:export_warnings.no_commands.redesign.body')} - - ), - titleElement: ( - - ), + if (enableRedesign) { + if (noCommands) { + return { + hintKey: 'no_commands', + content: ( + + {t('alert:export_warnings.redesign.no_commands.body1')} + + ), + } + } else if ( + pipettesWithoutStep.length + + modulesWithoutStep.length + + (gripperWithoutStep ? 1 : 0) + + fixtureWithoutStep.stagingAreaSlots.length + + (fixtureWithoutStep.trashBin ? 1 : 0) + + (fixtureWithoutStep.wasteChute ? 1 : 0) > + 1 + ) { + const allUnusedContent = [ + ...pipettesWithoutStep.map(pipette => + t('alert:export_warnings.redesign.unused_pipette', { + pipette: pipette.spec.displayName, + mount: pipette.mount, + }) + ), + ...(gripperWithoutStep + ? [t('modules:additional_equipment_display_names.gripper')] + : []), + ...modulesWithoutStep.map(module => + t('alert:export_warnings.redesign.unused_module', { + module: getModuleDisplayName(module.model), + slot: module.slot, + }) + ), + ...fixtureWithoutStep.stagingAreaSlots.map(slot => + t('alert:export_warnings.redesign.unused_staging_area', { slot }) + ), + ...(fixtureWithoutStep.trashBin + ? [t('modules:additional_equipment_display_names.trashBin')] + : []), + ...(fixtureWithoutStep.wasteChute + ? [t('modules:additional_equipment_display_names.wasteChute')] + : []), + ] + return { + hintKey: 'unused_hardware', + content: ( + + + {t( + 'alert:export_warnings.redesign.unused_hardware_content.body1' + )} + + + + {t('alert:export_warnings.redesign.unused_hardware')} + + {allUnusedContent.map((unusedHardware, i) => ( + + {unusedHardware} + + ))} + + + ), + } + } else { + return null } - } - - if (gripperWithoutStep) { - return { - content: ( - <> -

    {t('alert:export_warnings.unused_gripper.body1')}

    -

    {t('alert:export_warnings.unused_gripper.body2')}

    - - ), - heading: t('alert:export_warnings.unused_gripper.heading'), + } else { + if (noCommands) { + return { + heading: t('alert:export_warnings.no_commands.redesign.heading'), + content: ( + + {t('alert:export_warnings.no_commands.redesign.body')} + + ), + titleElement: ( + + ), + } } - } - - const pipettesDetails = pipettesWithoutStep - .map(pipette => - pipette.spec.channels === 96 - ? `${pipette.spec.displayName} pipette` - : `${pipette.mount} ${pipette.spec.displayName} pipette` - ) - .join(' and ') - const unusedModuleCounts = modulesWithoutStep.reduce<{ - [key: string]: number - }>((acc, mod) => { - if (!(mod.type in acc)) { - return { ...acc, [mod.type]: 1 } - } else { - return { ...acc, [mod.type]: acc[mod.type] + 1 } + if (gripperWithoutStep) { + return { + content: ( + <> +

    {t('alert:export_warnings.unused_gripper.body1')}

    +

    {t('alert:export_warnings.unused_gripper.body2')}

    + + ), + heading: t('alert:export_warnings.unused_gripper.heading'), + } } - }, {}) - const modulesDetails = Object.keys(unusedModuleCounts) - // sorting by module count - .sort((k1, k2) => { - if (unusedModuleCounts[k1] < unusedModuleCounts[k2]) { - return 1 - } else if (unusedModuleCounts[k1] > unusedModuleCounts[k2]) { - return -1 + const pipettesDetails = pipettesWithoutStep + .map(pipette => + pipette.spec.channels === 96 + ? `${pipette.spec.displayName} pipette` + : `${pipette.mount} ${pipette.spec.displayName} pipette` + ) + .join(' and ') + + const unusedModuleCounts = modulesWithoutStep.reduce<{ + [key: string]: number + }>((acc, mod) => { + if (!(mod.type in acc)) { + return { ...acc, [mod.type]: 1 } } else { - return 0 + return { ...acc, [mod.type]: acc[mod.type] + 1 } } - }) - .map(modType => - unusedModuleCounts[modType] === 1 - ? t(`modules:module_long_names.${modType}`) - : `${t(`modules:module_long_names.${modType}`)}s` - ) - // transform list of modules with counts to string - .reduce((acc, modName, index, arr) => { - if (arr.length > 2) { - if (index === arr.length - 1) { - return `${acc} and ${modName}` + }, {}) + + const modulesDetails = Object.keys(unusedModuleCounts) + // sorting by module count + .sort((k1, k2) => { + if (unusedModuleCounts[k1] < unusedModuleCounts[k2]) { + return 1 + } else if (unusedModuleCounts[k1] > unusedModuleCounts[k2]) { + return -1 } else { - return `${acc}${modName}, ` + return 0 } - } else if (arr.length === 2) { - return index === 0 ? `${modName} and ` : `${acc}${modName}` - } else { - return modName + }) + .map(modType => + unusedModuleCounts[modType] === 1 + ? t(`modules:module_long_names.${modType}`) + : `${t(`modules:module_long_names.${modType}`)}s` + ) + // transform list of modules with counts to string + .reduce((acc, modName, index, arr) => { + if (arr.length > 2) { + if (index === arr.length - 1) { + return `${acc} and ${modName}` + } else { + return `${acc}${modName}, ` + } + } else if (arr.length === 2) { + return index === 0 ? `${modName} and ` : `${acc}${modName}` + } else { + return modName + } + }, '') + + if (pipettesWithoutStep.length && modulesWithoutStep.length) { + return { + content: ( + <> +

    + {t('alert:export_warnings.unused_pipette_and_module.body1', { + modulesDetails, + pipettesDetails, + })} +

    +

    {t('alert:export_warnings.unused_pipette_and_module.body2')}

    + + ), + heading: t('alert:export_warnings.unused_pipette_and_module.heading'), } - }, '') + } - if (pipettesWithoutStep.length && modulesWithoutStep.length) { - return { - content: ( - <> -

    - {t('alert:export_warnings.unused_pipette_and_module.body1', { - modulesDetails, - pipettesDetails, - })} -

    -

    {t('alert:export_warnings.unused_pipette_and_module.body2')}

    - - ), - heading: t('alert:export_warnings.unused_pipette_and_module.heading'), + if (pipettesWithoutStep.length) { + return { + content: ( + <> +

    + {t('alert:export_warnings.unused_pipette.body1', { + pipettesDetails, + })} +

    +

    {t('alert:export_warnings.unused_pipette.body2')}

    + + ), + heading: t('alert:export_warnings.unused_pipette.heading'), + } } - } - if (pipettesWithoutStep.length) { - return { - content: ( - <> -

    - {t('alert:export_warnings.unused_pipette.body1', { - pipettesDetails, - })} -

    -

    {t('alert:export_warnings.unused_pipette.body2')}

    - - ), - heading: t('alert:export_warnings.unused_pipette.heading'), + if (modulesWithoutStep.length) { + const moduleCase = + modulesWithoutStep.length > 1 ? 'unused_modules' : 'unused_module' + const slotName = modulesWithoutStep.map(module => module.slot) + return { + content: ( + <> +

    + {t(`alert:export_warnings.${moduleCase}.body1`, { + modulesDetails, + slotName: slotName, + })} +

    +

    {t(`alert:export_warnings.${moduleCase}.body2`)}

    + + ), + heading: t(`alert:export_warnings.${moduleCase}.heading`), + } } - } - if (modulesWithoutStep.length) { - const moduleCase = - modulesWithoutStep.length > 1 ? 'unused_modules' : 'unused_module' - const slotName = modulesWithoutStep.map(module => module.slot) - return { - content: ( - <> -

    - {t(`alert:export_warnings.${moduleCase}.body1`, { - modulesDetails, - slotName: slotName, - })} -

    -

    {t(`alert:export_warnings.${moduleCase}.body2`)}

    - - ), - heading: t(`alert:export_warnings.${moduleCase}.heading`), + if (fixtureWithoutStep.trashBin || fixtureWithoutStep.wasteChute) { + return { + content: + (fixtureWithoutStep.trashBin && !fixtureWithoutStep.wasteChute) || + (!fixtureWithoutStep.trashBin && fixtureWithoutStep.wasteChute) ? ( +

    + {t('alert:export_warnings.unused_trash.body', { + name: fixtureWithoutStep.trashBin ? 'trash bin' : 'waste chute', + })} +

    + ) : ( +

    + {t('alert:export_warnings.unused_trash.body_both', { + trashName: 'trash bin', + wasteName: 'waste chute', + })} +

    + ), + heading: t('alert:export_warnings.unused_trash.heading'), + } } - } - if (fixtureWithoutStep.trashBin || fixtureWithoutStep.wasteChute) { - return { - content: - (fixtureWithoutStep.trashBin && !fixtureWithoutStep.wasteChute) || - (!fixtureWithoutStep.trashBin && fixtureWithoutStep.wasteChute) ? ( -

    - {t('alert:export_warnings.unused_trash.body', { - name: fixtureWithoutStep.trashBin ? 'trash bin' : 'waste chute', - })} -

    - ) : ( -

    - {t('alert:export_warnings.unused_trash.body_both', { - trashName: 'trash bin', - wasteName: 'waste chute', - })} -

    + if (fixtureWithoutStep.stagingAreaSlots.length) { + return { + content: ( + <> +

    + {t('alert:export_warnings.unused_staging_area.body1', { + count: fixtureWithoutStep.stagingAreaSlots.length, + slot: fixtureWithoutStep.stagingAreaSlots, + })} +

    +

    + {t('alert:export_warnings.unused_staging_area.body2', { + count: fixtureWithoutStep.stagingAreaSlots.length, + })} +

    + ), - heading: t('alert:export_warnings.unused_trash.heading'), + heading: t('alert:export_warnings.unused_staging_area.heading'), + } } - } - if (fixtureWithoutStep.stagingAreaSlots.length) { - return { - content: ( - <> -

    - {t('alert:export_warnings.unused_staging_area.body1', { - count: fixtureWithoutStep.stagingAreaSlots.length, - slot: fixtureWithoutStep.stagingAreaSlots, - })} -

    -

    - {t('alert:export_warnings.unused_staging_area.body2', { - count: fixtureWithoutStep.stagingAreaSlots.length, - })} -

    - - ), - heading: t('alert:export_warnings.unused_staging_area.heading'), - } + return null } - - return null } diff --git a/protocol-designer/src/pages/ProtocolOverview/__tests__/ProtocolOverview.test.tsx b/protocol-designer/src/pages/ProtocolOverview/__tests__/ProtocolOverview.test.tsx index 50d9d48e7bd..9b4ec0e582f 100644 --- a/protocol-designer/src/pages/ProtocolOverview/__tests__/ProtocolOverview.test.tsx +++ b/protocol-designer/src/pages/ProtocolOverview/__tests__/ProtocolOverview.test.tsx @@ -10,6 +10,7 @@ import { getInitialDeckSetup, getSavedStepForms, } from '../../../step-forms/selectors' +import { getDismissedHints } from '../../../tutorial/selectors' import { MaterialsListModal } from '../../../organisms/MaterialsListModal' import { selectors as labwareIngredSelectors } from '../../../labware-ingred/selectors' import { ProtocolOverview } from '../index' @@ -25,6 +26,7 @@ import type { NavigateFunction } from 'react-router-dom' vi.mock('../OffdeckThumbnail') vi.mock('../DeckThumbnail') vi.mock('../../../step-forms/selectors') +vi.mock('../../../tutorial/selectors') vi.mock('../../../file-data/selectors') vi.mock('../../../organisms/MaterialsListModal') vi.mock('../../../labware-ingred/selectors') @@ -61,6 +63,7 @@ describe('ProtocolOverview', () => { vi.mocked(labwareIngredSelectors.allIngredientGroupFields).mockReturnValue( {} ) + vi.mocked(getDismissedHints).mockReturnValue([]) vi.mocked(getRobotType).mockReturnValue(FLEX_ROBOT_TYPE) vi.mocked(getInitialDeckSetup).mockReturnValue({ pipettes: {}, diff --git a/protocol-designer/src/pages/ProtocolOverview/index.tsx b/protocol-designer/src/pages/ProtocolOverview/index.tsx index 4d68ba7e0d3..f622ef6e08f 100644 --- a/protocol-designer/src/pages/ProtocolOverview/index.tsx +++ b/protocol-designer/src/pages/ProtocolOverview/index.tsx @@ -4,7 +4,6 @@ import { useNavigate } from 'react-router-dom' import { useDispatch, useSelector } from 'react-redux' import { format } from 'date-fns' import { css } from 'styled-components' -import { createPortal } from 'react-dom' import { ALIGN_CENTER, @@ -12,14 +11,10 @@ import { DIRECTION_COLUMN, EndUserAgreementFooter, Flex, - JUSTIFY_END, JUSTIFY_FLEX_END, JUSTIFY_SPACE_BETWEEN, LargeButton, - Modal, NO_WRAP, - PrimaryButton, - SecondaryButton, SPACING, StyledText, ToggleGroup, @@ -43,7 +38,7 @@ import { } from '../../components/FileSidebar/utils' import { MaterialsListModal } from '../../organisms/MaterialsListModal' import { BUTTON_LINK_STYLE, LINE_CLAMP_TEXT_STYLE } from '../../atoms' -import { getMainPagePortalEl } from '../../components/portals/MainPageModalPortal' +import { useBlockingHint } from '../../organisms/BlockingHintModal/useBlockingHint' import { EditProtocolMetadataModal, EditInstrumentsModal, @@ -83,6 +78,7 @@ export function ProtocolOverview(): JSX.Element { 'alert', 'shared', 'starting_deck_State', + 'modules', ]) const navigate = useNavigate() const [ @@ -219,6 +215,19 @@ export function ProtocolOverview(): JSX.Element { setShowExportWarningModal(false) } + const confirmExport = (): void => { + setShowExportWarningModal(false) + dispatch(loadFileActions.saveProtocolFile()) + } + + const exportWarningModal = useBlockingHint({ + hintKey: warning?.hintKey ?? null, + enabled: showExportWarningModal && warning?.hintKey != null, + content: warning?.content, + handleCancel: cancelModal, + handleContinue: confirmExport, + }) + return ( {showEditMetadataModal ? ( @@ -235,37 +244,7 @@ export function ProtocolOverview(): JSX.Element { }} /> ) : null} - {showExportWarningModal && - createPortal( - - - {t('shared:cancel')} - - { - setShowExportWarningModal(false) - dispatch(loadFileActions.saveProtocolFile()) - }} - > - {t('alert:continue_with_export')} - -
    - } - > - {warning && warning.content} - , - getMainPagePortalEl() - )} + {exportWarningModal} {showMaterialsListModal ? ( { - if (hasWarning) { + if (warning != null) { setShowExportWarningModal(true) } else { dispatch(loadFileActions.saveProtocolFile()) diff --git a/protocol-designer/src/steplist/formLevel/handleFormChange/dependentFieldsUpdatePause.ts b/protocol-designer/src/steplist/formLevel/handleFormChange/dependentFieldsUpdatePause.ts index ee8556f7102..884a70da768 100644 --- a/protocol-designer/src/steplist/formLevel/handleFormChange/dependentFieldsUpdatePause.ts +++ b/protocol-designer/src/steplist/formLevel/handleFormChange/dependentFieldsUpdatePause.ts @@ -21,7 +21,8 @@ const updatePatchOnPauseTemperatureChange = ( 'pauseHour', 'pauseMinute', 'pauseSecond', - 'pauseTime' + 'pauseTime', + 'moduleId' ), } } diff --git a/protocol-designer/src/tutorial/index.ts b/protocol-designer/src/tutorial/index.ts index 99233e2d70f..b8223c92ed4 100644 --- a/protocol-designer/src/tutorial/index.ts +++ b/protocol-designer/src/tutorial/index.ts @@ -15,6 +15,8 @@ type HintKey = // normal hints | 'custom_labware_with_modules' | 'export_v8_1_protocol_7_3' | 'change_magnet_module_model' + | 'unused_hardware' + | 'no_commands' // DEPRECATED HINTS (keep a record to avoid name collisions with old persisted dismissal states) // 'export_v4_protocol' // | 'export_v4_protocol_3_18' From d140271f4e318e3f2470a4d8c446156825bc9492 Mon Sep 17 00:00:00 2001 From: Max Marrone Date: Wed, 30 Oct 2024 11:39:02 -0400 Subject: [PATCH 34/81] fix(api): Fix Yocto check preventing OT-2s from booting (#16637) --- api/src/opentrons/util/logging_config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/opentrons/util/logging_config.py b/api/src/opentrons/util/logging_config.py index 0a36468f3bc..6520bb912f6 100644 --- a/api/src/opentrons/util/logging_config.py +++ b/api/src/opentrons/util/logging_config.py @@ -5,7 +5,7 @@ from opentrons.config import CONFIG, ARCHITECTURE, SystemArchitecture -if ARCHITECTURE is SystemArchitecture.BUILDROOT: +if ARCHITECTURE is SystemArchitecture.YOCTO: from opentrons_hardware.sensors import SENSOR_LOG_NAME else: # we don't use the sensor log on ot2 or host From d270ccd2491d01f2d79db3a32201fd58f67cdbaf Mon Sep 17 00:00:00 2001 From: Anthony Ngumah <68346382+AnthonyNASC20@users.noreply.github.com> Date: Wed, 30 Oct 2024 16:14:45 -0400 Subject: [PATCH 35/81] fix(abr-testing): Resolves missing coordinate data issue during upload. (#16641) Fix to prevent make abr-setup from failing due to no x, y, or z data in calibration log --- abr-testing/abr_testing/data_collection/abr_calibration_logs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/abr-testing/abr_testing/data_collection/abr_calibration_logs.py b/abr-testing/abr_testing/data_collection/abr_calibration_logs.py index 1440dfd70a8..8e00114747a 100644 --- a/abr-testing/abr_testing/data_collection/abr_calibration_logs.py +++ b/abr-testing/abr_testing/data_collection/abr_calibration_logs.py @@ -82,7 +82,7 @@ def module_helper( y = one_module["moduleOffset"]["offset"].get("y", "") z = one_module["moduleOffset"]["offset"].get("z", "") except KeyError: - pass + continue if mod_serial in module_sheet_serials and modified in module_modify_dates: continue module_row = ( From 18f10f669f37ccd27fc6e612625678a40135642b Mon Sep 17 00:00:00 2001 From: Jethary Alcid <66035149+jerader@users.noreply.github.com> Date: Wed, 30 Oct 2024 17:03:01 -0400 Subject: [PATCH 36/81] feat(protocol-designer): temporarily remove cypress tests for yaml file (#16643) closes AUTH-858 --- .github/workflows/pd-test-build-deploy.yaml | 86 ++++++++++----------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/.github/workflows/pd-test-build-deploy.yaml b/.github/workflows/pd-test-build-deploy.yaml index 306a475aacc..006da36d6a4 100644 --- a/.github/workflows/pd-test-build-deploy.yaml +++ b/.github/workflows/pd-test-build-deploy.yaml @@ -79,49 +79,49 @@ jobs: files: ./coverage/lcov.info flags: protocol-designer - e2e-test: - name: 'pd e2e tests' - needs: ['js-unit-test'] - timeout-minutes: 30 - strategy: - matrix: - os: ['ubuntu-22.04'] - runs-on: '${{ matrix.os }}' - steps: - - uses: 'actions/checkout@v3' - with: - fetch-depth: 0 - # https://github.com/actions/checkout/issues/290 - - name: 'Fix actions/checkout odd handling of tags' - if: startsWith(github.ref, 'refs/tags') - run: | - git fetch -f origin ${{ github.ref }}:${{ github.ref }} - git checkout ${{ github.ref }} - - uses: 'actions/setup-node@v3' - with: - node-version: '18.19.0' - - name: 'install udev for usb-detection' - if: startsWith(matrix.os, 'ubuntu') - run: | - # WORKAROUND: Remove microsoft debian repo due to https://github.com/microsoft/linux-package-repositories/issues/130. Remove line below after it is resolved - sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list - sudo apt-get update && sudo apt-get install libudev-dev - - name: 'cache yarn cache' - uses: actions/cache@v3 - with: - path: | - ${{ github.workspace }}/.yarn-cache - ${{ github.workspace }}/.npm-cache - key: js-${{ secrets.GH_CACHE_VERSION }}-${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }} - restore-keys: | - js-${{ secrets.GH_CACHE_VERSION }}-${{ runner.os }}-yarn- - - name: 'setup-js' - run: | - npm config set cache ./.npm-cache - yarn config set cache-folder ./.yarn-cache - make setup-js - - name: 'test-e2e' - run: make -C protocol-designer test-e2e + # e2e-test: + # name: 'pd e2e tests' + # needs: ['js-unit-test'] + # timeout-minutes: 30 + # strategy: + # matrix: + # os: ['ubuntu-22.04'] + # runs-on: '${{ matrix.os }}' + # steps: + # - uses: 'actions/checkout@v3' + # with: + # fetch-depth: 0 + # # https://github.com/actions/checkout/issues/290 + # - name: 'Fix actions/checkout odd handling of tags' + # if: startsWith(github.ref, 'refs/tags') + # run: | + # git fetch -f origin ${{ github.ref }}:${{ github.ref }} + # git checkout ${{ github.ref }} + # - uses: 'actions/setup-node@v3' + # with: + # node-version: '18.19.0' + # - name: 'install udev for usb-detection' + # if: startsWith(matrix.os, 'ubuntu') + # run: | + # # WORKAROUND: Remove microsoft debian repo due to https://github.com/microsoft/linux-package-repositories/issues/130. Remove line below after it is resolved + # sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list + # sudo apt-get update && sudo apt-get install libudev-dev + # - name: 'cache yarn cache' + # uses: actions/cache@v3 + # with: + # path: | + # ${{ github.workspace }}/.yarn-cache + # ${{ github.workspace }}/.npm-cache + # key: js-${{ secrets.GH_CACHE_VERSION }}-${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }} + # restore-keys: | + # js-${{ secrets.GH_CACHE_VERSION }}-${{ runner.os }}-yarn- + # - name: 'setup-js' + # run: | + # npm config set cache ./.npm-cache + # yarn config set cache-folder ./.yarn-cache + # make setup-js + # - name: 'test-e2e' + # run: make -C protocol-designer test-e2e build-pd: name: 'build protocol designer artifact' needs: ['js-unit-test'] From 0965fd324f5911da0a250b8456db762fa2b53b92 Mon Sep 17 00:00:00 2001 From: Ryan Howard Date: Wed, 30 Oct 2024 17:25:11 -0400 Subject: [PATCH 37/81] feat(shared-data): add schema 3 versions of json files with inner labware geometry (#16618) --- .../3/agilent_1_reservoir_290ml/2.json | 60 + .../2.json | 4730 +++++++++++++++ .../3.json | 1146 ++++ .../3/axygen_1_reservoir_90ml/2.json | 72 + .../3/biorad_384_wellplate_50ul/3.json | 4741 +++++++++++++++ .../3/biorad_96_wellplate_200ul_pcr/3.json | 1182 ++++ .../3/corning_12_wellplate_6.9ml_flat/3.json | 205 + .../3/corning_24_wellplate_3.4ml_flat/3.json | 337 ++ .../3/corning_384_wellplate_112ul_flat/3.json | 5114 +++++++++++++++++ .../3/corning_48_wellplate_1.6ml_flat/3.json | 605 ++ .../3/corning_6_wellplate_16.8ml_flat/3.json | 129 + .../3/corning_96_wellplate_360ul_flat/3.json | 1172 ++++ .../3/nest_12_reservoir_15ml/2.json | 226 + .../3/nest_1_reservoir_195ml/3.json | 62 + .../3/nest_1_reservoir_290ml/2.json | 70 + .../3.json | 1161 ++++ .../3/nest_96_wellplate_200ul_flat/3.json | 1140 ++++ .../3/nest_96_wellplate_2ml_deep/3.json | 1262 ++++ .../2.json | 232 + .../2.json | 177 + .../2.json | 222 + .../2.json | 259 + .../2.json | 251 + .../3.json | 330 ++ .../2.json | 370 ++ .../2.json | 356 ++ .../2.json | 351 ++ .../2.json | 350 ++ .../2.json | 379 ++ .../2.json | 418 ++ .../2.json | 340 ++ .../2.json | 338 ++ .../2.json | 327 ++ .../2.json | 329 ++ .../2.json | 371 ++ .../2.json | 357 ++ .../2.json | 352 ++ .../2.json | 351 ++ .../2.json | 380 ++ .../2.json | 526 ++ .../2.json | 145 + .../2.json | 143 + .../2.json | 1165 ++++ .../3.json | 1128 ++++ .../2.json | 1149 ++++ .../2.json | 1241 ++++ .../2.json | 1136 ++++ .../2.json | 1128 ++++ .../2.json | 1147 ++++ .../3.json | 1167 ++++ .../2.json | 5107 ++++++++++++++++ .../2.json | 1134 ++++ .../2.json | 1134 ++++ .../3/usascientific_12_reservoir_22ml/2.json | 209 + .../2.json | 1217 ++++ .../opentrons_shared_data/labware/types.py | 2 +- 56 files changed, 49131 insertions(+), 1 deletion(-) create mode 100644 shared-data/labware/definitions/3/agilent_1_reservoir_290ml/2.json create mode 100644 shared-data/labware/definitions/3/appliedbiosystemsmicroamp_384_wellplate_40ul/2.json create mode 100644 shared-data/labware/definitions/3/armadillo_96_wellplate_200ul_pcr_full_skirt/3.json create mode 100644 shared-data/labware/definitions/3/axygen_1_reservoir_90ml/2.json create mode 100644 shared-data/labware/definitions/3/biorad_384_wellplate_50ul/3.json create mode 100644 shared-data/labware/definitions/3/biorad_96_wellplate_200ul_pcr/3.json create mode 100644 shared-data/labware/definitions/3/corning_12_wellplate_6.9ml_flat/3.json create mode 100644 shared-data/labware/definitions/3/corning_24_wellplate_3.4ml_flat/3.json create mode 100644 shared-data/labware/definitions/3/corning_384_wellplate_112ul_flat/3.json create mode 100644 shared-data/labware/definitions/3/corning_48_wellplate_1.6ml_flat/3.json create mode 100644 shared-data/labware/definitions/3/corning_6_wellplate_16.8ml_flat/3.json create mode 100644 shared-data/labware/definitions/3/corning_96_wellplate_360ul_flat/3.json create mode 100644 shared-data/labware/definitions/3/nest_12_reservoir_15ml/2.json create mode 100644 shared-data/labware/definitions/3/nest_1_reservoir_195ml/3.json create mode 100644 shared-data/labware/definitions/3/nest_1_reservoir_290ml/2.json create mode 100644 shared-data/labware/definitions/3/nest_96_wellplate_100ul_pcr_full_skirt/3.json create mode 100644 shared-data/labware/definitions/3/nest_96_wellplate_200ul_flat/3.json create mode 100644 shared-data/labware/definitions/3/nest_96_wellplate_2ml_deep/3.json create mode 100644 shared-data/labware/definitions/3/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_10_tuberack_nest_4x50ml_6x15ml_conical/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_15_tuberack_falcon_15ml_conical/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_15_tuberack_nest_15ml_conical/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_24_aluminumblock_generic_2ml_screwcap/3.json create mode 100644 shared-data/labware/definitions/3/opentrons_24_aluminumblock_nest_0.5ml_screwcap/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_24_aluminumblock_nest_1.5ml_screwcap/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_24_aluminumblock_nest_1.5ml_snapcap/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_24_aluminumblock_nest_2ml_screwcap/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_24_aluminumblock_nest_2ml_snapcap/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_24_tuberack_eppendorf_1.5ml_safelock_snapcap/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_24_tuberack_generic_0.75ml_snapcap_acrylic/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_24_tuberack_generic_2ml_screwcap/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_24_tuberack_nest_0.5ml_screwcap/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_24_tuberack_nest_1.5ml_screwcap/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_24_tuberack_nest_1.5ml_snapcap/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_24_tuberack_nest_2ml_screwcap/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_24_tuberack_nest_2ml_snapcap/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_40_aluminumblock_eppendorf_24x2ml_safelock_snapcap_generic_16x0.2ml_pcr_strip/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_6_tuberack_falcon_50ml_conical/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_6_tuberack_nest_50ml_conical/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_96_aluminumblock_biorad_wellplate_200ul/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_96_aluminumblock_generic_pcr_strip_200ul/3.json create mode 100644 shared-data/labware/definitions/3/opentrons_96_aluminumblock_nest_wellplate_100ul/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_96_deep_well_adapter_nest_wellplate_2ml_deep/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_96_flat_bottom_adapter_nest_wellplate_200ul_flat/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_96_pcr_adapter_armadillo_wellplate_200ul/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_96_pcr_adapter_nest_wellplate_100ul_pcr_full_skirt/2.json create mode 100644 shared-data/labware/definitions/3/opentrons_96_wellplate_200ul_pcr_full_skirt/3.json create mode 100644 shared-data/labware/definitions/3/opentrons_universal_flat_adapter_corning_384_wellplate_112ul_flat/2.json create mode 100644 shared-data/labware/definitions/3/thermoscientificnunc_96_wellplate_1300ul/2.json create mode 100644 shared-data/labware/definitions/3/thermoscientificnunc_96_wellplate_2000ul/2.json create mode 100644 shared-data/labware/definitions/3/usascientific_12_reservoir_22ml/2.json create mode 100644 shared-data/labware/definitions/3/usascientific_96_wellplate_2.4ml_deep/2.json diff --git a/shared-data/labware/definitions/3/agilent_1_reservoir_290ml/2.json b/shared-data/labware/definitions/3/agilent_1_reservoir_290ml/2.json new file mode 100644 index 00000000000..984af88d3ed --- /dev/null +++ b/shared-data/labware/definitions/3/agilent_1_reservoir_290ml/2.json @@ -0,0 +1,60 @@ +{ + "ordering": [["A1"]], + "brand": { + "brand": "Agilent", + "brandId": ["201252-100"], + "links": ["https://www.agilent.com/store/en_US/Prod-201252-100/201252-100"] + }, + "metadata": { + "displayName": "Agilent 1 Well Reservoir 290 mL", + "displayCategory": "reservoir", + "displayVolumeUnits": "mL", + "tags": [] + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.57, + "zDimension": 44.04 + }, + "wells": { + "A1": { + "depth": 39.22, + "shape": "rectangular", + "xDimension": 108, + "yDimension": 72, + "totalLiquidVolume": 290000, + "x": 63.88, + "y": 42.785, + "z": 4.82, + "geometryDefinitionId": "cuboidalWell" + } + }, + "groups": [ + { + "wells": ["A1"], + "metadata": { + "wellBottomShape": "v" + } + } + ], + "parameters": { + "format": "trough", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "agilent_1_reservoir_290ml", + "quirks": ["centerMultichannelOnWells", "touchTipDisabled"] + }, + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "cuboidalWell": { + "sections": [] + } + } +} diff --git a/shared-data/labware/definitions/3/appliedbiosystemsmicroamp_384_wellplate_40ul/2.json b/shared-data/labware/definitions/3/appliedbiosystemsmicroamp_384_wellplate_40ul/2.json new file mode 100644 index 00000000000..a6954ac9d06 --- /dev/null +++ b/shared-data/labware/definitions/3/appliedbiosystemsmicroamp_384_wellplate_40ul/2.json @@ -0,0 +1,4730 @@ +{ + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1", + "I1", + "J1", + "K1", + "L1", + "M1", + "N1", + "O1", + "P1" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2", + "I2", + "J2", + "K2", + "L2", + "M2", + "N2", + "O2", + "P2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3", + "I3", + "J3", + "K3", + "L3", + "M3", + "N3", + "O3", + "P3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4", + "I4", + "J4", + "K4", + "L4", + "M4", + "N4", + "O4", + "P4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5", + "I5", + "J5", + "K5", + "L5", + "M5", + "N5", + "O5", + "P5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6", + "I6", + "J6", + "K6", + "L6", + "M6", + "N6", + "O6", + "P6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7", + "I7", + "J7", + "K7", + "L7", + "M7", + "N7", + "O7", + "P7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8", + "I8", + "J8", + "K8", + "L8", + "M8", + "N8", + "O8", + "P8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9", + "I9", + "J9", + "K9", + "L9", + "M9", + "N9", + "O9", + "P9" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10", + "I10", + "J10", + "K10", + "L10", + "M10", + "N10", + "O10", + "P10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11", + "I11", + "J11", + "K11", + "L11", + "M11", + "N11", + "O11", + "P11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12", + "I12", + "J12", + "K12", + "L12", + "M12", + "N12", + "O12", + "P12" + ], + [ + "A13", + "B13", + "C13", + "D13", + "E13", + "F13", + "G13", + "H13", + "I13", + "J13", + "K13", + "L13", + "M13", + "N13", + "O13", + "P13" + ], + [ + "A14", + "B14", + "C14", + "D14", + "E14", + "F14", + "G14", + "H14", + "I14", + "J14", + "K14", + "L14", + "M14", + "N14", + "O14", + "P14" + ], + [ + "A15", + "B15", + "C15", + "D15", + "E15", + "F15", + "G15", + "H15", + "I15", + "J15", + "K15", + "L15", + "M15", + "N15", + "O15", + "P15" + ], + [ + "A16", + "B16", + "C16", + "D16", + "E16", + "F16", + "G16", + "H16", + "I16", + "J16", + "K16", + "L16", + "M16", + "N16", + "O16", + "P16" + ], + [ + "A17", + "B17", + "C17", + "D17", + "E17", + "F17", + "G17", + "H17", + "I17", + "J17", + "K17", + "L17", + "M17", + "N17", + "O17", + "P17" + ], + [ + "A18", + "B18", + "C18", + "D18", + "E18", + "F18", + "G18", + "H18", + "I18", + "J18", + "K18", + "L18", + "M18", + "N18", + "O18", + "P18" + ], + [ + "A19", + "B19", + "C19", + "D19", + "E19", + "F19", + "G19", + "H19", + "I19", + "J19", + "K19", + "L19", + "M19", + "N19", + "O19", + "P19" + ], + [ + "A20", + "B20", + "C20", + "D20", + "E20", + "F20", + "G20", + "H20", + "I20", + "J20", + "K20", + "L20", + "M20", + "N20", + "O20", + "P20" + ], + [ + "A21", + "B21", + "C21", + "D21", + "E21", + "F21", + "G21", + "H21", + "I21", + "J21", + "K21", + "L21", + "M21", + "N21", + "O21", + "P21" + ], + [ + "A22", + "B22", + "C22", + "D22", + "E22", + "F22", + "G22", + "H22", + "I22", + "J22", + "K22", + "L22", + "M22", + "N22", + "O22", + "P22" + ], + [ + "A23", + "B23", + "C23", + "D23", + "E23", + "F23", + "G23", + "H23", + "I23", + "J23", + "K23", + "L23", + "M23", + "N23", + "O23", + "P23" + ], + [ + "A24", + "B24", + "C24", + "D24", + "E24", + "F24", + "G24", + "H24", + "I24", + "J24", + "K24", + "L24", + "M24", + "N24", + "O24", + "P24" + ] + ], + "brand": { + "brand": "Applied Biosystems MicroAmp", + "brandId": ["4309849", "4326270", "4343814"], + "links": [ + "https://www.thermofisher.com/order/catalog/product/4309849#/4309849" + ] + }, + "metadata": { + "displayName": "Applied Biosystems MicroAmp 384 Well Plate 40 \u00b5L", + "displayCategory": "wellPlate", + "displayVolumeUnits": "\u00b5L", + "tags": [] + }, + "dimensions": { + "xDimension": 127.8, + "yDimension": 85.5, + "zDimension": 9.7 + }, + "wells": { + "A1": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 12.15, + "y": 76.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 12.15, + "y": 72, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 12.15, + "y": 67.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 12.15, + "y": 63, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "E1": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 12.15, + "y": 58.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "F1": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 12.15, + "y": 54, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "G1": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 12.15, + "y": 49.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "H1": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 12.15, + "y": 45, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "I1": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 12.15, + "y": 40.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "J1": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 12.15, + "y": 36, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "K1": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 12.15, + "y": 31.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "L1": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 12.15, + "y": 27, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "M1": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 12.15, + "y": 22.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "N1": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 12.15, + "y": 18, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "O1": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 12.15, + "y": 13.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "P1": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 12.15, + "y": 9, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 16.65, + "y": 76.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 16.65, + "y": 72, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 16.65, + "y": 67.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 16.65, + "y": 63, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "E2": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 16.65, + "y": 58.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "F2": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 16.65, + "y": 54, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "G2": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 16.65, + "y": 49.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "H2": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 16.65, + "y": 45, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "I2": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 16.65, + "y": 40.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "J2": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 16.65, + "y": 36, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "K2": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 16.65, + "y": 31.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "L2": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 16.65, + "y": 27, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "M2": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 16.65, + "y": 22.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "N2": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 16.65, + "y": 18, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "O2": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 16.65, + "y": 13.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "P2": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 16.65, + "y": 9, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 21.15, + "y": 76.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 21.15, + "y": 72, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 21.15, + "y": 67.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 21.15, + "y": 63, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "E3": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 21.15, + "y": 58.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "F3": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 21.15, + "y": 54, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "G3": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 21.15, + "y": 49.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "H3": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 21.15, + "y": 45, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "I3": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 21.15, + "y": 40.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "J3": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 21.15, + "y": 36, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "K3": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 21.15, + "y": 31.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "L3": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 21.15, + "y": 27, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "M3": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 21.15, + "y": 22.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "N3": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 21.15, + "y": 18, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "O3": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 21.15, + "y": 13.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "P3": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 21.15, + "y": 9, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 25.65, + "y": 76.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 25.65, + "y": 72, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 25.65, + "y": 67.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 25.65, + "y": 63, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "E4": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 25.65, + "y": 58.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "F4": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 25.65, + "y": 54, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "G4": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 25.65, + "y": 49.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "H4": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 25.65, + "y": 45, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "I4": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 25.65, + "y": 40.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "J4": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 25.65, + "y": 36, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "K4": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 25.65, + "y": 31.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "L4": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 25.65, + "y": 27, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "M4": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 25.65, + "y": 22.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "N4": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 25.65, + "y": 18, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "O4": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 25.65, + "y": 13.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "P4": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 25.65, + "y": 9, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 30.15, + "y": 76.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 30.15, + "y": 72, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 30.15, + "y": 67.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 30.15, + "y": 63, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "E5": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 30.15, + "y": 58.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "F5": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 30.15, + "y": 54, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "G5": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 30.15, + "y": 49.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "H5": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 30.15, + "y": 45, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "I5": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 30.15, + "y": 40.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "J5": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 30.15, + "y": 36, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "K5": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 30.15, + "y": 31.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "L5": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 30.15, + "y": 27, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "M5": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 30.15, + "y": 22.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "N5": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 30.15, + "y": 18, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "O5": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 30.15, + "y": 13.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "P5": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 30.15, + "y": 9, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 34.65, + "y": 76.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 34.65, + "y": 72, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 34.65, + "y": 67.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 34.65, + "y": 63, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "E6": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 34.65, + "y": 58.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "F6": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 34.65, + "y": 54, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "G6": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 34.65, + "y": 49.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "H6": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 34.65, + "y": 45, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "I6": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 34.65, + "y": 40.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "J6": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 34.65, + "y": 36, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "K6": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 34.65, + "y": 31.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "L6": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 34.65, + "y": 27, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "M6": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 34.65, + "y": 22.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "N6": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 34.65, + "y": 18, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "O6": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 34.65, + "y": 13.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "P6": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 34.65, + "y": 9, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "A7": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 39.15, + "y": 76.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "B7": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 39.15, + "y": 72, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "C7": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 39.15, + "y": 67.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "D7": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 39.15, + "y": 63, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "E7": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 39.15, + "y": 58.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "F7": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 39.15, + "y": 54, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "G7": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 39.15, + "y": 49.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "H7": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 39.15, + "y": 45, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "I7": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 39.15, + "y": 40.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "J7": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 39.15, + "y": 36, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "K7": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 39.15, + "y": 31.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "L7": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 39.15, + "y": 27, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "M7": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 39.15, + "y": 22.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "N7": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 39.15, + "y": 18, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "O7": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 39.15, + "y": 13.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "P7": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 39.15, + "y": 9, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "A8": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 43.65, + "y": 76.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "B8": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 43.65, + "y": 72, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "C8": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 43.65, + "y": 67.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "D8": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 43.65, + "y": 63, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "E8": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 43.65, + "y": 58.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "F8": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 43.65, + "y": 54, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "G8": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 43.65, + "y": 49.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "H8": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 43.65, + "y": 45, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "I8": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 43.65, + "y": 40.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "J8": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 43.65, + "y": 36, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "K8": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 43.65, + "y": 31.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "L8": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 43.65, + "y": 27, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "M8": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 43.65, + "y": 22.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "N8": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 43.65, + "y": 18, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "O8": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 43.65, + "y": 13.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "P8": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 43.65, + "y": 9, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "A9": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 48.15, + "y": 76.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "B9": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 48.15, + "y": 72, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "C9": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 48.15, + "y": 67.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "D9": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 48.15, + "y": 63, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "E9": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 48.15, + "y": 58.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "F9": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 48.15, + "y": 54, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "G9": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 48.15, + "y": 49.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "H9": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 48.15, + "y": 45, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "I9": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 48.15, + "y": 40.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "J9": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 48.15, + "y": 36, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "K9": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 48.15, + "y": 31.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "L9": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 48.15, + "y": 27, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "M9": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 48.15, + "y": 22.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "N9": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 48.15, + "y": 18, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "O9": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 48.15, + "y": 13.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "P9": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 48.15, + "y": 9, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "A10": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 52.65, + "y": 76.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "B10": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 52.65, + "y": 72, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "C10": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 52.65, + "y": 67.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "D10": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 52.65, + "y": 63, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "E10": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 52.65, + "y": 58.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "F10": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 52.65, + "y": 54, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "G10": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 52.65, + "y": 49.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "H10": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 52.65, + "y": 45, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "I10": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 52.65, + "y": 40.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "J10": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 52.65, + "y": 36, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "K10": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 52.65, + "y": 31.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "L10": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 52.65, + "y": 27, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "M10": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 52.65, + "y": 22.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "N10": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 52.65, + "y": 18, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "O10": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 52.65, + "y": 13.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "P10": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 52.65, + "y": 9, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "A11": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 57.15, + "y": 76.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "B11": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 57.15, + "y": 72, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "C11": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 57.15, + "y": 67.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "D11": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 57.15, + "y": 63, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "E11": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 57.15, + "y": 58.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "F11": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 57.15, + "y": 54, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "G11": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 57.15, + "y": 49.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "H11": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 57.15, + "y": 45, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "I11": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 57.15, + "y": 40.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "J11": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 57.15, + "y": 36, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "K11": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 57.15, + "y": 31.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "L11": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 57.15, + "y": 27, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "M11": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 57.15, + "y": 22.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "N11": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 57.15, + "y": 18, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "O11": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 57.15, + "y": 13.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "P11": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 57.15, + "y": 9, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "A12": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 61.65, + "y": 76.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "B12": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 61.65, + "y": 72, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "C12": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 61.65, + "y": 67.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "D12": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 61.65, + "y": 63, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "E12": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 61.65, + "y": 58.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "F12": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 61.65, + "y": 54, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "G12": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 61.65, + "y": 49.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "H12": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 61.65, + "y": 45, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "I12": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 61.65, + "y": 40.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "J12": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 61.65, + "y": 36, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "K12": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 61.65, + "y": 31.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "L12": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 61.65, + "y": 27, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "M12": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 61.65, + "y": 22.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "N12": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 61.65, + "y": 18, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "O12": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 61.65, + "y": 13.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "P12": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 61.65, + "y": 9, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "A13": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 66.15, + "y": 76.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "B13": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 66.15, + "y": 72, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "C13": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 66.15, + "y": 67.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "D13": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 66.15, + "y": 63, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "E13": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 66.15, + "y": 58.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "F13": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 66.15, + "y": 54, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "G13": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 66.15, + "y": 49.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "H13": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 66.15, + "y": 45, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "I13": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 66.15, + "y": 40.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "J13": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 66.15, + "y": 36, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "K13": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 66.15, + "y": 31.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "L13": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 66.15, + "y": 27, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "M13": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 66.15, + "y": 22.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "N13": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 66.15, + "y": 18, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "O13": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 66.15, + "y": 13.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "P13": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 66.15, + "y": 9, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "A14": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 70.65, + "y": 76.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "B14": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 70.65, + "y": 72, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "C14": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 70.65, + "y": 67.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "D14": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 70.65, + "y": 63, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "E14": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 70.65, + "y": 58.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "F14": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 70.65, + "y": 54, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "G14": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 70.65, + "y": 49.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "H14": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 70.65, + "y": 45, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "I14": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 70.65, + "y": 40.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "J14": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 70.65, + "y": 36, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "K14": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 70.65, + "y": 31.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "L14": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 70.65, + "y": 27, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "M14": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 70.65, + "y": 22.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "N14": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 70.65, + "y": 18, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "O14": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 70.65, + "y": 13.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "P14": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 70.65, + "y": 9, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "A15": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 75.15, + "y": 76.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "B15": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 75.15, + "y": 72, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "C15": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 75.15, + "y": 67.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "D15": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 75.15, + "y": 63, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "E15": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 75.15, + "y": 58.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "F15": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 75.15, + "y": 54, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "G15": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 75.15, + "y": 49.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "H15": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 75.15, + "y": 45, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "I15": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 75.15, + "y": 40.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "J15": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 75.15, + "y": 36, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "K15": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 75.15, + "y": 31.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "L15": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 75.15, + "y": 27, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "M15": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 75.15, + "y": 22.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "N15": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 75.15, + "y": 18, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "O15": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 75.15, + "y": 13.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "P15": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 75.15, + "y": 9, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "A16": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 79.65, + "y": 76.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "B16": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 79.65, + "y": 72, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "C16": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 79.65, + "y": 67.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "D16": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 79.65, + "y": 63, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "E16": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 79.65, + "y": 58.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "F16": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 79.65, + "y": 54, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "G16": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 79.65, + "y": 49.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "H16": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 79.65, + "y": 45, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "I16": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 79.65, + "y": 40.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "J16": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 79.65, + "y": 36, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "K16": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 79.65, + "y": 31.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "L16": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 79.65, + "y": 27, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "M16": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 79.65, + "y": 22.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "N16": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 79.65, + "y": 18, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "O16": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 79.65, + "y": 13.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "P16": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 79.65, + "y": 9, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "A17": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 84.15, + "y": 76.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "B17": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 84.15, + "y": 72, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "C17": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 84.15, + "y": 67.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "D17": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 84.15, + "y": 63, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "E17": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 84.15, + "y": 58.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "F17": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 84.15, + "y": 54, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "G17": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 84.15, + "y": 49.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "H17": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 84.15, + "y": 45, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "I17": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 84.15, + "y": 40.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "J17": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 84.15, + "y": 36, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "K17": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 84.15, + "y": 31.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "L17": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 84.15, + "y": 27, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "M17": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 84.15, + "y": 22.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "N17": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 84.15, + "y": 18, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "O17": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 84.15, + "y": 13.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "P17": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 84.15, + "y": 9, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "A18": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 88.65, + "y": 76.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "B18": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 88.65, + "y": 72, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "C18": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 88.65, + "y": 67.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "D18": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 88.65, + "y": 63, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "E18": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 88.65, + "y": 58.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "F18": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 88.65, + "y": 54, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "G18": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 88.65, + "y": 49.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "H18": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 88.65, + "y": 45, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "I18": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 88.65, + "y": 40.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "J18": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 88.65, + "y": 36, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "K18": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 88.65, + "y": 31.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "L18": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 88.65, + "y": 27, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "M18": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 88.65, + "y": 22.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "N18": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 88.65, + "y": 18, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "O18": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 88.65, + "y": 13.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "P18": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 88.65, + "y": 9, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "A19": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 93.15, + "y": 76.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "B19": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 93.15, + "y": 72, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "C19": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 93.15, + "y": 67.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "D19": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 93.15, + "y": 63, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "E19": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 93.15, + "y": 58.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "F19": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 93.15, + "y": 54, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "G19": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 93.15, + "y": 49.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "H19": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 93.15, + "y": 45, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "I19": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 93.15, + "y": 40.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "J19": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 93.15, + "y": 36, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "K19": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 93.15, + "y": 31.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "L19": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 93.15, + "y": 27, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "M19": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 93.15, + "y": 22.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "N19": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 93.15, + "y": 18, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "O19": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 93.15, + "y": 13.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "P19": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 93.15, + "y": 9, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "A20": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 97.65, + "y": 76.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "B20": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 97.65, + "y": 72, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "C20": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 97.65, + "y": 67.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "D20": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 97.65, + "y": 63, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "E20": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 97.65, + "y": 58.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "F20": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 97.65, + "y": 54, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "G20": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 97.65, + "y": 49.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "H20": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 97.65, + "y": 45, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "I20": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 97.65, + "y": 40.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "J20": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 97.65, + "y": 36, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "K20": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 97.65, + "y": 31.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "L20": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 97.65, + "y": 27, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "M20": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 97.65, + "y": 22.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "N20": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 97.65, + "y": 18, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "O20": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 97.65, + "y": 13.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "P20": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 97.65, + "y": 9, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "A21": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 102.15, + "y": 76.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "B21": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 102.15, + "y": 72, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "C21": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 102.15, + "y": 67.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "D21": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 102.15, + "y": 63, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "E21": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 102.15, + "y": 58.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "F21": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 102.15, + "y": 54, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "G21": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 102.15, + "y": 49.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "H21": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 102.15, + "y": 45, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "I21": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 102.15, + "y": 40.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "J21": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 102.15, + "y": 36, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "K21": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 102.15, + "y": 31.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "L21": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 102.15, + "y": 27, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "M21": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 102.15, + "y": 22.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "N21": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 102.15, + "y": 18, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "O21": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 102.15, + "y": 13.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "P21": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 102.15, + "y": 9, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "A22": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 106.65, + "y": 76.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "B22": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 106.65, + "y": 72, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "C22": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 106.65, + "y": 67.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "D22": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 106.65, + "y": 63, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "E22": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 106.65, + "y": 58.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "F22": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 106.65, + "y": 54, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "G22": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 106.65, + "y": 49.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "H22": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 106.65, + "y": 45, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "I22": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 106.65, + "y": 40.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "J22": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 106.65, + "y": 36, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "K22": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 106.65, + "y": 31.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "L22": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 106.65, + "y": 27, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "M22": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 106.65, + "y": 22.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "N22": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 106.65, + "y": 18, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "O22": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 106.65, + "y": 13.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "P22": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 106.65, + "y": 9, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "A23": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 111.15, + "y": 76.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "B23": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 111.15, + "y": 72, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "C23": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 111.15, + "y": 67.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "D23": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 111.15, + "y": 63, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "E23": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 111.15, + "y": 58.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "F23": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 111.15, + "y": 54, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "G23": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 111.15, + "y": 49.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "H23": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 111.15, + "y": 45, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "I23": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 111.15, + "y": 40.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "J23": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 111.15, + "y": 36, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "K23": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 111.15, + "y": 31.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "L23": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 111.15, + "y": 27, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "M23": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 111.15, + "y": 22.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "N23": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 111.15, + "y": 18, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "O23": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 111.15, + "y": 13.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "P23": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 111.15, + "y": 9, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "A24": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 115.65, + "y": 76.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "B24": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 115.65, + "y": 72, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "C24": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 115.65, + "y": 67.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "D24": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 115.65, + "y": 63, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "E24": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 115.65, + "y": 58.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "F24": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 115.65, + "y": 54, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "G24": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 115.65, + "y": 49.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "H24": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 115.65, + "y": 45, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "I24": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 115.65, + "y": 40.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "J24": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 115.65, + "y": 36, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "K24": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 115.65, + "y": 31.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "L24": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 115.65, + "y": 27, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "M24": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 115.65, + "y": 22.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "N24": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 115.65, + "y": 18, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "O24": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 115.65, + "y": 13.5, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + }, + "P24": { + "depth": 9.09, + "totalLiquidVolume": 40, + "shape": "circular", + "diameter": 3.17, + "x": 115.65, + "y": 9, + "z": 0.61, + "geometryDefinitionId": "conicalWell" + } + }, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1", + "I1", + "J1", + "K1", + "L1", + "M1", + "N1", + "O1", + "P1", + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2", + "I2", + "J2", + "K2", + "L2", + "M2", + "N2", + "O2", + "P2", + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3", + "I3", + "J3", + "K3", + "L3", + "M3", + "N3", + "O3", + "P3", + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4", + "I4", + "J4", + "K4", + "L4", + "M4", + "N4", + "O4", + "P4", + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5", + "I5", + "J5", + "K5", + "L5", + "M5", + "N5", + "O5", + "P5", + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6", + "I6", + "J6", + "K6", + "L6", + "M6", + "N6", + "O6", + "P6", + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7", + "I7", + "J7", + "K7", + "L7", + "M7", + "N7", + "O7", + "P7", + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8", + "I8", + "J8", + "K8", + "L8", + "M8", + "N8", + "O8", + "P8", + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9", + "I9", + "J9", + "K9", + "L9", + "M9", + "N9", + "O9", + "P9", + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10", + "I10", + "J10", + "K10", + "L10", + "M10", + "N10", + "O10", + "P10", + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11", + "I11", + "J11", + "K11", + "L11", + "M11", + "N11", + "O11", + "P11", + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12", + "I12", + "J12", + "K12", + "L12", + "M12", + "N12", + "O12", + "P12", + "A13", + "B13", + "C13", + "D13", + "E13", + "F13", + "G13", + "H13", + "I13", + "J13", + "K13", + "L13", + "M13", + "N13", + "O13", + "P13", + "A14", + "B14", + "C14", + "D14", + "E14", + "F14", + "G14", + "H14", + "I14", + "J14", + "K14", + "L14", + "M14", + "N14", + "O14", + "P14", + "A15", + "B15", + "C15", + "D15", + "E15", + "F15", + "G15", + "H15", + "I15", + "J15", + "K15", + "L15", + "M15", + "N15", + "O15", + "P15", + "A16", + "B16", + "C16", + "D16", + "E16", + "F16", + "G16", + "H16", + "I16", + "J16", + "K16", + "L16", + "M16", + "N16", + "O16", + "P16", + "A17", + "B17", + "C17", + "D17", + "E17", + "F17", + "G17", + "H17", + "I17", + "J17", + "K17", + "L17", + "M17", + "N17", + "O17", + "P17", + "A18", + "B18", + "C18", + "D18", + "E18", + "F18", + "G18", + "H18", + "I18", + "J18", + "K18", + "L18", + "M18", + "N18", + "O18", + "P18", + "A19", + "B19", + "C19", + "D19", + "E19", + "F19", + "G19", + "H19", + "I19", + "J19", + "K19", + "L19", + "M19", + "N19", + "O19", + "P19", + "A20", + "B20", + "C20", + "D20", + "E20", + "F20", + "G20", + "H20", + "I20", + "J20", + "K20", + "L20", + "M20", + "N20", + "O20", + "P20", + "A21", + "B21", + "C21", + "D21", + "E21", + "F21", + "G21", + "H21", + "I21", + "J21", + "K21", + "L21", + "M21", + "N21", + "O21", + "P21", + "A22", + "B22", + "C22", + "D22", + "E22", + "F22", + "G22", + "H22", + "I22", + "J22", + "K22", + "L22", + "M22", + "N22", + "O22", + "P22", + "A23", + "B23", + "C23", + "D23", + "E23", + "F23", + "G23", + "H23", + "I23", + "J23", + "K23", + "L23", + "M23", + "N23", + "O23", + "P23", + "A24", + "B24", + "C24", + "D24", + "E24", + "F24", + "G24", + "H24", + "I24", + "J24", + "K24", + "L24", + "M24", + "N24", + "O24", + "P24" + ] + } + ], + "parameters": { + "format": "384Standard", + "quirks": [], + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "appliedbiosystemsmicroamp_384_wellplate_40ul" + }, + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 0.89, + "topHeight": 0.34, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "bottomDiameter": 1.4, + "topDiameter": 3.17, + "topHeight": 5.77, + "bottomHeight": 0.34 + }, + { + "shape": "conical", + "bottomDiameter": 3.17, + "topDiameter": 3.17, + "topHeight": 9.09, + "bottomHeight": 5.77 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/armadillo_96_wellplate_200ul_pcr_full_skirt/3.json b/shared-data/labware/definitions/3/armadillo_96_wellplate_200ul_pcr_full_skirt/3.json new file mode 100644 index 00000000000..0d682186706 --- /dev/null +++ b/shared-data/labware/definitions/3/armadillo_96_wellplate_200ul_pcr_full_skirt/3.json @@ -0,0 +1,1146 @@ +{ + "namespace": "opentrons", + "version": 3, + "schemaVersion": 3, + "parameters": { + "loadName": "armadillo_96_wellplate_200ul_pcr_full_skirt", + "format": "96Standard", + "isTiprack": false, + "isMagneticModuleCompatible": true + }, + "metadata": { + "displayName": "Armadillo 96 Well Plate 200 \u00b5L PCR Full Skirt", + "displayCategory": "wellPlate", + "displayVolumeUnits": "\u00b5L", + "tags": [] + }, + "brand": { + "brand": "Thermo Scientific", + "brandId": ["AB2396"], + "links": [ + "https://www.fishersci.com/shop/products/armadillo-96-well-pcr-plate-1/AB2396" + ] + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 16.0 + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "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 + } + }, + "gripForce": 15, + "gripHeightFromLabwareBottom": 10, + "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"] + ], + "wells": { + "A1": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 14.38, + "y": 74.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 14.38, + "y": 65.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 14.38, + "y": 56.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 14.38, + "y": 47.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E1": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 14.38, + "y": 38.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F1": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 14.38, + "y": 29.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G1": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 14.38, + "y": 20.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H1": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 14.38, + "y": 11.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 23.38, + "y": 74.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 23.38, + "y": 65.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 23.38, + "y": 56.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 23.38, + "y": 47.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E2": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 23.38, + "y": 38.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F2": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 23.38, + "y": 29.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G2": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 23.38, + "y": 20.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H2": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 23.38, + "y": 11.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 32.38, + "y": 74.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 32.38, + "y": 65.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 32.38, + "y": 56.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 32.38, + "y": 47.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E3": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 32.38, + "y": 38.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F3": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 32.38, + "y": 29.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G3": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 32.38, + "y": 20.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H3": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 32.38, + "y": 11.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 41.38, + "y": 74.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 41.38, + "y": 65.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 41.38, + "y": 56.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 41.38, + "y": 47.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E4": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 41.38, + "y": 38.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F4": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 41.38, + "y": 29.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G4": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 41.38, + "y": 20.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H4": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 41.38, + "y": 11.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 50.38, + "y": 74.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 50.38, + "y": 65.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 50.38, + "y": 56.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 50.38, + "y": 47.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E5": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 50.38, + "y": 38.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F5": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 50.38, + "y": 29.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G5": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 50.38, + "y": 20.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H5": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 50.38, + "y": 11.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 59.38, + "y": 74.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 59.38, + "y": 65.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 59.38, + "y": 56.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 59.38, + "y": 47.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E6": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 59.38, + "y": 38.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F6": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 59.38, + "y": 29.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G6": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 59.38, + "y": 20.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H6": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 59.38, + "y": 11.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A7": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 68.38, + "y": 74.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B7": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 68.38, + "y": 65.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C7": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 68.38, + "y": 56.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D7": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 68.38, + "y": 47.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E7": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 68.38, + "y": 38.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F7": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 68.38, + "y": 29.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G7": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 68.38, + "y": 20.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H7": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 68.38, + "y": 11.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A8": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 77.38, + "y": 74.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B8": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 77.38, + "y": 65.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C8": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 77.38, + "y": 56.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D8": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 77.38, + "y": 47.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E8": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 77.38, + "y": 38.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F8": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 77.38, + "y": 29.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G8": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 77.38, + "y": 20.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H8": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 77.38, + "y": 11.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A9": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 86.38, + "y": 74.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B9": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 86.38, + "y": 65.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C9": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 86.38, + "y": 56.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D9": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 86.38, + "y": 47.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E9": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 86.38, + "y": 38.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F9": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 86.38, + "y": 29.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G9": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 86.38, + "y": 20.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H9": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 86.38, + "y": 11.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A10": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 95.38, + "y": 74.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B10": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 95.38, + "y": 65.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C10": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 95.38, + "y": 56.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D10": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 95.38, + "y": 47.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E10": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 95.38, + "y": 38.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F10": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 95.38, + "y": 29.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G10": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 95.38, + "y": 20.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H10": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 95.38, + "y": 11.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A11": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 104.38, + "y": 74.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B11": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 104.38, + "y": 65.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C11": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 104.38, + "y": 56.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D11": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 104.38, + "y": 47.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E11": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 104.38, + "y": 38.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F11": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 104.38, + "y": 29.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G11": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 104.38, + "y": 20.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H11": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 104.38, + "y": 11.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A12": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 113.38, + "y": 74.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B12": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 113.38, + "y": 65.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C12": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 113.38, + "y": 56.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D12": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 113.38, + "y": 47.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E12": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 113.38, + "y": 38.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F12": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 113.38, + "y": 29.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G12": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 113.38, + "y": 20.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H12": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 113.38, + "y": 11.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + } + }, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "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" + ] + } + ], + "innerLabwareGeometry": { + "conicalWell": { + "sections": [] + } + } +} diff --git a/shared-data/labware/definitions/3/axygen_1_reservoir_90ml/2.json b/shared-data/labware/definitions/3/axygen_1_reservoir_90ml/2.json new file mode 100644 index 00000000000..8da8a6af416 --- /dev/null +++ b/shared-data/labware/definitions/3/axygen_1_reservoir_90ml/2.json @@ -0,0 +1,72 @@ +{ + "ordering": [["A1"]], + "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" + ] + }, + "metadata": { + "displayName": "Axygen 1 Well Reservoir 90 mL", + "displayCategory": "reservoir", + "displayVolumeUnits": "mL", + "tags": [] + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.47, + "zDimension": 19.05 + }, + "wells": { + "A1": { + "depth": 12.42, + "shape": "rectangular", + "xDimension": 106.76, + "yDimension": 70.52, + "totalLiquidVolume": 90000, + "x": 63.88, + "y": 42.735, + "z": 6.63, + "geometryDefinitionId": "cuboidalWell" + } + }, + "groups": [ + { + "wells": ["A1"], + "metadata": { + "wellBottomShape": "flat" + } + } + ], + "parameters": { + "format": "trough", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "axygen_1_reservoir_90ml", + "quirks": ["centerMultichannelOnWells", "touchTipDisabled"] + }, + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "cuboidalWell": { + "sections": [ + { + "shape": "cuboidal", + "topXDimension": 106.8, + "topYDimension": 70.5, + "bottomXDimension": 106.4, + "bottomYDimension": 70, + "topHeight": 12.42, + "bottomHeight": 0.0 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/biorad_384_wellplate_50ul/3.json b/shared-data/labware/definitions/3/biorad_384_wellplate_50ul/3.json new file mode 100644 index 00000000000..d5fb3c926a2 --- /dev/null +++ b/shared-data/labware/definitions/3/biorad_384_wellplate_50ul/3.json @@ -0,0 +1,4741 @@ +{ + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1", + "I1", + "J1", + "K1", + "L1", + "M1", + "N1", + "O1", + "P1" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2", + "I2", + "J2", + "K2", + "L2", + "M2", + "N2", + "O2", + "P2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3", + "I3", + "J3", + "K3", + "L3", + "M3", + "N3", + "O3", + "P3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4", + "I4", + "J4", + "K4", + "L4", + "M4", + "N4", + "O4", + "P4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5", + "I5", + "J5", + "K5", + "L5", + "M5", + "N5", + "O5", + "P5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6", + "I6", + "J6", + "K6", + "L6", + "M6", + "N6", + "O6", + "P6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7", + "I7", + "J7", + "K7", + "L7", + "M7", + "N7", + "O7", + "P7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8", + "I8", + "J8", + "K8", + "L8", + "M8", + "N8", + "O8", + "P8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9", + "I9", + "J9", + "K9", + "L9", + "M9", + "N9", + "O9", + "P9" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10", + "I10", + "J10", + "K10", + "L10", + "M10", + "N10", + "O10", + "P10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11", + "I11", + "J11", + "K11", + "L11", + "M11", + "N11", + "O11", + "P11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12", + "I12", + "J12", + "K12", + "L12", + "M12", + "N12", + "O12", + "P12" + ], + [ + "A13", + "B13", + "C13", + "D13", + "E13", + "F13", + "G13", + "H13", + "I13", + "J13", + "K13", + "L13", + "M13", + "N13", + "O13", + "P13" + ], + [ + "A14", + "B14", + "C14", + "D14", + "E14", + "F14", + "G14", + "H14", + "I14", + "J14", + "K14", + "L14", + "M14", + "N14", + "O14", + "P14" + ], + [ + "A15", + "B15", + "C15", + "D15", + "E15", + "F15", + "G15", + "H15", + "I15", + "J15", + "K15", + "L15", + "M15", + "N15", + "O15", + "P15" + ], + [ + "A16", + "B16", + "C16", + "D16", + "E16", + "F16", + "G16", + "H16", + "I16", + "J16", + "K16", + "L16", + "M16", + "N16", + "O16", + "P16" + ], + [ + "A17", + "B17", + "C17", + "D17", + "E17", + "F17", + "G17", + "H17", + "I17", + "J17", + "K17", + "L17", + "M17", + "N17", + "O17", + "P17" + ], + [ + "A18", + "B18", + "C18", + "D18", + "E18", + "F18", + "G18", + "H18", + "I18", + "J18", + "K18", + "L18", + "M18", + "N18", + "O18", + "P18" + ], + [ + "A19", + "B19", + "C19", + "D19", + "E19", + "F19", + "G19", + "H19", + "I19", + "J19", + "K19", + "L19", + "M19", + "N19", + "O19", + "P19" + ], + [ + "A20", + "B20", + "C20", + "D20", + "E20", + "F20", + "G20", + "H20", + "I20", + "J20", + "K20", + "L20", + "M20", + "N20", + "O20", + "P20" + ], + [ + "A21", + "B21", + "C21", + "D21", + "E21", + "F21", + "G21", + "H21", + "I21", + "J21", + "K21", + "L21", + "M21", + "N21", + "O21", + "P21" + ], + [ + "A22", + "B22", + "C22", + "D22", + "E22", + "F22", + "G22", + "H22", + "I22", + "J22", + "K22", + "L22", + "M22", + "N22", + "O22", + "P22" + ], + [ + "A23", + "B23", + "C23", + "D23", + "E23", + "F23", + "G23", + "H23", + "I23", + "J23", + "K23", + "L23", + "M23", + "N23", + "O23", + "P23" + ], + [ + "A24", + "B24", + "C24", + "D24", + "E24", + "F24", + "G24", + "H24", + "I24", + "J24", + "K24", + "L24", + "M24", + "N24", + "O24", + "P24" + ] + ], + "brand": { + "brand": "Bio-Rad", + "brandId": [ + "HSP3xxx", + "HSP3801", + "HSP3805", + "HSP3901", + "HSP3905", + "HSR4xxx", + "HSR4801", + "HSR4805" + ], + "links": [ + "https://www.bio-rad.com/en-us/sku/HSP3805-hard-shell-384-well-pcr-plates-thin-wall-skirted-clear-white?ID=HSP3805" + ] + }, + "metadata": { + "displayName": "Bio-Rad 384 Well Plate 50 \u00b5L", + "displayCategory": "wellPlate", + "displayVolumeUnits": "\u00b5L", + "tags": [] + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 10.4 + }, + "gripForce": 15, + "gripHeightFromLabwareBottom": 9.3, + "wells": { + "A1": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 12.13, + "y": 76.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 12.13, + "y": 71.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 12.13, + "y": 67.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 12.13, + "y": 62.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E1": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 12.13, + "y": 58.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F1": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 12.13, + "y": 53.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G1": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 12.13, + "y": 49.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H1": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 12.13, + "y": 44.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "I1": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 12.13, + "y": 40.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "J1": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 12.13, + "y": 35.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "K1": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 12.13, + "y": 31.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "L1": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 12.13, + "y": 26.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "M1": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 12.13, + "y": 22.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "N1": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 12.13, + "y": 17.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "O1": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 12.13, + "y": 13.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "P1": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 12.13, + "y": 8.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 16.63, + "y": 76.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 16.63, + "y": 71.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 16.63, + "y": 67.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 16.63, + "y": 62.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E2": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 16.63, + "y": 58.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F2": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 16.63, + "y": 53.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G2": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 16.63, + "y": 49.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H2": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 16.63, + "y": 44.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "I2": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 16.63, + "y": 40.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "J2": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 16.63, + "y": 35.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "K2": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 16.63, + "y": 31.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "L2": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 16.63, + "y": 26.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "M2": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 16.63, + "y": 22.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "N2": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 16.63, + "y": 17.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "O2": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 16.63, + "y": 13.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "P2": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 16.63, + "y": 8.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 21.13, + "y": 76.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 21.13, + "y": 71.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 21.13, + "y": 67.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 21.13, + "y": 62.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E3": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 21.13, + "y": 58.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F3": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 21.13, + "y": 53.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G3": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 21.13, + "y": 49.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H3": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 21.13, + "y": 44.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "I3": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 21.13, + "y": 40.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "J3": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 21.13, + "y": 35.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "K3": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 21.13, + "y": 31.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "L3": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 21.13, + "y": 26.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "M3": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 21.13, + "y": 22.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "N3": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 21.13, + "y": 17.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "O3": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 21.13, + "y": 13.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "P3": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 21.13, + "y": 8.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 25.63, + "y": 76.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 25.63, + "y": 71.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 25.63, + "y": 67.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 25.63, + "y": 62.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E4": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 25.63, + "y": 58.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F4": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 25.63, + "y": 53.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G4": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 25.63, + "y": 49.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H4": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 25.63, + "y": 44.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "I4": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 25.63, + "y": 40.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "J4": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 25.63, + "y": 35.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "K4": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 25.63, + "y": 31.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "L4": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 25.63, + "y": 26.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "M4": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 25.63, + "y": 22.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "N4": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 25.63, + "y": 17.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "O4": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 25.63, + "y": 13.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "P4": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 25.63, + "y": 8.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 30.13, + "y": 76.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 30.13, + "y": 71.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 30.13, + "y": 67.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 30.13, + "y": 62.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E5": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 30.13, + "y": 58.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F5": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 30.13, + "y": 53.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G5": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 30.13, + "y": 49.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H5": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 30.13, + "y": 44.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "I5": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 30.13, + "y": 40.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "J5": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 30.13, + "y": 35.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "K5": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 30.13, + "y": 31.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "L5": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 30.13, + "y": 26.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "M5": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 30.13, + "y": 22.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "N5": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 30.13, + "y": 17.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "O5": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 30.13, + "y": 13.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "P5": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 30.13, + "y": 8.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 34.63, + "y": 76.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 34.63, + "y": 71.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 34.63, + "y": 67.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 34.63, + "y": 62.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E6": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 34.63, + "y": 58.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F6": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 34.63, + "y": 53.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G6": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 34.63, + "y": 49.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H6": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 34.63, + "y": 44.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "I6": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 34.63, + "y": 40.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "J6": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 34.63, + "y": 35.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "K6": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 34.63, + "y": 31.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "L6": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 34.63, + "y": 26.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "M6": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 34.63, + "y": 22.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "N6": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 34.63, + "y": 17.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "O6": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 34.63, + "y": 13.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "P6": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 34.63, + "y": 8.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A7": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 39.13, + "y": 76.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B7": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 39.13, + "y": 71.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C7": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 39.13, + "y": 67.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D7": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 39.13, + "y": 62.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E7": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 39.13, + "y": 58.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F7": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 39.13, + "y": 53.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G7": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 39.13, + "y": 49.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H7": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 39.13, + "y": 44.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "I7": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 39.13, + "y": 40.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "J7": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 39.13, + "y": 35.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "K7": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 39.13, + "y": 31.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "L7": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 39.13, + "y": 26.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "M7": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 39.13, + "y": 22.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "N7": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 39.13, + "y": 17.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "O7": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 39.13, + "y": 13.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "P7": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 39.13, + "y": 8.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A8": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 43.63, + "y": 76.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B8": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 43.63, + "y": 71.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C8": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 43.63, + "y": 67.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D8": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 43.63, + "y": 62.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E8": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 43.63, + "y": 58.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F8": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 43.63, + "y": 53.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G8": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 43.63, + "y": 49.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H8": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 43.63, + "y": 44.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "I8": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 43.63, + "y": 40.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "J8": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 43.63, + "y": 35.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "K8": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 43.63, + "y": 31.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "L8": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 43.63, + "y": 26.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "M8": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 43.63, + "y": 22.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "N8": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 43.63, + "y": 17.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "O8": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 43.63, + "y": 13.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "P8": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 43.63, + "y": 8.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A9": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 48.13, + "y": 76.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B9": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 48.13, + "y": 71.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C9": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 48.13, + "y": 67.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D9": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 48.13, + "y": 62.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E9": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 48.13, + "y": 58.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F9": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 48.13, + "y": 53.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G9": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 48.13, + "y": 49.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H9": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 48.13, + "y": 44.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "I9": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 48.13, + "y": 40.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "J9": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 48.13, + "y": 35.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "K9": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 48.13, + "y": 31.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "L9": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 48.13, + "y": 26.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "M9": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 48.13, + "y": 22.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "N9": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 48.13, + "y": 17.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "O9": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 48.13, + "y": 13.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "P9": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 48.13, + "y": 8.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A10": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 52.63, + "y": 76.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B10": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 52.63, + "y": 71.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C10": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 52.63, + "y": 67.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D10": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 52.63, + "y": 62.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E10": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 52.63, + "y": 58.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F10": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 52.63, + "y": 53.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G10": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 52.63, + "y": 49.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H10": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 52.63, + "y": 44.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "I10": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 52.63, + "y": 40.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "J10": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 52.63, + "y": 35.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "K10": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 52.63, + "y": 31.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "L10": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 52.63, + "y": 26.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "M10": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 52.63, + "y": 22.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "N10": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 52.63, + "y": 17.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "O10": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 52.63, + "y": 13.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "P10": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 52.63, + "y": 8.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A11": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 57.13, + "y": 76.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B11": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 57.13, + "y": 71.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C11": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 57.13, + "y": 67.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D11": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 57.13, + "y": 62.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E11": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 57.13, + "y": 58.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F11": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 57.13, + "y": 53.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G11": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 57.13, + "y": 49.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H11": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 57.13, + "y": 44.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "I11": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 57.13, + "y": 40.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "J11": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 57.13, + "y": 35.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "K11": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 57.13, + "y": 31.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "L11": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 57.13, + "y": 26.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "M11": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 57.13, + "y": 22.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "N11": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 57.13, + "y": 17.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "O11": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 57.13, + "y": 13.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "P11": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 57.13, + "y": 8.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A12": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 61.63, + "y": 76.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B12": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 61.63, + "y": 71.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C12": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 61.63, + "y": 67.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D12": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 61.63, + "y": 62.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E12": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 61.63, + "y": 58.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F12": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 61.63, + "y": 53.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G12": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 61.63, + "y": 49.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H12": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 61.63, + "y": 44.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "I12": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 61.63, + "y": 40.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "J12": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 61.63, + "y": 35.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "K12": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 61.63, + "y": 31.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "L12": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 61.63, + "y": 26.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "M12": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 61.63, + "y": 22.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "N12": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 61.63, + "y": 17.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "O12": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 61.63, + "y": 13.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "P12": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 61.63, + "y": 8.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A13": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 66.13, + "y": 76.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B13": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 66.13, + "y": 71.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C13": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 66.13, + "y": 67.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D13": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 66.13, + "y": 62.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E13": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 66.13, + "y": 58.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F13": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 66.13, + "y": 53.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G13": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 66.13, + "y": 49.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H13": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 66.13, + "y": 44.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "I13": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 66.13, + "y": 40.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "J13": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 66.13, + "y": 35.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "K13": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 66.13, + "y": 31.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "L13": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 66.13, + "y": 26.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "M13": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 66.13, + "y": 22.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "N13": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 66.13, + "y": 17.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "O13": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 66.13, + "y": 13.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "P13": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 66.13, + "y": 8.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A14": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 70.63, + "y": 76.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B14": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 70.63, + "y": 71.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C14": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 70.63, + "y": 67.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D14": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 70.63, + "y": 62.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E14": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 70.63, + "y": 58.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F14": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 70.63, + "y": 53.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G14": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 70.63, + "y": 49.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H14": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 70.63, + "y": 44.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "I14": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 70.63, + "y": 40.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "J14": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 70.63, + "y": 35.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "K14": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 70.63, + "y": 31.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "L14": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 70.63, + "y": 26.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "M14": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 70.63, + "y": 22.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "N14": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 70.63, + "y": 17.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "O14": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 70.63, + "y": 13.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "P14": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 70.63, + "y": 8.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A15": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 75.13, + "y": 76.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B15": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 75.13, + "y": 71.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C15": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 75.13, + "y": 67.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D15": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 75.13, + "y": 62.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E15": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 75.13, + "y": 58.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F15": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 75.13, + "y": 53.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G15": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 75.13, + "y": 49.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H15": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 75.13, + "y": 44.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "I15": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 75.13, + "y": 40.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "J15": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 75.13, + "y": 35.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "K15": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 75.13, + "y": 31.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "L15": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 75.13, + "y": 26.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "M15": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 75.13, + "y": 22.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "N15": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 75.13, + "y": 17.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "O15": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 75.13, + "y": 13.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "P15": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 75.13, + "y": 8.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A16": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 79.63, + "y": 76.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B16": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 79.63, + "y": 71.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C16": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 79.63, + "y": 67.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D16": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 79.63, + "y": 62.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E16": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 79.63, + "y": 58.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F16": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 79.63, + "y": 53.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G16": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 79.63, + "y": 49.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H16": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 79.63, + "y": 44.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "I16": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 79.63, + "y": 40.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "J16": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 79.63, + "y": 35.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "K16": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 79.63, + "y": 31.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "L16": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 79.63, + "y": 26.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "M16": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 79.63, + "y": 22.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "N16": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 79.63, + "y": 17.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "O16": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 79.63, + "y": 13.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "P16": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 79.63, + "y": 8.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A17": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 84.13, + "y": 76.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B17": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 84.13, + "y": 71.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C17": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 84.13, + "y": 67.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D17": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 84.13, + "y": 62.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E17": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 84.13, + "y": 58.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F17": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 84.13, + "y": 53.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G17": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 84.13, + "y": 49.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H17": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 84.13, + "y": 44.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "I17": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 84.13, + "y": 40.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "J17": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 84.13, + "y": 35.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "K17": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 84.13, + "y": 31.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "L17": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 84.13, + "y": 26.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "M17": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 84.13, + "y": 22.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "N17": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 84.13, + "y": 17.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "O17": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 84.13, + "y": 13.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "P17": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 84.13, + "y": 8.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A18": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 88.63, + "y": 76.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B18": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 88.63, + "y": 71.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C18": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 88.63, + "y": 67.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D18": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 88.63, + "y": 62.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E18": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 88.63, + "y": 58.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F18": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 88.63, + "y": 53.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G18": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 88.63, + "y": 49.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H18": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 88.63, + "y": 44.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "I18": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 88.63, + "y": 40.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "J18": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 88.63, + "y": 35.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "K18": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 88.63, + "y": 31.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "L18": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 88.63, + "y": 26.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "M18": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 88.63, + "y": 22.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "N18": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 88.63, + "y": 17.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "O18": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 88.63, + "y": 13.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "P18": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 88.63, + "y": 8.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A19": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 93.13, + "y": 76.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B19": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 93.13, + "y": 71.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C19": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 93.13, + "y": 67.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D19": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 93.13, + "y": 62.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E19": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 93.13, + "y": 58.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F19": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 93.13, + "y": 53.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G19": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 93.13, + "y": 49.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H19": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 93.13, + "y": 44.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "I19": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 93.13, + "y": 40.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "J19": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 93.13, + "y": 35.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "K19": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 93.13, + "y": 31.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "L19": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 93.13, + "y": 26.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "M19": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 93.13, + "y": 22.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "N19": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 93.13, + "y": 17.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "O19": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 93.13, + "y": 13.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "P19": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 93.13, + "y": 8.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A20": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 97.63, + "y": 76.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B20": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 97.63, + "y": 71.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C20": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 97.63, + "y": 67.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D20": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 97.63, + "y": 62.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E20": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 97.63, + "y": 58.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F20": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 97.63, + "y": 53.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G20": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 97.63, + "y": 49.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H20": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 97.63, + "y": 44.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "I20": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 97.63, + "y": 40.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "J20": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 97.63, + "y": 35.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "K20": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 97.63, + "y": 31.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "L20": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 97.63, + "y": 26.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "M20": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 97.63, + "y": 22.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "N20": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 97.63, + "y": 17.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "O20": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 97.63, + "y": 13.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "P20": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 97.63, + "y": 8.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A21": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 102.13, + "y": 76.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B21": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 102.13, + "y": 71.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C21": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 102.13, + "y": 67.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D21": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 102.13, + "y": 62.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E21": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 102.13, + "y": 58.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F21": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 102.13, + "y": 53.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G21": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 102.13, + "y": 49.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H21": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 102.13, + "y": 44.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "I21": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 102.13, + "y": 40.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "J21": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 102.13, + "y": 35.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "K21": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 102.13, + "y": 31.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "L21": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 102.13, + "y": 26.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "M21": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 102.13, + "y": 22.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "N21": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 102.13, + "y": 17.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "O21": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 102.13, + "y": 13.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "P21": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 102.13, + "y": 8.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A22": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 106.63, + "y": 76.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B22": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 106.63, + "y": 71.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C22": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 106.63, + "y": 67.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D22": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 106.63, + "y": 62.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E22": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 106.63, + "y": 58.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F22": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 106.63, + "y": 53.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G22": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 106.63, + "y": 49.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H22": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 106.63, + "y": 44.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "I22": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 106.63, + "y": 40.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "J22": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 106.63, + "y": 35.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "K22": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 106.63, + "y": 31.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "L22": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 106.63, + "y": 26.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "M22": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 106.63, + "y": 22.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "N22": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 106.63, + "y": 17.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "O22": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 106.63, + "y": 13.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "P22": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 106.63, + "y": 8.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A23": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 111.13, + "y": 76.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B23": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 111.13, + "y": 71.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C23": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 111.13, + "y": 67.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D23": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 111.13, + "y": 62.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E23": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 111.13, + "y": 58.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F23": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 111.13, + "y": 53.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G23": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 111.13, + "y": 49.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H23": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 111.13, + "y": 44.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "I23": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 111.13, + "y": 40.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "J23": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 111.13, + "y": 35.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "K23": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 111.13, + "y": 31.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "L23": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 111.13, + "y": 26.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "M23": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 111.13, + "y": 22.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "N23": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 111.13, + "y": 17.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "O23": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 111.13, + "y": 13.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "P23": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 111.13, + "y": 8.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A24": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 115.63, + "y": 76.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B24": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 115.63, + "y": 71.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C24": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 115.63, + "y": 67.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D24": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 115.63, + "y": 62.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E24": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 115.63, + "y": 58.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F24": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 115.63, + "y": 53.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G24": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 115.63, + "y": 49.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H24": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 115.63, + "y": 44.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "I24": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 115.63, + "y": 40.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "J24": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 115.63, + "y": 35.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "K24": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 115.63, + "y": 31.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "L24": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 115.63, + "y": 26.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "M24": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 115.63, + "y": 22.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "N24": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 115.63, + "y": 17.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "O24": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 115.63, + "y": 13.49, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "P24": { + "depth": 9.35, + "totalLiquidVolume": 50, + "shape": "circular", + "diameter": 3.1, + "x": 115.63, + "y": 8.99, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + } + }, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1", + "I1", + "J1", + "K1", + "L1", + "M1", + "N1", + "O1", + "P1", + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2", + "I2", + "J2", + "K2", + "L2", + "M2", + "N2", + "O2", + "P2", + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3", + "I3", + "J3", + "K3", + "L3", + "M3", + "N3", + "O3", + "P3", + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4", + "I4", + "J4", + "K4", + "L4", + "M4", + "N4", + "O4", + "P4", + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5", + "I5", + "J5", + "K5", + "L5", + "M5", + "N5", + "O5", + "P5", + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6", + "I6", + "J6", + "K6", + "L6", + "M6", + "N6", + "O6", + "P6", + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7", + "I7", + "J7", + "K7", + "L7", + "M7", + "N7", + "O7", + "P7", + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8", + "I8", + "J8", + "K8", + "L8", + "M8", + "N8", + "O8", + "P8", + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9", + "I9", + "J9", + "K9", + "L9", + "M9", + "N9", + "O9", + "P9", + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10", + "I10", + "J10", + "K10", + "L10", + "M10", + "N10", + "O10", + "P10", + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11", + "I11", + "J11", + "K11", + "L11", + "M11", + "N11", + "O11", + "P11", + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12", + "I12", + "J12", + "K12", + "L12", + "M12", + "N12", + "O12", + "P12", + "A13", + "B13", + "C13", + "D13", + "E13", + "F13", + "G13", + "H13", + "I13", + "J13", + "K13", + "L13", + "M13", + "N13", + "O13", + "P13", + "A14", + "B14", + "C14", + "D14", + "E14", + "F14", + "G14", + "H14", + "I14", + "J14", + "K14", + "L14", + "M14", + "N14", + "O14", + "P14", + "A15", + "B15", + "C15", + "D15", + "E15", + "F15", + "G15", + "H15", + "I15", + "J15", + "K15", + "L15", + "M15", + "N15", + "O15", + "P15", + "A16", + "B16", + "C16", + "D16", + "E16", + "F16", + "G16", + "H16", + "I16", + "J16", + "K16", + "L16", + "M16", + "N16", + "O16", + "P16", + "A17", + "B17", + "C17", + "D17", + "E17", + "F17", + "G17", + "H17", + "I17", + "J17", + "K17", + "L17", + "M17", + "N17", + "O17", + "P17", + "A18", + "B18", + "C18", + "D18", + "E18", + "F18", + "G18", + "H18", + "I18", + "J18", + "K18", + "L18", + "M18", + "N18", + "O18", + "P18", + "A19", + "B19", + "C19", + "D19", + "E19", + "F19", + "G19", + "H19", + "I19", + "J19", + "K19", + "L19", + "M19", + "N19", + "O19", + "P19", + "A20", + "B20", + "C20", + "D20", + "E20", + "F20", + "G20", + "H20", + "I20", + "J20", + "K20", + "L20", + "M20", + "N20", + "O20", + "P20", + "A21", + "B21", + "C21", + "D21", + "E21", + "F21", + "G21", + "H21", + "I21", + "J21", + "K21", + "L21", + "M21", + "N21", + "O21", + "P21", + "A22", + "B22", + "C22", + "D22", + "E22", + "F22", + "G22", + "H22", + "I22", + "J22", + "K22", + "L22", + "M22", + "N22", + "O22", + "P22", + "A23", + "B23", + "C23", + "D23", + "E23", + "F23", + "G23", + "H23", + "I23", + "J23", + "K23", + "L23", + "M23", + "N23", + "O23", + "P23", + "A24", + "B24", + "C24", + "D24", + "E24", + "F24", + "G24", + "H24", + "I24", + "J24", + "K24", + "L24", + "M24", + "N24", + "O24", + "P24" + ] + } + ], + "parameters": { + "format": "384Standard", + "quirks": [], + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "biorad_384_wellplate_50ul" + }, + "namespace": "opentrons", + "version": 3, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 0.94, + "topHeight": 0.35, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "bottomDiameter": 1.46, + "topDiameter": 3, + "topHeight": 5.35, + "bottomHeight": 0.35 + }, + { + "shape": "conical", + "bottomDiameter": 3, + "topDiameter": 3.1, + "topHeight": 9.35, + "bottomHeight": 5.35 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/biorad_96_wellplate_200ul_pcr/3.json b/shared-data/labware/definitions/3/biorad_96_wellplate_200ul_pcr/3.json new file mode 100644 index 00000000000..61f780b9bfd --- /dev/null +++ b/shared-data/labware/definitions/3/biorad_96_wellplate_200ul_pcr/3.json @@ -0,0 +1,1182 @@ +{ + "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"] + ], + "schemaVersion": 3, + "version": 3, + "namespace": "opentrons", + "metadata": { + "displayName": "Bio-Rad 96 Well Plate 200 \u00b5L PCR", + "displayCategory": "wellPlate", + "displayVolumeUnits": "\u00b5L", + "tags": [] + }, + "dimensions": { + "yDimension": 85.48, + "xDimension": 127.76, + "zDimension": 16.06 + }, + "parameters": { + "format": "96Standard", + "isTiprack": false, + "loadName": "biorad_96_wellplate_200ul_pcr", + "isMagneticModuleCompatible": true, + "magneticModuleEngageHeight": 18 + }, + "gripForce": 15, + "gripHeightFromLabwareBottom": 10.14, + "wells": { + "H1": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 14.38, + "y": 11.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "G1": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 14.38, + "y": 20.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "F1": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 14.38, + "y": 29.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "E1": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 14.38, + "y": 38.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 14.38, + "y": 47.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 14.38, + "y": 56.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 14.38, + "y": 65.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "A1": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 14.38, + "y": 74.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "H2": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 23.38, + "y": 11.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "G2": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 23.38, + "y": 20.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "F2": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 23.38, + "y": 29.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "E2": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 23.38, + "y": 38.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 23.38, + "y": 47.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 23.38, + "y": 56.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 23.38, + "y": 65.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 23.38, + "y": 74.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "H3": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 32.38, + "y": 11.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "G3": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 32.38, + "y": 20.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "F3": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 32.38, + "y": 29.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "E3": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 32.38, + "y": 38.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 32.38, + "y": 47.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 32.38, + "y": 56.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 32.38, + "y": 65.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 32.38, + "y": 74.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "H4": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 41.38, + "y": 11.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "G4": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 41.38, + "y": 20.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "F4": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 41.38, + "y": 29.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "E4": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 41.38, + "y": 38.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 41.38, + "y": 47.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 41.38, + "y": 56.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 41.38, + "y": 65.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 41.38, + "y": 74.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "H5": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 50.38, + "y": 11.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "G5": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 50.38, + "y": 20.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "F5": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 50.38, + "y": 29.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "E5": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 50.38, + "y": 38.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 50.38, + "y": 47.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 50.38, + "y": 56.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 50.38, + "y": 65.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 50.38, + "y": 74.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "H6": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 59.38, + "y": 11.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "G6": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 59.38, + "y": 20.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "F6": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 59.38, + "y": 29.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "E6": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 59.38, + "y": 38.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 59.38, + "y": 47.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 59.38, + "y": 56.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 59.38, + "y": 65.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 59.38, + "y": 74.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "H7": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 68.38, + "y": 11.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "G7": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 68.38, + "y": 20.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "F7": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 68.38, + "y": 29.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "E7": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 68.38, + "y": 38.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "D7": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 68.38, + "y": 47.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "C7": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 68.38, + "y": 56.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "B7": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 68.38, + "y": 65.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "A7": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 68.38, + "y": 74.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "H8": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 77.38, + "y": 11.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "G8": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 77.38, + "y": 20.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "F8": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 77.38, + "y": 29.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "E8": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 77.38, + "y": 38.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "D8": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 77.38, + "y": 47.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "C8": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 77.38, + "y": 56.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "B8": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 77.38, + "y": 65.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "A8": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 77.38, + "y": 74.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "H9": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 86.38, + "y": 11.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "G9": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 86.38, + "y": 20.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "F9": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 86.38, + "y": 29.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "E9": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 86.38, + "y": 38.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "D9": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 86.38, + "y": 47.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "C9": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 86.38, + "y": 56.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "B9": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 86.38, + "y": 65.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "A9": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 86.38, + "y": 74.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "H10": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 95.38, + "y": 11.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "G10": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 95.38, + "y": 20.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "F10": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 95.38, + "y": 29.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "E10": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 95.38, + "y": 38.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "D10": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 95.38, + "y": 47.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "C10": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 95.38, + "y": 56.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "B10": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 95.38, + "y": 65.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "A10": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 95.38, + "y": 74.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "H11": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 104.38, + "y": 11.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "G11": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 104.38, + "y": 20.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "F11": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 104.38, + "y": 29.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "E11": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 104.38, + "y": 38.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "D11": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 104.38, + "y": 47.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "C11": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 104.38, + "y": 56.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "B11": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 104.38, + "y": 65.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "A11": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 104.38, + "y": 74.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "H12": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 113.38, + "y": 11.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "G12": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 113.38, + "y": 20.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "F12": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 113.38, + "y": 29.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "E12": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 113.38, + "y": 38.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "D12": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 113.38, + "y": 47.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "C12": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 113.38, + "y": 56.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "B12": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 113.38, + "y": 65.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + }, + "A12": { + "depth": 14.81, + "shape": "circular", + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 113.38, + "y": 74.24, + "z": 1.25, + "geometryDefinitionId": "conicalWell" + } + }, + "brand": { + "brand": "Bio-Rad", + "brandId": ["hsp9601"], + "links": [ + "http://www.bio-rad.com/en-us/sku/hsp9601-hard-shell-96-well-pcr-plates-low-profile-thin-wall-skirted-white-clear?ID=hsp9601" + ] + }, + "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" + } + } + ], + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "stackingOffsetWithLabware": { + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 15.41 + }, + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.16 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.75 + }, + "magneticBlockV1": { + "x": 0, + "y": 0, + "z": 3.87 + } + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 1.42, + "topHeight": 1.21, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "bottomDiameter": 2.81, + "topDiameter": 3, + "topHeight": 1.87, + "bottomHeight": 1.21 + }, + { + "shape": "conical", + "bottomDiameter": 3, + "topDiameter": 4.98, + "topHeight": 8.58, + "bottomHeight": 1.87 + }, + { + "shape": "conical", + "bottomDiameter": 3, + "topDiameter": 5.44, + "topHeight": 10.14, + "bottomHeight": 8.58 + }, + { + "shape": "conical", + "bottomDiameter": 5.44, + "topDiameter": 5.44, + "topHeight": 14.57, + "bottomHeight": 10.14 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/corning_12_wellplate_6.9ml_flat/3.json b/shared-data/labware/definitions/3/corning_12_wellplate_6.9ml_flat/3.json new file mode 100644 index 00000000000..f51bce0859c --- /dev/null +++ b/shared-data/labware/definitions/3/corning_12_wellplate_6.9ml_flat/3.json @@ -0,0 +1,205 @@ +{ + "ordering": [ + ["A1", "B1", "C1"], + ["A2", "B2", "C2"], + ["A3", "B3", "C3"], + ["A4", "B4", "C4"] + ], + "brand": { + "brand": "Corning", + "brandId": ["3336", "3512", "3513"], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Microplates/Assay-Microplates/96-Well-Microplates/Costar%C2%AE-Multiple-Well-Cell-Culture-Plates/p/3513?clear=true" + ] + }, + "schemaVersion": 3, + "version": 3, + "namespace": "opentrons", + "metadata": { + "displayName": "Corning 12 Well Plate 6.9 mL Flat", + "displayVolumeUnits": "mL", + "displayCategory": "wellPlate", + "tags": [] + }, + "dimensions": { + "xDimension": 127.89, + "yDimension": 85.6, + "zDimension": 20.02 + }, + "gripForce": 16, + "gripHeightFromLabwareBottom": 18.3, + "wells": { + "C1": { + "shape": "circular", + "depth": 17.53, + "diameter": 22.73, + "totalLiquidVolume": 6900, + "x": 24.94, + "y": 16.79, + "z": 2.49, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "shape": "circular", + "depth": 17.53, + "diameter": 22.73, + "totalLiquidVolume": 6900, + "x": 24.94, + "y": 42.8, + "z": 2.49, + "geometryDefinitionId": "conicalWell" + }, + "A1": { + "shape": "circular", + "depth": 17.53, + "diameter": 22.73, + "totalLiquidVolume": 6900, + "x": 24.94, + "y": 68.81, + "z": 2.49, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "shape": "circular", + "depth": 17.53, + "diameter": 22.73, + "totalLiquidVolume": 6900, + "x": 50.95, + "y": 16.79, + "z": 2.49, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "shape": "circular", + "depth": 17.53, + "diameter": 22.73, + "totalLiquidVolume": 6900, + "x": 50.95, + "y": 42.8, + "z": 2.49, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "shape": "circular", + "depth": 17.53, + "diameter": 22.73, + "totalLiquidVolume": 6900, + "x": 50.95, + "y": 68.81, + "z": 2.49, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "shape": "circular", + "depth": 17.53, + "diameter": 22.73, + "totalLiquidVolume": 6900, + "x": 76.96, + "y": 16.79, + "z": 2.49, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "shape": "circular", + "depth": 17.53, + "diameter": 22.73, + "totalLiquidVolume": 6900, + "x": 76.96, + "y": 42.8, + "z": 2.49, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "shape": "circular", + "depth": 17.53, + "diameter": 22.73, + "totalLiquidVolume": 6900, + "x": 76.96, + "y": 68.81, + "z": 2.49, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "shape": "circular", + "depth": 17.53, + "diameter": 22.73, + "totalLiquidVolume": 6900, + "x": 102.97, + "y": 16.79, + "z": 2.49, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "shape": "circular", + "depth": 17.53, + "diameter": 22.73, + "totalLiquidVolume": 6900, + "x": 102.97, + "y": 42.8, + "z": 2.49, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "shape": "circular", + "depth": 17.53, + "diameter": 22.73, + "totalLiquidVolume": 6900, + "x": 102.97, + "y": 68.81, + "z": 2.49, + "geometryDefinitionId": "conicalWell" + } + }, + "parameters": { + "format": "irregular", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "corning_12_wellplate_6.9ml_flat" + }, + "groups": [ + { + "wells": [ + "A1", + "B1", + "C1", + "A2", + "B2", + "C2", + "A3", + "B3", + "C3", + "A4", + "B4", + "C4" + ], + "metadata": { + "wellBottomShape": "flat" + } + } + ], + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "stackingOffsetWithLabware": { + "opentrons_aluminum_flat_bottom_plate": { + "x": 0, + "y": 0, + "z": 4.5 + } + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "conical", + "topDiameter": 22.733, + "bottomDiameter": 22.098, + "topHeight": 17.399, + "bottomHeight": 0.0 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/corning_24_wellplate_3.4ml_flat/3.json b/shared-data/labware/definitions/3/corning_24_wellplate_3.4ml_flat/3.json new file mode 100644 index 00000000000..7d716ce57cd --- /dev/null +++ b/shared-data/labware/definitions/3/corning_24_wellplate_3.4ml_flat/3.json @@ -0,0 +1,337 @@ +{ + "ordering": [ + ["A1", "B1", "C1", "D1"], + ["A2", "B2", "C2", "D2"], + ["A3", "B3", "C3", "D3"], + ["A4", "B4", "C4", "D4"], + ["A5", "B5", "C5", "D5"], + ["A6", "B6", "C6", "D6"] + ], + "brand": { + "brand": "Corning", + "brandId": ["3337", "3524", "3526", "3527", "3473", "3738", "3987"], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Microplates/Assay-Microplates/96-Well-Microplates/Costar%C2%AE-Multiple-Well-Cell-Culture-Plates/p/3738" + ] + }, + "schemaVersion": 3, + "version": 3, + "namespace": "opentrons", + "metadata": { + "displayName": "Corning 24 Well Plate 3.4 mL Flat", + "displayVolumeUnits": "mL", + "displayCategory": "wellPlate", + "tags": [] + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.47, + "zDimension": 20.27 + }, + "wells": { + "D1": { + "shape": "circular", + "depth": 17.4, + "diameter": 16.26, + "totalLiquidVolume": 3400, + "x": 17.48, + "y": 13.77, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "shape": "circular", + "depth": 17.4, + "diameter": 16.26, + "totalLiquidVolume": 3400, + "x": 17.48, + "y": 33.07, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "shape": "circular", + "depth": 17.4, + "diameter": 16.26, + "totalLiquidVolume": 3400, + "x": 17.48, + "y": 52.37, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "A1": { + "shape": "circular", + "depth": 17.4, + "diameter": 16.26, + "totalLiquidVolume": 3400, + "x": 17.48, + "y": 71.67, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "shape": "circular", + "depth": 17.4, + "diameter": 16.26, + "totalLiquidVolume": 3400, + "x": 36.78, + "y": 13.77, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "shape": "circular", + "depth": 17.4, + "diameter": 16.26, + "totalLiquidVolume": 3400, + "x": 36.78, + "y": 33.07, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "shape": "circular", + "depth": 17.4, + "diameter": 16.26, + "totalLiquidVolume": 3400, + "x": 36.78, + "y": 52.37, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "shape": "circular", + "depth": 17.4, + "diameter": 16.26, + "totalLiquidVolume": 3400, + "x": 36.78, + "y": 71.67, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "shape": "circular", + "depth": 17.4, + "diameter": 16.26, + "totalLiquidVolume": 3400, + "x": 56.08, + "y": 13.77, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "shape": "circular", + "depth": 17.4, + "diameter": 16.26, + "totalLiquidVolume": 3400, + "x": 56.08, + "y": 33.07, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "shape": "circular", + "depth": 17.4, + "diameter": 16.26, + "totalLiquidVolume": 3400, + "x": 56.08, + "y": 52.37, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "shape": "circular", + "depth": 17.4, + "diameter": 16.26, + "totalLiquidVolume": 3400, + "x": 56.08, + "y": 71.67, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "shape": "circular", + "depth": 17.4, + "diameter": 16.26, + "totalLiquidVolume": 3400, + "x": 75.38, + "y": 13.77, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "shape": "circular", + "depth": 17.4, + "diameter": 16.26, + "totalLiquidVolume": 3400, + "x": 75.38, + "y": 33.07, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "shape": "circular", + "depth": 17.4, + "diameter": 16.26, + "totalLiquidVolume": 3400, + "x": 75.38, + "y": 52.37, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "shape": "circular", + "depth": 17.4, + "diameter": 16.26, + "totalLiquidVolume": 3400, + "x": 75.38, + "y": 71.67, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "shape": "circular", + "depth": 17.4, + "diameter": 16.26, + "totalLiquidVolume": 3400, + "x": 94.68, + "y": 13.77, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "shape": "circular", + "depth": 17.4, + "diameter": 16.26, + "totalLiquidVolume": 3400, + "x": 94.68, + "y": 33.07, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "shape": "circular", + "depth": 17.4, + "diameter": 16.26, + "totalLiquidVolume": 3400, + "x": 94.68, + "y": 52.37, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "shape": "circular", + "depth": 17.4, + "diameter": 16.26, + "totalLiquidVolume": 3400, + "x": 94.68, + "y": 71.67, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "shape": "circular", + "depth": 17.4, + "diameter": 16.26, + "totalLiquidVolume": 3400, + "x": 113.98, + "y": 13.77, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "shape": "circular", + "depth": 17.4, + "diameter": 16.26, + "totalLiquidVolume": 3400, + "x": 113.98, + "y": 33.07, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "shape": "circular", + "depth": 17.4, + "diameter": 16.26, + "totalLiquidVolume": 3400, + "x": 113.98, + "y": 52.37, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "shape": "circular", + "depth": 17.4, + "diameter": 16.26, + "totalLiquidVolume": 3400, + "x": 113.98, + "y": 71.67, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + } + }, + "parameters": { + "format": "irregular", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "corning_24_wellplate_3.4ml_flat" + }, + "groups": [ + { + "wells": [ + "A1", + "B1", + "C1", + "D1", + "A2", + "B2", + "C2", + "D2", + "A3", + "B3", + "C3", + "D3", + "A4", + "B4", + "C4", + "D4", + "A5", + "B5", + "C5", + "D5", + "A6", + "B6", + "C6", + "D6" + ], + "metadata": { + "wellBottomShape": "flat" + } + } + ], + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "stackingOffsetWithLabware": { + "opentrons_aluminum_flat_bottom_plate": { + "x": 0, + "y": 0, + "z": 4.15 + } + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "conical", + "topDiameter": 16.256, + "bottomDiameter": 15.621, + "topHeight": 17.399, + "bottomHeight": 0.0 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/corning_384_wellplate_112ul_flat/3.json b/shared-data/labware/definitions/3/corning_384_wellplate_112ul_flat/3.json new file mode 100644 index 00000000000..ca3758f2339 --- /dev/null +++ b/shared-data/labware/definitions/3/corning_384_wellplate_112ul_flat/3.json @@ -0,0 +1,5114 @@ +{ + "schemaVersion": 3, + "version": 3, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1", + "I1", + "J1", + "K1", + "L1", + "M1", + "N1", + "O1", + "P1" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2", + "I2", + "J2", + "K2", + "L2", + "M2", + "N2", + "O2", + "P2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3", + "I3", + "J3", + "K3", + "L3", + "M3", + "N3", + "O3", + "P3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4", + "I4", + "J4", + "K4", + "L4", + "M4", + "N4", + "O4", + "P4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5", + "I5", + "J5", + "K5", + "L5", + "M5", + "N5", + "O5", + "P5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6", + "I6", + "J6", + "K6", + "L6", + "M6", + "N6", + "O6", + "P6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7", + "I7", + "J7", + "K7", + "L7", + "M7", + "N7", + "O7", + "P7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8", + "I8", + "J8", + "K8", + "L8", + "M8", + "N8", + "O8", + "P8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9", + "I9", + "J9", + "K9", + "L9", + "M9", + "N9", + "O9", + "P9" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10", + "I10", + "J10", + "K10", + "L10", + "M10", + "N10", + "O10", + "P10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11", + "I11", + "J11", + "K11", + "L11", + "M11", + "N11", + "O11", + "P11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12", + "I12", + "J12", + "K12", + "L12", + "M12", + "N12", + "O12", + "P12" + ], + [ + "A13", + "B13", + "C13", + "D13", + "E13", + "F13", + "G13", + "H13", + "I13", + "J13", + "K13", + "L13", + "M13", + "N13", + "O13", + "P13" + ], + [ + "A14", + "B14", + "C14", + "D14", + "E14", + "F14", + "G14", + "H14", + "I14", + "J14", + "K14", + "L14", + "M14", + "N14", + "O14", + "P14" + ], + [ + "A15", + "B15", + "C15", + "D15", + "E15", + "F15", + "G15", + "H15", + "I15", + "J15", + "K15", + "L15", + "M15", + "N15", + "O15", + "P15" + ], + [ + "A16", + "B16", + "C16", + "D16", + "E16", + "F16", + "G16", + "H16", + "I16", + "J16", + "K16", + "L16", + "M16", + "N16", + "O16", + "P16" + ], + [ + "A17", + "B17", + "C17", + "D17", + "E17", + "F17", + "G17", + "H17", + "I17", + "J17", + "K17", + "L17", + "M17", + "N17", + "O17", + "P17" + ], + [ + "A18", + "B18", + "C18", + "D18", + "E18", + "F18", + "G18", + "H18", + "I18", + "J18", + "K18", + "L18", + "M18", + "N18", + "O18", + "P18" + ], + [ + "A19", + "B19", + "C19", + "D19", + "E19", + "F19", + "G19", + "H19", + "I19", + "J19", + "K19", + "L19", + "M19", + "N19", + "O19", + "P19" + ], + [ + "A20", + "B20", + "C20", + "D20", + "E20", + "F20", + "G20", + "H20", + "I20", + "J20", + "K20", + "L20", + "M20", + "N20", + "O20", + "P20" + ], + [ + "A21", + "B21", + "C21", + "D21", + "E21", + "F21", + "G21", + "H21", + "I21", + "J21", + "K21", + "L21", + "M21", + "N21", + "O21", + "P21" + ], + [ + "A22", + "B22", + "C22", + "D22", + "E22", + "F22", + "G22", + "H22", + "I22", + "J22", + "K22", + "L22", + "M22", + "N22", + "O22", + "P22" + ], + [ + "A23", + "B23", + "C23", + "D23", + "E23", + "F23", + "G23", + "H23", + "I23", + "J23", + "K23", + "L23", + "M23", + "N23", + "O23", + "P23" + ], + [ + "A24", + "B24", + "C24", + "D24", + "E24", + "F24", + "G24", + "H24", + "I24", + "J24", + "K24", + "L24", + "M24", + "N24", + "O24", + "P24" + ] + ], + "metadata": { + "displayName": "Corning 384 Well Plate 112 \u00b5L Flat", + "displayVolumeUnits": "\u00b5L", + "displayCategory": "wellPlate", + "tags": [] + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.47, + "zDimension": 14.22 + }, + "parameters": { + "format": "384Standard", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "corning_384_wellplate_112ul_flat" + }, + "gripForce": 15, + "gripHeightFromLabwareBottom": 12.4, + "wells": { + "P1": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 12.12, + "y": 8.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "O1": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 12.12, + "y": 13.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "N1": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 12.12, + "y": 17.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "M1": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 12.12, + "y": 22.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "L1": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 12.12, + "y": 26.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "K1": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 12.12, + "y": 31.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "J1": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 12.12, + "y": 35.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "I1": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 12.12, + "y": 40.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "H1": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 12.12, + "y": 44.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "G1": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 12.12, + "y": 49.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "F1": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 12.12, + "y": 53.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "E1": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 12.12, + "y": 58.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 12.12, + "y": 62.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 12.12, + "y": 67.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 12.12, + "y": 71.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "A1": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 12.12, + "y": 76.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "P2": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 16.62, + "y": 8.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "O2": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 16.62, + "y": 13.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "N2": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 16.62, + "y": 17.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "M2": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 16.62, + "y": 22.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "L2": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 16.62, + "y": 26.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "K2": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 16.62, + "y": 31.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "J2": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 16.62, + "y": 35.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "I2": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 16.62, + "y": 40.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "H2": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 16.62, + "y": 44.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "G2": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 16.62, + "y": 49.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "F2": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 16.62, + "y": 53.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "E2": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 16.62, + "y": 58.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 16.62, + "y": 62.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 16.62, + "y": 67.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 16.62, + "y": 71.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 16.62, + "y": 76.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "P3": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 21.12, + "y": 8.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "O3": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 21.12, + "y": 13.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "N3": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 21.12, + "y": 17.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "M3": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 21.12, + "y": 22.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "L3": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 21.12, + "y": 26.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "K3": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 21.12, + "y": 31.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "J3": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 21.12, + "y": 35.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "I3": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 21.12, + "y": 40.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "H3": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 21.12, + "y": 44.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "G3": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 21.12, + "y": 49.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "F3": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 21.12, + "y": 53.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "E3": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 21.12, + "y": 58.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 21.12, + "y": 62.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 21.12, + "y": 67.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 21.12, + "y": 71.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 21.12, + "y": 76.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "P4": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 25.62, + "y": 8.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "O4": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 25.62, + "y": 13.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "N4": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 25.62, + "y": 17.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "M4": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 25.62, + "y": 22.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "L4": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 25.62, + "y": 26.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "K4": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 25.62, + "y": 31.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "J4": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 25.62, + "y": 35.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "I4": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 25.62, + "y": 40.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "H4": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 25.62, + "y": 44.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "G4": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 25.62, + "y": 49.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "F4": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 25.62, + "y": 53.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "E4": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 25.62, + "y": 58.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 25.62, + "y": 62.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 25.62, + "y": 67.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 25.62, + "y": 71.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 25.62, + "y": 76.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "P5": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 30.12, + "y": 8.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "O5": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 30.12, + "y": 13.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "N5": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 30.12, + "y": 17.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "M5": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 30.12, + "y": 22.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "L5": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 30.12, + "y": 26.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "K5": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 30.12, + "y": 31.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "J5": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 30.12, + "y": 35.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "I5": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 30.12, + "y": 40.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "H5": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 30.12, + "y": 44.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "G5": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 30.12, + "y": 49.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "F5": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 30.12, + "y": 53.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "E5": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 30.12, + "y": 58.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 30.12, + "y": 62.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 30.12, + "y": 67.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 30.12, + "y": 71.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 30.12, + "y": 76.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "P6": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 34.62, + "y": 8.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "O6": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 34.62, + "y": 13.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "N6": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 34.62, + "y": 17.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "M6": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 34.62, + "y": 22.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "L6": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 34.62, + "y": 26.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "K6": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 34.62, + "y": 31.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "J6": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 34.62, + "y": 35.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "I6": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 34.62, + "y": 40.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "H6": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 34.62, + "y": 44.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "G6": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 34.62, + "y": 49.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "F6": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 34.62, + "y": 53.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "E6": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 34.62, + "y": 58.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 34.62, + "y": 62.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 34.62, + "y": 67.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 34.62, + "y": 71.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 34.62, + "y": 76.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "P7": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 39.12, + "y": 8.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "O7": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 39.12, + "y": 13.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "N7": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 39.12, + "y": 17.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "M7": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 39.12, + "y": 22.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "L7": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 39.12, + "y": 26.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "K7": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 39.12, + "y": 31.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "J7": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 39.12, + "y": 35.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "I7": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 39.12, + "y": 40.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "H7": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 39.12, + "y": 44.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "G7": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 39.12, + "y": 49.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "F7": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 39.12, + "y": 53.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "E7": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 39.12, + "y": 58.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "D7": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 39.12, + "y": 62.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "C7": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 39.12, + "y": 67.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "B7": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 39.12, + "y": 71.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "A7": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 39.12, + "y": 76.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "P8": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 43.62, + "y": 8.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "O8": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 43.62, + "y": 13.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "N8": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 43.62, + "y": 17.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "M8": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 43.62, + "y": 22.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "L8": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 43.62, + "y": 26.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "K8": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 43.62, + "y": 31.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "J8": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 43.62, + "y": 35.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "I8": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 43.62, + "y": 40.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "H8": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 43.62, + "y": 44.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "G8": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 43.62, + "y": 49.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "F8": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 43.62, + "y": 53.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "E8": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 43.62, + "y": 58.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "D8": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 43.62, + "y": 62.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "C8": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 43.62, + "y": 67.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "B8": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 43.62, + "y": 71.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "A8": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 43.62, + "y": 76.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "P9": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 48.12, + "y": 8.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "O9": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 48.12, + "y": 13.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "N9": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 48.12, + "y": 17.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "M9": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 48.12, + "y": 22.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "L9": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 48.12, + "y": 26.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "K9": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 48.12, + "y": 31.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "J9": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 48.12, + "y": 35.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "I9": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 48.12, + "y": 40.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "H9": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 48.12, + "y": 44.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "G9": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 48.12, + "y": 49.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "F9": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 48.12, + "y": 53.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "E9": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 48.12, + "y": 58.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "D9": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 48.12, + "y": 62.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "C9": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 48.12, + "y": 67.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "B9": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 48.12, + "y": 71.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "A9": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 48.12, + "y": 76.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "P10": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 52.62, + "y": 8.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "O10": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 52.62, + "y": 13.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "N10": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 52.62, + "y": 17.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "M10": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 52.62, + "y": 22.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "L10": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 52.62, + "y": 26.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "K10": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 52.62, + "y": 31.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "J10": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 52.62, + "y": 35.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "I10": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 52.62, + "y": 40.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "H10": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 52.62, + "y": 44.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "G10": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 52.62, + "y": 49.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "F10": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 52.62, + "y": 53.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "E10": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 52.62, + "y": 58.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "D10": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 52.62, + "y": 62.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "C10": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 52.62, + "y": 67.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "B10": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 52.62, + "y": 71.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "A10": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 52.62, + "y": 76.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "P11": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 57.12, + "y": 8.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "O11": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 57.12, + "y": 13.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "N11": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 57.12, + "y": 17.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "M11": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 57.12, + "y": 22.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "L11": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 57.12, + "y": 26.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "K11": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 57.12, + "y": 31.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "J11": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 57.12, + "y": 35.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "I11": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 57.12, + "y": 40.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "H11": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 57.12, + "y": 44.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "G11": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 57.12, + "y": 49.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "F11": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 57.12, + "y": 53.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "E11": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 57.12, + "y": 58.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "D11": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 57.12, + "y": 62.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "C11": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 57.12, + "y": 67.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "B11": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 57.12, + "y": 71.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "A11": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 57.12, + "y": 76.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "P12": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 61.62, + "y": 8.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "O12": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 61.62, + "y": 13.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "N12": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 61.62, + "y": 17.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "M12": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 61.62, + "y": 22.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "L12": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 61.62, + "y": 26.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "K12": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 61.62, + "y": 31.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "J12": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 61.62, + "y": 35.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "I12": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 61.62, + "y": 40.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "H12": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 61.62, + "y": 44.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "G12": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 61.62, + "y": 49.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "F12": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 61.62, + "y": 53.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "E12": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 61.62, + "y": 58.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "D12": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 61.62, + "y": 62.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "C12": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 61.62, + "y": 67.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "B12": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 61.62, + "y": 71.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "A12": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 61.62, + "y": 76.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "P13": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 66.12, + "y": 8.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "O13": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 66.12, + "y": 13.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "N13": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 66.12, + "y": 17.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "M13": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 66.12, + "y": 22.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "L13": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 66.12, + "y": 26.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "K13": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 66.12, + "y": 31.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "J13": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 66.12, + "y": 35.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "I13": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 66.12, + "y": 40.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "H13": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 66.12, + "y": 44.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "G13": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 66.12, + "y": 49.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "F13": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 66.12, + "y": 53.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "E13": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 66.12, + "y": 58.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "D13": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 66.12, + "y": 62.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "C13": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 66.12, + "y": 67.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "B13": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 66.12, + "y": 71.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "A13": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 66.12, + "y": 76.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "P14": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 70.62, + "y": 8.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "O14": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 70.62, + "y": 13.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "N14": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 70.62, + "y": 17.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "M14": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 70.62, + "y": 22.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "L14": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 70.62, + "y": 26.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "K14": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 70.62, + "y": 31.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "J14": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 70.62, + "y": 35.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "I14": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 70.62, + "y": 40.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "H14": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 70.62, + "y": 44.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "G14": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 70.62, + "y": 49.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "F14": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 70.62, + "y": 53.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "E14": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 70.62, + "y": 58.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "D14": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 70.62, + "y": 62.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "C14": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 70.62, + "y": 67.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "B14": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 70.62, + "y": 71.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "A14": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 70.62, + "y": 76.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "P15": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 75.12, + "y": 8.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "O15": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 75.12, + "y": 13.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "N15": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 75.12, + "y": 17.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "M15": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 75.12, + "y": 22.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "L15": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 75.12, + "y": 26.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "K15": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 75.12, + "y": 31.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "J15": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 75.12, + "y": 35.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "I15": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 75.12, + "y": 40.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "H15": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 75.12, + "y": 44.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "G15": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 75.12, + "y": 49.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "F15": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 75.12, + "y": 53.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "E15": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 75.12, + "y": 58.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "D15": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 75.12, + "y": 62.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "C15": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 75.12, + "y": 67.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "B15": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 75.12, + "y": 71.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "A15": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 75.12, + "y": 76.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "P16": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 79.62, + "y": 8.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "O16": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 79.62, + "y": 13.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "N16": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 79.62, + "y": 17.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "M16": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 79.62, + "y": 22.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "L16": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 79.62, + "y": 26.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "K16": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 79.62, + "y": 31.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "J16": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 79.62, + "y": 35.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "I16": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 79.62, + "y": 40.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "H16": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 79.62, + "y": 44.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "G16": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 79.62, + "y": 49.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "F16": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 79.62, + "y": 53.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "E16": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 79.62, + "y": 58.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "D16": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 79.62, + "y": 62.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "C16": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 79.62, + "y": 67.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "B16": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 79.62, + "y": 71.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "A16": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 79.62, + "y": 76.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "P17": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 84.12, + "y": 8.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "O17": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 84.12, + "y": 13.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "N17": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 84.12, + "y": 17.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "M17": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 84.12, + "y": 22.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "L17": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 84.12, + "y": 26.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "K17": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 84.12, + "y": 31.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "J17": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 84.12, + "y": 35.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "I17": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 84.12, + "y": 40.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "H17": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 84.12, + "y": 44.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "G17": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 84.12, + "y": 49.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "F17": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 84.12, + "y": 53.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "E17": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 84.12, + "y": 58.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "D17": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 84.12, + "y": 62.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "C17": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 84.12, + "y": 67.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "B17": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 84.12, + "y": 71.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "A17": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 84.12, + "y": 76.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "P18": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 88.62, + "y": 8.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "O18": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 88.62, + "y": 13.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "N18": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 88.62, + "y": 17.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "M18": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 88.62, + "y": 22.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "L18": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 88.62, + "y": 26.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "K18": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 88.62, + "y": 31.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "J18": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 88.62, + "y": 35.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "I18": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 88.62, + "y": 40.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "H18": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 88.62, + "y": 44.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "G18": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 88.62, + "y": 49.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "F18": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 88.62, + "y": 53.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "E18": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 88.62, + "y": 58.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "D18": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 88.62, + "y": 62.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "C18": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 88.62, + "y": 67.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "B18": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 88.62, + "y": 71.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "A18": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 88.62, + "y": 76.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "P19": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 93.12, + "y": 8.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "O19": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 93.12, + "y": 13.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "N19": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 93.12, + "y": 17.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "M19": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 93.12, + "y": 22.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "L19": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 93.12, + "y": 26.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "K19": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 93.12, + "y": 31.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "J19": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 93.12, + "y": 35.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "I19": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 93.12, + "y": 40.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "H19": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 93.12, + "y": 44.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "G19": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 93.12, + "y": 49.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "F19": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 93.12, + "y": 53.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "E19": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 93.12, + "y": 58.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "D19": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 93.12, + "y": 62.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "C19": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 93.12, + "y": 67.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "B19": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 93.12, + "y": 71.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "A19": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 93.12, + "y": 76.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "P20": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 97.62, + "y": 8.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "O20": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 97.62, + "y": 13.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "N20": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 97.62, + "y": 17.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "M20": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 97.62, + "y": 22.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "L20": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 97.62, + "y": 26.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "K20": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 97.62, + "y": 31.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "J20": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 97.62, + "y": 35.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "I20": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 97.62, + "y": 40.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "H20": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 97.62, + "y": 44.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "G20": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 97.62, + "y": 49.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "F20": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 97.62, + "y": 53.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "E20": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 97.62, + "y": 58.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "D20": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 97.62, + "y": 62.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "C20": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 97.62, + "y": 67.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "B20": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 97.62, + "y": 71.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "A20": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 97.62, + "y": 76.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "P21": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 102.12, + "y": 8.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "O21": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 102.12, + "y": 13.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "N21": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 102.12, + "y": 17.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "M21": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 102.12, + "y": 22.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "L21": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 102.12, + "y": 26.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "K21": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 102.12, + "y": 31.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "J21": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 102.12, + "y": 35.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "I21": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 102.12, + "y": 40.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "H21": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 102.12, + "y": 44.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "G21": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 102.12, + "y": 49.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "F21": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 102.12, + "y": 53.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "E21": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 102.12, + "y": 58.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "D21": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 102.12, + "y": 62.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "C21": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 102.12, + "y": 67.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "B21": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 102.12, + "y": 71.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "A21": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 102.12, + "y": 76.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "P22": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 106.62, + "y": 8.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "O22": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 106.62, + "y": 13.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "N22": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 106.62, + "y": 17.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "M22": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 106.62, + "y": 22.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "L22": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 106.62, + "y": 26.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "K22": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 106.62, + "y": 31.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "J22": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 106.62, + "y": 35.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "I22": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 106.62, + "y": 40.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "H22": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 106.62, + "y": 44.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "G22": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 106.62, + "y": 49.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "F22": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 106.62, + "y": 53.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "E22": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 106.62, + "y": 58.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "D22": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 106.62, + "y": 62.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "C22": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 106.62, + "y": 67.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "B22": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 106.62, + "y": 71.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "A22": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 106.62, + "y": 76.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "P23": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 111.12, + "y": 8.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "O23": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 111.12, + "y": 13.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "N23": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 111.12, + "y": 17.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "M23": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 111.12, + "y": 22.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "L23": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 111.12, + "y": 26.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "K23": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 111.12, + "y": 31.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "J23": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 111.12, + "y": 35.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "I23": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 111.12, + "y": 40.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "H23": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 111.12, + "y": 44.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "G23": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 111.12, + "y": 49.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "F23": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 111.12, + "y": 53.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "E23": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 111.12, + "y": 58.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "D23": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 111.12, + "y": 62.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "C23": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 111.12, + "y": 67.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "B23": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 111.12, + "y": 71.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "A23": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 111.12, + "y": 76.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "P24": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 115.62, + "y": 8.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "O24": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 115.62, + "y": 13.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "N24": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 115.62, + "y": 17.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "M24": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 115.62, + "y": 22.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "L24": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 115.62, + "y": 26.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "K24": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 115.62, + "y": 31.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "J24": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 115.62, + "y": 35.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "I24": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 115.62, + "y": 40.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "H24": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 115.62, + "y": 44.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "G24": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 115.62, + "y": 49.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "F24": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 115.62, + "y": 53.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "E24": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 115.62, + "y": 58.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "D24": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 115.62, + "y": 62.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "C24": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 115.62, + "y": 67.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "B24": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 115.62, + "y": 71.99, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + }, + "A24": { + "shape": "rectangular", + "depth": 11.43, + "xDimension": 3.63, + "yDimension": 3.63, + "totalLiquidVolume": 112, + "x": 115.62, + "y": 76.49, + "z": 2.79, + "geometryDefinitionId": "conicalWell" + } + }, + "brand": { + "brand": "Corning", + "brandId": ["3640", "3662", "3680", "3700", "3701", "3702"], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Microplates/Assay-Microplates/384-Well-Microplates/Corning%C2%AE-384-well-Clear-Polystyrene-Microplates/p/corning384WellClearPolystyreneMicroplates" + ] + }, + "groups": [ + { + "wells": [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1", + "I1", + "J1", + "K1", + "L1", + "M1", + "N1", + "O1", + "P1", + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2", + "I2", + "J2", + "K2", + "L2", + "M2", + "N2", + "O2", + "P2", + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3", + "I3", + "J3", + "K3", + "L3", + "M3", + "N3", + "O3", + "P3", + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4", + "I4", + "J4", + "K4", + "L4", + "M4", + "N4", + "O4", + "P4", + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5", + "I5", + "J5", + "K5", + "L5", + "M5", + "N5", + "O5", + "P5", + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6", + "I6", + "J6", + "K6", + "L6", + "M6", + "N6", + "O6", + "P6", + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7", + "I7", + "J7", + "K7", + "L7", + "M7", + "N7", + "O7", + "P7", + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8", + "I8", + "J8", + "K8", + "L8", + "M8", + "N8", + "O8", + "P8", + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9", + "I9", + "J9", + "K9", + "L9", + "M9", + "N9", + "O9", + "P9", + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10", + "I10", + "J10", + "K10", + "L10", + "M10", + "N10", + "O10", + "P10", + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11", + "I11", + "J11", + "K11", + "L11", + "M11", + "N11", + "O11", + "P11", + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12", + "I12", + "J12", + "K12", + "L12", + "M12", + "N12", + "O12", + "P12", + "A13", + "B13", + "C13", + "D13", + "E13", + "F13", + "G13", + "H13", + "I13", + "J13", + "K13", + "L13", + "M13", + "N13", + "O13", + "P13", + "A14", + "B14", + "C14", + "D14", + "E14", + "F14", + "G14", + "H14", + "I14", + "J14", + "K14", + "L14", + "M14", + "N14", + "O14", + "P14", + "A15", + "B15", + "C15", + "D15", + "E15", + "F15", + "G15", + "H15", + "I15", + "J15", + "K15", + "L15", + "M15", + "N15", + "O15", + "P15", + "A16", + "B16", + "C16", + "D16", + "E16", + "F16", + "G16", + "H16", + "I16", + "J16", + "K16", + "L16", + "M16", + "N16", + "O16", + "P16", + "A17", + "B17", + "C17", + "D17", + "E17", + "F17", + "G17", + "H17", + "I17", + "J17", + "K17", + "L17", + "M17", + "N17", + "O17", + "P17", + "A18", + "B18", + "C18", + "D18", + "E18", + "F18", + "G18", + "H18", + "I18", + "J18", + "K18", + "L18", + "M18", + "N18", + "O18", + "P18", + "A19", + "B19", + "C19", + "D19", + "E19", + "F19", + "G19", + "H19", + "I19", + "J19", + "K19", + "L19", + "M19", + "N19", + "O19", + "P19", + "A20", + "B20", + "C20", + "D20", + "E20", + "F20", + "G20", + "H20", + "I20", + "J20", + "K20", + "L20", + "M20", + "N20", + "O20", + "P20", + "A21", + "B21", + "C21", + "D21", + "E21", + "F21", + "G21", + "H21", + "I21", + "J21", + "K21", + "L21", + "M21", + "N21", + "O21", + "P21", + "A22", + "B22", + "C22", + "D22", + "E22", + "F22", + "G22", + "H22", + "I22", + "J22", + "K22", + "L22", + "M22", + "N22", + "O22", + "P22", + "A23", + "B23", + "C23", + "D23", + "E23", + "F23", + "G23", + "H23", + "I23", + "J23", + "K23", + "L23", + "M23", + "N23", + "O23", + "P23", + "A24", + "B24", + "C24", + "D24", + "E24", + "F24", + "G24", + "H24", + "I24", + "J24", + "K24", + "L24", + "M24", + "N24", + "O24", + "P24" + ], + "metadata": { + "wellBottomShape": "flat" + } + } + ], + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "stackingOffsetWithLabware": { + "opentrons_universal_flat_adapter": { + "x": 0, + "y": 0, + "z": 8.32 + }, + "opentrons_aluminum_flat_bottom_plate": { + "x": 0, + "y": 0, + "z": 4.4 + } + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "conical", + "bottomDiameter": 3.64, + "topDiameter": 2.74, + "topHeight": 11.65, + "bottomHeight": 0.0 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/corning_48_wellplate_1.6ml_flat/3.json b/shared-data/labware/definitions/3/corning_48_wellplate_1.6ml_flat/3.json new file mode 100644 index 00000000000..9caad9af4b0 --- /dev/null +++ b/shared-data/labware/definitions/3/corning_48_wellplate_1.6ml_flat/3.json @@ -0,0 +1,605 @@ +{ + "ordering": [ + ["A1", "B1", "C1", "D1", "E1", "F1"], + ["A2", "B2", "C2", "D2", "E2", "F2"], + ["A3", "B3", "C3", "D3", "E3", "F3"], + ["A4", "B4", "C4", "D4", "E4", "F4"], + ["A5", "B5", "C5", "D5", "E5", "F5"], + ["A6", "B6", "C6", "D6", "E6", "F6"], + ["A7", "B7", "C7", "D7", "E7", "F7"], + ["A8", "B8", "C8", "D8", "E8", "F8"] + ], + "schemaVersion": 3, + "version": 3, + "namespace": "opentrons", + "metadata": { + "displayName": "Corning 48 Well Plate 1.6 mL Flat", + "displayVolumeUnits": "mL", + "displayCategory": "wellPlate", + "tags": [] + }, + "dimensions": { + "xDimension": 127.89, + "yDimension": 85.6, + "zDimension": 20.02 + }, + "parameters": { + "format": "irregular", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "corning_48_wellplate_1.6ml_flat" + }, + "gripForce": 16, + "gripHeightFromLabwareBottom": 18.3, + "wells": { + "F1": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 18.16, + "y": 10.08, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "E1": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 18.16, + "y": 23.16, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 18.16, + "y": 36.24, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 18.16, + "y": 49.32, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 18.16, + "y": 62.4, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "A1": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 18.16, + "y": 75.48, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "F2": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 31.24, + "y": 10.08, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "E2": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 31.24, + "y": 23.16, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 31.24, + "y": 36.24, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 31.24, + "y": 49.32, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 31.24, + "y": 62.4, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 31.24, + "y": 75.48, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "F3": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 44.32, + "y": 10.08, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "E3": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 44.32, + "y": 23.16, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 44.32, + "y": 36.24, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 44.32, + "y": 49.32, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 44.32, + "y": 62.4, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 44.32, + "y": 75.48, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "F4": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 57.4, + "y": 10.08, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "E4": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 57.4, + "y": 23.16, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 57.4, + "y": 36.24, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 57.4, + "y": 49.32, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 57.4, + "y": 62.4, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 57.4, + "y": 75.48, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "F5": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 70.48, + "y": 10.08, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "E5": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 70.48, + "y": 23.16, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 70.48, + "y": 36.24, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 70.48, + "y": 49.32, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 70.48, + "y": 62.4, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 70.48, + "y": 75.48, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "F6": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 83.56, + "y": 10.08, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "E6": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 83.56, + "y": 23.16, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 83.56, + "y": 36.24, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 83.56, + "y": 49.32, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 83.56, + "y": 62.4, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 83.56, + "y": 75.48, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "F7": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 96.64, + "y": 10.08, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "E7": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 96.64, + "y": 23.16, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "D7": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 96.64, + "y": 36.24, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "C7": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 96.64, + "y": 49.32, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "B7": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 96.64, + "y": 62.4, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "A7": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 96.64, + "y": 75.48, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "F8": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 109.72, + "y": 10.08, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "E8": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 109.72, + "y": 23.16, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "D8": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 109.72, + "y": 36.24, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "C8": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 109.72, + "y": 49.32, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "B8": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 109.72, + "y": 62.4, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + }, + "A8": { + "shape": "circular", + "depth": 17.4, + "diameter": 11.56, + "totalLiquidVolume": 1600, + "x": 109.72, + "y": 75.48, + "z": 2.62, + "geometryDefinitionId": "conicalWell" + } + }, + "brand": { + "brand": "Corning", + "brandId": ["3548"], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Microplates/Assay-Microplates/96-Well-Microplates/Costar%C2%AE-Multiple-Well-Cell-Culture-Plates/p/3548" + ] + }, + "groups": [ + { + "wells": [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "A8", + "B8", + "C8", + "D8", + "E8", + "F8" + ], + "metadata": { + "wellBottomShape": "flat" + } + } + ], + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "stackingOffsetWithLabware": { + "opentrons_aluminum_flat_bottom_plate": { + "x": 0, + "y": 0, + "z": 4.4 + } + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "conical", + "bottomDiameter": 11.0998, + "topDiameter": 10.6426, + "topHeight": 17.399, + "bottomHeight": 0.0 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/corning_6_wellplate_16.8ml_flat/3.json b/shared-data/labware/definitions/3/corning_6_wellplate_16.8ml_flat/3.json new file mode 100644 index 00000000000..fc53beb0f9e --- /dev/null +++ b/shared-data/labware/definitions/3/corning_6_wellplate_16.8ml_flat/3.json @@ -0,0 +1,129 @@ +{ + "ordering": [ + ["A1", "B1"], + ["A2", "B2"], + ["A3", "B3"] + ], + "metadata": { + "displayName": "Corning 6 Well Plate 16.8 mL Flat", + "displayVolumeUnits": "mL", + "displayCategory": "wellPlate", + "tags": [] + }, + "schemaVersion": 3, + "version": 3, + "namespace": "opentrons", + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.47, + "zDimension": 20.27 + }, + "parameters": { + "format": "irregular", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "corning_6_wellplate_16.8ml_flat" + }, + "wells": { + "B1": { + "shape": "circular", + "depth": 17.4, + "diameter": 35.43, + "totalLiquidVolume": 16800, + "x": 24.76, + "y": 23.16, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "A1": { + "shape": "circular", + "depth": 17.4, + "diameter": 35.43, + "totalLiquidVolume": 16800, + "x": 24.76, + "y": 62.28, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "shape": "circular", + "depth": 17.4, + "diameter": 35.43, + "totalLiquidVolume": 16800, + "x": 63.88, + "y": 23.16, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "shape": "circular", + "depth": 17.4, + "diameter": 35.43, + "totalLiquidVolume": 16800, + "x": 63.88, + "y": 62.28, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "shape": "circular", + "depth": 17.4, + "diameter": 35.43, + "totalLiquidVolume": 16800, + "x": 103, + "y": 23.16, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "shape": "circular", + "depth": 17.4, + "diameter": 35.43, + "totalLiquidVolume": 16800, + "x": 103, + "y": 62.28, + "z": 2.87, + "geometryDefinitionId": "conicalWell" + } + }, + "brand": { + "brand": "Corning", + "brandId": ["3335", "3506", "3516", "3471"], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Microplates/Assay-Microplates/96-Well-Microplates/Costar%C2%AE-Multiple-Well-Cell-Culture-Plates/p/3335" + ] + }, + "groups": [ + { + "wells": ["A1", "B1", "A2", "B2", "A3", "B3"], + "metadata": { + "wellBottomShape": "flat" + } + } + ], + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "stackingOffsetWithLabware": { + "opentrons_aluminum_flat_bottom_plate": { + "x": 0, + "y": 0, + "z": 4.5 + } + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "conical", + "bottomDiameter": 34.798, + "topDiameter": 35.433, + "topHeight": 17.399, + "bottomHeight": 0.0 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/corning_96_wellplate_360ul_flat/3.json b/shared-data/labware/definitions/3/corning_96_wellplate_360ul_flat/3.json new file mode 100644 index 00000000000..e085eb05d0e --- /dev/null +++ b/shared-data/labware/definitions/3/corning_96_wellplate_360ul_flat/3.json @@ -0,0 +1,1172 @@ +{ + "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"] + ], + "brand": { + "brand": "Corning", + "brandId": [ + "3650", + "3916", + "3915", + "3361", + "3590", + "9018", + "3591", + "9017", + "3641", + "3628", + "3370", + "2507", + "2509", + "2503", + "3665", + "3600", + "3362", + "3917", + "3912", + "3925", + "3922", + "3596", + "3977", + "3598", + "3599", + "3585", + "3595", + "3300", + "3474" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Microplates/Assay-Microplates/96-Well-Microplates/Corning%C2%AE-96-well-Solid-Black-and-White-Polystyrene-Microplates/p/corning96WellSolidBlackAndWhitePolystyreneMicroplates" + ] + }, + "metadata": { + "displayName": "Corning 96 Well Plate 360 \u00b5L Flat", + "displayCategory": "wellPlate", + "displayVolumeUnits": "\u00b5L", + "tags": [] + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.47, + "zDimension": 14.22 + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "gripForce": 15, + "gripHeightFromLabwareBottom": 12.2, + "wells": { + "H1": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 14.38, + "y": 11.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "G1": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 14.38, + "y": 20.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "F1": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 14.38, + "y": 29.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "E1": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 14.38, + "y": 38.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 14.38, + "y": 47.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 14.38, + "y": 56.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 14.38, + "y": 65.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "A1": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 14.38, + "y": 74.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "H2": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 23.38, + "y": 11.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "G2": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 23.38, + "y": 20.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "F2": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 23.38, + "y": 29.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "E2": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 23.38, + "y": 38.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 23.38, + "y": 47.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 23.38, + "y": 56.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 23.38, + "y": 65.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 23.38, + "y": 74.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "H3": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 32.38, + "y": 11.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "G3": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 32.38, + "y": 20.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "F3": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 32.38, + "y": 29.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "E3": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 32.38, + "y": 38.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 32.38, + "y": 47.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 32.38, + "y": 56.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 32.38, + "y": 65.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 32.38, + "y": 74.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "H4": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 41.38, + "y": 11.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "G4": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 41.38, + "y": 20.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "F4": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 41.38, + "y": 29.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "E4": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 41.38, + "y": 38.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 41.38, + "y": 47.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 41.38, + "y": 56.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 41.38, + "y": 65.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 41.38, + "y": 74.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "H5": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 50.38, + "y": 11.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "G5": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 50.38, + "y": 20.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "F5": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 50.38, + "y": 29.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "E5": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 50.38, + "y": 38.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 50.38, + "y": 47.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 50.38, + "y": 56.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 50.38, + "y": 65.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 50.38, + "y": 74.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "H6": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 59.38, + "y": 11.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "G6": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 59.38, + "y": 20.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "F6": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 59.38, + "y": 29.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "E6": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 59.38, + "y": 38.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 59.38, + "y": 47.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 59.38, + "y": 56.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 59.38, + "y": 65.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 59.38, + "y": 74.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "H7": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 68.38, + "y": 11.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "G7": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 68.38, + "y": 20.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "F7": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 68.38, + "y": 29.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "E7": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 68.38, + "y": 38.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "D7": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 68.38, + "y": 47.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "C7": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 68.38, + "y": 56.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "B7": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 68.38, + "y": 65.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "A7": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 68.38, + "y": 74.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "H8": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 77.38, + "y": 11.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "G8": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 77.38, + "y": 20.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "F8": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 77.38, + "y": 29.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "E8": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 77.38, + "y": 38.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "D8": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 77.38, + "y": 47.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "C8": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 77.38, + "y": 56.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "B8": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 77.38, + "y": 65.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "A8": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 77.38, + "y": 74.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "H9": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 86.38, + "y": 11.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "G9": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 86.38, + "y": 20.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "F9": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 86.38, + "y": 29.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "E9": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 86.38, + "y": 38.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "D9": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 86.38, + "y": 47.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "C9": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 86.38, + "y": 56.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "B9": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 86.38, + "y": 65.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "A9": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 86.38, + "y": 74.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "H10": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 95.38, + "y": 11.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "G10": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 95.38, + "y": 20.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "F10": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 95.38, + "y": 29.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "E10": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 95.38, + "y": 38.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "D10": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 95.38, + "y": 47.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "C10": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 95.38, + "y": 56.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "B10": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 95.38, + "y": 65.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "A10": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 95.38, + "y": 74.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "H11": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 104.38, + "y": 11.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "G11": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 104.38, + "y": 20.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "F11": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 104.38, + "y": 29.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "E11": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 104.38, + "y": 38.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "D11": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 104.38, + "y": 47.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "C11": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 104.38, + "y": 56.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "B11": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 104.38, + "y": 65.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "A11": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 104.38, + "y": 74.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "H12": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 113.38, + "y": 11.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "G12": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 113.38, + "y": 20.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "F12": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 113.38, + "y": 29.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "E12": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 113.38, + "y": 38.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "D12": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 113.38, + "y": 47.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "C12": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 113.38, + "y": 56.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "B12": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 113.38, + "y": 65.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + }, + "A12": { + "depth": 10.67, + "shape": "circular", + "diameter": 6.86, + "totalLiquidVolume": 360, + "x": 113.38, + "y": 74.24, + "z": 3.55, + "geometryDefinitionId": "conicalWell" + } + }, + "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": "flat" + } + } + ], + "parameters": { + "format": "96Standard", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "corning_96_wellplate_360ul_flat" + }, + "namespace": "opentrons", + "version": 3, + "schemaVersion": 3, + "stackingOffsetWithLabware": { + "opentrons_universal_flat_adapter": { + "x": 0, + "y": 0, + "z": 10.22 + }, + "opentrons_aluminum_flat_bottom_plate": { + "x": 0, + "y": 0, + "z": 5.45 + } + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "conical", + "topDiameter": 6.858, + "bottomDiameter": 6.35, + "topHeight": 10.668, + "bottomHeight": 0.0 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/nest_12_reservoir_15ml/2.json b/shared-data/labware/definitions/3/nest_12_reservoir_15ml/2.json new file mode 100644 index 00000000000..38423ed7234 --- /dev/null +++ b/shared-data/labware/definitions/3/nest_12_reservoir_15ml/2.json @@ -0,0 +1,226 @@ +{ + "ordering": [ + ["A1"], + ["A2"], + ["A3"], + ["A4"], + ["A5"], + ["A6"], + ["A7"], + ["A8"], + ["A9"], + ["A10"], + ["A11"], + ["A12"] + ], + "brand": { + "brand": "NEST", + "brandId": ["360102"], + "links": ["https://www.nest-biotech.com/reagent-reserviors/59178414.html"] + }, + "metadata": { + "displayName": "NEST 12 Well Reservoir 15 mL", + "displayCategory": "reservoir", + "displayVolumeUnits": "mL", + "tags": [] + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 31.4 + }, + "wells": { + "A1": { + "depth": 26.85, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 71.2, + "totalLiquidVolume": 15000, + "x": 14.38, + "y": 42.78, + "z": 4.55, + "geometryDefinitionId": "cuboidalWell" + }, + "A2": { + "depth": 26.85, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 71.2, + "totalLiquidVolume": 15000, + "x": 23.38, + "y": 42.78, + "z": 4.55, + "geometryDefinitionId": "cuboidalWell" + }, + "A3": { + "depth": 26.85, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 71.2, + "totalLiquidVolume": 15000, + "x": 32.38, + "y": 42.78, + "z": 4.55, + "geometryDefinitionId": "cuboidalWell" + }, + "A4": { + "depth": 26.85, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 71.2, + "totalLiquidVolume": 15000, + "x": 41.38, + "y": 42.78, + "z": 4.55, + "geometryDefinitionId": "cuboidalWell" + }, + "A5": { + "depth": 26.85, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 71.2, + "totalLiquidVolume": 15000, + "x": 50.38, + "y": 42.78, + "z": 4.55, + "geometryDefinitionId": "cuboidalWell" + }, + "A6": { + "depth": 26.85, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 71.2, + "totalLiquidVolume": 15000, + "x": 59.38, + "y": 42.78, + "z": 4.55, + "geometryDefinitionId": "cuboidalWell" + }, + "A7": { + "depth": 26.85, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 71.2, + "totalLiquidVolume": 15000, + "x": 68.38, + "y": 42.78, + "z": 4.55, + "geometryDefinitionId": "cuboidalWell" + }, + "A8": { + "depth": 26.85, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 71.2, + "totalLiquidVolume": 15000, + "x": 77.38, + "y": 42.78, + "z": 4.55, + "geometryDefinitionId": "cuboidalWell" + }, + "A9": { + "depth": 26.85, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 71.2, + "totalLiquidVolume": 15000, + "x": 86.38, + "y": 42.78, + "z": 4.55, + "geometryDefinitionId": "cuboidalWell" + }, + "A10": { + "depth": 26.85, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 71.2, + "totalLiquidVolume": 15000, + "x": 95.38, + "y": 42.78, + "z": 4.55, + "geometryDefinitionId": "cuboidalWell" + }, + "A11": { + "depth": 26.85, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 71.2, + "totalLiquidVolume": 15000, + "x": 104.38, + "y": 42.78, + "z": 4.55, + "geometryDefinitionId": "cuboidalWell" + }, + "A12": { + "depth": 26.85, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 71.2, + "totalLiquidVolume": 15000, + "x": 113.38, + "y": 42.78, + "z": 4.55, + "geometryDefinitionId": "cuboidalWell" + } + }, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "A10", + "A11", + "A12" + ] + } + ], + "parameters": { + "format": "trough", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "quirks": ["centerMultichannelOnWells", "touchTipDisabled"], + "loadName": "nest_12_reservoir_15ml" + }, + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "cuboidalWell": { + "sections": [ + { + "shape": "cuboidal", + "topXDimension": 7.95, + "topYDimension": 70.53, + "bottomXDimension": 1.87, + "bottomYDimension": 64.45, + "topHeight": 2.05, + "bottomHeight": 0.0 + }, + { + "shape": "cuboidal", + "topXDimension": 8.35, + "topYDimension": 71.25, + "bottomXDimension": 7.95, + "bottomYDimension": 70.53, + "topHeight": 26.85, + "bottomHeight": 2.05 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/nest_1_reservoir_195ml/3.json b/shared-data/labware/definitions/3/nest_1_reservoir_195ml/3.json new file mode 100644 index 00000000000..5930984eab5 --- /dev/null +++ b/shared-data/labware/definitions/3/nest_1_reservoir_195ml/3.json @@ -0,0 +1,62 @@ +{ + "ordering": [["A1"]], + "brand": { + "brand": "NEST", + "brandId": ["360103"], + "links": ["https://www.nest-biotech.com/reagent-reserviors/59178416.html"] + }, + "metadata": { + "displayName": "NEST 1 Well Reservoir 195 mL", + "displayCategory": "reservoir", + "displayVolumeUnits": "mL", + "tags": [] + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 31.4 + }, + "gripForce": 15, + "gripHeightFromLabwareBottom": 16.8, + "wells": { + "A1": { + "depth": 25, + "shape": "rectangular", + "xDimension": 106.8, + "yDimension": 71.2, + "totalLiquidVolume": 195000, + "x": 63.88, + "y": 42.74, + "z": 4.55, + "geometryDefinitionId": "cuboidalWell" + } + }, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": ["A1"] + } + ], + "parameters": { + "format": "trough", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "quirks": ["centerMultichannelOnWells", "touchTipDisabled"], + "loadName": "nest_1_reservoir_195ml" + }, + "namespace": "opentrons", + "version": 3, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "cuboidalWell": { + "sections": [] + } + } +} diff --git a/shared-data/labware/definitions/3/nest_1_reservoir_290ml/2.json b/shared-data/labware/definitions/3/nest_1_reservoir_290ml/2.json new file mode 100644 index 00000000000..13e9cd8f40c --- /dev/null +++ b/shared-data/labware/definitions/3/nest_1_reservoir_290ml/2.json @@ -0,0 +1,70 @@ +{ + "ordering": [["A1"]], + "brand": { + "brand": "NEST", + "brandId": ["360206", "360266"], + "links": ["https://www.nest-biotech.com/reagent-reserviors"] + }, + "metadata": { + "displayName": "NEST 1 Well Reservoir 290 mL", + "displayCategory": "reservoir", + "displayVolumeUnits": "mL", + "tags": [] + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.47, + "zDimension": 44.4 + }, + "wells": { + "A1": { + "depth": 39.55, + "shape": "rectangular", + "xDimension": 106.8, + "yDimension": 71.2, + "totalLiquidVolume": 290000, + "x": 63.88, + "y": 42.74, + "z": 4.85, + "geometryDefinitionId": "cuboidalWell" + } + }, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": ["A1"] + } + ], + "parameters": { + "format": "trough", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "quirks": ["centerMultichannelOnWells", "touchTipDisabled"], + "loadName": "nest_1_reservoir_290ml" + }, + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "cuboidalWell": { + "sections": [ + { + "shape": "cuboidal", + "topXDimension": 70.6, + "topYDimension": 106.8, + "bottomXDimension": 71.3, + "bottomYDimension": 107.3, + "topHeight": 2.05, + "bottomHeight": 0.0 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/nest_96_wellplate_100ul_pcr_full_skirt/3.json b/shared-data/labware/definitions/3/nest_96_wellplate_100ul_pcr_full_skirt/3.json new file mode 100644 index 00000000000..3e55fa4ed84 --- /dev/null +++ b/shared-data/labware/definitions/3/nest_96_wellplate_100ul_pcr_full_skirt/3.json @@ -0,0 +1,1161 @@ +{ + "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"] + ], + "brand": { + "brand": "NEST", + "brandId": ["402501"], + "links": ["https://www.nest-biotech.com/pcr-plates/58773587.html"] + }, + "metadata": { + "displayName": "NEST 96 Well Plate 100 \u00b5L PCR Full Skirt", + "displayCategory": "wellPlate", + "displayVolumeUnits": "\u00b5L", + "tags": [] + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15, + "gripHeightFromLabwareBottom": 10.65, + "wells": { + "A1": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "E1": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "F1": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "G1": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "H1": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "E2": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "F2": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "G2": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "H2": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "E3": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "F3": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "G3": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "H3": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "E4": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "F4": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "G4": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "H4": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "E5": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "F5": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "G5": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "H5": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "E6": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "F6": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "G6": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "H6": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "A7": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "B7": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "C7": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "D7": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "E7": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "F7": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "G7": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "H7": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "A8": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "B8": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "C8": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "D8": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "E8": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "F8": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "G8": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "H8": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "A9": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "B9": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "C9": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "D9": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "E9": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "F9": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "G9": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "H9": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "A10": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "B10": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "C10": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "D10": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "E10": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "F10": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "G10": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "H10": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "A11": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "B11": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "C11": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "D11": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "E11": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "F11": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "G11": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "H11": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "A12": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "B12": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "C12": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "D12": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "E12": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "F12": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "G12": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + }, + "H12": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92, + "geometryDefinitionId": "conicalWell" + } + }, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "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" + ] + } + ], + "parameters": { + "format": "96Standard", + "isTiprack": false, + "isMagneticModuleCompatible": true, + "magneticModuleEngageHeight": 20, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt" + }, + "namespace": "opentrons", + "version": 3, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "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 + } + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 3.015, + "topHeight": 0.2, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "bottomDiameter": 2.16, + "topDiameter": 5.26, + "topHeight": 9.89, + "bottomHeight": 0.2 + }, + { + "shape": "conical", + "bottomDiameter": 5.26, + "topDiameter": 5.34, + "topHeight": 14.7, + "bottomHeight": 9.89 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/nest_96_wellplate_200ul_flat/3.json b/shared-data/labware/definitions/3/nest_96_wellplate_200ul_flat/3.json new file mode 100644 index 00000000000..f8315ed040c --- /dev/null +++ b/shared-data/labware/definitions/3/nest_96_wellplate_200ul_flat/3.json @@ -0,0 +1,1140 @@ +{ + "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"] + ], + "brand": { + "brand": "NEST", + "brandId": ["701011"], + "links": ["https://www.nest-biotech.com/cell-culture-plates/59415537.html"] + }, + "metadata": { + "displayName": "NEST 96 Well Plate 200 \u00b5L Flat", + "displayCategory": "wellPlate", + "displayVolumeUnits": "\u00b5L", + "tags": [] + }, + "dimensions": { + "xDimension": 127.56, + "yDimension": 85.36, + "zDimension": 14.3 + }, + "gripForce": 15, + "gripHeightFromLabwareBottom": 11.8, + "wells": { + "A1": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 14.28, + "y": 74.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 14.28, + "y": 65.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 14.28, + "y": 56.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 14.28, + "y": 47.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "E1": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 14.28, + "y": 38.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "F1": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 14.28, + "y": 29.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "G1": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 14.28, + "y": 20.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "H1": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 14.28, + "y": 11.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 23.28, + "y": 74.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 23.28, + "y": 65.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 23.28, + "y": 56.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 23.28, + "y": 47.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "E2": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 23.28, + "y": 38.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "F2": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 23.28, + "y": 29.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "G2": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 23.28, + "y": 20.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "H2": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 23.28, + "y": 11.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 32.28, + "y": 74.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 32.28, + "y": 65.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 32.28, + "y": 56.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 32.28, + "y": 47.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "E3": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 32.28, + "y": 38.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "F3": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 32.28, + "y": 29.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "G3": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 32.28, + "y": 20.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "H3": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 32.28, + "y": 11.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 41.28, + "y": 74.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 41.28, + "y": 65.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 41.28, + "y": 56.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 41.28, + "y": 47.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "E4": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 41.28, + "y": 38.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "F4": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 41.28, + "y": 29.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "G4": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 41.28, + "y": 20.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "H4": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 41.28, + "y": 11.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 50.28, + "y": 74.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 50.28, + "y": 65.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 50.28, + "y": 56.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 50.28, + "y": 47.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "E5": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 50.28, + "y": 38.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "F5": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 50.28, + "y": 29.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "G5": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 50.28, + "y": 20.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "H5": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 50.28, + "y": 11.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 59.28, + "y": 74.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 59.28, + "y": 65.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 59.28, + "y": 56.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 59.28, + "y": 47.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "E6": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 59.28, + "y": 38.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "F6": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 59.28, + "y": 29.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "G6": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 59.28, + "y": 20.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "H6": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 59.28, + "y": 11.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "A7": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 68.28, + "y": 74.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "B7": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 68.28, + "y": 65.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "C7": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 68.28, + "y": 56.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "D7": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 68.28, + "y": 47.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "E7": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 68.28, + "y": 38.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "F7": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 68.28, + "y": 29.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "G7": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 68.28, + "y": 20.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "H7": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 68.28, + "y": 11.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "A8": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 77.28, + "y": 74.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "B8": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 77.28, + "y": 65.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "C8": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 77.28, + "y": 56.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "D8": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 77.28, + "y": 47.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "E8": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 77.28, + "y": 38.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "F8": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 77.28, + "y": 29.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "G8": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 77.28, + "y": 20.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "H8": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 77.28, + "y": 11.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "A9": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 86.28, + "y": 74.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "B9": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 86.28, + "y": 65.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "C9": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 86.28, + "y": 56.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "D9": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 86.28, + "y": 47.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "E9": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 86.28, + "y": 38.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "F9": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 86.28, + "y": 29.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "G9": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 86.28, + "y": 20.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "H9": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 86.28, + "y": 11.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "A10": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 95.28, + "y": 74.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "B10": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 95.28, + "y": 65.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "C10": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 95.28, + "y": 56.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "D10": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 95.28, + "y": 47.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "E10": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 95.28, + "y": 38.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "F10": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 95.28, + "y": 29.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "G10": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 95.28, + "y": 20.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "H10": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 95.28, + "y": 11.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "A11": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 104.28, + "y": 74.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "B11": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 104.28, + "y": 65.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "C11": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 104.28, + "y": 56.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "D11": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 104.28, + "y": 47.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "E11": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 104.28, + "y": 38.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "F11": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 104.28, + "y": 29.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "G11": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 104.28, + "y": 20.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "H11": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 104.28, + "y": 11.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "A12": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 113.28, + "y": 74.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "B12": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 113.28, + "y": 65.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "C12": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 113.28, + "y": 56.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "D12": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 113.28, + "y": 47.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "E12": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 113.28, + "y": 38.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "F12": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 113.28, + "y": 29.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "G12": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 113.28, + "y": 20.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + }, + "H12": { + "depth": 10.8, + "shape": "circular", + "diameter": 6.85, + "totalLiquidVolume": 200, + "x": 113.28, + "y": 11.18, + "z": 3.5, + "geometryDefinitionId": "conicalWell" + } + }, + "groups": [ + { + "metadata": { + "wellBottomShape": "flat" + }, + "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" + ] + } + ], + "parameters": { + "format": "96Standard", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "nest_96_wellplate_200ul_flat" + }, + "namespace": "opentrons", + "version": 3, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "stackingOffsetWithLabware": { + "opentrons_96_flat_bottom_adapter": { + "x": 0, + "y": 0, + "z": 6.7 + }, + "opentrons_aluminum_flat_bottom_plate": { + "x": 0, + "y": 0, + "z": 5.55 + } + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "conical", + "bottomDiameter": 6.32, + "topDiameter": 6.85, + "topHeight": 10.8, + "bottomHeight": 0.0 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/nest_96_wellplate_2ml_deep/3.json b/shared-data/labware/definitions/3/nest_96_wellplate_2ml_deep/3.json new file mode 100644 index 00000000000..e3651b1934b --- /dev/null +++ b/shared-data/labware/definitions/3/nest_96_wellplate_2ml_deep/3.json @@ -0,0 +1,1262 @@ +{ + "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"] + ], + "brand": { + "brand": "NEST", + "brandId": ["503001", "503501"], + "links": ["https://www.nest-biotech.com/deep-well-plates/59253726.html"] + }, + "metadata": { + "displayName": "NEST 96 Deep Well Plate 2mL", + "displayCategory": "wellPlate", + "displayVolumeUnits": "\u00b5L", + "tags": [] + }, + "dimensions": { + "xDimension": 127.6, + "yDimension": 85.3, + "zDimension": 41 + }, + "gripForce": 15, + "gripHeightFromLabwareBottom": 21.9, + "wells": { + "A1": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 14.3, + "y": 74.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "B1": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 14.3, + "y": 65.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "C1": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 14.3, + "y": 56.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "D1": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 14.3, + "y": 47.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "E1": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 14.3, + "y": 38.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "F1": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 14.3, + "y": 29.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "G1": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 14.3, + "y": 20.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "H1": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 14.3, + "y": 11.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "A2": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 23.3, + "y": 74.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "B2": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 23.3, + "y": 65.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "C2": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 23.3, + "y": 56.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "D2": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 23.3, + "y": 47.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "E2": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 23.3, + "y": 38.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "F2": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 23.3, + "y": 29.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "G2": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 23.3, + "y": 20.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "H2": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 23.3, + "y": 11.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "A3": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 32.3, + "y": 74.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "B3": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 32.3, + "y": 65.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "C3": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 32.3, + "y": 56.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "D3": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 32.3, + "y": 47.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "E3": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 32.3, + "y": 38.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "F3": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 32.3, + "y": 29.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "G3": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 32.3, + "y": 20.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "H3": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 32.3, + "y": 11.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "A4": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 41.3, + "y": 74.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "B4": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 41.3, + "y": 65.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "C4": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 41.3, + "y": 56.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "D4": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 41.3, + "y": 47.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "E4": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 41.3, + "y": 38.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "F4": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 41.3, + "y": 29.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "G4": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 41.3, + "y": 20.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "H4": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 41.3, + "y": 11.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "A5": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 50.3, + "y": 74.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "B5": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 50.3, + "y": 65.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "C5": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 50.3, + "y": 56.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "D5": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 50.3, + "y": 47.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "E5": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 50.3, + "y": 38.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "F5": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 50.3, + "y": 29.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "G5": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 50.3, + "y": 20.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "H5": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 50.3, + "y": 11.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "A6": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 59.3, + "y": 74.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "B6": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 59.3, + "y": 65.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "C6": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 59.3, + "y": 56.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "D6": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 59.3, + "y": 47.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "E6": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 59.3, + "y": 38.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "F6": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 59.3, + "y": 29.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "G6": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 59.3, + "y": 20.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "H6": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 59.3, + "y": 11.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "A7": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 68.3, + "y": 74.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "B7": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 68.3, + "y": 65.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "C7": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 68.3, + "y": 56.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "D7": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 68.3, + "y": 47.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "E7": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 68.3, + "y": 38.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "F7": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 68.3, + "y": 29.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "G7": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 68.3, + "y": 20.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "H7": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 68.3, + "y": 11.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "A8": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 77.3, + "y": 74.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "B8": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 77.3, + "y": 65.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "C8": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 77.3, + "y": 56.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "D8": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 77.3, + "y": 47.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "E8": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 77.3, + "y": 38.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "F8": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 77.3, + "y": 29.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "G8": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 77.3, + "y": 20.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "H8": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 77.3, + "y": 11.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "A9": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 86.3, + "y": 74.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "B9": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 86.3, + "y": 65.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "C9": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 86.3, + "y": 56.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "D9": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 86.3, + "y": 47.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "E9": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 86.3, + "y": 38.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "F9": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 86.3, + "y": 29.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "G9": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 86.3, + "y": 20.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "H9": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 86.3, + "y": 11.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "A10": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 95.3, + "y": 74.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "B10": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 95.3, + "y": 65.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "C10": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 95.3, + "y": 56.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "D10": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 95.3, + "y": 47.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "E10": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 95.3, + "y": 38.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "F10": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 95.3, + "y": 29.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "G10": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 95.3, + "y": 20.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "H10": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 95.3, + "y": 11.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "A11": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 104.3, + "y": 74.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "B11": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 104.3, + "y": 65.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "C11": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 104.3, + "y": 56.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "D11": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 104.3, + "y": 47.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "E11": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 104.3, + "y": 38.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "F11": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 104.3, + "y": 29.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "G11": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 104.3, + "y": 20.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "H11": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 104.3, + "y": 11.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "A12": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 113.3, + "y": 74.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "B12": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 113.3, + "y": 65.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "C12": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 113.3, + "y": 56.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "D12": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 113.3, + "y": 47.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "E12": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 113.3, + "y": 38.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "F12": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 113.3, + "y": 29.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "G12": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 113.3, + "y": 20.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + }, + "H12": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 113.3, + "y": 11.15, + "z": 3, + "geometryDefinitionId": "cuboidalWell" + } + }, + "groups": [ + { + "metadata": { + "displayName": "NEST 96 Deep Well Plate 2mL", + "displayCategory": "wellPlate", + "wellBottomShape": "v" + }, + "brand": { + "brand": "NEST", + "brandId": [] + }, + "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" + ] + } + ], + "parameters": { + "format": "96Standard", + "quirks": [], + "isTiprack": false, + "isMagneticModuleCompatible": true, + "loadName": "nest_96_wellplate_2ml_deep", + "magneticModuleEngageHeight": 6.8 + }, + "namespace": "opentrons", + "version": 3, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "stackingOffsetWithLabware": { + "opentrons_96_deep_well_adapter": { + "x": 0, + "y": 0, + "z": 16.3 + }, + "opentrons_96_deep_well_temp_mod_adapter": { + "x": 0, + "y": 0, + "z": 16.1 + } + }, + "stackingOffsetWithModule": { + "magneticBlockV1": { + "x": 0, + "y": 0, + "z": 2.66 + } + }, + "innerLabwareGeometry": { + "cuboidalWell": { + "sections": [ + { + "shape": "cuboidal", + "topXDimension": 7.4, + "topYDimension": 7.4, + "bottomXDimension": 2.63, + "bottomYDimension": 2.63, + "topHeight": 1.67, + "bottomHeight": 0.0 + }, + { + "shape": "cuboidal", + "topXDimension": 8.2, + "topYDimension": 8.2, + "bottomXDimension": 7.4, + "bottomYDimension": 7.4, + "topHeight": 38.05, + "bottomHeight": 1.67 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/2.json b/shared-data/labware/definitions/3/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/2.json new file mode 100644 index 00000000000..c8841946eab --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/2.json @@ -0,0 +1,232 @@ +{ + "ordering": [ + ["A1", "B1", "C1"], + ["A2", "B2", "C2"], + ["A3", "B3"], + ["A4", "B4"] + ], + "schemaVersion": 3, + "version": 2, + "namespace": "opentrons", + "metadata": { + "displayName": "Opentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical", + "displayCategory": "tubeRack", + "displayVolumeUnits": "mL", + "tags": [] + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 124.35 + }, + "parameters": { + "format": "irregular", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical" + }, + "wells": { + "A1": { + "totalLiquidVolume": 15000, + "diameter": 14.9, + "shape": "circular", + "depth": 117.5, + "x": 13.88, + "y": 67.75, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "totalLiquidVolume": 15000, + "diameter": 14.9, + "shape": "circular", + "depth": 117.5, + "x": 13.88, + "y": 42.75, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "totalLiquidVolume": 15000, + "diameter": 14.9, + "shape": "circular", + "depth": 117.5, + "x": 13.88, + "y": 17.75, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "totalLiquidVolume": 15000, + "diameter": 14.9, + "shape": "circular", + "depth": 117.5, + "x": 38.88, + "y": 67.75, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "totalLiquidVolume": 15000, + "diameter": 14.9, + "shape": "circular", + "depth": 117.5, + "x": 38.88, + "y": 42.75, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "totalLiquidVolume": 15000, + "diameter": 14.9, + "shape": "circular", + "depth": 117.5, + "x": 38.88, + "y": 17.75, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "totalLiquidVolume": 50000, + "diameter": 27.81, + "shape": "circular", + "depth": 113, + "x": 71.38, + "y": 60.25, + "z": 7.3, + "geometryDefinitionId": "b" + }, + "B3": { + "totalLiquidVolume": 50000, + "diameter": 27.81, + "shape": "circular", + "depth": 113, + "x": 71.38, + "y": 25.25, + "z": 7.3, + "geometryDefinitionId": "b" + }, + "A4": { + "totalLiquidVolume": 50000, + "diameter": 27.81, + "shape": "circular", + "depth": 113, + "x": 106.38, + "y": 60.25, + "z": 7.3, + "geometryDefinitionId": "b" + }, + "B4": { + "totalLiquidVolume": 50000, + "diameter": 27.81, + "shape": "circular", + "depth": 113, + "x": 106.38, + "y": 25.25, + "z": 7.3, + "geometryDefinitionId": "b" + } + }, + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "groups": [ + { + "wells": ["A1", "B1", "C1", "A2", "B2", "C2"], + "metadata": { + "displayName": "Falcon 6x15 mL Conical", + "displayCategory": "tubeRack", + "wellBottomShape": "v" + }, + "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" + ] + } + }, + { + "wells": ["A3", "B3", "A4", "B4"], + "metadata": { + "displayName": "Falcon 4x50 mL Conical", + "displayCategory": "tubeRack", + "wellBottomShape": "v" + }, + "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" + ] + } + } + ], + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 2.9, + "topHeight": 0.8, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "bottomDiameter": 4, + "topDiameter": 13.5, + "topHeight": 20.7, + "bottomHeight": 0.8 + }, + { + "shape": "conical", + "bottomDiameter": 13.5, + "topDiameter": 14.5, + "topHeight": 108.6, + "bottomHeight": 20.7 + }, + { + "shape": "conical", + "bottomDiameter": 14.5, + "topDiameter": 14.7, + "topHeight": 118.2, + "bottomHeight": 108.6 + } + ] + }, + "b": { + "sections": [ + { + "shape": "conical", + "bottomDiameter": 6.15, + "topDiameter": 26.18, + "topHeight": 14.3, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "bottomDiameter": 26.18, + "topDiameter": 27.52, + "topHeight": 100.65, + "bottomHeight": 14.3 + }, + { + "shape": "conical", + "bottomDiameter": 27.52, + "topDiameter": 27.81, + "topHeight": 112.85, + "bottomHeight": 100.65 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic/2.json b/shared-data/labware/definitions/3/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic/2.json new file mode 100644 index 00000000000..4a57b660efe --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic/2.json @@ -0,0 +1,177 @@ +{ + "wells": { + "A1": { + "totalLiquidVolume": 15000, + "diameter": 14.9, + "shape": "circular", + "depth": 117.98, + "x": 19, + "y": 74, + "z": 5.78, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "totalLiquidVolume": 15000, + "diameter": 14.9, + "shape": "circular", + "depth": 117.98, + "x": 19, + "y": 42.5, + "z": 5.78, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "totalLiquidVolume": 15000, + "diameter": 14.9, + "shape": "circular", + "depth": 117.98, + "x": 19, + "y": 11, + "z": 5.78, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "totalLiquidVolume": 15000, + "diameter": 14.9, + "shape": "circular", + "depth": 117.98, + "x": 42, + "y": 74, + "z": 5.78, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "totalLiquidVolume": 15000, + "diameter": 14.9, + "shape": "circular", + "depth": 117.98, + "x": 42, + "y": 42.5, + "z": 5.78, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "totalLiquidVolume": 15000, + "diameter": 14.9, + "shape": "circular", + "depth": 117.98, + "x": 42, + "y": 11, + "z": 5.78, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "totalLiquidVolume": 50000, + "diameter": 27.81, + "shape": "circular", + "depth": 113.85, + "x": 70.2, + "y": 62.2, + "z": 5.95, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "totalLiquidVolume": 50000, + "diameter": 27.81, + "shape": "circular", + "depth": 113.85, + "x": 70.2, + "y": 16.8, + "z": 5.95, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "totalLiquidVolume": 50000, + "diameter": 27.81, + "shape": "circular", + "depth": 113.85, + "x": 106.1, + "y": 62.2, + "z": 5.95, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "totalLiquidVolume": 50000, + "diameter": 27.81, + "shape": "circular", + "depth": 113.85, + "x": 106.1, + "y": 16.8, + "z": 5.95, + "geometryDefinitionId": "conicalWell" + } + }, + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [] + }, + "metadata": { + "displayName": "Opentrons 10 Tube Rack (Acrylic) with Falcon 4x50 mL, 6x15 mL Conical", + "displayCategory": "tubeRack", + "displayVolumeUnits": "mL", + "tags": [] + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 123.76 + }, + "parameters": { + "format": "irregular", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic" + }, + "ordering": [ + ["A1", "B1", "C1"], + ["A2", "B2", "C2"], + ["A3", "B3"], + ["A4", "B4"] + ], + "groups": [ + { + "wells": ["A3", "B3", "A4", "B4"], + "metadata": { + "displayName": "Falcon 4x50 mL Conical", + "displayCategory": "tubeRack", + "wellBottomShape": "v" + }, + "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" + ] + } + }, + { + "wells": ["A1", "B1", "C1", "A2", "B2", "C2"], + "metadata": { + "displayName": "Falcon 6x15 mL Conical", + "displayCategory": "tubeRack", + "wellBottomShape": "v" + }, + "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" + ] + } + } + ], + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_10_tuberack_nest_4x50ml_6x15ml_conical/2.json b/shared-data/labware/definitions/3/opentrons_10_tuberack_nest_4x50ml_6x15ml_conical/2.json new file mode 100644 index 00000000000..417e3e893de --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_10_tuberack_nest_4x50ml_6x15ml_conical/2.json @@ -0,0 +1,222 @@ +{ + "wells": { + "A1": { + "totalLiquidVolume": 15000, + "diameter": 15.5, + "shape": "circular", + "depth": 117.8, + "x": 13.88, + "y": 67.75, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "totalLiquidVolume": 15000, + "diameter": 15.5, + "shape": "circular", + "depth": 117.8, + "x": 13.88, + "y": 42.75, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "totalLiquidVolume": 15000, + "diameter": 15.5, + "shape": "circular", + "depth": 117.8, + "x": 13.88, + "y": 17.75, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "totalLiquidVolume": 15000, + "diameter": 15.5, + "shape": "circular", + "depth": 117.8, + "x": 38.88, + "y": 67.75, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "totalLiquidVolume": 15000, + "diameter": 15.5, + "shape": "circular", + "depth": 117.8, + "x": 38.88, + "y": 42.75, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "totalLiquidVolume": 15000, + "diameter": 15.5, + "shape": "circular", + "depth": 117.8, + "x": 38.88, + "y": 17.75, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "totalLiquidVolume": 50000, + "diameter": 27.95, + "shape": "circular", + "depth": 113.05, + "x": 71.38, + "y": 60.25, + "z": 7.3, + "geometryDefinitionId": "b" + }, + "B3": { + "totalLiquidVolume": 50000, + "diameter": 27.95, + "shape": "circular", + "depth": 113.05, + "x": 71.38, + "y": 25.25, + "z": 7.3, + "geometryDefinitionId": "b" + }, + "A4": { + "totalLiquidVolume": 50000, + "diameter": 27.95, + "shape": "circular", + "depth": 113.05, + "x": 106.38, + "y": 60.25, + "z": 7.3, + "geometryDefinitionId": "b" + }, + "B4": { + "totalLiquidVolume": 50000, + "diameter": 27.95, + "shape": "circular", + "depth": 113.05, + "x": 106.38, + "y": 25.25, + "z": 7.3, + "geometryDefinitionId": "b" + } + }, + "groups": [ + { + "metadata": { + "displayName": "NEST 6x15 mL Conical", + "displayCategory": "tubeRack", + "wellBottomShape": "v" + }, + "brand": { + "brand": "NEST", + "brandId": ["601052"], + "links": ["https://www.nest-biotech.com/centrifuge-tube/59282849.html"] + }, + "wells": ["A1", "B1", "C1", "A2", "B2", "C2"] + }, + { + "metadata": { + "displayName": "NEST 4x50 mL Conical", + "displayCategory": "tubeRack", + "wellBottomShape": "v" + }, + "brand": { + "brand": "NEST", + "brandId": ["602052"], + "links": ["https://www.nest-biotech.com/centrifuge-tube/59282837.html"] + }, + "wells": ["A3", "B3", "A4", "B4"] + } + ], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "metadata": { + "displayName": "Opentrons 10 Tube Rack with NEST 4x50 mL, 6x15 mL Conical", + "displayCategory": "tubeRack", + "displayVolumeUnits": "mL", + "tags": [] + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 124.65 + }, + "parameters": { + "format": "irregular", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_10_tuberack_nest_4x50ml_6x15ml_conical" + }, + "ordering": [ + ["A1", "B1", "C1"], + ["A2", "B2", "C2"], + ["A3", "B3"], + ["A4", "B4"] + ], + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "conical", + "topDiameter": 13.8, + "bottomDiameter": 2.5, + "topHeight": 22.55, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "topDiameter": 14.78, + "bottomDiameter": 13.8, + "topHeight": 109.03, + "bottomHeight": 22.55 + }, + { + "shape": "conical", + "topDiameter": 15.5, + "bottomDiameter": 14.78, + "topHeight": 117.8, + "bottomHeight": 109.03 + } + ] + }, + "b": { + "sections": [ + { + "shape": "conical", + "topDiameter": 26.0, + "bottomDiameter": 6.0, + "topHeight": 14.28, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "topDiameter": 27.0, + "bottomDiameter": 26.0, + "topHeight": 109.0, + "bottomHeight": 14.28 + }, + { + "shape": "conical", + "topDiameter": 27.45, + "bottomDiameter": 27.0, + "topHeight": 113.3, + "bottomHeight": 109.0 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_15_tuberack_falcon_15ml_conical/2.json b/shared-data/labware/definitions/3/opentrons_15_tuberack_falcon_15ml_conical/2.json new file mode 100644 index 00000000000..f0ffc91ba63 --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_15_tuberack_falcon_15ml_conical/2.json @@ -0,0 +1,259 @@ +{ + "ordering": [ + ["A1", "B1", "C1"], + ["A2", "B2", "C2"], + ["A3", "B3", "C3"], + ["A4", "B4", "C4"], + ["A5", "B5", "C5"] + ], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "metadata": { + "tags": [], + "displayName": "Opentrons 15 Tube Rack with Falcon 15 mL Conical", + "displayCategory": "tubeRack", + "displayVolumeUnits": "mL" + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 124.35 + }, + "schemaVersion": 3, + "version": 2, + "namespace": "opentrons", + "wells": { + "C1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 17.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 42.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "A1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 67.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 17.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 42.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 67.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 63.88, + "y": 17.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 63.88, + "y": 42.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 63.88, + "y": 67.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 88.88, + "y": 17.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 88.88, + "y": 42.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 88.88, + "y": 67.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 113.88, + "y": 17.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 113.88, + "y": 42.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 113.88, + "y": 67.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + } + }, + "parameters": { + "format": "irregular", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_15_tuberack_falcon_15ml_conical" + }, + "groups": [ + { + "wells": [ + "A1", + "B1", + "C1", + "A2", + "B2", + "C2", + "A3", + "B3", + "C3", + "A4", + "B4", + "C4", + "A5", + "B5", + "C5" + ], + "metadata": { + "displayName": "Falcon 6x15 mL Conical", + "displayCategory": "tubeRack", + "wellBottomShape": "v" + }, + "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" + ] + } + } + ], + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 2.9, + "topHeight": 0.8, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "bottomDiameter": 4, + "topDiameter": 13.5, + "topHeight": 20.7, + "bottomHeight": 0.8 + }, + { + "shape": "conical", + "bottomDiameter": 13.5, + "topDiameter": 14.5, + "topHeight": 108.6, + "bottomHeight": 20.7 + }, + { + "shape": "conical", + "bottomDiameter": 14.5, + "topDiameter": 14.7, + "topHeight": 118.2, + "bottomHeight": 108.6 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_15_tuberack_nest_15ml_conical/2.json b/shared-data/labware/definitions/3/opentrons_15_tuberack_nest_15ml_conical/2.json new file mode 100644 index 00000000000..9fa2aa1b613 --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_15_tuberack_nest_15ml_conical/2.json @@ -0,0 +1,251 @@ +{ + "ordering": [ + ["A1", "B1", "C1"], + ["A2", "B2", "C2"], + ["A3", "B3", "C3"], + ["A4", "B4", "C4"], + ["A5", "B5", "C5"] + ], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "metadata": { + "displayName": "Opentrons 15 Tube Rack with NEST 15 mL Conical", + "displayCategory": "tubeRack", + "displayVolumeUnits": "mL", + "tags": [] + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 124.65 + }, + "wells": { + "A1": { + "depth": 117.8, + "shape": "circular", + "diameter": 15.5, + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 67.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 117.8, + "shape": "circular", + "diameter": 15.5, + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 42.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 117.8, + "shape": "circular", + "diameter": 15.5, + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 17.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 117.8, + "shape": "circular", + "diameter": 15.5, + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 67.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 117.8, + "shape": "circular", + "diameter": 15.5, + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 42.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 117.8, + "shape": "circular", + "diameter": 15.5, + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 17.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 117.8, + "shape": "circular", + "diameter": 15.5, + "totalLiquidVolume": 15000, + "x": 63.88, + "y": 67.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 117.8, + "shape": "circular", + "diameter": 15.5, + "totalLiquidVolume": 15000, + "x": 63.88, + "y": 42.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 117.8, + "shape": "circular", + "diameter": 15.5, + "totalLiquidVolume": 15000, + "x": 63.88, + "y": 17.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 117.8, + "shape": "circular", + "diameter": 15.5, + "totalLiquidVolume": 15000, + "x": 88.88, + "y": 67.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 117.8, + "shape": "circular", + "diameter": 15.5, + "totalLiquidVolume": 15000, + "x": 88.88, + "y": 42.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 117.8, + "shape": "circular", + "diameter": 15.5, + "totalLiquidVolume": 15000, + "x": 88.88, + "y": 17.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 117.8, + "shape": "circular", + "diameter": 15.5, + "totalLiquidVolume": 15000, + "x": 113.88, + "y": 67.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 117.8, + "shape": "circular", + "diameter": 15.5, + "totalLiquidVolume": 15000, + "x": 113.88, + "y": 42.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 117.8, + "shape": "circular", + "diameter": 15.5, + "totalLiquidVolume": 15000, + "x": 113.88, + "y": 17.74, + "z": 6.85, + "geometryDefinitionId": "conicalWell" + } + }, + "groups": [ + { + "metadata": { + "displayName": "NEST 15x15 mL Conical", + "displayCategory": "tubeRack", + "wellBottomShape": "v" + }, + "brand": { + "brand": "NEST", + "brandId": ["601052"], + "links": ["https://www.nest-biotech.com/centrifuge-tube/59282849.html"] + }, + "wells": [ + "A1", + "B1", + "C1", + "A2", + "B2", + "C2", + "A3", + "B3", + "C3", + "A4", + "B4", + "C4", + "A5", + "B5", + "C5" + ] + } + ], + "parameters": { + "format": "irregular", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_15_tuberack_nest_15ml_conical" + }, + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "conical", + "topDiameter": 13.8, + "bottomDiameter": 2.5, + "topHeight": 22.55, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "topDiameter": 14.78, + "bottomDiameter": 13.8, + "topHeight": 109.03, + "bottomHeight": 22.55 + }, + { + "shape": "conical", + "topDiameter": 15.5, + "bottomDiameter": 14.78, + "topHeight": 117.8, + "bottomHeight": 109.03 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_24_aluminumblock_generic_2ml_screwcap/3.json b/shared-data/labware/definitions/3/opentrons_24_aluminumblock_generic_2ml_screwcap/3.json new file mode 100644 index 00000000000..4201109b0fc --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_24_aluminumblock_generic_2ml_screwcap/3.json @@ -0,0 +1,330 @@ +{ + "ordering": [ + ["A1", "B1", "C1", "D1"], + ["A2", "B2", "C2", "D2"], + ["A3", "B3", "C3", "D3"], + ["A4", "B4", "C4", "D4"], + ["A5", "B5", "C5", "D5"], + ["A6", "B6", "C6", "D6"] + ], + "schemaVersion": 3, + "version": 3, + "namespace": "opentrons", + "metadata": { + "displayName": "Opentrons 24 Well Aluminum Block with Generic 2 mL Screwcap", + "displayVolumeUnits": "mL", + "displayCategory": "aluminumBlock", + "tags": [] + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 48.7 + }, + "parameters": { + "format": "irregular", + "quirks": ["gripperIncompatible"], + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_24_aluminumblock_generic_2ml_screwcap" + }, + "wells": { + "D1": { + "shape": "circular", + "depth": 42, + "diameter": 8.5, + "totalLiquidVolume": 2000, + "x": 20.75, + "y": 16.88, + "z": 6.7, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "shape": "circular", + "depth": 42, + "diameter": 8.5, + "totalLiquidVolume": 2000, + "x": 20.75, + "y": 34.13, + "z": 6.7, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "shape": "circular", + "depth": 42, + "diameter": 8.5, + "totalLiquidVolume": 2000, + "x": 20.75, + "y": 51.38, + "z": 6.7, + "geometryDefinitionId": "conicalWell" + }, + "A1": { + "shape": "circular", + "depth": 42, + "diameter": 8.5, + "totalLiquidVolume": 2000, + "x": 20.75, + "y": 68.63, + "z": 6.7, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "shape": "circular", + "depth": 42, + "diameter": 8.5, + "totalLiquidVolume": 2000, + "x": 38, + "y": 16.88, + "z": 6.7, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "shape": "circular", + "depth": 42, + "diameter": 8.5, + "totalLiquidVolume": 2000, + "x": 38, + "y": 34.13, + "z": 6.7, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "shape": "circular", + "depth": 42, + "diameter": 8.5, + "totalLiquidVolume": 2000, + "x": 38, + "y": 51.38, + "z": 6.7, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "shape": "circular", + "depth": 42, + "diameter": 8.5, + "totalLiquidVolume": 2000, + "x": 38, + "y": 68.63, + "z": 6.7, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "shape": "circular", + "depth": 42, + "diameter": 8.5, + "totalLiquidVolume": 2000, + "x": 55.25, + "y": 16.88, + "z": 6.7, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "shape": "circular", + "depth": 42, + "diameter": 8.5, + "totalLiquidVolume": 2000, + "x": 55.25, + "y": 34.13, + "z": 6.7, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "shape": "circular", + "depth": 42, + "diameter": 8.5, + "totalLiquidVolume": 2000, + "x": 55.25, + "y": 51.38, + "z": 6.7, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "shape": "circular", + "depth": 42, + "diameter": 8.5, + "totalLiquidVolume": 2000, + "x": 55.25, + "y": 68.63, + "z": 6.7, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "shape": "circular", + "depth": 42, + "diameter": 8.5, + "totalLiquidVolume": 2000, + "x": 72.5, + "y": 16.88, + "z": 6.7, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "shape": "circular", + "depth": 42, + "diameter": 8.5, + "totalLiquidVolume": 2000, + "x": 72.5, + "y": 34.13, + "z": 6.7, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "shape": "circular", + "depth": 42, + "diameter": 8.5, + "totalLiquidVolume": 2000, + "x": 72.5, + "y": 51.38, + "z": 6.7, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "shape": "circular", + "depth": 42, + "diameter": 8.5, + "totalLiquidVolume": 2000, + "x": 72.5, + "y": 68.63, + "z": 6.7, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "shape": "circular", + "depth": 42, + "diameter": 8.5, + "totalLiquidVolume": 2000, + "x": 89.75, + "y": 16.88, + "z": 6.7, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "shape": "circular", + "depth": 42, + "diameter": 8.5, + "totalLiquidVolume": 2000, + "x": 89.75, + "y": 34.13, + "z": 6.7, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "shape": "circular", + "depth": 42, + "diameter": 8.5, + "totalLiquidVolume": 2000, + "x": 89.75, + "y": 51.38, + "z": 6.7, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "shape": "circular", + "depth": 42, + "diameter": 8.5, + "totalLiquidVolume": 2000, + "x": 89.75, + "y": 68.63, + "z": 6.7, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "shape": "circular", + "depth": 42, + "diameter": 8.5, + "totalLiquidVolume": 2000, + "x": 107, + "y": 16.88, + "z": 6.7, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "shape": "circular", + "depth": 42, + "diameter": 8.5, + "totalLiquidVolume": 2000, + "x": 107, + "y": 34.13, + "z": 6.7, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "shape": "circular", + "depth": 42, + "diameter": 8.5, + "totalLiquidVolume": 2000, + "x": 107, + "y": 51.38, + "z": 6.7, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "shape": "circular", + "depth": 42, + "diameter": 8.5, + "totalLiquidVolume": 2000, + "x": 107, + "y": 68.63, + "z": 6.7, + "geometryDefinitionId": "conicalWell" + } + }, + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/hardware-modules/products/aluminum-block-set" + ] + }, + "groups": [ + { + "wells": [ + "A1", + "B1", + "C1", + "D1", + "A2", + "B2", + "C2", + "D2", + "A3", + "B3", + "C3", + "D3", + "A4", + "B4", + "C4", + "D4", + "A5", + "B5", + "C5", + "D5", + "A6", + "B6", + "C6", + "D6" + ], + "metadata": { + "displayName": "Generic 2 mL Screwcap", + "displayCategory": "tubeRack", + "wellBottomShape": "v" + }, + "brand": { + "brand": "generic", + "brandId": [], + "links": [] + } + } + ], + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_24_aluminumblock_nest_0.5ml_screwcap/2.json b/shared-data/labware/definitions/3/opentrons_24_aluminumblock_nest_0.5ml_screwcap/2.json new file mode 100644 index 00000000000..d57d4e7942f --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_24_aluminumblock_nest_0.5ml_screwcap/2.json @@ -0,0 +1,370 @@ +{ + "ordering": [ + ["A1", "B1", "C1", "D1"], + ["A2", "B2", "C2", "D2"], + ["A3", "B3", "C3", "D3"], + ["A4", "B4", "C4", "D4"], + ["A5", "B5", "C5", "D5"], + ["A6", "B6", "C6", "D6"] + ], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": ["https://shop.opentrons.com/aluminum-block-set/"] + }, + "metadata": { + "displayName": "Opentrons 24 Well Aluminum Block with NEST 0.5 mL Screwcap", + "displayCategory": "aluminumBlock", + "displayVolumeUnits": "mL", + "tags": [] + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 49.35 + }, + "wells": { + "A1": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 20.75, + "y": 68.62, + "z": 24.15, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 20.75, + "y": 51.37, + "z": 24.15, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 20.75, + "y": 34.12, + "z": 24.15, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 20.75, + "y": 16.87, + "z": 24.15, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 38, + "y": 68.62, + "z": 24.15, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 38, + "y": 51.37, + "z": 24.15, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 38, + "y": 34.12, + "z": 24.15, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 38, + "y": 16.87, + "z": 24.15, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 55.25, + "y": 68.62, + "z": 24.15, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 55.25, + "y": 51.37, + "z": 24.15, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 55.25, + "y": 34.12, + "z": 24.15, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 55.25, + "y": 16.87, + "z": 24.15, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 72.5, + "y": 68.62, + "z": 24.15, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 72.5, + "y": 51.37, + "z": 24.15, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 72.5, + "y": 34.12, + "z": 24.15, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 72.5, + "y": 16.87, + "z": 24.15, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 89.75, + "y": 68.62, + "z": 24.15, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 89.75, + "y": 51.37, + "z": 24.15, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 89.75, + "y": 34.12, + "z": 24.15, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 89.75, + "y": 16.87, + "z": 24.15, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 107, + "y": 68.62, + "z": 24.15, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 107, + "y": 51.37, + "z": 24.15, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 107, + "y": 34.12, + "z": 24.15, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 107, + "y": 16.87, + "z": 24.15, + "geometryDefinitionId": "conicalWell" + } + }, + "groups": [ + { + "metadata": { + "displayName": "NEST 24x0.5 mL Screwcap", + "displayCategory": "tubeRack", + "wellBottomShape": "v" + }, + "brand": { + "brand": "NEST", + "brandId": ["633001"], + "links": ["https://www.nest-biotech.com/sample-vials/59810336.html"] + }, + "wells": [ + "A1", + "B1", + "C1", + "D1", + "A2", + "B2", + "C2", + "D2", + "A3", + "B3", + "C3", + "D3", + "A4", + "B4", + "C4", + "D4", + "A5", + "B5", + "C5", + "D5", + "A6", + "B6", + "C6", + "D6" + ] + } + ], + "parameters": { + "format": "irregular", + "quirks": ["gripperIncompatible"], + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_24_aluminumblock_nest_0.5ml_screwcap" + }, + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 3.64, + "topHeight": 0.14, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "bottomDiameter": 2, + "topDiameter": 3, + "topHeight": 0.95, + "bottomHeight": 0.14 + }, + { + "shape": "conical", + "bottomDiameter": 3, + "topDiameter": 5.8, + "topHeight": 10.2, + "bottomHeight": 0.95 + }, + { + "shape": "conical", + "bottomDiameter": 5.8, + "topDiameter": 7.9, + "topHeight": 11.9, + "bottomHeight": 10.2 + }, + { + "shape": "conical", + "bottomDiameter": 7.9, + "topDiameter": 8.56, + "topHeight": 13.95, + "bottomHeight": 11.9 + }, + { + "shape": "conical", + "bottomDiameter": 8.56, + "topDiameter": 8.56, + "topHeight": 25.2, + "bottomHeight": 13.95 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_24_aluminumblock_nest_1.5ml_screwcap/2.json b/shared-data/labware/definitions/3/opentrons_24_aluminumblock_nest_1.5ml_screwcap/2.json new file mode 100644 index 00000000000..0e1d1eaaab3 --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_24_aluminumblock_nest_1.5ml_screwcap/2.json @@ -0,0 +1,356 @@ +{ + "ordering": [ + ["A1", "B1", "C1", "D1"], + ["A2", "B2", "C2", "D2"], + ["A3", "B3", "C3", "D3"], + ["A4", "B4", "C4", "D4"], + ["A5", "B5", "C5", "D5"], + ["A6", "B6", "C6", "D6"] + ], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": ["https://shop.opentrons.com/aluminum-block-set/"] + }, + "metadata": { + "displayName": "Opentrons 24 Well Aluminum Block with NEST 1.5 mL Screwcap", + "displayCategory": "aluminumBlock", + "displayVolumeUnits": "mL", + "tags": [] + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 49.35 + }, + "wells": { + "A1": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 20.75, + "y": 68.62, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 20.75, + "y": 51.37, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 20.75, + "y": 34.12, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 20.75, + "y": 16.87, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 38, + "y": 68.62, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 38, + "y": 51.37, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 38, + "y": 34.12, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 38, + "y": 16.87, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 55.25, + "y": 68.62, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 55.25, + "y": 51.37, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 55.25, + "y": 34.12, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 55.25, + "y": 16.87, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 72.5, + "y": 68.62, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 72.5, + "y": 51.37, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 72.5, + "y": 34.12, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 72.5, + "y": 16.87, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 89.75, + "y": 68.62, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 89.75, + "y": 51.37, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 89.75, + "y": 34.12, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 89.75, + "y": 16.87, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 107, + "y": 68.62, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 107, + "y": 51.37, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 107, + "y": 34.12, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 107, + "y": 16.87, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + } + }, + "groups": [ + { + "metadata": { + "displayName": "NEST 24x1.5 mL Screwcap", + "displayCategory": "tubeRack", + "wellBottomShape": "v" + }, + "brand": { + "brand": "NEST", + "brandId": ["634001"], + "links": ["https://www.nest-biotech.com/sample-vials/59299027.html"] + }, + "wells": [ + "A1", + "B1", + "C1", + "D1", + "A2", + "B2", + "C2", + "D2", + "A3", + "B3", + "C3", + "D3", + "A4", + "B4", + "C4", + "D4", + "A5", + "B5", + "C5", + "D5", + "A6", + "B6", + "C6", + "D6" + ] + } + ], + "parameters": { + "format": "irregular", + "quirks": ["gripperIncompatible"], + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_24_aluminumblock_nest_1.5ml_screwcap" + }, + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 2.36, + "topHeight": 0.2, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "topDiameter": 3.2, + "bottomDiameter": 1.9, + "topHeight": 1.88, + "bottomHeight": 0.2 + }, + { + "shape": "conical", + "topDiameter": 8.2, + "bottomDiameter": 3.2, + "topHeight": 13.7, + "bottomHeight": 1.88 + }, + { + "shape": "conical", + "topDiameter": 8.55, + "bottomDiameter": 8.2, + "topHeight": 42.6, + "bottomHeight": 13.7 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_24_aluminumblock_nest_1.5ml_snapcap/2.json b/shared-data/labware/definitions/3/opentrons_24_aluminumblock_nest_1.5ml_snapcap/2.json new file mode 100644 index 00000000000..51084d8df70 --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_24_aluminumblock_nest_1.5ml_snapcap/2.json @@ -0,0 +1,351 @@ +{ + "ordering": [ + ["A1", "B1", "C1", "D1"], + ["A2", "B2", "C2", "D2"], + ["A3", "B3", "C3", "D3"], + ["A4", "B4", "C4", "D4"], + ["A5", "B5", "C5", "D5"], + ["A6", "B6", "C6", "D6"] + ], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": ["https://shop.opentrons.com/aluminum-block-set/"] + }, + "metadata": { + "displayName": "Opentrons 24 Well Aluminum Block with NEST 1.5 mL Snapcap", + "displayCategory": "aluminumBlock", + "displayVolumeUnits": "mL", + "tags": [] + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 43.7 + }, + "wells": { + "A1": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 20.75, + "y": 68.62, + "z": 5.8, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 20.75, + "y": 51.37, + "z": 5.8, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 20.75, + "y": 34.12, + "z": 5.8, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 20.75, + "y": 16.87, + "z": 5.8, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 38, + "y": 68.62, + "z": 5.8, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 38, + "y": 51.37, + "z": 5.8, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 38, + "y": 34.12, + "z": 5.8, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 38, + "y": 16.87, + "z": 5.8, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 55.25, + "y": 68.62, + "z": 5.8, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 55.25, + "y": 51.37, + "z": 5.8, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 55.25, + "y": 34.12, + "z": 5.8, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 55.25, + "y": 16.87, + "z": 5.8, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 72.5, + "y": 68.62, + "z": 5.8, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 72.5, + "y": 51.37, + "z": 5.8, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 72.5, + "y": 34.12, + "z": 5.8, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 72.5, + "y": 16.87, + "z": 5.8, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 89.75, + "y": 68.62, + "z": 5.8, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 89.75, + "y": 51.37, + "z": 5.8, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 89.75, + "y": 34.12, + "z": 5.8, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 89.75, + "y": 16.87, + "z": 5.8, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 107, + "y": 68.62, + "z": 5.8, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 107, + "y": 51.37, + "z": 5.8, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 107, + "y": 34.12, + "z": 5.8, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 107, + "y": 16.87, + "z": 5.8, + "geometryDefinitionId": "conicalWell" + } + }, + "groups": [ + { + "metadata": { + "displayName": "NEST 24x1.5 mL Snapcap", + "displayCategory": "tubeRack", + "wellBottomShape": "v" + }, + "brand": { + "brand": "NEST", + "brandId": ["615601", "615001"], + "links": [ + "https://www.nest-biotech.com/micro-centrifuge-tube/59201044.html" + ] + }, + "wells": [ + "A1", + "B1", + "C1", + "D1", + "A2", + "B2", + "C2", + "D2", + "A3", + "B3", + "C3", + "D3", + "A4", + "B4", + "C4", + "D4", + "A5", + "B5", + "C5", + "D5", + "A6", + "B6", + "C6", + "D6" + ] + } + ], + "parameters": { + "format": "irregular", + "quirks": ["gripperIncompatible"], + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_24_aluminumblock_nest_1.5ml_snapcap" + }, + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 2.72, + "topHeight": 1.57, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "topDiameter": 8.9, + "bottomDiameter": 3.69, + "topHeight": 17.7, + "bottomHeight": 1.57 + }, + { + "shape": "conical", + "topDiameter": 9.28, + "bottomDiameter": 8.9, + "topHeight": 37.9, + "bottomHeight": 17.7 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_24_aluminumblock_nest_2ml_screwcap/2.json b/shared-data/labware/definitions/3/opentrons_24_aluminumblock_nest_2ml_screwcap/2.json new file mode 100644 index 00000000000..4ce933a91d0 --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_24_aluminumblock_nest_2ml_screwcap/2.json @@ -0,0 +1,350 @@ +{ + "ordering": [ + ["A1", "B1", "C1", "D1"], + ["A2", "B2", "C2", "D2"], + ["A3", "B3", "C3", "D3"], + ["A4", "B4", "C4", "D4"], + ["A5", "B5", "C5", "D5"], + ["A6", "B6", "C6", "D6"] + ], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": ["https://shop.opentrons.com/aluminum-block-set/"] + }, + "metadata": { + "displayName": "Opentrons 24 Well Aluminum Block with NEST 2 mL Screwcap", + "displayCategory": "aluminumBlock", + "displayVolumeUnits": "mL", + "tags": [] + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 49.5 + }, + "wells": { + "A1": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 20.75, + "y": 68.62, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 20.75, + "y": 51.37, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 20.75, + "y": 34.12, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 20.75, + "y": 16.87, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 38, + "y": 68.62, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 38, + "y": 51.37, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 38, + "y": 34.12, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 38, + "y": 16.87, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 55.25, + "y": 68.62, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 55.25, + "y": 51.37, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 55.25, + "y": 34.12, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 55.25, + "y": 16.87, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 72.5, + "y": 68.62, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 72.5, + "y": 51.37, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 72.5, + "y": 34.12, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 72.5, + "y": 16.87, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 89.75, + "y": 68.62, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 89.75, + "y": 51.37, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 89.75, + "y": 34.12, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 89.75, + "y": 16.87, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 107, + "y": 68.62, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 107, + "y": 51.37, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 107, + "y": 34.12, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 107, + "y": 16.87, + "z": 5.45, + "geometryDefinitionId": "conicalWell" + } + }, + "groups": [ + { + "metadata": { + "displayName": "NEST 24x2 mL Screwcap", + "displayCategory": "tubeRack", + "wellBottomShape": "v" + }, + "brand": { + "brand": "NEST", + "brandId": ["635001"], + "links": ["https://www.nest-biotech.com/sample-vials/59249854.html"] + }, + "wells": [ + "A1", + "B1", + "C1", + "D1", + "A2", + "B2", + "C2", + "D2", + "A3", + "B3", + "C3", + "D3", + "A4", + "B4", + "C4", + "D4", + "A5", + "B5", + "C5", + "D5", + "A6", + "B6", + "C6", + "D6" + ] + } + ], + "parameters": { + "format": "irregular", + "quirks": ["gripperIncompatible"], + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_24_aluminumblock_nest_2ml_screwcap" + }, + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "conical", + "bottomDiameter": 1.21, + "topDiameter": 6.5, + "topHeight": 2.08, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "bottomDiameter": 6.5, + "topDiameter": 8.14, + "topHeight": 3.04, + "bottomHeight": 2.08 + }, + { + "shape": "conical", + "bottomDiameter": 8.14, + "topDiameter": 8.55, + "topHeight": 43.4, + "bottomHeight": 3.04 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_24_aluminumblock_nest_2ml_snapcap/2.json b/shared-data/labware/definitions/3/opentrons_24_aluminumblock_nest_2ml_snapcap/2.json new file mode 100644 index 00000000000..a2ee9e2d328 --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_24_aluminumblock_nest_2ml_snapcap/2.json @@ -0,0 +1,379 @@ +{ + "ordering": [ + ["A1", "B1", "C1", "D1"], + ["A2", "B2", "C2", "D2"], + ["A3", "B3", "C3", "D3"], + ["A4", "B4", "C4", "D4"], + ["A5", "B5", "C5", "D5"], + ["A6", "B6", "C6", "D6"] + ], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": ["https://shop.opentrons.com/aluminum-block-set/"] + }, + "metadata": { + "displayName": "Opentrons 24 Well Aluminum Block with NEST 2 mL Snapcap", + "displayCategory": "aluminumBlock", + "displayVolumeUnits": "mL", + "tags": [] + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 43.6 + }, + "wells": { + "A1": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 20.75, + "y": 68.62, + "z": 4.32, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 20.75, + "y": 51.37, + "z": 4.32, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 20.75, + "y": 34.12, + "z": 4.32, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 20.75, + "y": 16.87, + "z": 4.32, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 38, + "y": 68.62, + "z": 4.32, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 38, + "y": 51.37, + "z": 4.32, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 38, + "y": 34.12, + "z": 4.32, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 38, + "y": 16.87, + "z": 4.32, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 55.25, + "y": 68.62, + "z": 4.32, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 55.25, + "y": 51.37, + "z": 4.32, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 55.25, + "y": 34.12, + "z": 4.32, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 55.25, + "y": 16.87, + "z": 4.32, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 72.5, + "y": 68.62, + "z": 4.32, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 72.5, + "y": 51.37, + "z": 4.32, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 72.5, + "y": 34.12, + "z": 4.32, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 72.5, + "y": 16.87, + "z": 4.32, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 89.75, + "y": 68.62, + "z": 4.32, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 89.75, + "y": 51.37, + "z": 4.32, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 89.75, + "y": 34.12, + "z": 4.32, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 89.75, + "y": 16.87, + "z": 4.32, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 107, + "y": 68.62, + "z": 4.32, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 107, + "y": 51.37, + "z": 4.32, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 107, + "y": 34.12, + "z": 4.32, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 107, + "y": 16.87, + "z": 4.32, + "geometryDefinitionId": "conicalWell" + } + }, + "groups": [ + { + "metadata": { + "displayName": "NEST 24x2 mL Snapcap", + "displayCategory": "tubeRack", + "wellBottomShape": "u" + }, + "brand": { + "brand": "NEST", + "brandId": ["620611", "620011"], + "links": [ + "https://www.nest-biotech.com/micro-centrifuge-tube/59201045.html" + ] + }, + "wells": [ + "A1", + "B1", + "C1", + "D1", + "A2", + "B2", + "C2", + "D2", + "A3", + "B3", + "C3", + "D3", + "A4", + "B4", + "C4", + "D4", + "A5", + "B5", + "C5", + "D5", + "A6", + "B6", + "C6", + "D6" + ] + } + ], + "parameters": { + "format": "irregular", + "quirks": ["gripperIncompatible"], + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_24_aluminumblock_nest_2ml_snapcap" + }, + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 3.19, + "topHeight": 1.21, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "bottomDiameter": 5, + "topDiameter": 6, + "topHeight": 1.83, + "bottomHeight": 1.21 + }, + { + "shape": "conical", + "bottomDiameter": 6, + "topDiameter": 7, + "topHeight": 2.59, + "bottomHeight": 1.83 + }, + { + "shape": "conical", + "bottomDiameter": 7, + "topDiameter": 7.2, + "topHeight": 2.74, + "bottomHeight": 2.59 + }, + { + "shape": "conical", + "bottomDiameter": 7.2, + "topDiameter": 8, + "topHeight": 3.89, + "bottomHeight": 2.74 + }, + { + "shape": "conical", + "bottomDiameter": 8, + "topDiameter": 8.9, + "topHeight": 15.05, + "bottomHeight": 3.89 + }, + { + "shape": "conical", + "bottomDiameter": 8.9, + "topDiameter": 9.28, + "topHeight": 39.28, + "bottomHeight": 15.04 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_24_tuberack_eppendorf_1.5ml_safelock_snapcap/2.json b/shared-data/labware/definitions/3/opentrons_24_tuberack_eppendorf_1.5ml_safelock_snapcap/2.json new file mode 100644 index 00000000000..9d0953e53be --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_24_tuberack_eppendorf_1.5ml_safelock_snapcap/2.json @@ -0,0 +1,418 @@ +{ + "ordering": [ + ["A1", "B1", "C1", "D1"], + ["A2", "B2", "C2", "D2"], + ["A3", "B3", "C3", "D3"], + ["A4", "B4", "C4", "D4"], + ["A5", "B5", "C5", "D5"], + ["A6", "B6", "C6", "D6"] + ], + "schemaVersion": 3, + "version": 2, + "namespace": "opentrons", + "metadata": { + "tags": [], + "displayName": "Opentrons 24 Tube Rack with Eppendorf 1.5 mL Safe-Lock Snapcap", + "displayVolumeUnits": "mL", + "displayCategory": "tubeRack" + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 79.85 + }, + "parameters": { + "format": "irregular", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_24_tuberack_eppendorf_1.5ml_safelock_snapcap" + }, + "wells": { + "D1": { + "depth": 37.8, + "diameter": 8.7, + "shape": "circular", + "totalLiquidVolume": 1500, + "x": 18.21, + "y": 17.59, + "z": 42.05, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 37.8, + "diameter": 8.7, + "shape": "circular", + "totalLiquidVolume": 1500, + "x": 18.21, + "y": 36.87, + "z": 42.05, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 37.8, + "diameter": 8.7, + "shape": "circular", + "totalLiquidVolume": 1500, + "x": 18.21, + "y": 56.15, + "z": 42.05, + "geometryDefinitionId": "conicalWell" + }, + "A1": { + "depth": 37.8, + "diameter": 8.7, + "shape": "circular", + "totalLiquidVolume": 1500, + "x": 18.21, + "y": 75.43, + "z": 42.05, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 37.8, + "diameter": 8.7, + "shape": "circular", + "totalLiquidVolume": 1500, + "x": 38.1, + "y": 17.59, + "z": 42.05, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 37.8, + "diameter": 8.7, + "shape": "circular", + "totalLiquidVolume": 1500, + "x": 38.1, + "y": 36.87, + "z": 42.05, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 37.8, + "diameter": 8.7, + "shape": "circular", + "totalLiquidVolume": 1500, + "x": 38.1, + "y": 56.15, + "z": 42.05, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 37.8, + "diameter": 8.7, + "shape": "circular", + "totalLiquidVolume": 1500, + "x": 38.1, + "y": 75.43, + "z": 42.05, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 37.8, + "diameter": 8.7, + "shape": "circular", + "totalLiquidVolume": 1500, + "x": 57.99, + "y": 17.59, + "z": 42.05, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 37.8, + "diameter": 8.7, + "shape": "circular", + "totalLiquidVolume": 1500, + "x": 57.99, + "y": 36.87, + "z": 42.05, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 37.8, + "diameter": 8.7, + "shape": "circular", + "totalLiquidVolume": 1500, + "x": 57.99, + "y": 56.15, + "z": 42.05, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 37.8, + "diameter": 8.7, + "shape": "circular", + "totalLiquidVolume": 1500, + "x": 57.99, + "y": 75.43, + "z": 42.05, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 37.8, + "diameter": 8.7, + "shape": "circular", + "totalLiquidVolume": 1500, + "x": 77.88, + "y": 17.59, + "z": 42.05, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 37.8, + "diameter": 8.7, + "shape": "circular", + "totalLiquidVolume": 1500, + "x": 77.88, + "y": 36.87, + "z": 42.05, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 37.8, + "diameter": 8.7, + "shape": "circular", + "totalLiquidVolume": 1500, + "x": 77.88, + "y": 56.15, + "z": 42.05, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 37.8, + "diameter": 8.7, + "shape": "circular", + "totalLiquidVolume": 1500, + "x": 77.88, + "y": 75.43, + "z": 42.05, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 37.8, + "diameter": 8.7, + "shape": "circular", + "totalLiquidVolume": 1500, + "x": 97.77, + "y": 17.59, + "z": 42.05, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 37.8, + "diameter": 8.7, + "shape": "circular", + "totalLiquidVolume": 1500, + "x": 97.77, + "y": 36.87, + "z": 42.05, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 37.8, + "diameter": 8.7, + "shape": "circular", + "totalLiquidVolume": 1500, + "x": 97.77, + "y": 56.15, + "z": 42.05, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 37.8, + "diameter": 8.7, + "shape": "circular", + "totalLiquidVolume": 1500, + "x": 97.77, + "y": 75.43, + "z": 42.05, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 37.8, + "diameter": 8.7, + "shape": "circular", + "totalLiquidVolume": 1500, + "x": 117.66, + "y": 17.59, + "z": 42.05, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 37.8, + "diameter": 8.7, + "shape": "circular", + "totalLiquidVolume": 1500, + "x": 117.66, + "y": 36.87, + "z": 42.05, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 37.8, + "diameter": 8.7, + "shape": "circular", + "totalLiquidVolume": 1500, + "x": 117.66, + "y": 56.15, + "z": 42.05, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 37.8, + "diameter": 8.7, + "shape": "circular", + "totalLiquidVolume": 1500, + "x": 117.66, + "y": 75.43, + "z": 42.05, + "geometryDefinitionId": "conicalWell" + } + }, + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "groups": [ + { + "wells": [ + "A1", + "B1", + "C1", + "D1", + "A2", + "B2", + "C2", + "D2", + "A3", + "B3", + "C3", + "D3", + "A4", + "B4", + "C4", + "D4", + "A5", + "B5", + "C5", + "D5", + "A6", + "B6", + "C6", + "D6" + ], + "metadata": { + "displayName": "Eppendorf 24x1.5 mL Safelock Snapcap", + "displayCategory": "tubeRack", + "wellBottomShape": "v" + }, + "brand": { + "brand": "Eppendorf", + "brandId": [ + "022363204", + "022363212", + "022363221", + "022363247", + "022363263", + "022363280", + "022363280", + "022363301", + "022363328" + ], + "links": [ + "https://online-shop.eppendorf.us/US-en/Laboratory-Consumables-44512/Tubes-44515/Eppendorf-Safe-Lock-Tubes-PF-8863.html" + ] + } + } + ], + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 2.6, + "topHeight": 0.2, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "bottomDiameter": 2, + "topDiameter": 3.26, + "topHeight": 1, + "bottomHeight": 0.2 + }, + { + "shape": "conical", + "bottomDiameter": 3.26, + "topDiameter": 4, + "topHeight": 2.9, + "bottomHeight": 1 + }, + { + "shape": "conical", + "bottomDiameter": 4, + "topDiameter": 6, + "topHeight": 9.24, + "bottomHeight": 2.9 + }, + { + "shape": "conical", + "bottomDiameter": 6, + "topDiameter": 8, + "topHeight": 15.89, + "bottomHeight": 9.24 + }, + { + "shape": "conical", + "bottomDiameter": 8, + "topDiameter": 8.5, + "topHeight": 17.56, + "bottomHeight": 15.89 + }, + { + "shape": "conical", + "bottomDiameter": 8.5, + "topDiameter": 8.9, + "topHeight": 28.16, + "bottomHeight": 17.56 + }, + { + "shape": "conical", + "bottomDiameter": 8.9, + "topDiameter": 9.02, + "topHeight": 31.16, + "bottomHeight": 28.16 + }, + { + "shape": "conical", + "bottomDiameter": 9.02, + "topDiameter": 9.2, + "topHeight": 31.97, + "bottomHeight": 31.16 + }, + { + "shape": "conical", + "bottomDiameter": 9.2, + "topDiameter": 9.6, + "topHeight": 32.49, + "bottomHeight": 31.97 + }, + { + "shape": "conical", + "bottomDiameter": 9.6, + "topDiameter": 10, + "topHeight": 37.8, + "bottomHeight": 32.49 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap/2.json b/shared-data/labware/definitions/3/opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap/2.json new file mode 100644 index 00000000000..1a0cc9ea508 --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap/2.json @@ -0,0 +1,340 @@ +{ + "ordering": [ + ["A1", "B1", "C1", "D1"], + ["A2", "B2", "C2", "D2"], + ["A3", "B3", "C3", "D3"], + ["A4", "B4", "C4", "D4"], + ["A5", "B5", "C5", "D5"], + ["A6", "B6", "C6", "D6"] + ], + "schemaVersion": 3, + "version": 2, + "namespace": "opentrons", + "metadata": { + "displayVolumeUnits": "mL", + "displayCategory": "tubeRack", + "displayName": "Opentrons 24 Tube Rack with Eppendorf 2 mL Safe-Lock Snapcap", + "tags": [] + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 79.85 + }, + "parameters": { + "format": "irregular", + "isTiprack": false, + "loadName": "opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap", + "isMagneticModuleCompatible": false + }, + "wells": { + "D1": { + "depth": 39.1, + "diameter": 8.8, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 18.21, + "y": 17.59, + "z": 41.27, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 39.1, + "diameter": 8.8, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 18.21, + "y": 36.87, + "z": 41.27, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 39.1, + "diameter": 8.8, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 18.21, + "y": 56.15, + "z": 41.27, + "geometryDefinitionId": "conicalWell" + }, + "A1": { + "depth": 39.1, + "diameter": 8.8, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 18.21, + "y": 75.43, + "z": 41.27, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 39.1, + "diameter": 8.8, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 38.1, + "y": 17.59, + "z": 41.27, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 39.1, + "diameter": 8.8, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 38.1, + "y": 36.87, + "z": 41.27, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 39.1, + "diameter": 8.8, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 38.1, + "y": 56.15, + "z": 41.27, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 39.1, + "diameter": 8.8, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 38.1, + "y": 75.43, + "z": 41.27, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 39.1, + "diameter": 8.8, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 57.99, + "y": 17.59, + "z": 41.27, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 39.1, + "diameter": 8.8, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 57.99, + "y": 36.87, + "z": 41.27, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 39.1, + "diameter": 8.8, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 57.99, + "y": 56.15, + "z": 41.27, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 39.1, + "diameter": 8.8, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 57.99, + "y": 75.43, + "z": 41.27, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 39.1, + "diameter": 8.8, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 77.88, + "y": 17.59, + "z": 41.27, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 39.1, + "diameter": 8.8, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 77.88, + "y": 36.87, + "z": 41.27, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 39.1, + "diameter": 8.8, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 77.88, + "y": 56.15, + "z": 41.27, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 39.1, + "diameter": 8.8, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 77.88, + "y": 75.43, + "z": 41.27, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 39.1, + "diameter": 8.8, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 97.77, + "y": 17.59, + "z": 41.27, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 39.1, + "diameter": 8.8, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 97.77, + "y": 36.87, + "z": 41.27, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 39.1, + "diameter": 8.8, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 97.77, + "y": 56.15, + "z": 41.27, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 39.1, + "diameter": 8.8, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 97.77, + "y": 75.43, + "z": 41.27, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 39.1, + "diameter": 8.8, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 117.66, + "y": 17.59, + "z": 41.27, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 39.1, + "diameter": 8.8, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 117.66, + "y": 36.87, + "z": 41.27, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 39.1, + "diameter": 8.8, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 117.66, + "y": 56.15, + "z": 41.27, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 39.1, + "diameter": 8.8, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 117.66, + "y": 75.43, + "z": 41.27, + "geometryDefinitionId": "conicalWell" + } + }, + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "groups": [ + { + "wells": [ + "A1", + "B1", + "C1", + "D1", + "A2", + "B2", + "C2", + "D2", + "A3", + "B3", + "C3", + "D3", + "A4", + "B4", + "C4", + "D4", + "A5", + "B5", + "C5", + "D5", + "A6", + "B6", + "C6", + "D6" + ], + "metadata": { + "displayName": "Eppendorf 24x2 mL Safelock Snapcap", + "displayCategory": "tubeRack", + "wellBottomShape": "u" + }, + "brand": { + "brand": "Eppendorf", + "brandId": [ + "022363344", + "022363352", + "022363379", + "022363395", + "022363417", + "022363433", + "022363450", + "022363476" + ], + "links": [ + "https://online-shop.eppendorf.us/US-en/Laboratory-Consumables-44512/Tubes-44515/Eppendorf-Safe-Lock-Tubes-PF-8863.html" + ] + } + } + ], + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic/2.json b/shared-data/labware/definitions/3/opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic/2.json new file mode 100644 index 00000000000..4911d4850b3 --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic/2.json @@ -0,0 +1,338 @@ +{ + "ordering": [ + ["A1", "B1", "C1", "D1"], + ["A2", "B2", "C2", "D2"], + ["A3", "B3", "C3", "D3"], + ["A4", "B4", "C4", "D4"], + ["A5", "B5", "C5", "D5"], + ["A6", "B6", "C6", "D6"] + ], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [] + }, + "metadata": { + "displayName": "Opentrons 24 Tube Rack (Acrylic) with Eppendorf 2 mL Safe-Lock Snapcap", + "displayCategory": "tubeRack", + "displayVolumeUnits": "mL", + "tags": [] + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 52 + }, + "wells": { + "D1": { + "depth": 38.58, + "shape": "circular", + "diameter": 9.9, + "totalLiquidVolume": 2000, + "x": 15.28, + "y": 13.9, + "z": 13.42, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 38.58, + "shape": "circular", + "diameter": 9.9, + "totalLiquidVolume": 2000, + "x": 15.28, + "y": 33.4, + "z": 13.42, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 38.58, + "shape": "circular", + "diameter": 9.9, + "totalLiquidVolume": 2000, + "x": 15.28, + "y": 52.9, + "z": 13.42, + "geometryDefinitionId": "conicalWell" + }, + "A1": { + "depth": 38.58, + "shape": "circular", + "diameter": 9.9, + "totalLiquidVolume": 2000, + "x": 15.28, + "y": 72.4, + "z": 13.42, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 38.58, + "shape": "circular", + "diameter": 9.9, + "totalLiquidVolume": 2000, + "x": 34.78, + "y": 13.9, + "z": 13.42, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 38.58, + "shape": "circular", + "diameter": 9.9, + "totalLiquidVolume": 2000, + "x": 34.78, + "y": 33.4, + "z": 13.42, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 38.58, + "shape": "circular", + "diameter": 9.9, + "totalLiquidVolume": 2000, + "x": 34.78, + "y": 52.9, + "z": 13.42, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 38.58, + "shape": "circular", + "diameter": 9.9, + "totalLiquidVolume": 2000, + "x": 34.78, + "y": 72.4, + "z": 13.42, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 38.58, + "shape": "circular", + "diameter": 9.9, + "totalLiquidVolume": 2000, + "x": 54.28, + "y": 13.9, + "z": 13.42, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 38.58, + "shape": "circular", + "diameter": 9.9, + "totalLiquidVolume": 2000, + "x": 54.28, + "y": 33.4, + "z": 13.42, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 38.58, + "shape": "circular", + "diameter": 9.9, + "totalLiquidVolume": 2000, + "x": 54.28, + "y": 52.9, + "z": 13.42, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 38.58, + "shape": "circular", + "diameter": 9.9, + "totalLiquidVolume": 2000, + "x": 54.28, + "y": 72.4, + "z": 13.42, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 38.58, + "shape": "circular", + "diameter": 9.9, + "totalLiquidVolume": 2000, + "x": 73.78, + "y": 13.9, + "z": 13.42, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 38.58, + "shape": "circular", + "diameter": 9.9, + "totalLiquidVolume": 2000, + "x": 73.78, + "y": 33.4, + "z": 13.42, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 38.58, + "shape": "circular", + "diameter": 9.9, + "totalLiquidVolume": 2000, + "x": 73.78, + "y": 52.9, + "z": 13.42, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 38.58, + "shape": "circular", + "diameter": 9.9, + "totalLiquidVolume": 2000, + "x": 73.78, + "y": 72.4, + "z": 13.42, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 38.58, + "shape": "circular", + "diameter": 9.9, + "totalLiquidVolume": 2000, + "x": 93.28, + "y": 13.9, + "z": 13.42, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 38.58, + "shape": "circular", + "diameter": 9.9, + "totalLiquidVolume": 2000, + "x": 93.28, + "y": 33.4, + "z": 13.42, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 38.58, + "shape": "circular", + "diameter": 9.9, + "totalLiquidVolume": 2000, + "x": 93.28, + "y": 52.9, + "z": 13.42, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 38.58, + "shape": "circular", + "diameter": 9.9, + "totalLiquidVolume": 2000, + "x": 93.28, + "y": 72.4, + "z": 13.42, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 38.58, + "shape": "circular", + "diameter": 9.9, + "totalLiquidVolume": 2000, + "x": 112.78, + "y": 13.9, + "z": 13.42, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 38.58, + "shape": "circular", + "diameter": 9.9, + "totalLiquidVolume": 2000, + "x": 112.78, + "y": 33.4, + "z": 13.42, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 38.58, + "shape": "circular", + "diameter": 9.9, + "totalLiquidVolume": 2000, + "x": 112.78, + "y": 52.9, + "z": 13.42, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 38.58, + "shape": "circular", + "diameter": 9.9, + "totalLiquidVolume": 2000, + "x": 112.78, + "y": 72.4, + "z": 13.42, + "geometryDefinitionId": "conicalWell" + } + }, + "parameters": { + "format": "irregular", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic" + }, + "groups": [ + { + "wells": [ + "A1", + "B1", + "C1", + "D1", + "A2", + "B2", + "C2", + "D2", + "A3", + "B3", + "C3", + "D3", + "A4", + "B4", + "C4", + "D4", + "A5", + "B5", + "C5", + "D5", + "A6", + "B6", + "C6", + "D6" + ], + "metadata": { + "displayName": "Eppendorf 24x2 mL Safelock Snapcap", + "displayCategory": "tubeRack", + "wellBottomShape": "u" + }, + "brand": { + "brand": "Eppendorf", + "brandId": [ + "022363344", + "022363352", + "022363379", + "022363395", + "022363417", + "022363433", + "022363450", + "022363476" + ], + "links": [ + "https://online-shop.eppendorf.us/US-en/Laboratory-Consumables-44512/Tubes-44515/Eppendorf-Safe-Lock-Tubes-PF-8863.html" + ] + } + } + ], + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_24_tuberack_generic_0.75ml_snapcap_acrylic/2.json b/shared-data/labware/definitions/3/opentrons_24_tuberack_generic_0.75ml_snapcap_acrylic/2.json new file mode 100644 index 00000000000..299a98bcfe2 --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_24_tuberack_generic_0.75ml_snapcap_acrylic/2.json @@ -0,0 +1,327 @@ +{ + "ordering": [ + ["A1", "B1", "C1", "D1"], + ["A2", "B2", "C2", "D2"], + ["A3", "B3", "C3", "D3"], + ["A4", "B4", "C4", "D4"], + ["A5", "B5", "C5", "D5"], + ["A6", "B6", "C6", "D6"] + ], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [] + }, + "metadata": { + "displayName": "Opentrons 24 Tube Rack (Acrylic) with Generic 0.75 mL Snapcap", + "displayCategory": "tubeRack", + "displayVolumeUnits": "mL", + "tags": [] + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 55 + }, + "wells": { + "D1": { + "depth": 20, + "shape": "circular", + "diameter": 6, + "totalLiquidVolume": 750, + "x": 16.76, + "y": 11.94, + "z": 35, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 20, + "shape": "circular", + "diameter": 6, + "totalLiquidVolume": 750, + "x": 16.76, + "y": 31.5, + "z": 35, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 20, + "shape": "circular", + "diameter": 6, + "totalLiquidVolume": 750, + "x": 16.76, + "y": 51.06, + "z": 35, + "geometryDefinitionId": "conicalWell" + }, + "A1": { + "depth": 20, + "shape": "circular", + "diameter": 6, + "totalLiquidVolume": 750, + "x": 16.76, + "y": 70.62, + "z": 35, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 20, + "shape": "circular", + "diameter": 6, + "totalLiquidVolume": 750, + "x": 36.32, + "y": 11.94, + "z": 35, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 20, + "shape": "circular", + "diameter": 6, + "totalLiquidVolume": 750, + "x": 36.32, + "y": 31.5, + "z": 35, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 20, + "shape": "circular", + "diameter": 6, + "totalLiquidVolume": 750, + "x": 36.32, + "y": 51.06, + "z": 35, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 20, + "shape": "circular", + "diameter": 6, + "totalLiquidVolume": 750, + "x": 36.32, + "y": 70.62, + "z": 35, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 20, + "shape": "circular", + "diameter": 6, + "totalLiquidVolume": 750, + "x": 55.88, + "y": 11.94, + "z": 35, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 20, + "shape": "circular", + "diameter": 6, + "totalLiquidVolume": 750, + "x": 55.88, + "y": 31.5, + "z": 35, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 20, + "shape": "circular", + "diameter": 6, + "totalLiquidVolume": 750, + "x": 55.88, + "y": 51.06, + "z": 35, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 20, + "shape": "circular", + "diameter": 6, + "totalLiquidVolume": 750, + "x": 55.88, + "y": 70.62, + "z": 35, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 20, + "shape": "circular", + "diameter": 6, + "totalLiquidVolume": 750, + "x": 75.44, + "y": 11.94, + "z": 35, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 20, + "shape": "circular", + "diameter": 6, + "totalLiquidVolume": 750, + "x": 75.44, + "y": 31.5, + "z": 35, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 20, + "shape": "circular", + "diameter": 6, + "totalLiquidVolume": 750, + "x": 75.44, + "y": 51.06, + "z": 35, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 20, + "shape": "circular", + "diameter": 6, + "totalLiquidVolume": 750, + "x": 75.44, + "y": 70.62, + "z": 35, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 20, + "shape": "circular", + "diameter": 6, + "totalLiquidVolume": 750, + "x": 95, + "y": 11.94, + "z": 35, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 20, + "shape": "circular", + "diameter": 6, + "totalLiquidVolume": 750, + "x": 95, + "y": 31.5, + "z": 35, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 20, + "shape": "circular", + "diameter": 6, + "totalLiquidVolume": 750, + "x": 95, + "y": 51.06, + "z": 35, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 20, + "shape": "circular", + "diameter": 6, + "totalLiquidVolume": 750, + "x": 95, + "y": 70.62, + "z": 35, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 20, + "shape": "circular", + "diameter": 6, + "totalLiquidVolume": 750, + "x": 114.56, + "y": 11.94, + "z": 35, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 20, + "shape": "circular", + "diameter": 6, + "totalLiquidVolume": 750, + "x": 114.56, + "y": 31.5, + "z": 35, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 20, + "shape": "circular", + "diameter": 6, + "totalLiquidVolume": 750, + "x": 114.56, + "y": 51.06, + "z": 35, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 20, + "shape": "circular", + "diameter": 6, + "totalLiquidVolume": 750, + "x": 114.56, + "y": 70.62, + "z": 35, + "geometryDefinitionId": "conicalWell" + } + }, + "parameters": { + "format": "irregular", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_24_tuberack_generic_0.75ml_snapcap_acrylic" + }, + "groups": [ + { + "wells": [ + "A1", + "B1", + "C1", + "D1", + "A2", + "B2", + "C2", + "D2", + "A3", + "B3", + "C3", + "D3", + "A4", + "B4", + "C4", + "D4", + "A5", + "B5", + "C5", + "D5", + "A6", + "B6", + "C6", + "D6" + ], + "metadata": { + "displayName": "Generic 0.75 mL Snapcap", + "displayCategory": "tubeRack", + "wellBottomShape": "v" + }, + "brand": { + "brand": "generic", + "brandId": [], + "links": [] + } + } + ], + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_24_tuberack_generic_2ml_screwcap/2.json b/shared-data/labware/definitions/3/opentrons_24_tuberack_generic_2ml_screwcap/2.json new file mode 100644 index 00000000000..660331eedfd --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_24_tuberack_generic_2ml_screwcap/2.json @@ -0,0 +1,329 @@ +{ + "ordering": [ + ["A1", "B1", "C1", "D1"], + ["A2", "B2", "C2", "D2"], + ["A3", "B3", "C3", "D3"], + ["A4", "B4", "C4", "D4"], + ["A5", "B5", "C5", "D5"], + ["A6", "B6", "C6", "D6"] + ], + "schemaVersion": 3, + "version": 2, + "namespace": "opentrons", + "metadata": { + "displayVolumeUnits": "mL", + "displayCategory": "tubeRack", + "displayName": "Opentrons 24 Tube Rack with Generic 2 mL Screwcap", + "tags": [] + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 84 + }, + "parameters": { + "format": "irregular", + "isTiprack": false, + "loadName": "opentrons_24_tuberack_generic_2ml_screwcap", + "isMagneticModuleCompatible": false + }, + "wells": { + "D1": { + "depth": 42, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 18.21, + "y": 17.59, + "z": 42, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 42, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 18.21, + "y": 36.87, + "z": 42, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 42, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 18.21, + "y": 56.15, + "z": 42, + "geometryDefinitionId": "conicalWell" + }, + "A1": { + "depth": 42, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 18.21, + "y": 75.43, + "z": 42, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 42, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 38.1, + "y": 17.59, + "z": 42, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 42, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 38.1, + "y": 36.87, + "z": 42, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 42, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 38.1, + "y": 56.15, + "z": 42, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 42, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 38.1, + "y": 75.43, + "z": 42, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 42, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 57.99, + "y": 17.59, + "z": 42, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 42, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 57.99, + "y": 36.87, + "z": 42, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 42, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 57.99, + "y": 56.15, + "z": 42, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 42, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 57.99, + "y": 75.43, + "z": 42, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 42, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 77.88, + "y": 17.59, + "z": 42, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 42, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 77.88, + "y": 36.87, + "z": 42, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 42, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 77.88, + "y": 56.15, + "z": 42, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 42, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 77.88, + "y": 75.43, + "z": 42, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 42, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 97.77, + "y": 17.59, + "z": 42, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 42, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 97.77, + "y": 36.87, + "z": 42, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 42, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 97.77, + "y": 56.15, + "z": 42, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 42, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 97.77, + "y": 75.43, + "z": 42, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 42, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 117.66, + "y": 17.59, + "z": 42, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 42, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 117.66, + "y": 36.87, + "z": 42, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 42, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 117.66, + "y": 56.15, + "z": 42, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 42, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 117.66, + "y": 75.43, + "z": 42, + "geometryDefinitionId": "conicalWell" + } + }, + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "groups": [ + { + "wells": [ + "A1", + "B1", + "C1", + "D1", + "A2", + "B2", + "C2", + "D2", + "A3", + "B3", + "C3", + "D3", + "A4", + "B4", + "C4", + "D4", + "A5", + "B5", + "C5", + "D5", + "A6", + "B6", + "C6", + "D6" + ], + "metadata": { + "displayName": "Generic 2 mL Screwcap", + "displayCategory": "tubeRack", + "wellBottomShape": "v" + }, + "brand": { + "brand": "generic", + "brandId": [], + "links": [] + } + } + ], + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_0.5ml_screwcap/2.json b/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_0.5ml_screwcap/2.json new file mode 100644 index 00000000000..0b29c336b23 --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_0.5ml_screwcap/2.json @@ -0,0 +1,371 @@ +{ + "ordering": [ + ["A1", "B1", "C1", "D1"], + ["A2", "B2", "C2", "D2"], + ["A3", "B3", "C3", "D3"], + ["A4", "B4", "C4", "D4"], + ["A5", "B5", "C5", "D5"], + ["A6", "B6", "C6", "D6"] + ], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "metadata": { + "displayName": "Opentrons 24 Tube Rack with NEST 0.5 mL Screwcap", + "displayCategory": "tubeRack", + "displayVolumeUnits": "mL", + "tags": [] + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 85.2 + }, + "wells": { + "A1": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 18.21, + "y": 75.43, + "z": 60, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 18.21, + "y": 56.15, + "z": 60, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 18.21, + "y": 36.87, + "z": 60, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 18.21, + "y": 17.59, + "z": 60, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 38.1, + "y": 75.43, + "z": 60, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 38.1, + "y": 56.15, + "z": 60, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 38.1, + "y": 36.87, + "z": 60, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 38.1, + "y": 17.59, + "z": 60, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 57.99, + "y": 75.43, + "z": 60, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 57.99, + "y": 56.15, + "z": 60, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 57.99, + "y": 36.87, + "z": 60, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 57.99, + "y": 17.59, + "z": 60, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 77.88, + "y": 75.43, + "z": 60, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 77.88, + "y": 56.15, + "z": 60, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 77.88, + "y": 36.87, + "z": 60, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 77.88, + "y": 17.59, + "z": 60, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 97.77, + "y": 75.43, + "z": 60, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 97.77, + "y": 56.15, + "z": 60, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 97.77, + "y": 36.87, + "z": 60, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 97.77, + "y": 17.59, + "z": 60, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 117.66, + "y": 75.43, + "z": 60, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 117.66, + "y": 56.15, + "z": 60, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 117.66, + "y": 36.87, + "z": 60, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 25.2, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 500, + "x": 117.66, + "y": 17.59, + "z": 60, + "geometryDefinitionId": "conicalWell" + } + }, + "groups": [ + { + "metadata": { + "displayName": "NEST 24x0.5 mL Screwcap", + "displayCategory": "tubeRack", + "wellBottomShape": "v" + }, + "brand": { + "brand": "NEST", + "brandId": ["633001"], + "links": ["https://www.nest-biotech.com/sample-vials/59810336.html"] + }, + "wells": [ + "A1", + "B1", + "C1", + "D1", + "A2", + "B2", + "C2", + "D2", + "A3", + "B3", + "C3", + "D3", + "A4", + "B4", + "C4", + "D4", + "A5", + "B5", + "C5", + "D5", + "A6", + "B6", + "C6", + "D6" + ] + } + ], + "parameters": { + "format": "irregular", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_24_tuberack_nest_0.5ml_screwcap" + }, + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 3.64, + "topHeight": 0.14, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "topDiameter": 3, + "bottomDiameter": 2, + "topHeight": 0.95, + "bottomHeight": 0.14 + }, + { + "shape": "conical", + "topDiameter": 5.8, + "bottomDiameter": 3, + "topHeight": 10.2, + "bottomHeight": 0.95 + }, + { + "shape": "conical", + "topDiameter": 7.9, + "bottomDiameter": 5.8, + "topHeight": 11.9, + "bottomHeight": 10.2 + }, + { + "shape": "conical", + "topDiameter": 8.56, + "bottomDiameter": 7.9, + "topHeight": 13.95, + "bottomHeight": 11.9 + }, + { + "shape": "conical", + "topDiameter": 8.56, + "bottomDiameter": 8.56, + "topHeight": 25.2, + "bottomHeight": 13.95 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_1.5ml_screwcap/2.json b/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_1.5ml_screwcap/2.json new file mode 100644 index 00000000000..7d7a193d55d --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_1.5ml_screwcap/2.json @@ -0,0 +1,357 @@ +{ + "ordering": [ + ["A1", "B1", "C1", "D1"], + ["A2", "B2", "C2", "D2"], + ["A3", "B3", "C3", "D3"], + ["A4", "B4", "C4", "D4"], + ["A5", "B5", "C5", "D5"], + ["A6", "B6", "C6", "D6"] + ], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "metadata": { + "displayName": "Opentrons 24 Tube Rack with NEST 1.5 mL Screwcap", + "displayCategory": "tubeRack", + "displayVolumeUnits": "mL", + "tags": [] + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 85.2 + }, + "wells": { + "A1": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 18.21, + "y": 75.43, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 18.21, + "y": 56.15, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 18.21, + "y": 36.87, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 18.21, + "y": 17.59, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 38.1, + "y": 75.43, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 38.1, + "y": 56.15, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 38.1, + "y": 36.87, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 38.1, + "y": 17.59, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 57.99, + "y": 75.43, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 57.99, + "y": 56.15, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 57.99, + "y": 36.87, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 57.99, + "y": 17.59, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 77.88, + "y": 75.43, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 77.88, + "y": 56.15, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 77.88, + "y": 36.87, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 77.88, + "y": 17.59, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 97.77, + "y": 75.43, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 97.77, + "y": 56.15, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 97.77, + "y": 36.87, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 97.77, + "y": 17.59, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 117.66, + "y": 75.43, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 117.66, + "y": 56.15, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 117.66, + "y": 36.87, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 43.9, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 1500, + "x": 117.66, + "y": 17.59, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + } + }, + "groups": [ + { + "metadata": { + "displayName": "NEST 24x1.5 mL Screwcap", + "displayCategory": "tubeRack", + "wellBottomShape": "v" + }, + "brand": { + "brand": "NEST", + "brandId": ["634001"], + "links": ["https://www.nest-biotech.com/sample-vials/59299027.html"] + }, + "wells": [ + "A1", + "B1", + "C1", + "D1", + "A2", + "B2", + "C2", + "D2", + "A3", + "B3", + "C3", + "D3", + "A4", + "B4", + "C4", + "D4", + "A5", + "B5", + "C5", + "D5", + "A6", + "B6", + "C6", + "D6" + ] + } + ], + "parameters": { + "format": "irregular", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_24_tuberack_nest_1.5ml_screwcap" + }, + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 2.36, + "topHeight": 0.2, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "topDiameter": 3.2, + "bottomDiameter": 1.9, + "topHeight": 1.88, + "bottomHeight": 0.2 + }, + { + "shape": "conical", + "topDiameter": 8.2, + "bottomDiameter": 3.2, + "topHeight": 13.7, + "bottomHeight": 1.88 + }, + { + "shape": "conical", + "topDiameter": 8.55, + "bottomDiameter": 8.2, + "topHeight": 42.6, + "bottomHeight": 13.7 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_1.5ml_snapcap/2.json b/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_1.5ml_snapcap/2.json new file mode 100644 index 00000000000..c1025a18ad1 --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_1.5ml_snapcap/2.json @@ -0,0 +1,352 @@ +{ + "ordering": [ + ["A1", "B1", "C1", "D1"], + ["A2", "B2", "C2", "D2"], + ["A3", "B3", "C3", "D3"], + ["A4", "B4", "C4", "D4"], + ["A5", "B5", "C5", "D5"], + ["A6", "B6", "C6", "D6"] + ], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "metadata": { + "displayName": "Opentrons 24 Tube Rack with NEST 1.5 mL Snapcap", + "displayCategory": "tubeRack", + "displayVolumeUnits": "mL", + "tags": [] + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 79.55 + }, + "wells": { + "A1": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 18.21, + "y": 75.43, + "z": 41.65, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 18.21, + "y": 56.15, + "z": 41.65, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 18.21, + "y": 36.87, + "z": 41.65, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 18.21, + "y": 17.59, + "z": 41.65, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 38.1, + "y": 75.43, + "z": 41.65, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 38.1, + "y": 56.15, + "z": 41.65, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 38.1, + "y": 36.87, + "z": 41.65, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 38.1, + "y": 17.59, + "z": 41.65, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 57.99, + "y": 75.43, + "z": 41.65, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 57.99, + "y": 56.15, + "z": 41.65, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 57.99, + "y": 36.87, + "z": 41.65, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 57.99, + "y": 17.59, + "z": 41.65, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 77.88, + "y": 75.43, + "z": 41.65, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 77.88, + "y": 56.15, + "z": 41.65, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 77.88, + "y": 36.87, + "z": 41.65, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 77.88, + "y": 17.59, + "z": 41.65, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 97.77, + "y": 75.43, + "z": 41.65, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 97.77, + "y": 56.15, + "z": 41.65, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 97.77, + "y": 36.87, + "z": 41.65, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 97.77, + "y": 17.59, + "z": 41.65, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 117.66, + "y": 75.43, + "z": 41.65, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 117.66, + "y": 56.15, + "z": 41.65, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 117.66, + "y": 36.87, + "z": 41.65, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 37.9, + "shape": "circular", + "diameter": 10.2, + "totalLiquidVolume": 1500, + "x": 117.66, + "y": 17.59, + "z": 41.65, + "geometryDefinitionId": "conicalWell" + } + }, + "groups": [ + { + "metadata": { + "displayName": "NEST 24x1.5 mL Snapcap", + "displayCategory": "tubeRack", + "wellBottomShape": "v" + }, + "brand": { + "brand": "NEST", + "brandId": ["615601", "615001"], + "links": [ + "https://www.nest-biotech.com/micro-centrifuge-tube/59201044.html" + ] + }, + "wells": [ + "A1", + "B1", + "C1", + "D1", + "A2", + "B2", + "C2", + "D2", + "A3", + "B3", + "C3", + "D3", + "A4", + "B4", + "C4", + "D4", + "A5", + "B5", + "C5", + "D5", + "A6", + "B6", + "C6", + "D6" + ] + } + ], + "parameters": { + "format": "irregular", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_24_tuberack_nest_1.5ml_snapcap" + }, + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 2.72, + "topHeight": 1.57, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "topDiameter": 8.9, + "bottomDiameter": 3.69, + "topHeight": 17.7, + "bottomHeight": 1.57 + }, + { + "shape": "conical", + "topDiameter": 9.28, + "bottomDiameter": 8.9, + "topHeight": 37.9, + "bottomHeight": 17.7 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_2ml_screwcap/2.json b/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_2ml_screwcap/2.json new file mode 100644 index 00000000000..7b1ab858fe6 --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_2ml_screwcap/2.json @@ -0,0 +1,351 @@ +{ + "ordering": [ + ["A1", "B1", "C1", "D1"], + ["A2", "B2", "C2", "D2"], + ["A3", "B3", "C3", "D3"], + ["A4", "B4", "C4", "D4"], + ["A5", "B5", "C5", "D5"], + ["A6", "B6", "C6", "D6"] + ], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "metadata": { + "displayName": "Opentrons 24 Tube Rack with NEST 2 mL Screwcap", + "displayCategory": "tubeRack", + "displayVolumeUnits": "mL", + "tags": [] + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 85.35 + }, + "wells": { + "A1": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 18.21, + "y": 75.43, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 18.21, + "y": 56.15, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 18.21, + "y": 36.87, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 18.21, + "y": 17.59, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 38.1, + "y": 75.43, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 38.1, + "y": 56.15, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 38.1, + "y": 36.87, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 38.1, + "y": 17.59, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 57.99, + "y": 75.43, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 57.99, + "y": 56.15, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 57.99, + "y": 36.87, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 57.99, + "y": 17.59, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 77.88, + "y": 75.43, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 77.88, + "y": 56.15, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 77.88, + "y": 36.87, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 77.88, + "y": 17.59, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 97.77, + "y": 75.43, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 97.77, + "y": 56.15, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 97.77, + "y": 36.87, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 97.77, + "y": 17.59, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 117.66, + "y": 75.43, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 117.66, + "y": 56.15, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 117.66, + "y": 36.87, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 44.05, + "shape": "circular", + "diameter": 8.69, + "totalLiquidVolume": 2000, + "x": 117.66, + "y": 17.59, + "z": 41.3, + "geometryDefinitionId": "conicalWell" + } + }, + "groups": [ + { + "metadata": { + "displayName": "NEST 24x2 mL Screwcap", + "displayCategory": "tubeRack", + "wellBottomShape": "v" + }, + "brand": { + "brand": "NEST", + "brandId": ["635001"], + "links": ["https://www.nest-biotech.com/sample-vials/59249854.html"] + }, + "wells": [ + "A1", + "B1", + "C1", + "D1", + "A2", + "B2", + "C2", + "D2", + "A3", + "B3", + "C3", + "D3", + "A4", + "B4", + "C4", + "D4", + "A5", + "B5", + "C5", + "D5", + "A6", + "B6", + "C6", + "D6" + ] + } + ], + "parameters": { + "format": "irregular", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_24_tuberack_nest_2ml_screwcap" + }, + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "conical", + "bottomDiameter": 1.21, + "topDiameter": 6.5, + "topHeight": 2.08, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "topDiameter": 8.14, + "bottomDiameter": 6.5, + "topHeight": 3.04, + "bottomHeight": 2.08 + }, + { + "shape": "conical", + "topDiameter": 8.55, + "bottomDiameter": 8.14, + "topHeight": 43.4, + "bottomHeight": 3.04 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_2ml_snapcap/2.json b/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_2ml_snapcap/2.json new file mode 100644 index 00000000000..7ae81c69e0c --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_2ml_snapcap/2.json @@ -0,0 +1,380 @@ +{ + "ordering": [ + ["A1", "B1", "C1", "D1"], + ["A2", "B2", "C2", "D2"], + ["A3", "B3", "C3", "D3"], + ["A4", "B4", "C4", "D4"], + ["A5", "B5", "C5", "D5"], + ["A6", "B6", "C6", "D6"] + ], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "metadata": { + "displayName": "Opentrons 24 Tube Rack with NEST 2 mL Snapcap", + "displayCategory": "tubeRack", + "displayVolumeUnits": "mL", + "tags": [] + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 79.45 + }, + "wells": { + "A1": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 18.21, + "y": 75.43, + "z": 40.17, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 18.21, + "y": 56.15, + "z": 40.17, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 18.21, + "y": 36.87, + "z": 40.17, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 18.21, + "y": 17.59, + "z": 40.17, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 38.1, + "y": 75.43, + "z": 40.17, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 38.1, + "y": 56.15, + "z": 40.17, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 38.1, + "y": 36.87, + "z": 40.17, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 38.1, + "y": 17.59, + "z": 40.17, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 57.99, + "y": 75.43, + "z": 40.17, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 57.99, + "y": 56.15, + "z": 40.17, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 57.99, + "y": 36.87, + "z": 40.17, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 57.99, + "y": 17.59, + "z": 40.17, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 77.88, + "y": 75.43, + "z": 40.17, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 77.88, + "y": 56.15, + "z": 40.17, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 77.88, + "y": 36.87, + "z": 40.17, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 77.88, + "y": 17.59, + "z": 40.17, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 97.77, + "y": 75.43, + "z": 40.17, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 97.77, + "y": 56.15, + "z": 40.17, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 97.77, + "y": 36.87, + "z": 40.17, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 97.77, + "y": 17.59, + "z": 40.17, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 117.66, + "y": 75.43, + "z": 40.17, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 117.66, + "y": 56.15, + "z": 40.17, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 117.66, + "y": 36.87, + "z": 40.17, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 39.28, + "shape": "circular", + "diameter": 10.18, + "totalLiquidVolume": 2000, + "x": 117.66, + "y": 17.59, + "z": 40.17, + "geometryDefinitionId": "conicalWell" + } + }, + "groups": [ + { + "metadata": { + "displayName": "NEST 24x2 mL Snapcap", + "displayCategory": "tubeRack", + "wellBottomShape": "u" + }, + "brand": { + "brand": "NEST", + "brandId": ["620611", "620011"], + "links": [ + "https://www.nest-biotech.com/micro-centrifuge-tube/59201045.html" + ] + }, + "wells": [ + "A1", + "B1", + "C1", + "D1", + "A2", + "B2", + "C2", + "D2", + "A3", + "B3", + "C3", + "D3", + "A4", + "B4", + "C4", + "D4", + "A5", + "B5", + "C5", + "D5", + "A6", + "B6", + "C6", + "D6" + ] + } + ], + "parameters": { + "format": "irregular", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_24_tuberack_nest_2ml_snapcap" + }, + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 3.19, + "topHeight": 1.21, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "topDiameter": 6.0, + "bottomDiameter": 5.0, + "topHeight": 1.83, + "bottomHeight": 1.21 + }, + { + "shape": "conical", + "topDiameter": 7.0, + "bottomDiameter": 6.0, + "topHeight": 2.59, + "bottomHeight": 1.83 + }, + { + "shape": "conical", + "topDiameter": 7.2, + "bottomDiameter": 7.0, + "topHeight": 2.74, + "bottomHeight": 2.59 + }, + { + "shape": "conical", + "topDiameter": 8.0, + "bottomDiameter": 7.2, + "topHeight": 3.98, + "bottomHeight": 2.74 + }, + { + "shape": "conical", + "topDiameter": 8.9, + "bottomDiameter": 8.0, + "topHeight": 15.04, + "bottomHeight": 3.98 + }, + { + "shape": "conical", + "topDiameter": 9.28, + "bottomDiameter": 8.9, + "topHeight": 39.28, + "bottomHeight": 15.04 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_40_aluminumblock_eppendorf_24x2ml_safelock_snapcap_generic_16x0.2ml_pcr_strip/2.json b/shared-data/labware/definitions/3/opentrons_40_aluminumblock_eppendorf_24x2ml_safelock_snapcap_generic_16x0.2ml_pcr_strip/2.json new file mode 100644 index 00000000000..5874b8dcba5 --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_40_aluminumblock_eppendorf_24x2ml_safelock_snapcap_generic_16x0.2ml_pcr_strip/2.json @@ -0,0 +1,526 @@ +{ + "wells": { + "A1": { + "totalLiquidVolume": 200, + "diameter": 5.46, + "shape": "circular", + "depth": 20.3, + "x": 5, + "y": 74.25, + "z": 28.92, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "totalLiquidVolume": 200, + "diameter": 5.46, + "shape": "circular", + "depth": 20.3, + "x": 5, + "y": 65.25, + "z": 28.92, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "totalLiquidVolume": 200, + "diameter": 5.46, + "shape": "circular", + "depth": 20.3, + "x": 5, + "y": 56.25, + "z": 28.92, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "totalLiquidVolume": 200, + "diameter": 5.46, + "shape": "circular", + "depth": 20.3, + "x": 5, + "y": 47.25, + "z": 28.92, + "geometryDefinitionId": "conicalWell" + }, + "E1": { + "totalLiquidVolume": 200, + "diameter": 5.46, + "shape": "circular", + "depth": 20.3, + "x": 5, + "y": 38.25, + "z": 28.92, + "geometryDefinitionId": "conicalWell" + }, + "F1": { + "totalLiquidVolume": 200, + "diameter": 5.46, + "shape": "circular", + "depth": 20.3, + "x": 5, + "y": 29.25, + "z": 28.92, + "geometryDefinitionId": "conicalWell" + }, + "G1": { + "totalLiquidVolume": 200, + "diameter": 5.46, + "shape": "circular", + "depth": 20.3, + "x": 5, + "y": 20.25, + "z": 28.92, + "geometryDefinitionId": "conicalWell" + }, + "H1": { + "totalLiquidVolume": 200, + "diameter": 5.46, + "shape": "circular", + "depth": 20.3, + "x": 5, + "y": 11.25, + "z": 28.92, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "totalLiquidVolume": 2000, + "diameter": 8.5, + "shape": "circular", + "depth": 42, + "x": 15.13, + "y": 72, + "z": 6.26, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "totalLiquidVolume": 2000, + "diameter": 8.5, + "shape": "circular", + "depth": 42, + "x": 15.13, + "y": 52.5, + "z": 6.26, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "totalLiquidVolume": 2000, + "diameter": 8.5, + "shape": "circular", + "depth": 42, + "x": 15.13, + "y": 33, + "z": 6.26, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "totalLiquidVolume": 2000, + "diameter": 8.5, + "shape": "circular", + "depth": 42, + "x": 15.13, + "y": 13.5, + "z": 6.26, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "totalLiquidVolume": 2000, + "diameter": 8.5, + "shape": "circular", + "depth": 42, + "x": 34.63, + "y": 72, + "z": 6.26, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "totalLiquidVolume": 2000, + "diameter": 8.5, + "shape": "circular", + "depth": 42, + "x": 34.63, + "y": 52.5, + "z": 6.26, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "totalLiquidVolume": 2000, + "diameter": 8.5, + "shape": "circular", + "depth": 42, + "x": 34.63, + "y": 33, + "z": 6.26, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "totalLiquidVolume": 2000, + "diameter": 8.5, + "shape": "circular", + "depth": 42, + "x": 34.63, + "y": 13.5, + "z": 6.26, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "totalLiquidVolume": 2000, + "diameter": 8.5, + "shape": "circular", + "depth": 42, + "x": 54.13, + "y": 72, + "z": 6.26, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "totalLiquidVolume": 2000, + "diameter": 8.5, + "shape": "circular", + "depth": 42, + "x": 54.13, + "y": 52.5, + "z": 6.26, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "totalLiquidVolume": 2000, + "diameter": 8.5, + "shape": "circular", + "depth": 42, + "x": 54.13, + "y": 33, + "z": 6.26, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "totalLiquidVolume": 2000, + "diameter": 8.5, + "shape": "circular", + "depth": 42, + "x": 54.13, + "y": 13.5, + "z": 6.26, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "totalLiquidVolume": 2000, + "diameter": 8.5, + "shape": "circular", + "depth": 42, + "x": 73.63, + "y": 72, + "z": 6.26, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "totalLiquidVolume": 2000, + "diameter": 8.5, + "shape": "circular", + "depth": 42, + "x": 73.63, + "y": 52.5, + "z": 6.26, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "totalLiquidVolume": 2000, + "diameter": 8.5, + "shape": "circular", + "depth": 42, + "x": 73.63, + "y": 33, + "z": 6.26, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "totalLiquidVolume": 2000, + "diameter": 8.5, + "shape": "circular", + "depth": 42, + "x": 73.63, + "y": 13.5, + "z": 6.26, + "geometryDefinitionId": "conicalWell" + }, + "A7": { + "totalLiquidVolume": 2000, + "diameter": 8.5, + "shape": "circular", + "depth": 42, + "x": 93.13, + "y": 72, + "z": 6.26, + "geometryDefinitionId": "conicalWell" + }, + "B7": { + "totalLiquidVolume": 2000, + "diameter": 8.5, + "shape": "circular", + "depth": 42, + "x": 93.13, + "y": 52.5, + "z": 6.26, + "geometryDefinitionId": "conicalWell" + }, + "C7": { + "totalLiquidVolume": 2000, + "diameter": 8.5, + "shape": "circular", + "depth": 42, + "x": 93.13, + "y": 33, + "z": 6.26, + "geometryDefinitionId": "conicalWell" + }, + "D7": { + "totalLiquidVolume": 2000, + "diameter": 8.5, + "shape": "circular", + "depth": 42, + "x": 93.13, + "y": 13.5, + "z": 6.26, + "geometryDefinitionId": "conicalWell" + }, + "A8": { + "totalLiquidVolume": 2000, + "diameter": 8.5, + "shape": "circular", + "depth": 42, + "x": 112.63, + "y": 72, + "z": 6.26, + "geometryDefinitionId": "conicalWell" + }, + "B8": { + "totalLiquidVolume": 2000, + "diameter": 8.5, + "shape": "circular", + "depth": 42, + "x": 112.63, + "y": 52.5, + "z": 6.26, + "geometryDefinitionId": "conicalWell" + }, + "C8": { + "totalLiquidVolume": 2000, + "diameter": 8.5, + "shape": "circular", + "depth": 42, + "x": 112.63, + "y": 33, + "z": 6.26, + "geometryDefinitionId": "conicalWell" + }, + "D8": { + "totalLiquidVolume": 2000, + "diameter": 8.5, + "shape": "circular", + "depth": 42, + "x": 112.63, + "y": 13.5, + "z": 6.26, + "geometryDefinitionId": "conicalWell" + }, + "A13": { + "totalLiquidVolume": 200, + "diameter": 5.46, + "shape": "circular", + "depth": 20.3, + "x": 122.75, + "y": 74.25, + "z": 28.92, + "geometryDefinitionId": "conicalWell" + }, + "B13": { + "totalLiquidVolume": 200, + "diameter": 5.46, + "shape": "circular", + "depth": 20.3, + "x": 122.75, + "y": 65.25, + "z": 28.92, + "geometryDefinitionId": "conicalWell" + }, + "C13": { + "totalLiquidVolume": 200, + "diameter": 5.46, + "shape": "circular", + "depth": 20.3, + "x": 122.75, + "y": 56.25, + "z": 28.92, + "geometryDefinitionId": "conicalWell" + }, + "D13": { + "totalLiquidVolume": 200, + "diameter": 5.46, + "shape": "circular", + "depth": 20.3, + "x": 122.75, + "y": 47.25, + "z": 28.92, + "geometryDefinitionId": "conicalWell" + }, + "E13": { + "totalLiquidVolume": 200, + "diameter": 5.46, + "shape": "circular", + "depth": 20.3, + "x": 122.75, + "y": 38.25, + "z": 28.92, + "geometryDefinitionId": "conicalWell" + }, + "F13": { + "totalLiquidVolume": 200, + "diameter": 5.46, + "shape": "circular", + "depth": 20.3, + "x": 122.75, + "y": 29.25, + "z": 28.92, + "geometryDefinitionId": "conicalWell" + }, + "G13": { + "totalLiquidVolume": 200, + "diameter": 5.46, + "shape": "circular", + "depth": 20.3, + "x": 122.75, + "y": 20.25, + "z": 28.92, + "geometryDefinitionId": "conicalWell" + }, + "H13": { + "totalLiquidVolume": 200, + "diameter": 5.46, + "shape": "circular", + "depth": 20.3, + "x": 122.75, + "y": 11.25, + "z": 28.92, + "geometryDefinitionId": "conicalWell" + } + }, + "brand": { + "brand": "Opentrons", + "brandId": ["4ti-0785/M", "649020"] + }, + "metadata": { + "displayName": "Opentrons 40 Well Aluminum Block with Eppendorf 24x2 mL Safe-Lock Snapcap, Generic 16x0.2 mL PCR Strip", + "displayCategory": "aluminumBlock", + "displayVolumeUnits": "mL", + "tags": [] + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 49.22 + }, + "namespace": "opentrons", + "schemaVersion": 3, + "version": 2, + "parameters": { + "format": "irregular", + "quirks": ["gripperIncompatible"], + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_40_aluminumblock_eppendorf_24x2ml_safelock_snapcap_generic_16x0.2ml_pcr_strip" + }, + "ordering": [ + ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"], + ["A3", "B3", "C3", "D3"], + ["A4", "B4", "C4", "D4"], + ["A5", "B5", "C5", "D5"], + ["A6", "B6", "C6", "D6"], + ["A7", "B7", "C7", "D7"], + ["A8", "B8", "C8", "D8"], + ["A13", "B13", "C13", "D13", "E13", "F13", "G13", "H13"] + ], + "groups": [ + { + "wells": [ + "A4", + "B4", + "C4", + "D4", + "A5", + "B5", + "C5", + "D5", + "A6", + "B6", + "C6", + "D6", + "A7", + "B7", + "C7", + "D7", + "A8", + "B8", + "C8", + "D8" + ], + "metadata": { + "displayName": "Eppendorf 24x2 mL Safelock Snapcap", + "displayCategory": "tubeRack", + "wellBottomShape": "u" + }, + "brand": { + "brand": "Eppendorf", + "brandId": [ + "022363344", + "022363352", + "022363379", + "022363395", + "022363417", + "022363433", + "022363450", + "022363476" + ], + "links": [ + "https://online-shop.eppendorf.us/US-en/Laboratory-Consumables-44512/Tubes-44515/Eppendorf-Safe-Lock-Tubes-PF-8863.html" + ] + } + }, + { + "wells": [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1", + "A13", + "B13", + "C13", + "D13", + "E13", + "F13", + "G13", + "H13" + ], + "metadata": { + "displayName": "Generic 2x8x0.2 mL PCR Strip", + "displayCategory": "tubeRack", + "wellBottomShape": "v" + }, + "brand": { + "brand": "generic", + "brandId": [], + "links": [] + } + } + ], + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_6_tuberack_falcon_50ml_conical/2.json b/shared-data/labware/definitions/3/opentrons_6_tuberack_falcon_50ml_conical/2.json new file mode 100644 index 00000000000..e94df16c28e --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_6_tuberack_falcon_50ml_conical/2.json @@ -0,0 +1,145 @@ +{ + "ordering": [ + ["A1", "B1"], + ["A2", "B2"], + ["A3", "B3"] + ], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "metadata": { + "tags": [], + "displayName": "Opentrons 6 Tube Rack with Falcon 50 mL Conical", + "displayCategory": "tubeRack", + "displayVolumeUnits": "mL" + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 120.3 + }, + "schemaVersion": 3, + "version": 2, + "namespace": "opentrons", + "wells": { + "B1": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 35.5, + "y": 25.24, + "z": 7.3, + "geometryDefinitionId": "conicalWell" + }, + "A1": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 35.5, + "y": 60.24, + "z": 7.3, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 70.5, + "y": 25.24, + "z": 7.3, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 70.5, + "y": 60.24, + "z": 7.3, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 105.5, + "y": 25.24, + "z": 7.3, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 105.5, + "y": 60.24, + "z": 7.3, + "geometryDefinitionId": "conicalWell" + } + }, + "parameters": { + "format": "irregular", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_6_tuberack_falcon_50ml_conical" + }, + "groups": [ + { + "wells": ["A1", "B1", "A2", "B2", "A3", "B3"], + "metadata": { + "displayName": "Falcon 6x50 mL Conical", + "displayCategory": "tubeRack", + "wellBottomShape": "v" + }, + "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" + ] + } + } + ], + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "conical", + "bottomDiameter": 6.15, + "topDiameter": 26.18, + "topHeight": 14.3, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "bottomDiameter": 26.18, + "topDiameter": 27.52, + "topHeight": 100.65, + "bottomHeight": 14.3 + }, + { + "shape": "conical", + "bottomDiameter": 27.52, + "topDiameter": 27.81, + "topHeight": 112.85, + "bottomHeight": 100.65 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_6_tuberack_nest_50ml_conical/2.json b/shared-data/labware/definitions/3/opentrons_6_tuberack_nest_50ml_conical/2.json new file mode 100644 index 00000000000..01ce776b887 --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_6_tuberack_nest_50ml_conical/2.json @@ -0,0 +1,143 @@ +{ + "ordering": [ + ["A1", "B1"], + ["A2", "B2"], + ["A3", "B3"] + ], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "metadata": { + "displayName": "Opentrons 6 Tube Rack with NEST 50 mL Conical", + "displayCategory": "tubeRack", + "displayVolumeUnits": "mL", + "tags": [] + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 120.35 + }, + "wells": { + "A1": { + "depth": 113.05, + "shape": "circular", + "diameter": 27.95, + "totalLiquidVolume": 50000, + "x": 35.5, + "y": 60.24, + "z": 7.3, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 113.05, + "shape": "circular", + "diameter": 27.95, + "totalLiquidVolume": 50000, + "x": 35.5, + "y": 25.24, + "z": 7.3, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 113.05, + "shape": "circular", + "diameter": 27.95, + "totalLiquidVolume": 50000, + "x": 70.5, + "y": 60.24, + "z": 7.3, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 113.05, + "shape": "circular", + "diameter": 27.95, + "totalLiquidVolume": 50000, + "x": 70.5, + "y": 25.24, + "z": 7.3, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 113.05, + "shape": "circular", + "diameter": 27.95, + "totalLiquidVolume": 50000, + "x": 105.5, + "y": 60.24, + "z": 7.3, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 113.05, + "shape": "circular", + "diameter": 27.95, + "totalLiquidVolume": 50000, + "x": 105.5, + "y": 25.24, + "z": 7.3, + "geometryDefinitionId": "conicalWell" + } + }, + "groups": [ + { + "metadata": { + "displayName": "NEST 6x50 mL Conical", + "displayCategory": "tubeRack", + "wellBottomShape": "v" + }, + "brand": { + "brand": "NEST", + "brandId": ["602052"], + "links": ["https://www.nest-biotech.com/centrifuge-tube/59282837.html"] + }, + "wells": ["A1", "B1", "A2", "B2", "A3", "B3"] + } + ], + "parameters": { + "format": "irregular", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_6_tuberack_nest_50ml_conical" + }, + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "conical", + "topDiameter": 26.0, + "bottomDiameter": 6.0, + "topHeight": 14.28, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "topDiameter": 27.0, + "bottomDiameter": 26.0, + "topHeight": 109.0, + "bottomHeight": 14.28 + }, + { + "shape": "conical", + "topDiameter": 27.45, + "bottomDiameter": 27.0, + "topHeight": 113.3, + "bottomHeight": 109.0 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_96_aluminumblock_biorad_wellplate_200ul/2.json b/shared-data/labware/definitions/3/opentrons_96_aluminumblock_biorad_wellplate_200ul/2.json new file mode 100644 index 00000000000..48811ce64cd --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_96_aluminumblock_biorad_wellplate_200ul/2.json @@ -0,0 +1,1165 @@ +{ + "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"] + ], + "schemaVersion": 3, + "version": 2, + "namespace": "opentrons", + "metadata": { + "displayName": "Opentrons 96 Well Aluminum Block with Bio-Rad Well Plate 200 \u00b5L", + "displayVolumeUnits": "\u00b5L", + "displayCategory": "aluminumBlock", + "tags": [] + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 18.81 + }, + "parameters": { + "format": "96Standard", + "quirks": ["gripperIncompatible"], + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_96_aluminumblock_biorad_wellplate_200ul" + }, + "wells": { + "H1": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 14.38, + "y": 11.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "G1": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 14.38, + "y": 20.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "F1": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 14.38, + "y": 29.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "E1": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 14.38, + "y": 38.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 14.38, + "y": 47.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 14.38, + "y": 56.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 14.38, + "y": 65.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "A1": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 14.38, + "y": 74.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "H2": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 23.38, + "y": 11.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "G2": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 23.38, + "y": 20.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "F2": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 23.38, + "y": 29.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "E2": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 23.38, + "y": 38.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 23.38, + "y": 47.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 23.38, + "y": 56.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 23.38, + "y": 65.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 23.38, + "y": 74.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "H3": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 32.38, + "y": 11.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "G3": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 32.38, + "y": 20.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "F3": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 32.38, + "y": 29.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "E3": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 32.38, + "y": 38.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 32.38, + "y": 47.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 32.38, + "y": 56.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 32.38, + "y": 65.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 32.38, + "y": 74.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "H4": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 41.38, + "y": 11.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "G4": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 41.38, + "y": 20.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "F4": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 41.38, + "y": 29.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "E4": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 41.38, + "y": 38.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 41.38, + "y": 47.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 41.38, + "y": 56.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 41.38, + "y": 65.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 41.38, + "y": 74.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "H5": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 50.38, + "y": 11.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "G5": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 50.38, + "y": 20.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "F5": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 50.38, + "y": 29.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "E5": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 50.38, + "y": 38.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 50.38, + "y": 47.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 50.38, + "y": 56.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 50.38, + "y": 65.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 50.38, + "y": 74.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "H6": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 59.38, + "y": 11.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "G6": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 59.38, + "y": 20.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "F6": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 59.38, + "y": 29.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "E6": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 59.38, + "y": 38.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 59.38, + "y": 47.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 59.38, + "y": 56.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 59.38, + "y": 65.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 59.38, + "y": 74.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "H7": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 68.38, + "y": 11.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "G7": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 68.38, + "y": 20.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "F7": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 68.38, + "y": 29.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "E7": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 68.38, + "y": 38.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "D7": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 68.38, + "y": 47.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "C7": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 68.38, + "y": 56.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "B7": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 68.38, + "y": 65.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "A7": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 68.38, + "y": 74.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "H8": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 77.38, + "y": 11.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "G8": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 77.38, + "y": 20.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "F8": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 77.38, + "y": 29.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "E8": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 77.38, + "y": 38.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "D8": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 77.38, + "y": 47.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "C8": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 77.38, + "y": 56.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "B8": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 77.38, + "y": 65.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "A8": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 77.38, + "y": 74.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "H9": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 86.38, + "y": 11.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "G9": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 86.38, + "y": 20.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "F9": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 86.38, + "y": 29.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "E9": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 86.38, + "y": 38.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "D9": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 86.38, + "y": 47.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "C9": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 86.38, + "y": 56.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "B9": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 86.38, + "y": 65.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "A9": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 86.38, + "y": 74.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "H10": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 95.38, + "y": 11.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "G10": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 95.38, + "y": 20.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "F10": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 95.38, + "y": 29.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "E10": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 95.38, + "y": 38.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "D10": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 95.38, + "y": 47.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "C10": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 95.38, + "y": 56.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "B10": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 95.38, + "y": 65.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "A10": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 95.38, + "y": 74.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "H11": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 104.38, + "y": 11.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "G11": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 104.38, + "y": 20.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "F11": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 104.38, + "y": 29.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "E11": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 104.38, + "y": 38.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "D11": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 104.38, + "y": 47.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "C11": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 104.38, + "y": 56.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "B11": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 104.38, + "y": 65.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "A11": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 104.38, + "y": 74.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "H12": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 113.38, + "y": 11.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "G12": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 113.38, + "y": 20.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "F12": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 113.38, + "y": 29.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "E12": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 113.38, + "y": 38.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "D12": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 113.38, + "y": 47.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "C12": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 113.38, + "y": 56.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "B12": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 113.38, + "y": 65.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + }, + "A12": { + "shape": "circular", + "depth": 14.81, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 113.38, + "y": 74.24, + "z": 4, + "geometryDefinitionId": "conicalWell" + } + }, + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/hardware-modules/products/aluminum-block-set" + ] + }, + "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": { + "displayName": "Bio-Rad 96 Well Plate 200 \u00b5L", + "displayCategory": "wellPlate", + "wellBottomShape": "v" + }, + "brand": { + "brand": "Bio-Rad", + "brandId": ["hsp9601"], + "links": [ + "http://www.bio-rad.com/en-us/sku/hsp9601-hard-shell-96-well-pcr-plates-low-profile-thin-wall-skirted-white-clear?ID=hsp9601" + ] + } + } + ], + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 1.42, + "topHeight": 1.21, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "bottomDiameter": 2.81, + "topDiameter": 3, + "topHeight": 1.87, + "bottomHeight": 1.21 + }, + { + "shape": "conical", + "bottomDiameter": 3, + "topDiameter": 4.98, + "topHeight": 8.58, + "bottomHeight": 1.87 + }, + { + "shape": "conical", + "bottomDiameter": 3, + "topDiameter": 5.44, + "topHeight": 10.14, + "bottomHeight": 8.58 + }, + { + "shape": "conical", + "bottomDiameter": 5.44, + "topDiameter": 5.44, + "topHeight": 14.57, + "bottomHeight": 10.14 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_96_aluminumblock_generic_pcr_strip_200ul/3.json b/shared-data/labware/definitions/3/opentrons_96_aluminumblock_generic_pcr_strip_200ul/3.json new file mode 100644 index 00000000000..7563adaab85 --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_96_aluminumblock_generic_pcr_strip_200ul/3.json @@ -0,0 +1,1128 @@ +{ + "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"] + ], + "schemaVersion": 3, + "version": 3, + "namespace": "opentrons", + "metadata": { + "displayName": "Opentrons 96 Well Aluminum Block with Generic PCR Strip 200 \u00b5L", + "displayVolumeUnits": "\u00b5L", + "displayCategory": "aluminumBlock", + "tags": [] + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 25.61 + }, + "parameters": { + "format": "96Standard", + "quirks": ["gripperIncompatible"], + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_96_aluminumblock_generic_pcr_strip_200ul" + }, + "wells": { + "H1": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 14.38, + "y": 11.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "G1": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 14.38, + "y": 20.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "F1": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 14.38, + "y": 29.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "E1": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 14.38, + "y": 38.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 14.38, + "y": 47.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 14.38, + "y": 56.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 14.38, + "y": 65.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "A1": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 14.38, + "y": 74.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "H2": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 23.38, + "y": 11.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "G2": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 23.38, + "y": 20.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "F2": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 23.38, + "y": 29.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "E2": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 23.38, + "y": 38.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 23.38, + "y": 47.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 23.38, + "y": 56.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 23.38, + "y": 65.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 23.38, + "y": 74.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "H3": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 32.38, + "y": 11.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "G3": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 32.38, + "y": 20.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "F3": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 32.38, + "y": 29.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "E3": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 32.38, + "y": 38.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 32.38, + "y": 47.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 32.38, + "y": 56.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 32.38, + "y": 65.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 32.38, + "y": 74.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "H4": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 41.38, + "y": 11.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "G4": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 41.38, + "y": 20.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "F4": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 41.38, + "y": 29.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "E4": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 41.38, + "y": 38.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 41.38, + "y": 47.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 41.38, + "y": 56.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 41.38, + "y": 65.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 41.38, + "y": 74.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "H5": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 50.38, + "y": 11.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "G5": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 50.38, + "y": 20.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "F5": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 50.38, + "y": 29.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "E5": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 50.38, + "y": 38.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 50.38, + "y": 47.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 50.38, + "y": 56.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 50.38, + "y": 65.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 50.38, + "y": 74.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "H6": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 59.38, + "y": 11.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "G6": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 59.38, + "y": 20.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "F6": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 59.38, + "y": 29.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "E6": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 59.38, + "y": 38.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 59.38, + "y": 47.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 59.38, + "y": 56.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 59.38, + "y": 65.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 59.38, + "y": 74.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "H7": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 68.38, + "y": 11.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "G7": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 68.38, + "y": 20.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "F7": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 68.38, + "y": 29.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "E7": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 68.38, + "y": 38.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "D7": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 68.38, + "y": 47.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "C7": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 68.38, + "y": 56.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "B7": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 68.38, + "y": 65.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "A7": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 68.38, + "y": 74.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "H8": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 77.38, + "y": 11.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "G8": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 77.38, + "y": 20.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "F8": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 77.38, + "y": 29.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "E8": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 77.38, + "y": 38.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "D8": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 77.38, + "y": 47.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "C8": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 77.38, + "y": 56.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "B8": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 77.38, + "y": 65.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "A8": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 77.38, + "y": 74.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "H9": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 86.38, + "y": 11.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "G9": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 86.38, + "y": 20.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "F9": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 86.38, + "y": 29.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "E9": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 86.38, + "y": 38.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "D9": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 86.38, + "y": 47.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "C9": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 86.38, + "y": 56.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "B9": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 86.38, + "y": 65.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "A9": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 86.38, + "y": 74.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "H10": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 95.38, + "y": 11.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "G10": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 95.38, + "y": 20.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "F10": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 95.38, + "y": 29.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "E10": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 95.38, + "y": 38.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "D10": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 95.38, + "y": 47.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "C10": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 95.38, + "y": 56.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "B10": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 95.38, + "y": 65.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "A10": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 95.38, + "y": 74.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "H11": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 104.38, + "y": 11.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "G11": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 104.38, + "y": 20.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "F11": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 104.38, + "y": 29.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "E11": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 104.38, + "y": 38.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "D11": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 104.38, + "y": 47.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "C11": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 104.38, + "y": 56.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "B11": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 104.38, + "y": 65.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "A11": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 104.38, + "y": 74.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "H12": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 113.38, + "y": 11.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "G12": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 113.38, + "y": 20.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "F12": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 113.38, + "y": 29.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "E12": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 113.38, + "y": 38.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "D12": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 113.38, + "y": 47.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "C12": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 113.38, + "y": 56.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "B12": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 113.38, + "y": 65.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + }, + "A12": { + "shape": "circular", + "depth": 20.3, + "diameter": 5.46, + "totalLiquidVolume": 200, + "x": 113.38, + "y": 74.25, + "z": 5.31, + "geometryDefinitionId": "conicalWell" + } + }, + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/hardware-modules/products/aluminum-block-set" + ] + }, + "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": { + "displayName": "Generic 12x8x0.2 mL PCR Strip", + "displayCategory": "tubeRack", + "wellBottomShape": "v" + }, + "brand": { + "brand": "generic", + "brandId": [], + "links": [] + } + } + ], + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_96_aluminumblock_nest_wellplate_100ul/2.json b/shared-data/labware/definitions/3/opentrons_96_aluminumblock_nest_wellplate_100ul/2.json new file mode 100644 index 00000000000..567af45ba6f --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_96_aluminumblock_nest_wellplate_100ul/2.json @@ -0,0 +1,1149 @@ +{ + "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"] + ], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/hardware-modules/products/aluminum-block-set" + ] + }, + "metadata": { + "displayName": "Opentrons 96 Well Aluminum Block with NEST Well Plate 100 \u00b5L", + "displayCategory": "aluminumBlock", + "displayVolumeUnits": "\u00b5L", + "tags": [] + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.45, + "zDimension": 21.2 + }, + "wells": { + "A1": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "E1": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "F1": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "G1": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "H1": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "E2": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "F2": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "G2": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "H2": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "E3": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "F3": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "G3": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "H3": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "E4": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "F4": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "G4": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "H4": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "E5": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "F5": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "G5": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "H5": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "E6": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "F6": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "G6": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "H6": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "A7": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "B7": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "C7": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "D7": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "E7": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "F7": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "G7": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "H7": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "A8": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "B8": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "C8": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "D8": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "E8": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "F8": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "G8": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "H8": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "A9": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "B9": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "C9": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "D9": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "E9": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "F9": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "G9": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "H9": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "A10": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "B10": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "C10": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "D10": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "E10": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "F10": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "G10": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "H10": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "A11": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "B11": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "C11": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "D11": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "E11": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "F11": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "G11": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "H11": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "A12": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "B12": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "C12": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "D12": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "E12": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "F12": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "G12": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + }, + "H12": { + "depth": 14.78, + "shape": "circular", + "diameter": 5.34, + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.2, + "z": 6.42, + "geometryDefinitionId": "conicalWell" + } + }, + "groups": [ + { + "metadata": { + "displayName": "NEST 96 Well Plate 100 \u00b5L", + "displayCategory": "wellPlate", + "wellBottomShape": "v" + }, + "brand": { + "brand": "NEST", + "brandId": ["402501"], + "links": ["https://www.nest-biotech.com/pcr-plates/58773587.html"] + }, + "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" + ] + } + ], + "parameters": { + "format": "96Standard", + "quirks": ["gripperIncompatible"], + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_96_aluminumblock_nest_wellplate_100ul" + }, + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 3.015, + "topHeight": 0.2, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "bottomDiameter": 2.16, + "topDiameter": 5.26, + "topHeight": 0.2, + "bottomHeight": 9.89 + }, + { + "shape": "conical", + "bottomDiameter": 5.26, + "topDiameter": 5.34, + "topHeight": 14.7, + "bottomHeight": 9.89 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_96_deep_well_adapter_nest_wellplate_2ml_deep/2.json b/shared-data/labware/definitions/3/opentrons_96_deep_well_adapter_nest_wellplate_2ml_deep/2.json new file mode 100644 index 00000000000..4f4a32320eb --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_96_deep_well_adapter_nest_wellplate_2ml_deep/2.json @@ -0,0 +1,1241 @@ +{ + "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"] + ], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [] + }, + "metadata": { + "displayName": "Opentrons 96 Deep Well Heater-Shaker Adapter with NEST Deep Well Plate 2 mL", + "displayCategory": "adapter", + "displayVolumeUnits": "\u00b5L", + "tags": [] + }, + "dimensions": { + "xDimension": 127.6, + "yDimension": 85.3, + "zDimension": 42.25 + }, + "wells": { + "A1": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 14.3, + "y": 74.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "B1": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 14.3, + "y": 65.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "C1": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 14.3, + "y": 56.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "D1": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 14.3, + "y": 47.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "E1": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 14.3, + "y": 38.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "F1": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 14.3, + "y": 29.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "G1": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 14.3, + "y": 20.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "H1": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 14.3, + "y": 11.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "A2": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 23.3, + "y": 74.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "B2": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 23.3, + "y": 65.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "C2": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 23.3, + "y": 56.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "D2": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 23.3, + "y": 47.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "E2": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 23.3, + "y": 38.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "F2": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 23.3, + "y": 29.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "G2": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 23.3, + "y": 20.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "H2": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 23.3, + "y": 11.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "A3": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 32.3, + "y": 74.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "B3": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 32.3, + "y": 65.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "C3": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 32.3, + "y": 56.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "D3": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 32.3, + "y": 47.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "E3": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 32.3, + "y": 38.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "F3": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 32.3, + "y": 29.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "G3": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 32.3, + "y": 20.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "H3": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 32.3, + "y": 11.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "A4": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 41.3, + "y": 74.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "B4": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 41.3, + "y": 65.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "C4": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 41.3, + "y": 56.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "D4": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 41.3, + "y": 47.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "E4": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 41.3, + "y": 38.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "F4": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 41.3, + "y": 29.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "G4": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 41.3, + "y": 20.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "H4": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 41.3, + "y": 11.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "A5": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 50.3, + "y": 74.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "B5": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 50.3, + "y": 65.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "C5": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 50.3, + "y": 56.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "D5": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 50.3, + "y": 47.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "E5": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 50.3, + "y": 38.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "F5": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 50.3, + "y": 29.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "G5": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 50.3, + "y": 20.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "H5": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 50.3, + "y": 11.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "A6": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 59.3, + "y": 74.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "B6": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 59.3, + "y": 65.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "C6": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 59.3, + "y": 56.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "D6": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 59.3, + "y": 47.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "E6": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 59.3, + "y": 38.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "F6": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 59.3, + "y": 29.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "G6": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 59.3, + "y": 20.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "H6": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 59.3, + "y": 11.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "A7": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 68.3, + "y": 74.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "B7": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 68.3, + "y": 65.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "C7": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 68.3, + "y": 56.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "D7": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 68.3, + "y": 47.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "E7": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 68.3, + "y": 38.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "F7": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 68.3, + "y": 29.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "G7": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 68.3, + "y": 20.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "H7": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 68.3, + "y": 11.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "A8": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 77.3, + "y": 74.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "B8": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 77.3, + "y": 65.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "C8": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 77.3, + "y": 56.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "D8": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 77.3, + "y": 47.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "E8": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 77.3, + "y": 38.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "F8": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 77.3, + "y": 29.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "G8": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 77.3, + "y": 20.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "H8": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 77.3, + "y": 11.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "A9": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 86.3, + "y": 74.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "B9": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 86.3, + "y": 65.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "C9": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 86.3, + "y": 56.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "D9": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 86.3, + "y": 47.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "E9": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 86.3, + "y": 38.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "F9": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 86.3, + "y": 29.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "G9": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 86.3, + "y": 20.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "H9": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 86.3, + "y": 11.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "A10": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 95.3, + "y": 74.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "B10": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 95.3, + "y": 65.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "C10": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 95.3, + "y": 56.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "D10": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 95.3, + "y": 47.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "E10": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 95.3, + "y": 38.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "F10": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 95.3, + "y": 29.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "G10": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 95.3, + "y": 20.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "H10": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 95.3, + "y": 11.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "A11": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 104.3, + "y": 74.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "B11": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 104.3, + "y": 65.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "C11": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 104.3, + "y": 56.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "D11": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 104.3, + "y": 47.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "E11": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 104.3, + "y": 38.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "F11": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 104.3, + "y": 29.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "G11": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 104.3, + "y": 20.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "H11": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 104.3, + "y": 11.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "A12": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 113.3, + "y": 74.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "B12": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 113.3, + "y": 65.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "C12": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 113.3, + "y": 56.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "D12": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 113.3, + "y": 47.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "E12": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 113.3, + "y": 38.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "F12": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 113.3, + "y": 29.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "G12": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 113.3, + "y": 20.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + }, + "H12": { + "depth": 38, + "totalLiquidVolume": 2000, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "x": 113.3, + "y": 11.15, + "z": 4.25, + "geometryDefinitionId": "cuboidalWell" + } + }, + "groups": [ + { + "metadata": { + "displayName": "NEST 96 Deepwell Plate 2mL", + "displayCategory": "wellPlate", + "wellBottomShape": "v" + }, + "brand": { + "brand": "NEST", + "brandId": ["503501", "503001"], + "links": ["https://www.nest-biotech.com/deep-well-plates/59253726.html"] + }, + "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" + ] + } + ], + "parameters": { + "format": "96Standard", + "quirks": ["gripperIncompatible"], + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_96_deep_well_adapter_nest_wellplate_2ml_deep" + }, + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "cuboidalWell": { + "sections": [ + { + "shape": "cuboidal", + "topXDimension": 7.4, + "topYDimension": 7.4, + "bottomXDimension": 2.63, + "bottomYDimension": 2.63, + "topHeight": 1.67, + "bottomHeight": 0.0 + }, + { + "shape": "cuboidal", + "topXDimension": 8.2, + "topYDimension": 8.2, + "bottomXDimension": 7.4, + "bottomYDimension": 7.4, + "topHeight": 38.05, + "bottomHeight": 1.67 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_96_flat_bottom_adapter_nest_wellplate_200ul_flat/2.json b/shared-data/labware/definitions/3/opentrons_96_flat_bottom_adapter_nest_wellplate_200ul_flat/2.json new file mode 100644 index 00000000000..3cb7a8de52a --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_96_flat_bottom_adapter_nest_wellplate_200ul_flat/2.json @@ -0,0 +1,1136 @@ +{ + "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"] + ], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [] + }, + "metadata": { + "displayName": "Opentrons 96 Flat Bottom Heater-Shaker Adapter with NEST 96 Well Plate 200 \u00b5L Flat", + "displayCategory": "adapter", + "displayVolumeUnits": "\u00b5L", + "tags": [] + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.5 + }, + "wells": { + "A1": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 14.28, + "y": 74.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 14.28, + "y": 65.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 14.28, + "y": 56.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 14.28, + "y": 47.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "E1": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 14.28, + "y": 38.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "F1": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 14.28, + "y": 29.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "G1": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 14.28, + "y": 20.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "H1": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 14.28, + "y": 11.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 23.28, + "y": 74.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 23.28, + "y": 65.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 23.28, + "y": 56.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 23.28, + "y": 47.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "E2": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 23.28, + "y": 38.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "F2": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 23.28, + "y": 29.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "G2": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 23.28, + "y": 20.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "H2": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 23.28, + "y": 11.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 32.28, + "y": 74.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 32.28, + "y": 65.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 32.28, + "y": 56.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 32.28, + "y": 47.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "E3": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 32.28, + "y": 38.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "F3": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 32.28, + "y": 29.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "G3": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 32.28, + "y": 20.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "H3": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 32.28, + "y": 11.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 41.28, + "y": 74.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 41.28, + "y": 65.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 41.28, + "y": 56.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 41.28, + "y": 47.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "E4": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 41.28, + "y": 38.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "F4": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 41.28, + "y": 29.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "G4": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 41.28, + "y": 20.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "H4": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 41.28, + "y": 11.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 50.28, + "y": 74.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 50.28, + "y": 65.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 50.28, + "y": 56.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 50.28, + "y": 47.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "E5": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 50.28, + "y": 38.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "F5": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 50.28, + "y": 29.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "G5": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 50.28, + "y": 20.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "H5": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 50.28, + "y": 11.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 59.28, + "y": 74.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 59.28, + "y": 65.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 59.28, + "y": 56.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 59.28, + "y": 47.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "E6": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 59.28, + "y": 38.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "F6": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 59.28, + "y": 29.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "G6": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 59.28, + "y": 20.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "H6": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 59.28, + "y": 11.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "A7": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 68.28, + "y": 74.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "B7": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 68.28, + "y": 65.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "C7": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 68.28, + "y": 56.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "D7": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 68.28, + "y": 47.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "E7": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 68.28, + "y": 38.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "F7": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 68.28, + "y": 29.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "G7": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 68.28, + "y": 20.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "H7": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 68.28, + "y": 11.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "A8": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 77.28, + "y": 74.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "B8": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 77.28, + "y": 65.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "C8": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 77.28, + "y": 56.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "D8": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 77.28, + "y": 47.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "E8": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 77.28, + "y": 38.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "F8": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 77.28, + "y": 29.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "G8": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 77.28, + "y": 20.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "H8": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 77.28, + "y": 11.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "A9": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 86.28, + "y": 74.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "B9": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 86.28, + "y": 65.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "C9": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 86.28, + "y": 56.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "D9": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 86.28, + "y": 47.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "E9": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 86.28, + "y": 38.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "F9": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 86.28, + "y": 29.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "G9": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 86.28, + "y": 20.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "H9": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 86.28, + "y": 11.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "A10": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 95.28, + "y": 74.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "B10": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 95.28, + "y": 65.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "C10": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 95.28, + "y": 56.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "D10": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 95.28, + "y": 47.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "E10": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 95.28, + "y": 38.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "F10": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 95.28, + "y": 29.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "G10": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 95.28, + "y": 20.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "H10": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 95.28, + "y": 11.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "A11": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 104.28, + "y": 74.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "B11": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 104.28, + "y": 65.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "C11": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 104.28, + "y": 56.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "D11": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 104.28, + "y": 47.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "E11": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 104.28, + "y": 38.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "F11": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 104.28, + "y": 29.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "G11": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 104.28, + "y": 20.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "H11": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 104.28, + "y": 11.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "A12": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 113.28, + "y": 74.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "B12": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 113.28, + "y": 65.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "C12": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 113.28, + "y": 56.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "D12": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 113.28, + "y": 47.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "E12": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 113.28, + "y": 38.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "F12": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 113.28, + "y": 29.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "G12": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 113.28, + "y": 20.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + }, + "H12": { + "depth": 10.8, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 6.85, + "x": 113.28, + "y": 11.18, + "z": 4.55, + "geometryDefinitionId": "conicalWell" + } + }, + "groups": [ + { + "metadata": { + "displayName": "NEST 96 Well Plate 200 \u00b5L Flat", + "displayCategory": "wellPlate", + "wellBottomShape": "flat" + }, + "brand": { + "brand": "NEST", + "brandId": ["701011", "701001"], + "links": [ + "https://www.nest-biotech.com/cell-culture-plates/59415537.html" + ] + }, + "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" + ] + } + ], + "parameters": { + "format": "96Standard", + "quirks": ["gripperIncompatible"], + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_96_flat_bottom_adapter_nest_wellplate_200ul_flat" + }, + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "conical", + "bottomDiameter": 6.32, + "topDiameter": 6.85, + "topHeight": 10.8, + "bottomHeight": 0.0 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_96_pcr_adapter_armadillo_wellplate_200ul/2.json b/shared-data/labware/definitions/3/opentrons_96_pcr_adapter_armadillo_wellplate_200ul/2.json new file mode 100644 index 00000000000..86c28b5cbf9 --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_96_pcr_adapter_armadillo_wellplate_200ul/2.json @@ -0,0 +1,1128 @@ +{ + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "parameters": { + "loadName": "opentrons_96_pcr_adapter_armadillo_wellplate_200ul", + "quirks": ["gripperIncompatible"], + "format": "96Standard", + "isTiprack": false, + "isMagneticModuleCompatible": false + }, + "metadata": { + "displayName": "Opentrons 96 PCR Heater-Shaker Adapter with Armadillo Well Plate 200 \u00b5l", + "displayCategory": "aluminumBlock", + "displayVolumeUnits": "\u00b5L", + "tags": [] + }, + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [] + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 18.9 + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "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"] + ], + "wells": { + "A1": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 14.38, + "y": 74.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 14.38, + "y": 65.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 14.38, + "y": 56.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 14.38, + "y": 47.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "E1": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 14.38, + "y": 38.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "F1": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 14.38, + "y": 29.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "G1": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 14.38, + "y": 20.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "H1": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 14.38, + "y": 11.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 23.38, + "y": 74.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 23.38, + "y": 65.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 23.38, + "y": 56.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 23.38, + "y": 47.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "E2": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 23.38, + "y": 38.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "F2": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 23.38, + "y": 29.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "G2": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 23.38, + "y": 20.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "H2": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 23.38, + "y": 11.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 32.38, + "y": 74.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 32.38, + "y": 65.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 32.38, + "y": 56.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 32.38, + "y": 47.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "E3": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 32.38, + "y": 38.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "F3": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 32.38, + "y": 29.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "G3": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 32.38, + "y": 20.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "H3": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 32.38, + "y": 11.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 41.38, + "y": 74.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 41.38, + "y": 65.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 41.38, + "y": 56.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 41.38, + "y": 47.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "E4": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 41.38, + "y": 38.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "F4": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 41.38, + "y": 29.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "G4": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 41.38, + "y": 20.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "H4": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 41.38, + "y": 11.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 50.38, + "y": 74.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 50.38, + "y": 65.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 50.38, + "y": 56.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 50.38, + "y": 47.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "E5": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 50.38, + "y": 38.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "F5": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 50.38, + "y": 29.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "G5": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 50.38, + "y": 20.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "H5": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 50.38, + "y": 11.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 59.38, + "y": 74.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 59.38, + "y": 65.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 59.38, + "y": 56.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 59.38, + "y": 47.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "E6": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 59.38, + "y": 38.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "F6": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 59.38, + "y": 29.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "G6": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 59.38, + "y": 20.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "H6": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 59.38, + "y": 11.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "A7": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 68.38, + "y": 74.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "B7": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 68.38, + "y": 65.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "C7": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 68.38, + "y": 56.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "D7": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 68.38, + "y": 47.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "E7": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 68.38, + "y": 38.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "F7": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 68.38, + "y": 29.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "G7": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 68.38, + "y": 20.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "H7": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 68.38, + "y": 11.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "A8": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 77.38, + "y": 74.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "B8": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 77.38, + "y": 65.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "C8": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 77.38, + "y": 56.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "D8": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 77.38, + "y": 47.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "E8": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 77.38, + "y": 38.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "F8": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 77.38, + "y": 29.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "G8": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 77.38, + "y": 20.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "H8": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 77.38, + "y": 11.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "A9": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 86.38, + "y": 74.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "B9": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 86.38, + "y": 65.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "C9": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 86.38, + "y": 56.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "D9": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 86.38, + "y": 47.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "E9": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 86.38, + "y": 38.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "F9": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 86.38, + "y": 29.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "G9": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 86.38, + "y": 20.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "H9": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 86.38, + "y": 11.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "A10": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 95.38, + "y": 74.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "B10": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 95.38, + "y": 65.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "C10": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 95.38, + "y": 56.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "D10": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 95.38, + "y": 47.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "E10": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 95.38, + "y": 38.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "F10": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 95.38, + "y": 29.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "G10": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 95.38, + "y": 20.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "H10": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 95.38, + "y": 11.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "A11": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 104.38, + "y": 74.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "B11": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 104.38, + "y": 65.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "C11": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 104.38, + "y": 56.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "D11": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 104.38, + "y": 47.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "E11": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 104.38, + "y": 38.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "F11": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 104.38, + "y": 29.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "G11": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 104.38, + "y": 20.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "H11": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 104.38, + "y": 11.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "A12": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 113.38, + "y": 74.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "B12": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 113.38, + "y": 65.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "C12": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 113.38, + "y": 56.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "D12": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 113.38, + "y": 47.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "E12": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 113.38, + "y": 38.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "F12": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 113.38, + "y": 29.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "G12": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 113.38, + "y": 20.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + }, + "H12": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 113.38, + "y": 11.24, + "z": 3.95, + "geometryDefinitionId": "conicalWell" + } + }, + "groups": [ + { + "metadata": { + "displayName": "Armadillo 96 Well Plate 200 \u00b5L PCR Full Skirt", + "displayCategory": "wellPlate", + "wellBottomShape": "v" + }, + "brand": { + "brand": "Thermo Scientific", + "brandId": ["AB2396"], + "links": [ + "https://www.fishersci.com/shop/products/armadillo-96-well-pcr-plate-1/AB2396" + ] + }, + "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" + ] + } + ], + "innerLabwareGeometry": { + "conicalWell": { + "sections": [] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_96_pcr_adapter_nest_wellplate_100ul_pcr_full_skirt/2.json b/shared-data/labware/definitions/3/opentrons_96_pcr_adapter_nest_wellplate_100ul_pcr_full_skirt/2.json new file mode 100644 index 00000000000..013108e6d70 --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_96_pcr_adapter_nest_wellplate_100ul_pcr_full_skirt/2.json @@ -0,0 +1,1147 @@ +{ + "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"] + ], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [] + }, + "metadata": { + "displayName": "Opentrons 96 PCR Heater-Shaker Adapter with NEST Well Plate 100 \u00b5l", + "displayCategory": "adapter", + "displayVolumeUnits": "\u00b5L", + "tags": [] + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 19.35 + }, + "wells": { + "A1": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 14.38, + "y": 74.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 14.38, + "y": 65.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 14.38, + "y": 56.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 14.38, + "y": 47.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "E1": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 14.38, + "y": 38.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "F1": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 14.38, + "y": 29.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "G1": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 14.38, + "y": 20.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "H1": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 14.38, + "y": 11.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 23.38, + "y": 74.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 23.38, + "y": 65.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 23.38, + "y": 56.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 23.38, + "y": 47.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "E2": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 23.38, + "y": 38.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "F2": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 23.38, + "y": 29.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "G2": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 23.38, + "y": 20.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "H2": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 23.38, + "y": 11.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 32.38, + "y": 74.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 32.38, + "y": 65.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 32.38, + "y": 56.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 32.38, + "y": 47.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "E3": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 32.38, + "y": 38.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "F3": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 32.38, + "y": 29.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "G3": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 32.38, + "y": 20.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "H3": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 32.38, + "y": 11.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 41.38, + "y": 74.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 41.38, + "y": 65.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 41.38, + "y": 56.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 41.38, + "y": 47.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "E4": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 41.38, + "y": 38.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "F4": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 41.38, + "y": 29.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "G4": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 41.38, + "y": 20.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "H4": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 41.38, + "y": 11.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 50.38, + "y": 74.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 50.38, + "y": 65.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 50.38, + "y": 56.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 50.38, + "y": 47.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "E5": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 50.38, + "y": 38.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "F5": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 50.38, + "y": 29.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "G5": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 50.38, + "y": 20.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "H5": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 50.38, + "y": 11.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 59.38, + "y": 74.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 59.38, + "y": 65.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 59.38, + "y": 56.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 59.38, + "y": 47.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "E6": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 59.38, + "y": 38.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "F6": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 59.38, + "y": 29.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "G6": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 59.38, + "y": 20.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "H6": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 59.38, + "y": 11.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "A7": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 68.38, + "y": 74.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "B7": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 68.38, + "y": 65.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "C7": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 68.38, + "y": 56.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "D7": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 68.38, + "y": 47.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "E7": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 68.38, + "y": 38.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "F7": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 68.38, + "y": 29.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "G7": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 68.38, + "y": 20.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "H7": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 68.38, + "y": 11.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "A8": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 77.38, + "y": 74.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "B8": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 77.38, + "y": 65.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "C8": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 77.38, + "y": 56.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "D8": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 77.38, + "y": 47.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "E8": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 77.38, + "y": 38.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "F8": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 77.38, + "y": 29.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "G8": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 77.38, + "y": 20.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "H8": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 77.38, + "y": 11.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "A9": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 86.38, + "y": 74.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "B9": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 86.38, + "y": 65.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "C9": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 86.38, + "y": 56.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "D9": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 86.38, + "y": 47.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "E9": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 86.38, + "y": 38.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "F9": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 86.38, + "y": 29.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "G9": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 86.38, + "y": 20.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "H9": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 86.38, + "y": 11.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "A10": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 95.38, + "y": 74.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "B10": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 95.38, + "y": 65.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "C10": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 95.38, + "y": 56.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "D10": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 95.38, + "y": 47.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "E10": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 95.38, + "y": 38.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "F10": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 95.38, + "y": 29.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "G10": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 95.38, + "y": 20.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "H10": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 95.38, + "y": 11.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "A11": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 104.38, + "y": 74.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "B11": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 104.38, + "y": 65.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "C11": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 104.38, + "y": 56.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "D11": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 104.38, + "y": 47.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "E11": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 104.38, + "y": 38.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "F11": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 104.38, + "y": 29.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "G11": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 104.38, + "y": 20.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "H11": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 104.38, + "y": 11.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "A12": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 113.38, + "y": 74.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "B12": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 113.38, + "y": 65.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "C12": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 113.38, + "y": 56.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "D12": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 113.38, + "y": 47.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "E12": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 113.38, + "y": 38.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "F12": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 113.38, + "y": 29.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "G12": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 113.38, + "y": 20.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + }, + "H12": { + "depth": 14.78, + "totalLiquidVolume": 100, + "shape": "circular", + "diameter": 5.34, + "x": 113.38, + "y": 11.24, + "z": 3.57, + "geometryDefinitionId": "conicalWell" + } + }, + "groups": [ + { + "metadata": { + "displayName": "NEST 96 Well Plate 100 \u00b5L PCR Full Skirt", + "displayCategory": "wellPlate", + "wellBottomShape": "v" + }, + "brand": { + "brand": "NEST", + "brandId": ["402501"], + "links": ["https://www.nest-biotech.com/pcr-plates/58773587.html"] + }, + "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" + ] + } + ], + "parameters": { + "format": "96Standard", + "quirks": ["gripperIncompatible"], + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_96_pcr_adapter_nest_wellplate_100ul_pcr_full_skirt" + }, + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 3.015, + "topHeight": 0.2, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "bottomDiameter": 2.16, + "topDiameter": 5.26, + "topHeight": 0.2, + "bottomHeight": 9.89 + }, + { + "shape": "conical", + "bottomDiameter": 5.26, + "topDiameter": 5.34, + "topHeight": 14.7, + "bottomHeight": 9.89 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_96_wellplate_200ul_pcr_full_skirt/3.json b/shared-data/labware/definitions/3/opentrons_96_wellplate_200ul_pcr_full_skirt/3.json new file mode 100644 index 00000000000..74aed7fe79d --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_96_wellplate_200ul_pcr_full_skirt/3.json @@ -0,0 +1,1167 @@ +{ + "namespace": "opentrons", + "version": 3, + "schemaVersion": 3, + "parameters": { + "loadName": "opentrons_96_wellplate_200ul_pcr_full_skirt", + "format": "96Standard", + "isTiprack": false, + "isMagneticModuleCompatible": true + }, + "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/" + ] + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 16.0 + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "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 + } + }, + "gripForce": 15, + "gripHeightFromLabwareBottom": 10, + "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"] + ], + "wells": { + "A1": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 14.38, + "y": 74.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 14.38, + "y": 65.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 14.38, + "y": 56.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 14.38, + "y": 47.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E1": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 14.38, + "y": 38.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F1": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 14.38, + "y": 29.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G1": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 14.38, + "y": 20.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H1": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 14.38, + "y": 11.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 23.38, + "y": 74.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 23.38, + "y": 65.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 23.38, + "y": 56.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 23.38, + "y": 47.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E2": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 23.38, + "y": 38.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F2": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 23.38, + "y": 29.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G2": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 23.38, + "y": 20.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H2": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 23.38, + "y": 11.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 32.38, + "y": 74.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 32.38, + "y": 65.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 32.38, + "y": 56.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 32.38, + "y": 47.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E3": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 32.38, + "y": 38.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F3": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 32.38, + "y": 29.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G3": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 32.38, + "y": 20.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H3": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 32.38, + "y": 11.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 41.38, + "y": 74.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 41.38, + "y": 65.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 41.38, + "y": 56.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 41.38, + "y": 47.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E4": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 41.38, + "y": 38.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F4": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 41.38, + "y": 29.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G4": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 41.38, + "y": 20.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H4": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 41.38, + "y": 11.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 50.38, + "y": 74.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 50.38, + "y": 65.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 50.38, + "y": 56.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 50.38, + "y": 47.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E5": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 50.38, + "y": 38.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F5": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 50.38, + "y": 29.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G5": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 50.38, + "y": 20.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H5": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 50.38, + "y": 11.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 59.38, + "y": 74.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 59.38, + "y": 65.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 59.38, + "y": 56.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 59.38, + "y": 47.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E6": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 59.38, + "y": 38.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F6": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 59.38, + "y": 29.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G6": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 59.38, + "y": 20.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H6": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 59.38, + "y": 11.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A7": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 68.38, + "y": 74.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B7": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 68.38, + "y": 65.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C7": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 68.38, + "y": 56.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D7": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 68.38, + "y": 47.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E7": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 68.38, + "y": 38.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F7": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 68.38, + "y": 29.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G7": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 68.38, + "y": 20.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H7": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 68.38, + "y": 11.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A8": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 77.38, + "y": 74.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B8": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 77.38, + "y": 65.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C8": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 77.38, + "y": 56.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D8": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 77.38, + "y": 47.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E8": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 77.38, + "y": 38.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F8": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 77.38, + "y": 29.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G8": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 77.38, + "y": 20.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H8": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 77.38, + "y": 11.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A9": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 86.38, + "y": 74.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B9": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 86.38, + "y": 65.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C9": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 86.38, + "y": 56.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D9": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 86.38, + "y": 47.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E9": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 86.38, + "y": 38.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F9": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 86.38, + "y": 29.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G9": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 86.38, + "y": 20.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H9": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 86.38, + "y": 11.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A10": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 95.38, + "y": 74.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B10": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 95.38, + "y": 65.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C10": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 95.38, + "y": 56.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D10": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 95.38, + "y": 47.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E10": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 95.38, + "y": 38.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F10": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 95.38, + "y": 29.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G10": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 95.38, + "y": 20.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H10": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 95.38, + "y": 11.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A11": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 104.38, + "y": 74.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B11": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 104.38, + "y": 65.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C11": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 104.38, + "y": 56.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D11": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 104.38, + "y": 47.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E11": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 104.38, + "y": 38.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F11": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 104.38, + "y": 29.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G11": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 104.38, + "y": 20.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H11": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 104.38, + "y": 11.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "A12": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 113.38, + "y": 74.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "B12": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 113.38, + "y": 65.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "C12": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 113.38, + "y": 56.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "D12": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 113.38, + "y": 47.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "E12": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 113.38, + "y": 38.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "F12": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 113.38, + "y": 29.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "G12": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 113.38, + "y": 20.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + }, + "H12": { + "depth": 14.95, + "totalLiquidVolume": 200, + "shape": "circular", + "diameter": 5.5, + "x": 113.38, + "y": 11.24, + "z": 1.05, + "geometryDefinitionId": "conicalWell" + } + }, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "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" + ] + } + ], + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 1.25, + "topHeight": 0.8, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "topDiameter": 5.5, + "bottomDiameter": 2.33, + "topHeight": 11.35, + "bottomHeight": 0.8 + }, + { + "shape": "conical", + "bottomDiameter": 5.5, + "topDiameter": 5.5, + "topHeight": 14.95, + "bottomHeight": 11.35 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/opentrons_universal_flat_adapter_corning_384_wellplate_112ul_flat/2.json b/shared-data/labware/definitions/3/opentrons_universal_flat_adapter_corning_384_wellplate_112ul_flat/2.json new file mode 100644 index 00000000000..e851c913660 --- /dev/null +++ b/shared-data/labware/definitions/3/opentrons_universal_flat_adapter_corning_384_wellplate_112ul_flat/2.json @@ -0,0 +1,5107 @@ +{ + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1", + "I1", + "J1", + "K1", + "L1", + "M1", + "N1", + "O1", + "P1" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2", + "I2", + "J2", + "K2", + "L2", + "M2", + "N2", + "O2", + "P2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3", + "I3", + "J3", + "K3", + "L3", + "M3", + "N3", + "O3", + "P3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4", + "I4", + "J4", + "K4", + "L4", + "M4", + "N4", + "O4", + "P4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5", + "I5", + "J5", + "K5", + "L5", + "M5", + "N5", + "O5", + "P5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6", + "I6", + "J6", + "K6", + "L6", + "M6", + "N6", + "O6", + "P6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7", + "I7", + "J7", + "K7", + "L7", + "M7", + "N7", + "O7", + "P7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8", + "I8", + "J8", + "K8", + "L8", + "M8", + "N8", + "O8", + "P8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9", + "I9", + "J9", + "K9", + "L9", + "M9", + "N9", + "O9", + "P9" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10", + "I10", + "J10", + "K10", + "L10", + "M10", + "N10", + "O10", + "P10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11", + "I11", + "J11", + "K11", + "L11", + "M11", + "N11", + "O11", + "P11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12", + "I12", + "J12", + "K12", + "L12", + "M12", + "N12", + "O12", + "P12" + ], + [ + "A13", + "B13", + "C13", + "D13", + "E13", + "F13", + "G13", + "H13", + "I13", + "J13", + "K13", + "L13", + "M13", + "N13", + "O13", + "P13" + ], + [ + "A14", + "B14", + "C14", + "D14", + "E14", + "F14", + "G14", + "H14", + "I14", + "J14", + "K14", + "L14", + "M14", + "N14", + "O14", + "P14" + ], + [ + "A15", + "B15", + "C15", + "D15", + "E15", + "F15", + "G15", + "H15", + "I15", + "J15", + "K15", + "L15", + "M15", + "N15", + "O15", + "P15" + ], + [ + "A16", + "B16", + "C16", + "D16", + "E16", + "F16", + "G16", + "H16", + "I16", + "J16", + "K16", + "L16", + "M16", + "N16", + "O16", + "P16" + ], + [ + "A17", + "B17", + "C17", + "D17", + "E17", + "F17", + "G17", + "H17", + "I17", + "J17", + "K17", + "L17", + "M17", + "N17", + "O17", + "P17" + ], + [ + "A18", + "B18", + "C18", + "D18", + "E18", + "F18", + "G18", + "H18", + "I18", + "J18", + "K18", + "L18", + "M18", + "N18", + "O18", + "P18" + ], + [ + "A19", + "B19", + "C19", + "D19", + "E19", + "F19", + "G19", + "H19", + "I19", + "J19", + "K19", + "L19", + "M19", + "N19", + "O19", + "P19" + ], + [ + "A20", + "B20", + "C20", + "D20", + "E20", + "F20", + "G20", + "H20", + "I20", + "J20", + "K20", + "L20", + "M20", + "N20", + "O20", + "P20" + ], + [ + "A21", + "B21", + "C21", + "D21", + "E21", + "F21", + "G21", + "H21", + "I21", + "J21", + "K21", + "L21", + "M21", + "N21", + "O21", + "P21" + ], + [ + "A22", + "B22", + "C22", + "D22", + "E22", + "F22", + "G22", + "H22", + "I22", + "J22", + "K22", + "L22", + "M22", + "N22", + "O22", + "P22" + ], + [ + "A23", + "B23", + "C23", + "D23", + "E23", + "F23", + "G23", + "H23", + "I23", + "J23", + "K23", + "L23", + "M23", + "N23", + "O23", + "P23" + ], + [ + "A24", + "B24", + "C24", + "D24", + "E24", + "F24", + "G24", + "H24", + "I24", + "J24", + "K24", + "L24", + "M24", + "N24", + "O24", + "P24" + ] + ], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "metadata": { + "displayName": "Opentrons Universal Flat Heater-Shaker Adapter with Corning 384 Well Plate 112 \u00b5l Flat", + "displayCategory": "adapter", + "displayVolumeUnits": "\u00b5L", + "tags": [] + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.47, + "zDimension": 17.9 + }, + "wells": { + "A1": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 12.12, + "y": 76.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 12.12, + "y": 71.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 12.12, + "y": 67.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 12.12, + "y": 62.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "E1": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 12.12, + "y": 58.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "F1": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 12.12, + "y": 53.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "G1": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 12.12, + "y": 49.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "H1": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 12.12, + "y": 44.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "I1": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 12.12, + "y": 40.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "J1": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 12.12, + "y": 35.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "K1": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 12.12, + "y": 31.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "L1": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 12.12, + "y": 26.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "M1": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 12.12, + "y": 22.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "N1": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 12.12, + "y": 17.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "O1": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 12.12, + "y": 13.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "P1": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 12.12, + "y": 8.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 16.62, + "y": 76.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 16.62, + "y": 71.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 16.62, + "y": 67.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 16.62, + "y": 62.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "E2": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 16.62, + "y": 58.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "F2": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 16.62, + "y": 53.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "G2": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 16.62, + "y": 49.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "H2": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 16.62, + "y": 44.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "I2": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 16.62, + "y": 40.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "J2": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 16.62, + "y": 35.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "K2": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 16.62, + "y": 31.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "L2": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 16.62, + "y": 26.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "M2": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 16.62, + "y": 22.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "N2": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 16.62, + "y": 17.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "O2": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 16.62, + "y": 13.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "P2": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 16.62, + "y": 8.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 21.12, + "y": 76.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 21.12, + "y": 71.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 21.12, + "y": 67.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 21.12, + "y": 62.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "E3": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 21.12, + "y": 58.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "F3": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 21.12, + "y": 53.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "G3": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 21.12, + "y": 49.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "H3": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 21.12, + "y": 44.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "I3": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 21.12, + "y": 40.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "J3": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 21.12, + "y": 35.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "K3": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 21.12, + "y": 31.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "L3": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 21.12, + "y": 26.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "M3": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 21.12, + "y": 22.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "N3": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 21.12, + "y": 17.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "O3": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 21.12, + "y": 13.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "P3": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 21.12, + "y": 8.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 25.62, + "y": 76.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 25.62, + "y": 71.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 25.62, + "y": 67.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 25.62, + "y": 62.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "E4": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 25.62, + "y": 58.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "F4": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 25.62, + "y": 53.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "G4": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 25.62, + "y": 49.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "H4": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 25.62, + "y": 44.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "I4": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 25.62, + "y": 40.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "J4": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 25.62, + "y": 35.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "K4": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 25.62, + "y": 31.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "L4": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 25.62, + "y": 26.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "M4": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 25.62, + "y": 22.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "N4": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 25.62, + "y": 17.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "O4": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 25.62, + "y": 13.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "P4": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 25.62, + "y": 8.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 30.12, + "y": 76.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 30.12, + "y": 71.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 30.12, + "y": 67.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 30.12, + "y": 62.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "E5": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 30.12, + "y": 58.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "F5": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 30.12, + "y": 53.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "G5": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 30.12, + "y": 49.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "H5": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 30.12, + "y": 44.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "I5": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 30.12, + "y": 40.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "J5": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 30.12, + "y": 35.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "K5": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 30.12, + "y": 31.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "L5": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 30.12, + "y": 26.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "M5": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 30.12, + "y": 22.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "N5": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 30.12, + "y": 17.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "O5": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 30.12, + "y": 13.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "P5": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 30.12, + "y": 8.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 34.62, + "y": 76.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 34.62, + "y": 71.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 34.62, + "y": 67.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 34.62, + "y": 62.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "E6": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 34.62, + "y": 58.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "F6": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 34.62, + "y": 53.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "G6": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 34.62, + "y": 49.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "H6": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 34.62, + "y": 44.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "I6": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 34.62, + "y": 40.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "J6": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 34.62, + "y": 35.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "K6": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 34.62, + "y": 31.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "L6": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 34.62, + "y": 26.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "M6": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 34.62, + "y": 22.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "N6": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 34.62, + "y": 17.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "O6": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 34.62, + "y": 13.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "P6": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 34.62, + "y": 8.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "A7": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 39.12, + "y": 76.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "B7": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 39.12, + "y": 71.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "C7": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 39.12, + "y": 67.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "D7": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 39.12, + "y": 62.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "E7": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 39.12, + "y": 58.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "F7": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 39.12, + "y": 53.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "G7": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 39.12, + "y": 49.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "H7": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 39.12, + "y": 44.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "I7": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 39.12, + "y": 40.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "J7": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 39.12, + "y": 35.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "K7": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 39.12, + "y": 31.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "L7": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 39.12, + "y": 26.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "M7": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 39.12, + "y": 22.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "N7": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 39.12, + "y": 17.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "O7": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 39.12, + "y": 13.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "P7": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 39.12, + "y": 8.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "A8": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 43.62, + "y": 76.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "B8": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 43.62, + "y": 71.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "C8": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 43.62, + "y": 67.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "D8": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 43.62, + "y": 62.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "E8": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 43.62, + "y": 58.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "F8": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 43.62, + "y": 53.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "G8": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 43.62, + "y": 49.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "H8": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 43.62, + "y": 44.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "I8": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 43.62, + "y": 40.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "J8": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 43.62, + "y": 35.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "K8": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 43.62, + "y": 31.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "L8": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 43.62, + "y": 26.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "M8": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 43.62, + "y": 22.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "N8": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 43.62, + "y": 17.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "O8": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 43.62, + "y": 13.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "P8": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 43.62, + "y": 8.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "A9": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 48.12, + "y": 76.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "B9": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 48.12, + "y": 71.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "C9": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 48.12, + "y": 67.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "D9": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 48.12, + "y": 62.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "E9": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 48.12, + "y": 58.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "F9": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 48.12, + "y": 53.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "G9": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 48.12, + "y": 49.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "H9": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 48.12, + "y": 44.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "I9": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 48.12, + "y": 40.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "J9": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 48.12, + "y": 35.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "K9": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 48.12, + "y": 31.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "L9": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 48.12, + "y": 26.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "M9": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 48.12, + "y": 22.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "N9": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 48.12, + "y": 17.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "O9": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 48.12, + "y": 13.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "P9": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 48.12, + "y": 8.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "A10": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 52.62, + "y": 76.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "B10": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 52.62, + "y": 71.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "C10": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 52.62, + "y": 67.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "D10": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 52.62, + "y": 62.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "E10": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 52.62, + "y": 58.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "F10": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 52.62, + "y": 53.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "G10": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 52.62, + "y": 49.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "H10": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 52.62, + "y": 44.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "I10": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 52.62, + "y": 40.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "J10": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 52.62, + "y": 35.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "K10": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 52.62, + "y": 31.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "L10": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 52.62, + "y": 26.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "M10": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 52.62, + "y": 22.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "N10": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 52.62, + "y": 17.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "O10": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 52.62, + "y": 13.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "P10": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 52.62, + "y": 8.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "A11": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 57.12, + "y": 76.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "B11": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 57.12, + "y": 71.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "C11": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 57.12, + "y": 67.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "D11": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 57.12, + "y": 62.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "E11": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 57.12, + "y": 58.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "F11": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 57.12, + "y": 53.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "G11": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 57.12, + "y": 49.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "H11": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 57.12, + "y": 44.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "I11": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 57.12, + "y": 40.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "J11": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 57.12, + "y": 35.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "K11": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 57.12, + "y": 31.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "L11": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 57.12, + "y": 26.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "M11": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 57.12, + "y": 22.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "N11": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 57.12, + "y": 17.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "O11": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 57.12, + "y": 13.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "P11": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 57.12, + "y": 8.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "A12": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 61.62, + "y": 76.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "B12": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 61.62, + "y": 71.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "C12": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 61.62, + "y": 67.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "D12": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 61.62, + "y": 62.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "E12": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 61.62, + "y": 58.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "F12": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 61.62, + "y": 53.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "G12": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 61.62, + "y": 49.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "H12": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 61.62, + "y": 44.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "I12": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 61.62, + "y": 40.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "J12": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 61.62, + "y": 35.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "K12": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 61.62, + "y": 31.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "L12": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 61.62, + "y": 26.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "M12": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 61.62, + "y": 22.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "N12": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 61.62, + "y": 17.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "O12": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 61.62, + "y": 13.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "P12": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 61.62, + "y": 8.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "A13": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 66.12, + "y": 76.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "B13": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 66.12, + "y": 71.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "C13": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 66.12, + "y": 67.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "D13": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 66.12, + "y": 62.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "E13": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 66.12, + "y": 58.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "F13": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 66.12, + "y": 53.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "G13": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 66.12, + "y": 49.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "H13": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 66.12, + "y": 44.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "I13": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 66.12, + "y": 40.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "J13": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 66.12, + "y": 35.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "K13": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 66.12, + "y": 31.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "L13": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 66.12, + "y": 26.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "M13": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 66.12, + "y": 22.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "N13": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 66.12, + "y": 17.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "O13": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 66.12, + "y": 13.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "P13": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 66.12, + "y": 8.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "A14": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 70.62, + "y": 76.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "B14": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 70.62, + "y": 71.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "C14": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 70.62, + "y": 67.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "D14": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 70.62, + "y": 62.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "E14": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 70.62, + "y": 58.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "F14": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 70.62, + "y": 53.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "G14": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 70.62, + "y": 49.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "H14": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 70.62, + "y": 44.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "I14": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 70.62, + "y": 40.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "J14": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 70.62, + "y": 35.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "K14": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 70.62, + "y": 31.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "L14": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 70.62, + "y": 26.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "M14": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 70.62, + "y": 22.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "N14": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 70.62, + "y": 17.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "O14": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 70.62, + "y": 13.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "P14": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 70.62, + "y": 8.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "A15": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 75.12, + "y": 76.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "B15": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 75.12, + "y": 71.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "C15": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 75.12, + "y": 67.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "D15": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 75.12, + "y": 62.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "E15": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 75.12, + "y": 58.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "F15": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 75.12, + "y": 53.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "G15": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 75.12, + "y": 49.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "H15": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 75.12, + "y": 44.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "I15": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 75.12, + "y": 40.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "J15": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 75.12, + "y": 35.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "K15": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 75.12, + "y": 31.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "L15": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 75.12, + "y": 26.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "M15": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 75.12, + "y": 22.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "N15": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 75.12, + "y": 17.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "O15": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 75.12, + "y": 13.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "P15": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 75.12, + "y": 8.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "A16": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 79.62, + "y": 76.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "B16": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 79.62, + "y": 71.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "C16": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 79.62, + "y": 67.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "D16": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 79.62, + "y": 62.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "E16": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 79.62, + "y": 58.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "F16": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 79.62, + "y": 53.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "G16": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 79.62, + "y": 49.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "H16": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 79.62, + "y": 44.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "I16": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 79.62, + "y": 40.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "J16": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 79.62, + "y": 35.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "K16": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 79.62, + "y": 31.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "L16": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 79.62, + "y": 26.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "M16": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 79.62, + "y": 22.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "N16": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 79.62, + "y": 17.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "O16": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 79.62, + "y": 13.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "P16": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 79.62, + "y": 8.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "A17": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 84.12, + "y": 76.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "B17": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 84.12, + "y": 71.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "C17": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 84.12, + "y": 67.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "D17": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 84.12, + "y": 62.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "E17": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 84.12, + "y": 58.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "F17": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 84.12, + "y": 53.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "G17": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 84.12, + "y": 49.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "H17": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 84.12, + "y": 44.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "I17": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 84.12, + "y": 40.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "J17": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 84.12, + "y": 35.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "K17": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 84.12, + "y": 31.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "L17": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 84.12, + "y": 26.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "M17": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 84.12, + "y": 22.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "N17": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 84.12, + "y": 17.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "O17": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 84.12, + "y": 13.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "P17": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 84.12, + "y": 8.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "A18": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 88.62, + "y": 76.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "B18": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 88.62, + "y": 71.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "C18": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 88.62, + "y": 67.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "D18": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 88.62, + "y": 62.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "E18": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 88.62, + "y": 58.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "F18": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 88.62, + "y": 53.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "G18": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 88.62, + "y": 49.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "H18": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 88.62, + "y": 44.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "I18": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 88.62, + "y": 40.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "J18": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 88.62, + "y": 35.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "K18": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 88.62, + "y": 31.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "L18": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 88.62, + "y": 26.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "M18": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 88.62, + "y": 22.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "N18": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 88.62, + "y": 17.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "O18": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 88.62, + "y": 13.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "P18": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 88.62, + "y": 8.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "A19": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 93.12, + "y": 76.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "B19": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 93.12, + "y": 71.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "C19": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 93.12, + "y": 67.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "D19": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 93.12, + "y": 62.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "E19": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 93.12, + "y": 58.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "F19": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 93.12, + "y": 53.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "G19": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 93.12, + "y": 49.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "H19": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 93.12, + "y": 44.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "I19": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 93.12, + "y": 40.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "J19": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 93.12, + "y": 35.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "K19": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 93.12, + "y": 31.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "L19": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 93.12, + "y": 26.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "M19": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 93.12, + "y": 22.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "N19": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 93.12, + "y": 17.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "O19": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 93.12, + "y": 13.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "P19": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 93.12, + "y": 8.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "A20": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 97.62, + "y": 76.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "B20": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 97.62, + "y": 71.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "C20": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 97.62, + "y": 67.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "D20": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 97.62, + "y": 62.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "E20": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 97.62, + "y": 58.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "F20": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 97.62, + "y": 53.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "G20": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 97.62, + "y": 49.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "H20": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 97.62, + "y": 44.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "I20": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 97.62, + "y": 40.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "J20": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 97.62, + "y": 35.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "K20": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 97.62, + "y": 31.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "L20": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 97.62, + "y": 26.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "M20": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 97.62, + "y": 22.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "N20": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 97.62, + "y": 17.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "O20": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 97.62, + "y": 13.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "P20": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 97.62, + "y": 8.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "A21": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 102.12, + "y": 76.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "B21": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 102.12, + "y": 71.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "C21": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 102.12, + "y": 67.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "D21": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 102.12, + "y": 62.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "E21": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 102.12, + "y": 58.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "F21": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 102.12, + "y": 53.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "G21": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 102.12, + "y": 49.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "H21": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 102.12, + "y": 44.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "I21": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 102.12, + "y": 40.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "J21": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 102.12, + "y": 35.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "K21": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 102.12, + "y": 31.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "L21": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 102.12, + "y": 26.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "M21": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 102.12, + "y": 22.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "N21": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 102.12, + "y": 17.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "O21": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 102.12, + "y": 13.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "P21": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 102.12, + "y": 8.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "A22": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 106.62, + "y": 76.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "B22": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 106.62, + "y": 71.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "C22": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 106.62, + "y": 67.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "D22": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 106.62, + "y": 62.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "E22": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 106.62, + "y": 58.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "F22": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 106.62, + "y": 53.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "G22": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 106.62, + "y": 49.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "H22": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 106.62, + "y": 44.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "I22": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 106.62, + "y": 40.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "J22": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 106.62, + "y": 35.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "K22": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 106.62, + "y": 31.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "L22": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 106.62, + "y": 26.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "M22": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 106.62, + "y": 22.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "N22": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 106.62, + "y": 17.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "O22": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 106.62, + "y": 13.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "P22": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 106.62, + "y": 8.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "A23": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 111.12, + "y": 76.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "B23": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 111.12, + "y": 71.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "C23": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 111.12, + "y": 67.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "D23": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 111.12, + "y": 62.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "E23": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 111.12, + "y": 58.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "F23": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 111.12, + "y": 53.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "G23": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 111.12, + "y": 49.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "H23": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 111.12, + "y": 44.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "I23": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 111.12, + "y": 40.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "J23": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 111.12, + "y": 35.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "K23": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 111.12, + "y": 31.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "L23": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 111.12, + "y": 26.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "M23": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 111.12, + "y": 22.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "N23": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 111.12, + "y": 17.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "O23": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 111.12, + "y": 13.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "P23": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 111.12, + "y": 8.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "A24": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 115.62, + "y": 76.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "B24": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 115.62, + "y": 71.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "C24": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 115.62, + "y": 67.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "D24": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 115.62, + "y": 62.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "E24": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 115.62, + "y": 58.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "F24": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 115.62, + "y": 53.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "G24": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 115.62, + "y": 49.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "H24": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 115.62, + "y": 44.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "I24": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 115.62, + "y": 40.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "J24": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 115.62, + "y": 35.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "K24": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 115.62, + "y": 31.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "L24": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 115.62, + "y": 26.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "M24": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 115.62, + "y": 22.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "N24": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 115.62, + "y": 17.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "O24": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 115.62, + "y": 13.48, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + }, + "P24": { + "depth": 11.43, + "totalLiquidVolume": 112, + "shape": "rectangular", + "xDimension": 3.63, + "yDimension": 3.63, + "x": 115.62, + "y": 8.98, + "z": 6.37, + "geometryDefinitionId": "conicalWell" + } + }, + "groups": [ + { + "metadata": { + "displayName": "Corning 384 Well Plate 112 \u00b5L Flat", + "displayCategory": "wellPlate", + "wellBottomShape": "flat" + }, + "brand": { + "brand": "Corning", + "brandId": ["3640", "3662", "3680", "3700", "3701", "3702"], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Microplates/Assay-Microplates/384-Well-Microplates/Corning%C2%AE-384-well-Clear-Polystyrene-Microplates/p/corning384WellClearPolystyreneMicroplates" + ] + }, + "wells": [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1", + "I1", + "J1", + "K1", + "L1", + "M1", + "N1", + "O1", + "P1", + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2", + "I2", + "J2", + "K2", + "L2", + "M2", + "N2", + "O2", + "P2", + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3", + "I3", + "J3", + "K3", + "L3", + "M3", + "N3", + "O3", + "P3", + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4", + "I4", + "J4", + "K4", + "L4", + "M4", + "N4", + "O4", + "P4", + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5", + "I5", + "J5", + "K5", + "L5", + "M5", + "N5", + "O5", + "P5", + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6", + "I6", + "J6", + "K6", + "L6", + "M6", + "N6", + "O6", + "P6", + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7", + "I7", + "J7", + "K7", + "L7", + "M7", + "N7", + "O7", + "P7", + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8", + "I8", + "J8", + "K8", + "L8", + "M8", + "N8", + "O8", + "P8", + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9", + "I9", + "J9", + "K9", + "L9", + "M9", + "N9", + "O9", + "P9", + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10", + "I10", + "J10", + "K10", + "L10", + "M10", + "N10", + "O10", + "P10", + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11", + "I11", + "J11", + "K11", + "L11", + "M11", + "N11", + "O11", + "P11", + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12", + "I12", + "J12", + "K12", + "L12", + "M12", + "N12", + "O12", + "P12", + "A13", + "B13", + "C13", + "D13", + "E13", + "F13", + "G13", + "H13", + "I13", + "J13", + "K13", + "L13", + "M13", + "N13", + "O13", + "P13", + "A14", + "B14", + "C14", + "D14", + "E14", + "F14", + "G14", + "H14", + "I14", + "J14", + "K14", + "L14", + "M14", + "N14", + "O14", + "P14", + "A15", + "B15", + "C15", + "D15", + "E15", + "F15", + "G15", + "H15", + "I15", + "J15", + "K15", + "L15", + "M15", + "N15", + "O15", + "P15", + "A16", + "B16", + "C16", + "D16", + "E16", + "F16", + "G16", + "H16", + "I16", + "J16", + "K16", + "L16", + "M16", + "N16", + "O16", + "P16", + "A17", + "B17", + "C17", + "D17", + "E17", + "F17", + "G17", + "H17", + "I17", + "J17", + "K17", + "L17", + "M17", + "N17", + "O17", + "P17", + "A18", + "B18", + "C18", + "D18", + "E18", + "F18", + "G18", + "H18", + "I18", + "J18", + "K18", + "L18", + "M18", + "N18", + "O18", + "P18", + "A19", + "B19", + "C19", + "D19", + "E19", + "F19", + "G19", + "H19", + "I19", + "J19", + "K19", + "L19", + "M19", + "N19", + "O19", + "P19", + "A20", + "B20", + "C20", + "D20", + "E20", + "F20", + "G20", + "H20", + "I20", + "J20", + "K20", + "L20", + "M20", + "N20", + "O20", + "P20", + "A21", + "B21", + "C21", + "D21", + "E21", + "F21", + "G21", + "H21", + "I21", + "J21", + "K21", + "L21", + "M21", + "N21", + "O21", + "P21", + "A22", + "B22", + "C22", + "D22", + "E22", + "F22", + "G22", + "H22", + "I22", + "J22", + "K22", + "L22", + "M22", + "N22", + "O22", + "P22", + "A23", + "B23", + "C23", + "D23", + "E23", + "F23", + "G23", + "H23", + "I23", + "J23", + "K23", + "L23", + "M23", + "N23", + "O23", + "P23", + "A24", + "B24", + "C24", + "D24", + "E24", + "F24", + "G24", + "H24", + "I24", + "J24", + "K24", + "L24", + "M24", + "N24", + "O24", + "P24" + ] + } + ], + "parameters": { + "format": "384Standard", + "quirks": ["gripperIncompatible"], + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "opentrons_universal_flat_adapter_corning_384_wellplate_112ul_flat" + }, + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "conical", + "bottomDiameter": 3.64, + "topDiameter": 2.74, + "topHeight": 11.65, + "bottomHeight": 0.0 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/thermoscientificnunc_96_wellplate_1300ul/2.json b/shared-data/labware/definitions/3/thermoscientificnunc_96_wellplate_1300ul/2.json new file mode 100644 index 00000000000..88007da25ed --- /dev/null +++ b/shared-data/labware/definitions/3/thermoscientificnunc_96_wellplate_1300ul/2.json @@ -0,0 +1,1134 @@ +{ + "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"] + ], + "brand": { + "brand": "Thermo Scientific", + "brandId": ["260251", "260252"], + "links": ["https://www.thermofisher.com/order/catalog/product/260251"] + }, + "metadata": { + "displayName": "Thermo Scientific Nunc 96 Well Plate 1300 \u00b5L", + "displayCategory": "wellPlate", + "displayVolumeUnits": "\u00b5L", + "tags": [] + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.47, + "zDimension": 31.6 + }, + "wells": { + "A1": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 14.4, + "y": 74.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 14.4, + "y": 65.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 14.4, + "y": 56.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 14.4, + "y": 47.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "E1": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 14.4, + "y": 38.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "F1": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 14.4, + "y": 29.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "G1": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 14.4, + "y": 20.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "H1": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 14.4, + "y": 11.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 23.4, + "y": 74.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 23.4, + "y": 65.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 23.4, + "y": 56.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 23.4, + "y": 47.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "E2": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 23.4, + "y": 38.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "F2": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 23.4, + "y": 29.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "G2": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 23.4, + "y": 20.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "H2": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 23.4, + "y": 11.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 32.4, + "y": 74.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 32.4, + "y": 65.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 32.4, + "y": 56.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 32.4, + "y": 47.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "E3": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 32.4, + "y": 38.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "F3": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 32.4, + "y": 29.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "G3": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 32.4, + "y": 20.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "H3": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 32.4, + "y": 11.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 41.4, + "y": 74.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 41.4, + "y": 65.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 41.4, + "y": 56.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 41.4, + "y": 47.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "E4": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 41.4, + "y": 38.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "F4": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 41.4, + "y": 29.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "G4": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 41.4, + "y": 20.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "H4": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 41.4, + "y": 11.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 50.4, + "y": 74.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 50.4, + "y": 65.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 50.4, + "y": 56.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 50.4, + "y": 47.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "E5": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 50.4, + "y": 38.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "F5": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 50.4, + "y": 29.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "G5": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 50.4, + "y": 20.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "H5": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 50.4, + "y": 11.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 59.4, + "y": 74.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 59.4, + "y": 65.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 59.4, + "y": 56.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 59.4, + "y": 47.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "E6": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 59.4, + "y": 38.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "F6": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 59.4, + "y": 29.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "G6": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 59.4, + "y": 20.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "H6": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 59.4, + "y": 11.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "A7": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 68.4, + "y": 74.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "B7": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 68.4, + "y": 65.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "C7": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 68.4, + "y": 56.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "D7": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 68.4, + "y": 47.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "E7": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 68.4, + "y": 38.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "F7": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 68.4, + "y": 29.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "G7": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 68.4, + "y": 20.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "H7": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 68.4, + "y": 11.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "A8": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 77.4, + "y": 74.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "B8": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 77.4, + "y": 65.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "C8": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 77.4, + "y": 56.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "D8": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 77.4, + "y": 47.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "E8": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 77.4, + "y": 38.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "F8": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 77.4, + "y": 29.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "G8": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 77.4, + "y": 20.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "H8": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 77.4, + "y": 11.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "A9": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 86.4, + "y": 74.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "B9": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 86.4, + "y": 65.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "C9": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 86.4, + "y": 56.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "D9": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 86.4, + "y": 47.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "E9": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 86.4, + "y": 38.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "F9": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 86.4, + "y": 29.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "G9": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 86.4, + "y": 20.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "H9": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 86.4, + "y": 11.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "A10": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 95.4, + "y": 74.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "B10": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 95.4, + "y": 65.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "C10": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 95.4, + "y": 56.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "D10": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 95.4, + "y": 47.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "E10": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 95.4, + "y": 38.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "F10": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 95.4, + "y": 29.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "G10": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 95.4, + "y": 20.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "H10": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 95.4, + "y": 11.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "A11": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 104.4, + "y": 74.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "B11": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 104.4, + "y": 65.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "C11": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 104.4, + "y": 56.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "D11": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 104.4, + "y": 47.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "E11": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 104.4, + "y": 38.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "F11": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 104.4, + "y": 29.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "G11": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 104.4, + "y": 20.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "H11": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 104.4, + "y": 11.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "A12": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 113.4, + "y": 74.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "B12": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 113.4, + "y": 65.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "C12": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 113.4, + "y": 56.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "D12": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 113.4, + "y": 47.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "E12": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 113.4, + "y": 38.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "F12": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 113.4, + "y": 29.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "G12": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 113.4, + "y": 20.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + }, + "H12": { + "depth": 29.1, + "totalLiquidVolume": 1300, + "shape": "circular", + "diameter": 8.4, + "x": 113.4, + "y": 11.27, + "z": 2.5, + "geometryDefinitionId": "conicalWell" + } + }, + "groups": [ + { + "metadata": { + "wellBottomShape": "u" + }, + "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" + ] + } + ], + "parameters": { + "format": "96Standard", + "quirks": [], + "isTiprack": false, + "isMagneticModuleCompatible": true, + "magneticModuleEngageHeight": 5.5, + "loadName": "thermoscientificnunc_96_wellplate_1300ul" + }, + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 3.6, + "topHeight": 3.6, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "bottomDiameter": 7.2, + "topDiameter": 8.4, + "topHeight": 29.1, + "bottomHeight": 3.6 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/thermoscientificnunc_96_wellplate_2000ul/2.json b/shared-data/labware/definitions/3/thermoscientificnunc_96_wellplate_2000ul/2.json new file mode 100644 index 00000000000..e76dca47616 --- /dev/null +++ b/shared-data/labware/definitions/3/thermoscientificnunc_96_wellplate_2000ul/2.json @@ -0,0 +1,1134 @@ +{ + "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"] + ], + "brand": { + "brand": "Thermo Scientific", + "brandId": ["278743", "278752"], + "links": ["https://www.thermofisher.com/order/catalog/product/278743"] + }, + "metadata": { + "displayName": "Thermo Scientific Nunc 96 Well Plate 2000 \u00b5L", + "displayCategory": "wellPlate", + "displayVolumeUnits": "\u00b5L", + "tags": [] + }, + "dimensions": { + "xDimension": 127.8, + "yDimension": 85.5, + "zDimension": 43.6 + }, + "wells": { + "A1": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 14.3, + "y": 74.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "B1": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 14.3, + "y": 65.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "C1": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 14.3, + "y": 56.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "D1": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 14.3, + "y": 47.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "E1": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 14.3, + "y": 38.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "F1": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 14.3, + "y": 29.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "G1": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 14.3, + "y": 20.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "H1": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 14.3, + "y": 11.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "A2": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 23.3, + "y": 74.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "B2": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 23.3, + "y": 65.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "C2": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 23.3, + "y": 56.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "D2": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 23.3, + "y": 47.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "E2": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 23.3, + "y": 38.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "F2": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 23.3, + "y": 29.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "G2": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 23.3, + "y": 20.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "H2": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 23.3, + "y": 11.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "A3": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 32.3, + "y": 74.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "B3": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 32.3, + "y": 65.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "C3": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 32.3, + "y": 56.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "D3": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 32.3, + "y": 47.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "E3": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 32.3, + "y": 38.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "F3": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 32.3, + "y": 29.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "G3": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 32.3, + "y": 20.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "H3": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 32.3, + "y": 11.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "A4": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 41.3, + "y": 74.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "B4": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 41.3, + "y": 65.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "C4": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 41.3, + "y": 56.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "D4": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 41.3, + "y": 47.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "E4": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 41.3, + "y": 38.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "F4": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 41.3, + "y": 29.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "G4": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 41.3, + "y": 20.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "H4": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 41.3, + "y": 11.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "A5": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 50.3, + "y": 74.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "B5": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 50.3, + "y": 65.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "C5": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 50.3, + "y": 56.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "D5": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 50.3, + "y": 47.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "E5": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 50.3, + "y": 38.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "F5": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 50.3, + "y": 29.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "G5": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 50.3, + "y": 20.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "H5": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 50.3, + "y": 11.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "A6": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 59.3, + "y": 74.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "B6": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 59.3, + "y": 65.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "C6": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 59.3, + "y": 56.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "D6": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 59.3, + "y": 47.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "E6": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 59.3, + "y": 38.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "F6": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 59.3, + "y": 29.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "G6": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 59.3, + "y": 20.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "H6": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 59.3, + "y": 11.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "A7": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 68.3, + "y": 74.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "B7": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 68.3, + "y": 65.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "C7": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 68.3, + "y": 56.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "D7": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 68.3, + "y": 47.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "E7": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 68.3, + "y": 38.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "F7": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 68.3, + "y": 29.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "G7": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 68.3, + "y": 20.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "H7": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 68.3, + "y": 11.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "A8": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 77.3, + "y": 74.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "B8": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 77.3, + "y": 65.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "C8": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 77.3, + "y": 56.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "D8": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 77.3, + "y": 47.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "E8": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 77.3, + "y": 38.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "F8": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 77.3, + "y": 29.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "G8": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 77.3, + "y": 20.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "H8": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 77.3, + "y": 11.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "A9": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 86.3, + "y": 74.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "B9": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 86.3, + "y": 65.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "C9": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 86.3, + "y": 56.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "D9": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 86.3, + "y": 47.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "E9": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 86.3, + "y": 38.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "F9": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 86.3, + "y": 29.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "G9": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 86.3, + "y": 20.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "H9": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 86.3, + "y": 11.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "A10": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 95.3, + "y": 74.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "B10": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 95.3, + "y": 65.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "C10": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 95.3, + "y": 56.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "D10": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 95.3, + "y": 47.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "E10": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 95.3, + "y": 38.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "F10": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 95.3, + "y": 29.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "G10": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 95.3, + "y": 20.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "H10": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 95.3, + "y": 11.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "A11": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 104.3, + "y": 74.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "B11": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 104.3, + "y": 65.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "C11": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 104.3, + "y": 56.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "D11": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 104.3, + "y": 47.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "E11": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 104.3, + "y": 38.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "F11": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 104.3, + "y": 29.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "G11": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 104.3, + "y": 20.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "H11": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 104.3, + "y": 11.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "A12": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 113.3, + "y": 74.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "B12": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 113.3, + "y": 65.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "C12": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 113.3, + "y": 56.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "D12": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 113.3, + "y": 47.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "E12": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 113.3, + "y": 38.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "F12": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 113.3, + "y": 29.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "G12": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 113.3, + "y": 20.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + }, + "H12": { + "depth": 41.5, + "totalLiquidVolume": 2000, + "shape": "circular", + "diameter": 8.5, + "x": 113.3, + "y": 11.2, + "z": 2.1, + "geometryDefinitionId": "conicalWell" + } + }, + "groups": [ + { + "metadata": { + "wellBottomShape": "u" + }, + "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" + ] + } + ], + "parameters": { + "format": "96Standard", + "quirks": [], + "isTiprack": false, + "isMagneticModuleCompatible": true, + "magneticModuleEngageHeight": 6, + "loadName": "thermoscientificnunc_96_wellplate_2000ul" + }, + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "conicalWell": { + "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 3.6, + "topHeight": 3.6, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "bottomDiameter": 7.2, + "topDiameter": 8.5, + "topHeight": 41.5, + "bottomHeight": 3.6 + } + ] + } + } +} diff --git a/shared-data/labware/definitions/3/usascientific_12_reservoir_22ml/2.json b/shared-data/labware/definitions/3/usascientific_12_reservoir_22ml/2.json new file mode 100644 index 00000000000..6a8375138d5 --- /dev/null +++ b/shared-data/labware/definitions/3/usascientific_12_reservoir_22ml/2.json @@ -0,0 +1,209 @@ +{ + "ordering": [ + ["A1"], + ["A2"], + ["A3"], + ["A4"], + ["A5"], + ["A6"], + ["A7"], + ["A8"], + ["A9"], + ["A10"], + ["A11"], + ["A12"] + ], + "schemaVersion": 3, + "version": 2, + "namespace": "opentrons", + "metadata": { + "displayName": "USA Scientific 12 Well Reservoir 22 mL", + "displayVolumeUnits": "mL", + "displayCategory": "reservoir", + "tags": [] + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.8, + "zDimension": 44.45 + }, + "parameters": { + "format": "trough", + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "usascientific_12_reservoir_22ml", + "quirks": ["centerMultichannelOnWells", "touchTipDisabled"] + }, + "wells": { + "A1": { + "shape": "rectangular", + "depth": 42.16, + "xDimension": 8.33, + "yDimension": 71.88, + "totalLiquidVolume": 22000, + "x": 13.94, + "y": 42.9, + "z": 2.29, + "geometryDefinitionId": "cuboidalWell" + }, + "A2": { + "shape": "rectangular", + "depth": 42.16, + "xDimension": 8.33, + "yDimension": 71.88, + "totalLiquidVolume": 22000, + "x": 23.03, + "y": 42.9, + "z": 2.29, + "geometryDefinitionId": "cuboidalWell" + }, + "A3": { + "shape": "rectangular", + "depth": 42.16, + "xDimension": 8.33, + "yDimension": 71.88, + "totalLiquidVolume": 22000, + "x": 32.12, + "y": 42.9, + "z": 2.29, + "geometryDefinitionId": "cuboidalWell" + }, + "A4": { + "shape": "rectangular", + "depth": 42.16, + "xDimension": 8.33, + "yDimension": 71.88, + "totalLiquidVolume": 22000, + "x": 41.21, + "y": 42.9, + "z": 2.29, + "geometryDefinitionId": "cuboidalWell" + }, + "A5": { + "shape": "rectangular", + "depth": 42.16, + "xDimension": 8.33, + "yDimension": 71.88, + "totalLiquidVolume": 22000, + "x": 50.3, + "y": 42.9, + "z": 2.29, + "geometryDefinitionId": "cuboidalWell" + }, + "A6": { + "shape": "rectangular", + "depth": 42.16, + "xDimension": 8.33, + "yDimension": 71.88, + "totalLiquidVolume": 22000, + "x": 59.39, + "y": 42.9, + "z": 2.29, + "geometryDefinitionId": "cuboidalWell" + }, + "A7": { + "shape": "rectangular", + "depth": 42.16, + "xDimension": 8.33, + "yDimension": 71.88, + "totalLiquidVolume": 22000, + "x": 68.48, + "y": 42.9, + "z": 2.29, + "geometryDefinitionId": "cuboidalWell" + }, + "A8": { + "shape": "rectangular", + "depth": 42.16, + "xDimension": 8.33, + "yDimension": 71.88, + "totalLiquidVolume": 22000, + "x": 77.57, + "y": 42.9, + "z": 2.29, + "geometryDefinitionId": "cuboidalWell" + }, + "A9": { + "shape": "rectangular", + "depth": 42.16, + "xDimension": 8.33, + "yDimension": 71.88, + "totalLiquidVolume": 22000, + "x": 86.66, + "y": 42.9, + "z": 2.29, + "geometryDefinitionId": "cuboidalWell" + }, + "A10": { + "shape": "rectangular", + "depth": 42.16, + "xDimension": 8.33, + "yDimension": 71.88, + "totalLiquidVolume": 22000, + "x": 95.75, + "y": 42.9, + "z": 2.29, + "geometryDefinitionId": "cuboidalWell" + }, + "A11": { + "shape": "rectangular", + "depth": 42.16, + "xDimension": 8.33, + "yDimension": 71.88, + "totalLiquidVolume": 22000, + "x": 104.84, + "y": 42.9, + "z": 2.29, + "geometryDefinitionId": "cuboidalWell" + }, + "A12": { + "shape": "rectangular", + "depth": 42.16, + "xDimension": 8.33, + "yDimension": 71.88, + "totalLiquidVolume": 22000, + "x": 113.93, + "y": 42.9, + "z": 2.29, + "geometryDefinitionId": "cuboidalWell" + } + }, + "groups": [ + { + "wells": [ + "A1", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "A10", + "A11", + "A12" + ], + "metadata": { + "wellBottomShape": "v" + } + } + ], + "brand": { + "brand": "USA Scientific", + "brandId": ["1061-8150"], + "links": [ + "https://www.usascientific.com/12-channel-automation-reservoir.aspx" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "cuboidalWell": { + "sections": [] + } + } +} diff --git a/shared-data/labware/definitions/3/usascientific_96_wellplate_2.4ml_deep/2.json b/shared-data/labware/definitions/3/usascientific_96_wellplate_2.4ml_deep/2.json new file mode 100644 index 00000000000..d9741e18c57 --- /dev/null +++ b/shared-data/labware/definitions/3/usascientific_96_wellplate_2.4ml_deep/2.json @@ -0,0 +1,1217 @@ +{ + "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"] + ], + "brand": { + "brand": "USA Scientific", + "brandId": ["1896-2000"], + "links": [ + "https://www.usascientific.com/2ml-deep96-well-plateone-bulk.aspx" + ] + }, + "metadata": { + "displayName": "USA Scientific 96 Deep Well Plate 2.4 mL", + "displayCategory": "wellPlate", + "displayVolumeUnits": "mL", + "tags": [] + }, + "dimensions": { + "xDimension": 127.8, + "yDimension": 85.5, + "zDimension": 44.1 + }, + "wells": { + "H1": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 14.4, + "y": 11.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "G1": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 14.4, + "y": 20.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "F1": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 14.4, + "y": 29.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "E1": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 14.4, + "y": 38.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "D1": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 14.4, + "y": 47.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "C1": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 14.4, + "y": 56.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "B1": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 14.4, + "y": 65.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "A1": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 14.4, + "y": 74.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "H2": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 23.4, + "y": 11.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "G2": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 23.4, + "y": 20.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "F2": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 23.4, + "y": 29.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "E2": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 23.4, + "y": 38.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "D2": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 23.4, + "y": 47.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "C2": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 23.4, + "y": 56.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "B2": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 23.4, + "y": 65.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "A2": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 23.4, + "y": 74.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "H3": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 32.4, + "y": 11.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "G3": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 32.4, + "y": 20.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "F3": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 32.4, + "y": 29.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "E3": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 32.4, + "y": 38.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "D3": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 32.4, + "y": 47.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "C3": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 32.4, + "y": 56.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "B3": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 32.4, + "y": 65.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "A3": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 32.4, + "y": 74.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "H4": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 41.4, + "y": 11.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "G4": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 41.4, + "y": 20.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "F4": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 41.4, + "y": 29.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "E4": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 41.4, + "y": 38.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "D4": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 41.4, + "y": 47.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "C4": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 41.4, + "y": 56.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "B4": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 41.4, + "y": 65.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "A4": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 41.4, + "y": 74.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "H5": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 50.4, + "y": 11.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "G5": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 50.4, + "y": 20.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "F5": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 50.4, + "y": 29.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "E5": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 50.4, + "y": 38.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "D5": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 50.4, + "y": 47.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "C5": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 50.4, + "y": 56.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "B5": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 50.4, + "y": 65.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "A5": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 50.4, + "y": 74.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "H6": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 59.4, + "y": 11.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "G6": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 59.4, + "y": 20.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "F6": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 59.4, + "y": 29.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "E6": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 59.4, + "y": 38.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "D6": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 59.4, + "y": 47.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "C6": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 59.4, + "y": 56.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "B6": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 59.4, + "y": 65.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "A6": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 59.4, + "y": 74.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "H7": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 68.4, + "y": 11.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "G7": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 68.4, + "y": 20.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "F7": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 68.4, + "y": 29.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "E7": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 68.4, + "y": 38.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "D7": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 68.4, + "y": 47.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "C7": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 68.4, + "y": 56.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "B7": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 68.4, + "y": 65.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "A7": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 68.4, + "y": 74.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "H8": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 77.4, + "y": 11.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "G8": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 77.4, + "y": 20.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "F8": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 77.4, + "y": 29.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "E8": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 77.4, + "y": 38.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "D8": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 77.4, + "y": 47.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "C8": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 77.4, + "y": 56.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "B8": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 77.4, + "y": 65.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "A8": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 77.4, + "y": 74.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "H9": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 86.4, + "y": 11.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "G9": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 86.4, + "y": 20.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "F9": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 86.4, + "y": 29.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "E9": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 86.4, + "y": 38.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "D9": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 86.4, + "y": 47.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "C9": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 86.4, + "y": 56.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "B9": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 86.4, + "y": 65.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "A9": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 86.4, + "y": 74.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "H10": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 95.4, + "y": 11.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "G10": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 95.4, + "y": 20.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "F10": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 95.4, + "y": 29.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "E10": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 95.4, + "y": 38.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "D10": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 95.4, + "y": 47.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "C10": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 95.4, + "y": 56.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "B10": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 95.4, + "y": 65.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "A10": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 95.4, + "y": 74.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "H11": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 104.4, + "y": 11.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "G11": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 104.4, + "y": 20.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "F11": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 104.4, + "y": 29.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "E11": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 104.4, + "y": 38.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "D11": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 104.4, + "y": 47.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "C11": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 104.4, + "y": 56.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "B11": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 104.4, + "y": 65.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "A11": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 104.4, + "y": 74.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "H12": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 113.4, + "y": 11.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "G12": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 113.4, + "y": 20.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "F12": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 113.4, + "y": 29.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "E12": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 113.4, + "y": 38.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "D12": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 113.4, + "y": 47.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "C12": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 113.4, + "y": 56.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "B12": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 113.4, + "y": 65.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + }, + "A12": { + "depth": 41.3, + "shape": "rectangular", + "xDimension": 8.2, + "yDimension": 8.2, + "totalLiquidVolume": 2400, + "x": 113.4, + "y": 74.2, + "z": 2.8, + "geometryDefinitionId": "cuboidalWell" + } + }, + "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": "u" + } + } + ], + "parameters": { + "format": "96Standard", + "isTiprack": false, + "isMagneticModuleCompatible": true, + "magneticModuleEngageHeight": 14.94, + "loadName": "usascientific_96_wellplate_2.4ml_deep" + }, + "namespace": "opentrons", + "version": 2, + "schemaVersion": 3, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "innerLabwareGeometry": { + "cuboidalWell": { + "sections": [] + } + } +} diff --git a/shared-data/python/opentrons_shared_data/labware/types.py b/shared-data/python/opentrons_shared_data/labware/types.py index 20fb6664485..59634a26f54 100644 --- a/shared-data/python/opentrons_shared_data/labware/types.py +++ b/shared-data/python/opentrons_shared_data/labware/types.py @@ -122,7 +122,7 @@ class WellGroup(TypedDict, total=False): class LabwareDefinition(TypedDict): - schemaVersion: Literal[2] + schemaVersion: Literal[2, 3] version: int namespace: str metadata: LabwareMetadata From 8f75ce2ead83b683458824b21541746ef108e8fb Mon Sep 17 00:00:00 2001 From: Jethary Alcid <66035149+jerader@users.noreply.github.com> Date: Thu, 31 Oct 2024 10:21:17 -0400 Subject: [PATCH 38/81] fix(protocol-designer): fix z-index of models (#16652) closes RQA-3356 --- protocol-designer/src/organisms/BlockingHintModal/index.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/protocol-designer/src/organisms/BlockingHintModal/index.tsx b/protocol-designer/src/organisms/BlockingHintModal/index.tsx index 22a6b5646a6..3a337fb481d 100644 --- a/protocol-designer/src/organisms/BlockingHintModal/index.tsx +++ b/protocol-designer/src/organisms/BlockingHintModal/index.tsx @@ -49,6 +49,7 @@ export function BlockingHintModal(props: HintProps): JSX.Element { return createPortal( Date: Thu, 31 Oct 2024 11:26:25 -0400 Subject: [PATCH 39/81] fix(api): allow labware def schema v3 (#16647) --- .../python/opentrons_shared_data/labware/labware_definition.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared-data/python/opentrons_shared_data/labware/labware_definition.py b/shared-data/python/opentrons_shared_data/labware/labware_definition.py index 6e20cc64809..d82a76d55c4 100644 --- a/shared-data/python/opentrons_shared_data/labware/labware_definition.py +++ b/shared-data/python/opentrons_shared_data/labware/labware_definition.py @@ -593,7 +593,7 @@ class InnerWellGeometry(BaseModel): class LabwareDefinition(BaseModel): - schemaVersion: Literal[1, 2] = Field( + schemaVersion: Literal[1, 2, 3] = Field( ..., description="Which schema version a labware is using" ) version: int = Field( From 81ae31d5b5e3eff46055697190aef4ee3ee8df5d Mon Sep 17 00:00:00 2001 From: koji Date: Thu, 31 Oct 2024 14:00:08 -0400 Subject: [PATCH 40/81] feat(protocol-designer): remove redesign feature flag (#16653) * feat(protocol-designer): remove redesign feature flag --- protocol-designer/src/ProtocolEditor.tsx | 66 +------ .../assets/localization/en/feature_flags.json | 4 - .../src/atoms/GlobalStyle/index.ts | 5 +- .../src/components/StepEditForm/index.tsx | 12 +- .../modals/AutoAddPauseUntilTempStepModal.tsx | 175 +++++------------- .../components/modals/ConfirmDeleteModal.tsx | 90 ++++----- .../AutoAddPauseUntilTempStepModal.test.tsx | 21 ++- .../src/feature-flags/reducers.ts | 1 - .../src/feature-flags/selectors.ts | 4 - protocol-designer/src/feature-flags/types.ts | 4 +- protocol-designer/src/index.tsx | 7 +- .../Designer/ProtocolSteps/StepForm/index.tsx | 11 +- .../src/step-forms/selectors/index.ts | 5 +- 13 files changed, 100 insertions(+), 305 deletions(-) diff --git a/protocol-designer/src/ProtocolEditor.tsx b/protocol-designer/src/ProtocolEditor.tsx index 9bd7ef9cb48..e241f23e2e0 100644 --- a/protocol-designer/src/ProtocolEditor.tsx +++ b/protocol-designer/src/ProtocolEditor.tsx @@ -1,36 +1,13 @@ -import cx from 'classnames' import { DndProvider } from 'react-dnd' import { HashRouter } from 'react-router-dom' -import { useSelector } from 'react-redux' import { HTML5Backend } from 'react-dnd-html5-backend' import { DIRECTION_COLUMN, Flex, OVERFLOW_AUTO } from '@opentrons/components' -import { getEnableRedesign } from './feature-flags/selectors' -import { ComputingSpinner } from './components/ComputingSpinner' -import { ConnectedNav } from './containers/ConnectedNav' -import { Sidebar } from './containers/ConnectedSidebar' -import { ConnectedTitleBar } from './containers/ConnectedTitleBar' -import { MainPanel } from './containers/ConnectedMainPanel' -import { PortalRoot as MainPageModalPortalRoot } from './components/portals/MainPageModalPortal' -import { MAIN_CONTENT_FORCED_SCROLL_CLASSNAME } from './ui/steps/utils' -import { PrereleaseModeIndicator } from './components/PrereleaseModeIndicator' import { PortalRoot as TopPortalRoot } from './components/portals/TopPortal' -import { FileUploadMessageModal } from './components/modals/FileUploadMessageModal/FileUploadMessageModal' -import { LabwareUploadMessageModal } from './components/modals/LabwareUploadMessageModal/LabwareUploadMessageModal' -import { GateModal } from './organisms/GateModal' -import { CreateFileWizard } from './components/modals/CreateFileWizard' -import { AnnouncementModal } from './organisms' import { ProtocolRoutes } from './ProtocolRoutes' import { useScreenSizeCheck } from './resources/useScreenSizeCheck' import { DisabledScreen } from './organisms/DisabledScreen' -import styles from './components/ProtocolEditor.module.css' -import './css/reset.module.css' - -const showGateModal = - process.env.NODE_ENV === 'production' || process.env.OT_PD_SHOW_GATE - function ProtocolEditorComponent(): JSX.Element { - const enableRedesign = useSelector(getEnableRedesign) const isValidSize = useScreenSizeCheck() return (
    - {enableRedesign ? ( - - {!isValidSize && } - - - - - ) : ( -
    - - - {showGateModal ? : null} - -
    - - -
    - - -
    - - - - - - -
    -
    -
    -
    - )} + + {!isValidSize && } + + + +
    ) } diff --git a/protocol-designer/src/assets/localization/en/feature_flags.json b/protocol-designer/src/assets/localization/en/feature_flags.json index a70e23931c9..74c524de0e0 100644 --- a/protocol-designer/src/assets/localization/en/feature_flags.json +++ b/protocol-designer/src/assets/localization/en/feature_flags.json @@ -16,10 +16,6 @@ "title": "Enable absorbance plate reader", "description": "Enable absorbance plate reader support." }, - "OT_PD_ENABLE_REDESIGN": { - "title": "Enable redesign", - "description": "A whole new world." - }, "OT_PD_ENABLE_COMMENT": { "title": "Enable comment step", "description": "You can add comments anywhere between timeline steps." diff --git a/protocol-designer/src/atoms/GlobalStyle/index.ts b/protocol-designer/src/atoms/GlobalStyle/index.ts index 2c4cef01cc0..26a4beac512 100644 --- a/protocol-designer/src/atoms/GlobalStyle/index.ts +++ b/protocol-designer/src/atoms/GlobalStyle/index.ts @@ -3,12 +3,11 @@ import '@fontsource/public-sans' import '@fontsource/public-sans/600.css' import '@fontsource/public-sans/700.css' -export const GlobalStyle = createGlobalStyle<{ enableRedesign?: boolean }>` +export const GlobalStyle = createGlobalStyle` * { box-sizing: border-box; margin: 0; padding: 0; - font-family: ${props => - props.enableRedesign ?? false ? 'Public Sans' : 'Open Sans'}, sans-serif; + font-family: 'Public Sans', sans-serif; } ` diff --git a/protocol-designer/src/components/StepEditForm/index.tsx b/protocol-designer/src/components/StepEditForm/index.tsx index 747651e7268..f3fd75dd442 100644 --- a/protocol-designer/src/components/StepEditForm/index.tsx +++ b/protocol-designer/src/components/StepEditForm/index.tsx @@ -2,11 +2,7 @@ import { useState } from 'react' import { useTranslation } from 'react-i18next' import { connect } from 'react-redux' import { useConditionalConfirm } from '@opentrons/components' -import { - getModuleDisplayName, - HEATERSHAKER_MODULE_TYPE, - TEMPERATURE_MODULE_TYPE, -} from '@opentrons/shared-data' +import { getModuleDisplayName } from '@opentrons/shared-data' import { actions } from '../../steplist' import { actions as stepsActions } from '../../ui/steps' @@ -188,12 +184,6 @@ const StepEditFormManager = ( } handleCancelClick={saveStepForm} handleContinueClick={handleSave} - // TODO (nd: 10/21/2024) can remove this prop once redesign FF removed - moduleType={ - showAddPauseUntilTempStepModal - ? TEMPERATURE_MODULE_TYPE - : HEATERSHAKER_MODULE_TYPE - } /> ) : null} void handleContinueClick: () => void - moduleType: ModuleType displayModule?: string } @@ -36,130 +24,53 @@ export const AutoAddPauseUntilTempStepModal = (props: Props): JSX.Element => { displayTemperature, handleCancelClick, handleContinueClick, - moduleType, displayModule, } = props const { t } = useTranslation('modal') - const enableRedesign = useSelector(getEnableRedesign) - if (enableRedesign) { - return ( - - } - childrenPadding={SPACING.spacing24} - footer={ - - - - {t('auto_add_pause_until_temp_step.redesign.build_pause_later')} - - - - - {t('auto_add_pause_until_temp_step.redesign.pause_protocol')} - - - - } - > - - - {t('auto_add_pause_until_temp_step.redesign.body1', { - module: displayModule, - temp: displayTemperature, - })} - - - {t('auto_add_pause_until_temp_step.redesign.body2', { - module: displayModule, - temp: displayTemperature, - })} - + + return ( + + } + childrenPadding={SPACING.spacing24} + footer={ + + + + {t('auto_add_pause_until_temp_step.redesign.build_pause_later')} + + + + + {t('auto_add_pause_until_temp_step.redesign.pause_protocol')} + + - - ) - } else { - return moduleType === TEMPERATURE_MODULE_TYPE ? ( - -
    - {t('auto_add_pause_until_temp_step.title', { - temperature: displayTemperature, - })} -
    -

    - {t('auto_add_pause_until_temp_step.body1', { - temperature: displayTemperature, - })} -

    -

    - {t('auto_add_pause_until_temp_step.body2', { - temperature: displayTemperature, - })} -

    -
    - - {t('auto_add_pause_until_temp_step.later_button')} - - - {t('auto_add_pause_until_temp_step.now_button')} - -
    -
    - ) : ( - -
    - {t('auto_add_pause_until_temp_step.heater_shaker_title', { - temperature: displayTemperature, - })} -
    -

    - {t('auto_add_pause_until_temp_step.body1', { - temperature: displayTemperature, + } + > + + + {t('auto_add_pause_until_temp_step.redesign.body1', { + module: displayModule, + temp: displayTemperature, })} -

    -

    - {t('auto_add_pause_until_temp_step.heater_shaker_pause_later', { - temperature: displayTemperature, + + + {t('auto_add_pause_until_temp_step.redesign.body2', { + module: displayModule, + temp: displayTemperature, })} -

    -
    - - {t('auto_add_pause_until_temp_step.later_button')} - - - {t('auto_add_pause_until_temp_step.now_button')} - -
    -
    - ) - } + +
    +
    + ) } diff --git a/protocol-designer/src/components/modals/ConfirmDeleteModal.tsx b/protocol-designer/src/components/modals/ConfirmDeleteModal.tsx index 98800e21219..cf96c4094ca 100644 --- a/protocol-designer/src/components/modals/ConfirmDeleteModal.tsx +++ b/protocol-designer/src/components/modals/ConfirmDeleteModal.tsx @@ -1,10 +1,8 @@ import type * as React from 'react' import { createPortal } from 'react-dom' import { useTranslation } from 'react-i18next' -import { useSelector } from 'react-redux' import { ALIGN_FLEX_END, - AlertModal, AlertPrimaryButton, COLORS, Flex, @@ -14,10 +12,7 @@ import { SecondaryButton, StyledText, } from '@opentrons/components' -import { getEnableRedesign } from '../../feature-flags/selectors' -import { getMainPagePortalEl } from '../portals/MainPageModalPortal' import { getTopPortalEl } from '../portals/TopPortal' -import modalStyles from './modal.module.css' export const DELETE_PROFILE_CYCLE: 'deleteProfileCycle' = 'deleteProfileCycle' export const CLOSE_STEP_FORM_WITH_CHANGES: 'closeStepFormWithChanges' = @@ -52,59 +47,36 @@ export function ConfirmDeleteModal(props: Props): JSX.Element { t(`confirm_delete_modal.${modalType}.confirm_button`, t('button:continue')), 'capitalize' ) - const buttons = [ - { title: cancelCopy, children: cancelCopy, onClick: onCancelClick }, - { - title: continueCopy, - children: continueCopy, - className: modalStyles.long_button, - onClick: onContinueClick, - }, - ] - const enableRedesign = useSelector(getEnableRedesign) - return enableRedesign - ? createPortal( - - } - footer={ - - - - {cancelCopy} - - - - - {continueCopy} - - - - } - > - - {t(`confirm_delete_modal.${modalType}.body`)} - - , - getTopPortalEl() - ) - : createPortal( - + } + footer={ + -

    {t(`confirm_delete_modal.${modalType}.body`)}

    -
    , - getMainPagePortalEl() - ) + + + {cancelCopy} + + + + + {continueCopy} + + +
    + } + > + + {t(`confirm_delete_modal.${modalType}.body`)} + + , + getTopPortalEl() + ) } diff --git a/protocol-designer/src/components/modals/__tests__/AutoAddPauseUntilTempStepModal.test.tsx b/protocol-designer/src/components/modals/__tests__/AutoAddPauseUntilTempStepModal.test.tsx index 8fb3d84c1c0..5a2d80b359c 100644 --- a/protocol-designer/src/components/modals/__tests__/AutoAddPauseUntilTempStepModal.test.tsx +++ b/protocol-designer/src/components/modals/__tests__/AutoAddPauseUntilTempStepModal.test.tsx @@ -1,15 +1,15 @@ -import type * as React from 'react' import { describe, it, expect, vi, beforeEach } from 'vitest' import { fireEvent, screen } from '@testing-library/react' import { renderWithProviders } from '../../../__testing-utils__' import { i18n } from '../../../assets/localization' import { AutoAddPauseUntilTempStepModal } from '../AutoAddPauseUntilTempStepModal' -import { TEMPERATURE_MODULE_TYPE } from '@opentrons/shared-data' + +import type { ComponentProps } from 'react' vi.mock('../../../feature-flags/selectors') const render = ( - props: React.ComponentProps + props: ComponentProps ) => { return renderWithProviders(, { i18nInstance: i18n, @@ -17,28 +17,29 @@ const render = ( } describe('AutoAddPauseUntilTempStepModal ', () => { - let props: React.ComponentProps + let props: ComponentProps beforeEach(() => { props = { displayTemperature: '10', handleCancelClick: vi.fn(), handleContinueClick: vi.fn(), - moduleType: TEMPERATURE_MODULE_TYPE, + displayModule: 'mock module', } }) it('should render the correct text with 10 C temp and buttons are clickable', () => { render(props) - screen.getByText('Pause protocol until temperature module is at 10°C?') + screen.getByText('Pause protocol until mock module is at 10˚C') screen.getByText( - 'Pause protocol now to wait until module reaches 10°C before continuing on to the next step.' + 'Build a pause step to wait until mock module reaches 10˚C before continuing to the next step.' ) screen.getByText( - 'Build a pause later if you want your protocol to proceed to the next steps while the temperature module ramps up to 10°C.' + 'Build a pause step later if you want your protocol to proceed to the next step while the mock module goes to 10˚C' ) + const cancelBtn = screen.getByRole('button', { - name: 'I will build a pause later', + name: 'Build pause later', }) - const contBtn = screen.getByRole('button', { name: 'Pause protocol now' }) + const contBtn = screen.getByRole('button', { name: 'Pause protocol' }) fireEvent.click(cancelBtn) expect(props.handleCancelClick).toHaveBeenCalled() fireEvent.click(contBtn) diff --git a/protocol-designer/src/feature-flags/reducers.ts b/protocol-designer/src/feature-flags/reducers.ts index 1f9999be001..669b921d190 100644 --- a/protocol-designer/src/feature-flags/reducers.ts +++ b/protocol-designer/src/feature-flags/reducers.ts @@ -25,7 +25,6 @@ const initialFlags: Flags = { process.env.OT_PD_ALLOW_ALL_TIPRACKS === '1' || false, OT_PD_ENABLE_ABSORBANCE_READER: process.env.OT_PD_ENABLE_ABSORBANCE_READER === '1' || false, - OT_PD_ENABLE_REDESIGN: process.env.OT_PD_ENABLE_REDESIGN === '1' || false, OT_PD_ENABLE_COMMENT: process.env.OT_PD_ENABLE_COMMENT === '1' || false, OT_PD_ENABLE_RETURN_TIP: process.env.OT_PD_ENABLE_RETURN_TIP === '1' || false, OT_PD_ENABLE_HOT_KEYS_DISPLAY: diff --git a/protocol-designer/src/feature-flags/selectors.ts b/protocol-designer/src/feature-flags/selectors.ts index 896eb5db254..08f3636d213 100644 --- a/protocol-designer/src/feature-flags/selectors.ts +++ b/protocol-designer/src/feature-flags/selectors.ts @@ -29,10 +29,6 @@ export const getEnableAbsorbanceReader: Selector = createSelector( getFeatureFlagData, flags => flags.OT_PD_ENABLE_ABSORBANCE_READER ?? false ) -export const getEnableRedesign: Selector = createSelector( - getFeatureFlagData, - flags => flags.OT_PD_ENABLE_REDESIGN ?? false -) export const getEnableComment: Selector = createSelector( getFeatureFlagData, flags => flags.OT_PD_ENABLE_COMMENT ?? false diff --git a/protocol-designer/src/feature-flags/types.ts b/protocol-designer/src/feature-flags/types.ts index 774d2c5fa5e..d3db8c563d7 100644 --- a/protocol-designer/src/feature-flags/types.ts +++ b/protocol-designer/src/feature-flags/types.ts @@ -23,6 +23,8 @@ export const DEPRECATED_FLAGS = [ 'OT_PD_ALLOW_96_CHANNEL', 'OT_PD_ENABLE_FLEX_DECK_MODIFICATION', 'OT_PD_ENABLE_MULTI_TIP', + 'OT_PD_ENABLE_MOAM', + 'OT_PD_ENABLE_REDESIGN', ] // union of feature flag string constant IDs export type FlagTypes = @@ -30,7 +32,6 @@ export type FlagTypes = | 'OT_PD_DISABLE_MODULE_RESTRICTIONS' | 'OT_PD_ALLOW_ALL_TIPRACKS' | 'OT_PD_ENABLE_ABSORBANCE_READER' - | 'OT_PD_ENABLE_REDESIGN' | 'OT_PD_ENABLE_COMMENT' | 'OT_PD_ENABLE_RETURN_TIP' | 'OT_PD_ENABLE_HOT_KEYS_DISPLAY' @@ -44,7 +45,6 @@ export const allFlags: FlagTypes[] = [ ...userFacingFlags, 'PRERELEASE_MODE', 'OT_PD_ENABLE_ABSORBANCE_READER', - 'OT_PD_ENABLE_REDESIGN', 'OT_PD_ENABLE_COMMENT', 'OT_PD_ENABLE_RETURN_TIP', ] diff --git a/protocol-designer/src/index.tsx b/protocol-designer/src/index.tsx index 97314f5e4dc..b52ba93a323 100644 --- a/protocol-designer/src/index.tsx +++ b/protocol-designer/src/index.tsx @@ -1,11 +1,10 @@ import ReactDOM from 'react-dom/client' -import { Provider, useSelector } from 'react-redux' +import { Provider } from 'react-redux' import { I18nextProvider } from 'react-i18next' import { configureStore } from './configureStore' import { initialize } from './initialize' import { initializeMixpanel } from './analytics/mixpanel' -import { getEnableRedesign } from './feature-flags/selectors' import { i18n } from './assets/localization' import { App } from './App' import { GlobalStyle } from './atoms/GlobalStyle' @@ -22,11 +21,9 @@ if (container == null) throw new Error('Failed to find the root element') const root = ReactDOM.createRoot(container) const RootComponent = (): JSX.Element => { - const enableRedesign = useSelector(getEnableRedesign) - return ( <> - + diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/index.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/index.tsx index ad668a98852..0de31f3f0f8 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/index.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/index.tsx @@ -2,11 +2,7 @@ import { useState } from 'react' import { useTranslation } from 'react-i18next' import { connect } from 'react-redux' import { useConditionalConfirm } from '@opentrons/components' -import { - HEATERSHAKER_MODULE_TYPE, - TEMPERATURE_MODULE_TYPE, - getModuleDisplayName, -} from '@opentrons/shared-data' +import { getModuleDisplayName } from '@opentrons/shared-data' import { actions } from '../../../../steplist' import { actions as stepsActions } from '../../../../ui/steps' @@ -183,11 +179,6 @@ function StepFormManager(props: StepFormManagerProps): JSX.Element | null { } handleCancelClick={saveStepForm} handleContinueClick={handleSave} - moduleType={ - showAddPauseUntilTempStepModal - ? TEMPERATURE_MODULE_TYPE - : HEATERSHAKER_MODULE_TYPE - } /> ) : null} ({ labwareEntities, moduleEntities, @@ -632,7 +630,6 @@ export const getInvariantContext: Selector< OT_PD_ALLOW_ALL_TIPRACKS: Boolean(allowAllTipracks), OT_PD_DISABLE_MODULE_RESTRICTIONS: Boolean(disableModuleRestrictions), OT_PD_ENABLE_ABSORBANCE_READER: Boolean(enableAbsorbanceReader), - OT_PD_ENABLE_REDESIGN: Boolean(enableEnableRedesign), }, }) ) From ce8265cf438827dfe6fc183a505a2b3bd37ed955 Mon Sep 17 00:00:00 2001 From: koji Date: Thu, 31 Oct 2024 15:35:23 -0400 Subject: [PATCH 41/81] fix(protocol-designer): Fix deck view size issues in pd (#16616) * fix(protocol-designer): Fix deck view size issues in pd --- .../RobotCoordinateSpaceWithRef.tsx | 28 +++++++--- protocol-designer/src/atoms/constants.ts | 1 + .../AssignLiquidsModal/LiquidCard.tsx | 13 ++++- .../__tests__/utils.test.ts | 21 ++++++++ .../organisms/DefineLiquidsModal/index.tsx | 6 ++- .../__tests__/utils.test.ts | 25 +++++++++ .../organisms/SlotDetailsContainer/index.tsx | 12 +++-- .../organisms/SlotDetailsContainer/utils.ts | 28 ++++++++++ .../src/organisms/SlotInformation/index.tsx | 12 ++++- .../Designer/DeckSetup/DeckSetupContainer.tsx | 5 +- .../pages/Designer/LiquidsOverflowMenu.tsx | 54 ++++++++++--------- .../StepForm/StepFormToolbox.tsx | 5 +- .../ProtocolSteps/Timeline/StepContainer.tsx | 5 +- .../src/pages/Designer/index.tsx | 2 +- .../pages/ProtocolOverview/DeckThumbnail.tsx | 21 +++++--- 15 files changed, 181 insertions(+), 57 deletions(-) create mode 100644 protocol-designer/src/organisms/DefineLiquidsModal/__tests__/utils.test.ts create mode 100644 protocol-designer/src/organisms/SlotDetailsContainer/__tests__/utils.test.ts diff --git a/components/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpaceWithRef.tsx b/components/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpaceWithRef.tsx index c1986711ed2..530ed004532 100644 --- a/components/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpaceWithRef.tsx +++ b/components/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpaceWithRef.tsx @@ -1,5 +1,7 @@ -import * as React from 'react' +import { useRef } from 'react' import { Svg } from '../../primitives' + +import type { ReactNode } from 'react' import type { DeckDefinition, DeckSlot } from '@opentrons/shared-data' export interface RobotCoordinateSpaceWithRefRenderProps { @@ -10,14 +12,15 @@ interface RobotCoordinateSpaceWithRefProps extends React.ComponentProps { viewBox?: string | null deckDef?: DeckDefinition - children?: (props: RobotCoordinateSpaceWithRefRenderProps) => React.ReactNode + zoomed?: boolean + children?: (props: RobotCoordinateSpaceWithRefRenderProps) => ReactNode } export function RobotCoordinateSpaceWithRef( props: RobotCoordinateSpaceWithRefProps ): JSX.Element | null { - const { children, deckDef, viewBox, ...restProps } = props - const wrapperRef = React.useRef(null) + const { children, deckDef, viewBox, zoomed = false, ...restProps } = props + const wrapperRef = useRef(null) if (deckDef == null && viewBox == null) return null @@ -31,13 +34,26 @@ export function RobotCoordinateSpaceWithRef( (acc, deckSlot) => ({ ...acc, [deckSlot.id]: deckSlot }), {} ) - wholeDeckViewBox = `${viewBoxOriginX} ${viewBoxOriginY} ${deckXDimension} ${deckYDimension}` + + if (deckDef.otId === 'ot2_standard') { + const PADDING = 5 + wholeDeckViewBox = `${viewBoxOriginX - PADDING} ${ + viewBoxOriginY + PADDING * 5 + } ${deckXDimension + PADDING * 2} ${deckYDimension - PADDING * 10}` + } else { + const PADDING = 20 + wholeDeckViewBox = `${viewBoxOriginX - PADDING} ${ + viewBoxOriginY + PADDING + } ${deckXDimension + PADDING * 2} ${deckYDimension + PADDING * 2}` + } } return ( {children?.({ deckSlotsById })} diff --git a/protocol-designer/src/atoms/constants.ts b/protocol-designer/src/atoms/constants.ts index e1acf21fddc..6e357feaf3a 100644 --- a/protocol-designer/src/atoms/constants.ts +++ b/protocol-designer/src/atoms/constants.ts @@ -18,4 +18,5 @@ export const LINE_CLAMP_TEXT_STYLE = ( text-overflow: ellipsis; word-wrap: break-word; -webkit-line-clamp: ${lineClamp}; + word-break: break-all; // for a non word case like aaaaaaaa ` diff --git a/protocol-designer/src/organisms/AssignLiquidsModal/LiquidCard.tsx b/protocol-designer/src/organisms/AssignLiquidsModal/LiquidCard.tsx index d1680010e2d..54ad8b67b66 100644 --- a/protocol-designer/src/organisms/AssignLiquidsModal/LiquidCard.tsx +++ b/protocol-designer/src/organisms/AssignLiquidsModal/LiquidCard.tsx @@ -18,6 +18,7 @@ import { import { selectors as labwareIngredSelectors } from '../../labware-ingred/selectors' import { getLabwareEntities } from '../../step-forms/selectors' import * as wellContentsSelectors from '../../top-selectors/well-contents' +import { LINE_CLAMP_TEXT_STYLE } from '../../atoms' import type { LiquidInfo } from './LiquidToolbox' @@ -80,8 +81,16 @@ export function LiquidCard(props: LiquidCardProps): JSX.Element { > - {name} - + + {name} + + {info.liquidIndex != null ? liquidsWithDescriptions[info.liquidIndex].description : null} diff --git a/protocol-designer/src/organisms/DefineLiquidsModal/__tests__/utils.test.ts b/protocol-designer/src/organisms/DefineLiquidsModal/__tests__/utils.test.ts new file mode 100644 index 00000000000..4e1016039b9 --- /dev/null +++ b/protocol-designer/src/organisms/DefineLiquidsModal/__tests__/utils.test.ts @@ -0,0 +1,21 @@ +import { describe, it, expect } from 'vitest' +import { checkColor } from '../utils' + +describe('checkColor', () => { + it('should return true for very dark colors', () => { + expect(checkColor('#000000')).toBe(true) + expect(checkColor('#0a0a0a')).toBe(true) + }) + + it('should return true for very light colors', () => { + expect(checkColor('#ffffff')).toBe(true) + expect(checkColor('#f5f5f5')).toBe(true) + }) + + it('should return false for colors with medium luminance', () => { + expect(checkColor('#808080')).toBe(false) + expect(checkColor('#ff0000')).toBe(false) + expect(checkColor('#00ff00')).toBe(false) + expect(checkColor('#0000ff')).toBe(false) + }) +}) diff --git a/protocol-designer/src/organisms/DefineLiquidsModal/index.tsx b/protocol-designer/src/organisms/DefineLiquidsModal/index.tsx index e9943676c35..ae30ab973a2 100644 --- a/protocol-designer/src/organisms/DefineLiquidsModal/index.tsx +++ b/protocol-designer/src/organisms/DefineLiquidsModal/index.tsx @@ -34,6 +34,7 @@ import { selectors as labwareIngredSelectors } from '../../labware-ingred/select import { swatchColors } from '../../components/swatchColors' import { checkColor } from './utils' import { HandleEnter } from '../../atoms/HandleEnter' +import { LINE_CLAMP_TEXT_STYLE } from '../../atoms' import type { ColorResult, RGBColor } from 'react-color' import type { ThunkDispatch } from 'redux-thunk' @@ -173,7 +174,10 @@ export function DefineLiquidsModal( selectedIngredFields != null ? ( - + {initialValues.name} diff --git a/protocol-designer/src/organisms/SlotDetailsContainer/__tests__/utils.test.ts b/protocol-designer/src/organisms/SlotDetailsContainer/__tests__/utils.test.ts new file mode 100644 index 00000000000..eef8e3153c2 --- /dev/null +++ b/protocol-designer/src/organisms/SlotDetailsContainer/__tests__/utils.test.ts @@ -0,0 +1,25 @@ +import { describe, it, expect } from 'vitest' +import { FLEX_ROBOT_TYPE, OT2_ROBOT_TYPE } from '@opentrons/shared-data' +import { getXPosition } from '../utils' + +describe('getXPosition', () => { + it('should return the right position 600 for FLEX robot type and slot 3', () => { + expect(getXPosition('3', FLEX_ROBOT_TYPE, false)).toBe('600') + }) + + it('should return the right position 700 for FLEX robot type and slot 4', () => { + expect(getXPosition('4', FLEX_ROBOT_TYPE, true)).toBe('700') + }) + + it('should return the left position for FLEX robot type and slot 1', () => { + expect(getXPosition('1', FLEX_ROBOT_TYPE, false)).toBe('-400') + }) + + it('should return the right position for OT2 robot type and slot 6', () => { + expect(getXPosition('6', OT2_ROBOT_TYPE, false)).toBe('420') + }) + + it('should return the left position for OT2 robot type and slot 2', () => { + expect(getXPosition('2', OT2_ROBOT_TYPE, false)).toBe('-300') + }) +}) diff --git a/protocol-designer/src/organisms/SlotDetailsContainer/index.tsx b/protocol-designer/src/organisms/SlotDetailsContainer/index.tsx index 7e2d215cd31..b0b408a4964 100644 --- a/protocol-designer/src/organisms/SlotDetailsContainer/index.tsx +++ b/protocol-designer/src/organisms/SlotDetailsContainer/index.tsx @@ -4,15 +4,17 @@ import { useTranslation } from 'react-i18next' import { getModuleDisplayName } from '@opentrons/shared-data' import { RobotCoordsForeignObject } from '@opentrons/components' import * as wellContentsSelectors from '../../top-selectors/well-contents' +import { getAdditionalEquipmentEntities } from '../../step-forms/selectors' import { selectors } from '../../labware-ingred/selectors' import { selectors as uiLabwareSelectors } from '../../ui/labware' import { getDeckSetupForActiveItem } from '../../top-selectors/labware-locations' import { SlotInformation } from '../../organisms/SlotInformation' -import { getYPosition } from './utils' +import { getXPosition } from './utils' import type { DeckSlotId, RobotType } from '@opentrons/shared-data' import type { ContentsByWell } from '../../labware-ingred/types' +const SLOT_DETAIL_Y_POSITION = '-10' interface SlotDetailContainerProps { robotType: RobotType slot: DeckSlotId | null @@ -31,6 +33,10 @@ export function SlotDetailsContainer( ) const nickNames = useSelector(uiLabwareSelectors.getLabwareNicknamesById) const allIngredNamesIds = useSelector(selectors.allIngredientNamesIds) + const additionalEquipment = useSelector(getAdditionalEquipmentEntities) + const hasStagingArea = Object.values(additionalEquipment).some( + item => item.name === 'stagingArea' + ) if (slot == null || (slot === 'offDeck' && offDeckLabwareId == null)) { return null @@ -106,8 +112,8 @@ export function SlotDetailsContainer( { } } } + +export const getXPosition = ( + slot: string, + robotType: RobotType, + hasStagingArea: boolean +): string => { + const POSITION_MAP = { + FLEX: { + right: (slot: string) => (hasStagingArea ? '700' : '600'), + left: '-400', + regex: /[34]/, + }, + OT2: { + right: '420', + left: '-300', + regex: /[369]/, + }, + } + + const { right, left, regex } = + robotType === FLEX_ROBOT_TYPE ? POSITION_MAP.FLEX : POSITION_MAP.OT2 + + return regex.test(slot) + ? typeof right === 'function' + ? right(slot) + : right + : left +} diff --git a/protocol-designer/src/organisms/SlotInformation/index.tsx b/protocol-designer/src/organisms/SlotInformation/index.tsx index 4e7d2ffbfd6..85e9a1ef636 100644 --- a/protocol-designer/src/organisms/SlotInformation/index.tsx +++ b/protocol-designer/src/organisms/SlotInformation/index.tsx @@ -12,6 +12,8 @@ import { TYPOGRAPHY, } from '@opentrons/components' import { FLEX_ROBOT_TYPE } from '@opentrons/shared-data' +import { LINE_CLAMP_TEXT_STYLE } from '../../atoms' + import type { FC } from 'react' import type { RobotType } from '@opentrons/shared-data' @@ -53,7 +55,15 @@ export const SlotInformation: FC = ({ {liquids.join(', ')}} + content={ + + {liquids.join(', ')} + + } description={t('liquid')} /> diff --git a/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupContainer.tsx b/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupContainer.tsx index 20ad1307919..b06cbfd535a 100644 --- a/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupContainer.tsx +++ b/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupContainer.tsx @@ -176,7 +176,7 @@ export function DeckSetupContainer(props: DeckSetupTabType): JSX.Element { backgroundColor={COLORS.white} borderRadius={BORDERS.borderRadius12} width="100%" - height={zoomIn.slot != null ? '75vh' : '65vh'} + height={zoomIn.slot != null ? '75vh' : '70vh'} flexDirection={DIRECTION_COLUMN} padding={SPACING.spacing40} > @@ -187,11 +187,12 @@ export function DeckSetupContainer(props: DeckSetupTabType): JSX.Element { justifyContent={JUSTIFY_CENTER} > {() => ( <> diff --git a/protocol-designer/src/pages/Designer/LiquidsOverflowMenu.tsx b/protocol-designer/src/pages/Designer/LiquidsOverflowMenu.tsx index 582232e00ef..2e0b6a8a02f 100644 --- a/protocol-designer/src/pages/Designer/LiquidsOverflowMenu.tsx +++ b/protocol-designer/src/pages/Designer/LiquidsOverflowMenu.tsx @@ -1,5 +1,4 @@ -import type * as React from 'react' -import styled from 'styled-components' +import { css } from 'styled-components' import { useTranslation } from 'react-i18next' import { useDispatch, useSelector } from 'react-redux' import { useLocation } from 'react-router-dom' @@ -8,19 +7,22 @@ import { BORDERS, Box, COLORS, - CURSOR_AUTO, CURSOR_POINTER, DIRECTION_COLUMN, Flex, Icon, LiquidIcon, - NO_WRAP, + MenuItem, POSITION_ABSOLUTE, SPACING, StyledText, + TYPOGRAPHY, } from '@opentrons/components' +import { LINE_CLAMP_TEXT_STYLE } from '../../atoms' import { selectors as labwareIngredSelectors } from '../../labware-ingred/selectors' import * as labwareIngredActions from '../../labware-ingred/actions' + +import type { MouseEvent } from 'react' import type { ThunkDispatch } from '../../types' const NAV_HEIGHT = '64px' @@ -46,20 +48,20 @@ export function LiquidsOverflowMenu( zIndex={5} right={location.pathname === '/liquids' ? SPACING.spacing12 : '3.125rem'} top={`calc(${NAV_HEIGHT} - 6px)`} - whiteSpace={NO_WRAP} ref={overflowWrapperRef} borderRadius={BORDERS.borderRadius8} boxShadow="0px 1px 3px rgba(0, 0, 0, 0.2)" backgroundColor={COLORS.white} flexDirection={DIRECTION_COLUMN} - onClick={(e: React.MouseEvent) => { + onClick={(e: MouseEvent) => { e.preventDefault() e.stopPropagation() }} + width="9.375rem" > {liquids.map(({ name, displayColor, ingredientId }) => { return ( - { onClose() @@ -67,18 +69,29 @@ export function LiquidsOverflowMenu( dispatch(labwareIngredActions.selectLiquidGroup(ingredientId)) }} key={ingredientId} + css={css` + cursor: ${CURSOR_POINTER}; + `} > - {name} + + {name} + - + ) })} {liquids.length > 0 ? ( ) : null} - { onClose() @@ -86,28 +99,17 @@ export function LiquidsOverflowMenu( dispatch(labwareIngredActions.createNewLiquidGroup()) }} key="defineLiquid" + css={css` + cursor: ${CURSOR_POINTER}; + `} > - + {t('define_liquid')} - + ) } -const MenuButton = styled.button` - background-color: ${COLORS.transparent}; - cursor: ${CURSOR_POINTER}; - padding: ${SPACING.spacing8} ${SPACING.spacing12}; - border: none; - border-radius: inherit; - &:hover { - background-color: ${COLORS.blue10}; - } - &:disabled { - color: ${COLORS.grey40}; - cursor: ${CURSOR_AUTO}; - } -` diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx index 634bb422ecb..a14be039d93 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx @@ -234,10 +234,7 @@ export function StepFormToolbox(props: StepFormToolboxProps): JSX.Element { {capitalizeFirstLetter(String(formData.stepName))} diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/Timeline/StepContainer.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/Timeline/StepContainer.tsx index c869fdf72dd..d6f5b532e79 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/Timeline/StepContainer.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/Timeline/StepContainer.tsx @@ -227,10 +227,7 @@ export function StepContainer(props: StepContainerProps): JSX.Element { )} {capitalizeFirstLetterAfterNumber(title)} diff --git a/protocol-designer/src/pages/Designer/index.tsx b/protocol-designer/src/pages/Designer/index.tsx index 84b1f7f20d8..85597ba3e66 100644 --- a/protocol-designer/src/pages/Designer/index.tsx +++ b/protocol-designer/src/pages/Designer/index.tsx @@ -202,7 +202,7 @@ export function Designer(): JSX.Element { padding={zoomIn.slot != null ? '0' : SPACING.spacing80} height="calc(100vh - 64px)" > - + {zoomIn.slot == null ? ( > + setHoverSlot: Dispatch> } export function DeckThumbnail(props: DeckThumbnailProps): JSX.Element { const { hoverSlot, setHoverSlot } = props const initialDeckSetup = useSelector(getInitialDeckSetup) const robotType = useSelector(getRobotType) - const deckDef = React.useMemo(() => getDeckDefFromRobotType(robotType), []) + const deckDef = useMemo(() => getDeckDefFromRobotType(robotType), []) const trash = Object.values(initialDeckSetup.additionalEquipmentOnDeck).find( ae => ae.name === 'trashBin' ) @@ -99,11 +103,14 @@ export function DeckThumbnail(props: DeckThumbnailProps): JSX.Element { width="100%" alignItems={ALIGN_CENTER} justifyContent={JUSTIFY_CENTER} - backgroundColor={COLORS.grey10} + backgroundColor={ + robotType === OT2_ROBOT_TYPE ? COLORS.white : COLORS.grey10 + } + paddingY={robotType === FLEX_ROBOT_TYPE && SPACING.spacing24} borderRadius={BORDERS.borderRadius8} > cutoutId != null ? ( - + - + ) : null ) : null} From e53c9106be24970a9bcc21f9d408d354cc84fe26 Mon Sep 17 00:00:00 2001 From: Jamey Huffnagle Date: Thu, 31 Oct 2024 16:38:40 -0400 Subject: [PATCH 42/81] feat(app): Add React Query Devtools (#16654) Adds React Query Devtools to the desktop app & ODD, hidden behind a FF. --- app/package.json | 1 + app/src/App/DesktopApp.tsx | 2 + app/src/App/OnDeviceDisplayApp.tsx | 2 + app/src/App/tools/ReactQueryDevtools.tsx | 22 ++++++++ .../__tests__/ReactQueryDevtools.test.tsx | 52 +++++++++++++++++++ app/src/App/tools/index.ts | 1 + .../assets/localization/en/app_settings.json | 3 +- app/src/redux/config/constants.ts | 1 + app/src/redux/config/schema-types.ts | 1 + yarn.lock | 12 +++++ 10 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 app/src/App/tools/ReactQueryDevtools.tsx create mode 100644 app/src/App/tools/__tests__/ReactQueryDevtools.test.tsx create mode 100644 app/src/App/tools/index.ts diff --git a/app/package.json b/app/package.json index 034e5dd7cec..e68327af200 100644 --- a/app/package.json +++ b/app/package.json @@ -68,6 +68,7 @@ "uuid": "3.2.1" }, "devDependencies": { + "@tanstack/react-query-devtools": "5.59.16", "@types/classnames": "2.2.5", "@types/file-saver": "2.0.1", "@types/jszip": "3.1.7", diff --git a/app/src/App/DesktopApp.tsx b/app/src/App/DesktopApp.tsx index 6b09da2e2d2..df2105007b3 100644 --- a/app/src/App/DesktopApp.tsx +++ b/app/src/App/DesktopApp.tsx @@ -38,6 +38,7 @@ import { useRobot, useIsFlex } from '/app/redux-resources/robots' import { ProtocolTimeline } from '/app/pages/Desktop/Protocols/ProtocolDetails/ProtocolTimeline' import { PortalRoot as ModalPortalRoot } from './portal' import { DesktopAppFallback } from './DesktopAppFallback' +import { ReactQueryDevtools } from './tools' import type { RouteProps } from './types' @@ -108,6 +109,7 @@ export const DesktopApp = (): JSX.Element => { + diff --git a/app/src/App/OnDeviceDisplayApp.tsx b/app/src/App/OnDeviceDisplayApp.tsx index 2e2217ce20e..6e8c78449f0 100644 --- a/app/src/App/OnDeviceDisplayApp.tsx +++ b/app/src/App/OnDeviceDisplayApp.tsx @@ -55,6 +55,7 @@ import { updateBrightness } from '/app/redux/shell' import { SLEEP_NEVER_MS } from '/app/local-resources/config' import { useProtocolReceiptToast, useSoftwareUpdatePoll } from './hooks' import { ODDTopLevelRedirects } from './ODDTopLevelRedirects' +import { ReactQueryDevtools } from '/app/App/tools' import { OnDeviceDisplayAppFallback } from './OnDeviceDisplayAppFallback' @@ -183,6 +184,7 @@ export const OnDeviceDisplayApp = (): JSX.Element => { // TODO (sb:6/12/23) Create a notification manager to set up preference and order of takeover modals return ( + diff --git a/app/src/App/tools/ReactQueryDevtools.tsx b/app/src/App/tools/ReactQueryDevtools.tsx new file mode 100644 index 00000000000..a57f2df3d4d --- /dev/null +++ b/app/src/App/tools/ReactQueryDevtools.tsx @@ -0,0 +1,22 @@ +import { lazy, Suspense } from 'react' + +import { useFeatureFlag } from '/app/redux/config' + +// Lazily load to enable devtools when env.process.DEV is false (ex, when dev code is pushed to a physical ODD) +const ReactQueryTools = lazy(() => + import('react-query/devtools/development').then(d => ({ + default: d.ReactQueryDevtools, + })) +) + +export function ReactQueryDevtools(): JSX.Element { + const enableRQTools = useFeatureFlag('reactQueryDevtools') + + return ( + + {enableRQTools && ( + + )} + + ) +} diff --git a/app/src/App/tools/__tests__/ReactQueryDevtools.test.tsx b/app/src/App/tools/__tests__/ReactQueryDevtools.test.tsx new file mode 100644 index 00000000000..dcca081d19e --- /dev/null +++ b/app/src/App/tools/__tests__/ReactQueryDevtools.test.tsx @@ -0,0 +1,52 @@ +import { screen } from '@testing-library/react' +import { vi, describe, it, expect, beforeEach } from 'vitest' + +import { renderWithProviders } from '/app/__testing-utils__' +import { i18n } from '/app/i18n' +import { ReactQueryDevtools } from '/app/App/tools' +import { useFeatureFlag } from '/app/redux/config' + +vi.mock('react-query/devtools/development', () => ({ + ReactQueryDevtools: vi + .fn() + .mockReturnValue(
    MOCK_REACT_QUERY_DEVTOOLS
    ), +})) +vi.mock('/app/redux/config') + +const render = () => { + return renderWithProviders(, { + i18nInstance: i18n, + }) +} + +describe('ReactQueryDevtools', () => { + const mockUseFF = vi.fn() + + beforeEach(() => { + vi.mocked(useFeatureFlag).mockReturnValue(true) + }) + + it('uses the correct feature flag', () => { + vi.mocked(useFeatureFlag).mockImplementation(mockUseFF) + + render() + + expect(mockUseFF).toHaveBeenCalledWith('reactQueryDevtools') + }) + + it('renders the devtools if the FF is enabled', async () => { + render() + + await screen.findByText('MOCK_REACT_QUERY_DEVTOOLS') + }) + + it('does not the devtools if the FF is disabled', async () => { + vi.mocked(useFeatureFlag).mockReturnValue(false) + + render() + + expect( + screen.queryByText('MOCK_REACT_QUERY_DEVTOOLS') + ).not.toBeInTheDocument() + }) +}) diff --git a/app/src/App/tools/index.ts b/app/src/App/tools/index.ts new file mode 100644 index 00000000000..99f2b6dc3fd --- /dev/null +++ b/app/src/App/tools/index.ts @@ -0,0 +1 @@ +export * from './ReactQueryDevtools' diff --git a/app/src/assets/localization/en/app_settings.json b/app/src/assets/localization/en/app_settings.json index 3f957ebe608..a5edc2c727f 100644 --- a/app/src/assets/localization/en/app_settings.json +++ b/app/src/assets/localization/en/app_settings.json @@ -5,6 +5,7 @@ "__dev_internal__forceHttpPolling": "Poll all network requests instead of using MQTT", "__dev_internal__protocolStats": "Protocol Stats", "__dev_internal__protocolTimeline": "Protocol Timeline", + "__dev_internal__reactQueryDevtools": "Enable React Query Devtools", "add_folder_button": "Add labware source folder", "add_ip_button": "Add", "add_ip_error": "Enter an IP Address or Hostname", @@ -50,8 +51,8 @@ "installing_update": "Installing update...", "ip_available": "Available", "ip_description_first": "Enter an IP address or hostname to connect to a robot.", - "language_preference": "Language preference", "language": "Language", + "language_preference": "Language preference", "manage_versions": "It is very important for the robot and app software to be on the same version. Manage the robot software versions via Robot Settings > Advanced.", "new_features": "New Features", "no_folder": "No additional source folder specified", diff --git a/app/src/redux/config/constants.ts b/app/src/redux/config/constants.ts index 4cd981093fc..cc39206a191 100644 --- a/app/src/redux/config/constants.ts +++ b/app/src/redux/config/constants.ts @@ -7,6 +7,7 @@ export const DEV_INTERNAL_FLAGS: DevInternalFlag[] = [ 'protocolTimeline', 'enableLabwareCreator', 'enableLocalization', + 'reactQueryDevtools', ] // action type constants diff --git a/app/src/redux/config/schema-types.ts b/app/src/redux/config/schema-types.ts index a38ed931ec9..ac87cd07576 100644 --- a/app/src/redux/config/schema-types.ts +++ b/app/src/redux/config/schema-types.ts @@ -15,6 +15,7 @@ export type DevInternalFlag = | 'protocolTimeline' | 'enableLabwareCreator' | 'enableLocalization' + | 'reactQueryDevtools' export type FeatureFlags = Partial> diff --git a/yarn.lock b/yarn.lock index 9fecdf8fa95..22621f5ebd4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5190,6 +5190,18 @@ dependencies: defer-to-connect "^2.0.0" +"@tanstack/query-devtools@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@tanstack/query-devtools/-/query-devtools-5.58.0.tgz#5c68ce90562e154004de4372bc0a28fcd94cdf31" + integrity sha512-iFdQEFXaYYxqgrv63ots+65FGI+tNp5ZS5PdMU1DWisxk3fez5HG3FyVlbUva+RdYS5hSLbxZ9aw3yEs97GNTw== + +"@tanstack/react-query-devtools@5.59.16": + version "5.59.16" + resolved "https://registry.yarnpkg.com/@tanstack/react-query-devtools/-/react-query-devtools-5.59.16.tgz#f058e3ba146b97a4763b886074581d66cc1e5cf7" + integrity sha512-Dejo39QBXmDqXZ3vdrk7vHDvs7TvL573/AX2NveMBmRAufAPYuE3oWSKP/gGqkDfEqyr4CmldOj+v9cKskUchQ== + dependencies: + "@tanstack/query-devtools" "5.58.0" + "@testing-library/dom@^9.0.0": version "9.3.4" resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.3.4.tgz#50696ec28376926fec0a1bf87d9dbac5e27f60ce" From fa0396266b7e9b231276a8581801612603669ae6 Mon Sep 17 00:00:00 2001 From: Jethary Alcid <66035149+jerader@users.noreply.github.com> Date: Fri, 1 Nov 2024 07:40:41 -0400 Subject: [PATCH 43/81] fix(protocol-designer): timer fields to allow : again (#16633) --- protocol-designer/src/molecules/InputStepFormField/index.tsx | 4 +++- .../ProtocolSteps/StepForm/PipetteFields/FlowRateField.tsx | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/protocol-designer/src/molecules/InputStepFormField/index.tsx b/protocol-designer/src/molecules/InputStepFormField/index.tsx index 8048d136e62..b0cf78383ea 100644 --- a/protocol-designer/src/molecules/InputStepFormField/index.tsx +++ b/protocol-designer/src/molecules/InputStepFormField/index.tsx @@ -5,6 +5,7 @@ import type { FieldProps } from '../../components/StepEditForm/types' interface InputStepFormFieldProps extends FieldProps { title: string + type?: 'number' | 'text' | 'password' setIsPristine?: Dispatch> units?: string padding?: string @@ -31,6 +32,7 @@ export function InputStepFormField( caption, formLevelError, setIsPristine, + type, ...otherProps } = props const { t } = useTranslation('tooltip') @@ -42,7 +44,7 @@ export function InputStepFormField( tooltipText={ showTooltip ? t(`${tooltipContent}`) ?? undefined : undefined } - type="number" + type={type} title={title} caption={caption} name={name} diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/FlowRateField.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/FlowRateField.tsx index 027e5c3a5fc..e853a76ddaf 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/FlowRateField.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/FlowRateField.tsx @@ -80,6 +80,7 @@ export function FlowRateField(props: FlowRateFieldProps): JSX.Element { Date: Fri, 1 Nov 2024 08:21:15 -0400 Subject: [PATCH 44/81] feat(protocol-designer): define liquids banner to assign liquids toolbox (#16651) closes AUTH-1002 --- .../src/molecules/DropdownMenu/index.tsx | 22 +- .../src/assets/localization/en/liquids.json | 1 + .../AssignLiquidsModal/LiquidToolbox.tsx | 308 ++++++++++-------- .../organisms/DefineLiquidsModal/index.tsx | 1 + 4 files changed, 188 insertions(+), 144 deletions(-) diff --git a/components/src/molecules/DropdownMenu/index.tsx b/components/src/molecules/DropdownMenu/index.tsx index af336737fa5..9bed2ab2187 100644 --- a/components/src/molecules/DropdownMenu/index.tsx +++ b/components/src/molecules/DropdownMenu/index.tsx @@ -67,6 +67,8 @@ export interface DropdownMenuProps { onFocus?: React.FocusEventHandler /** blur handler */ onBlur?: React.FocusEventHandler + /** optional disabled */ + disabled?: boolean } // TODO: (smb: 4/15/22) refactor this to use html select for accessibility @@ -83,6 +85,7 @@ export function DropdownMenu(props: DropdownMenuProps): JSX.Element { tooltipText, tabIndex = 0, error, + disabled = false, onFocus, onBlur, } = props @@ -165,10 +168,12 @@ export function DropdownMenu(props: DropdownMenuProps): JSX.Element { const DROPDOWN_STYLE = css` flex-direction: ${DIRECTION_ROW}; + color: ${disabled ? COLORS.grey40 : COLORS.black90}; background-color: ${COLORS.white}; cursor: ${isDisabled ? CURSOR_DEFAULT : CURSOR_POINTER}; padding: ${SPACING.spacing8} ${SPACING.spacing12}; - border: 1px ${BORDERS.styleSolid} ${defaultBorderColor}; + border: 1px ${BORDERS.styleSolid} + ${disabled ? COLORS.grey35 : defaultBorderColor}; border-radius: ${dropdownType === 'rounded' ? BORDERS.borderRadiusFull : BORDERS.borderRadius4}; @@ -178,7 +183,8 @@ export function DropdownMenu(props: DropdownMenuProps): JSX.Element { height: 2.25rem; &:hover { - border: 1px ${BORDERS.styleSolid} ${hoverBorderColor}; + border: 1px ${BORDERS.styleSolid} + ${disabled ? COLORS.grey35 : hoverBorderColor}; } &:active { @@ -190,11 +196,6 @@ export function DropdownMenu(props: DropdownMenuProps): JSX.Element { outline: 2px ${BORDERS.styleSolid} ${COLORS.blue50}; outline-offset: 2px; } - - &:disabled { - background-color: ${COLORS.transparent}; - color: ${COLORS.grey40}; - } ` return ( {title !== null ? ( - + {title} {tooltipText != null ? ( @@ -272,7 +276,7 @@ export function DropdownMenu(props: DropdownMenuProps): JSX.Element { {filterOptions.map((option, index) => ( { diff --git a/protocol-designer/src/assets/localization/en/liquids.json b/protocol-designer/src/assets/localization/en/liquids.json index 628ae82b215..4f0d74264e3 100644 --- a/protocol-designer/src/assets/localization/en/liquids.json +++ b/protocol-designer/src/assets/localization/en/liquids.json @@ -13,6 +13,7 @@ "liquids": "Liquids", "microliters": "µL", "name": "Name", + "no_liquids_defined": "No liquids defined", "save": "Save", "well": "Well" } diff --git a/protocol-designer/src/organisms/AssignLiquidsModal/LiquidToolbox.tsx b/protocol-designer/src/organisms/AssignLiquidsModal/LiquidToolbox.tsx index 565efed9b32..ef5650a6baf 100644 --- a/protocol-designer/src/organisms/AssignLiquidsModal/LiquidToolbox.tsx +++ b/protocol-designer/src/organisms/AssignLiquidsModal/LiquidToolbox.tsx @@ -1,8 +1,9 @@ -import type * as React from 'react' +import { useState } from 'react' import { useDispatch, useSelector } from 'react-redux' import { Controller, useForm } from 'react-hook-form' import { useTranslation } from 'react-i18next' import { + Banner, Btn, DIRECTION_COLUMN, DropdownMenu, @@ -13,12 +14,13 @@ import { PrimaryButton, SPACING, StyledText, - TYPOGRAPHY, Toolbox, + TYPOGRAPHY, } from '@opentrons/components' +import { selectors as labwareIngredSelectors } from '../../labware-ingred/selectors' import * as wellContentsSelectors from '../../top-selectors/well-contents' import * as fieldProcessors from '../../steplist/fieldLevel/processing' -import { selectors as labwareIngredSelectors } from '../../labware-ingred/selectors' +import * as labwareIngredActions from '../../labware-ingred/actions' import { getSelectedWells } from '../../well-selection/selectors' import { getLabwareNicknamesById } from '../../ui/labware/selectors' import { @@ -26,8 +28,8 @@ import { setWellContents, } from '../../labware-ingred/actions' import { deselectAllWells } from '../../well-selection/actions' +import { DefineLiquidsModal } from '../DefineLiquidsModal' import { LiquidCard } from './LiquidCard' - import type { DropdownOption } from '@opentrons/components' import type { ContentsByWell } from '../../labware-ingred/types' @@ -53,6 +55,7 @@ export function LiquidToolbox(props: LiquidToolboxProps): JSX.Element { const { onClose } = props const { t } = useTranslation(['liquids', 'shared']) const dispatch = useDispatch() + const [showDefineLiquidModal, setDefineLiquidModal] = useState(false) const liquids = useSelector(labwareIngredSelectors.allIngredientNamesIds) const labwareId = useSelector(labwareIngredSelectors.getSelectedLabwareId) const selectedWellGroups = useSelector(getSelectedWells) @@ -214,145 +217,180 @@ export function LiquidToolbox(props: LiquidToolboxProps): JSX.Element { }) .filter(Boolean) return ( - - {labwareDisplayName} - - } - confirmButtonText={t('shared:done')} - onConfirmClick={onClose} - onCloseClick={handleClearSelectedWells} - height="calc(100vh - 64px)" - closeButton={ - - {t('clear_wells')} - - } - disableCloseButton={ - !(labwareId != null && selectedWells != null && selectionHasLiquids) - } - > -
    - - {selectedWells.length > 0 ? ( - - - {t('add_liquid')} - - - - {t('liquid')} + <> + {showDefineLiquidModal ? ( + { + setDefineLiquidModal(false) + }} + /> + ) : null} + + + {labwareDisplayName} + + } + confirmButtonText={t('shared:done')} + onConfirmClick={onClose} + onCloseClick={handleClearSelectedWells} + height="calc(100vh - 64px)" + closeButton={ + + {t('clear_wells')} + + } + disableCloseButton={ + !(labwareId != null && selectedWells != null && selectionHasLiquids) + } + > + + + {selectedWells.length > 0 ? ( + + + {t('add_liquid')} - { - const fullOptions: DropdownOption[] = liquidSelectionOptions.map( - option => { - const liquid = liquids.find( - liquid => liquid.ingredientId === option.value - ) + {liquidSelectionOptions.length === 0 ? ( + + + + {t('no_liquids_defined')} + + { + setDefineLiquidModal(true) + dispatch(labwareIngredActions.createNewLiquidGroup()) + }} + > + + {t('define_liquid')} + + + + + ) : null} + + { + const fullOptions: DropdownOption[] = liquidSelectionOptions.map( + option => { + const liquid = liquids.find( + liquid => liquid.ingredientId === option.value + ) - return { - name: option.name, - value: option.value, - liquidColor: liquid?.displayColor ?? '', + return { + name: option.name, + value: option.value, + liquidColor: liquid?.displayColor ?? '', + } } - } - ) - const selectedLiquid = fullOptions.find( - option => option.value === selectedLiquidId - ) - const selectLiquidIdName = selectedLiquid?.name - const selectLiquidColor = selectedLiquid?.liquidColor + ) + const selectedLiquid = fullOptions.find( + option => option.value === selectedLiquidId + ) + const selectLiquidIdName = selectedLiquid?.name + const selectLiquidColor = selectedLiquid?.liquidColor - return ( - - ) - }} - /> - + return ( + + ) + }} + /> + - - - {t('liquid_volume')} - - ( - - )} - /> - - - - {t('shared:cancel')} + {t('liquid_volume')} - - - {t('save')} - + ( + + )} + /> + + + + + {t('shared:cancel')} + + + + {t('save')} + + - - ) : null} - - - {liquidInfo.length > 0 ? ( - - {t('liquids_added')} - - ) : null} - {liquidInfo.map(info => { - return - })} - -
    - + ) : null} + + + {liquidInfo.length > 0 ? ( + + {t('liquids_added')} + + ) : null} + {liquidInfo.map(info => { + return + })} + + + + ) } diff --git a/protocol-designer/src/organisms/DefineLiquidsModal/index.tsx b/protocol-designer/src/organisms/DefineLiquidsModal/index.tsx index ae30ab973a2..d0427d8f36a 100644 --- a/protocol-designer/src/organisms/DefineLiquidsModal/index.tsx +++ b/protocol-designer/src/organisms/DefineLiquidsModal/index.tsx @@ -169,6 +169,7 @@ export function DefineLiquidsModal( }} > Date: Fri, 1 Nov 2024 10:21:52 -0400 Subject: [PATCH 45/81] fix(protocol-designer, component): fixes RadioButton and update path tooltip (#16635) fix RQA-3270, re AUTH-862 # Overview Updating the `RadioButton` component to fix the "double-clicking" behavior when quickly clicking through different paths in the Transfer step. Also updating the GIF images for path animation. ## Test Plan and Hands on Testing ## Changelog - moved `styled` components outside the `RadioButton` component to prevent them from being created dynamically - updated gifs ## Review requests ## Risk assessment --------- Co-authored-by: shiyaochen Co-authored-by: shiyaochen --- components/src/atoms/buttons/RadioButton.tsx | 130 ++++++++++-------- .../src/assets/images/path_multiAspirate.gif | Bin 122155 -> 582900 bytes .../src/assets/images/path_multiDispense.gif | Bin 121556 -> 560166 bytes .../src/assets/images/path_single.gif | Bin 203601 -> 702528 bytes .../StepForm/PipetteFields/PathField.tsx | 17 ++- 5 files changed, 86 insertions(+), 61 deletions(-) diff --git a/components/src/atoms/buttons/RadioButton.tsx b/components/src/atoms/buttons/RadioButton.tsx index e271f509a6c..f960987f67f 100644 --- a/components/src/atoms/buttons/RadioButton.tsx +++ b/components/src/atoms/buttons/RadioButton.tsx @@ -1,21 +1,20 @@ import type * as React from 'react' import styled, { css } from 'styled-components' import { Flex } from '../../primitives' +import { COLORS, BORDERS } from '../../helix-design-system' +import { RESPONSIVENESS, SPACING } from '../../ui-style-constants' import { - ALIGN_CENTER, - BORDERS, - COLORS, CURSOR_DEFAULT, - CURSOR_NOT_ALLOWED, CURSOR_POINTER, + CURSOR_NOT_ALLOWED, DIRECTION_ROW, + ALIGN_CENTER, Icon, - RESPONSIVENESS, - SPACING, StyledText, -} from '../..' -import type { IconName } from '../..' +} from '../../index' +import type { IconName } from '../../icons' import type { StyleProps } from '../../primitives' +import type { FlattenSimpleInterpolation } from 'styled-components' interface RadioButtonProps extends StyleProps { buttonLabel: string | React.ReactNode @@ -28,7 +27,7 @@ interface RadioButtonProps extends StyleProps { radioButtonType?: 'large' | 'small' subButtonLabel?: string id?: string - maxLines?: number | null + maxLines?: number // used for mouseEnter and mouseLeave setNoHover?: () => void setHovered?: () => void @@ -51,17 +50,12 @@ export function RadioButton(props: RadioButtonProps): JSX.Element { : `RadioButtonId_${buttonValue}`, largeDesktopBorderRadius = false, iconName, - maxLines = null, + maxLines = 1, setHovered, setNoHover, } = props - const isLarge = radioButtonType === 'large' - const SettingButton = styled.input` - display: none; - ` - const AVAILABLE_BUTTON_STYLE = css` background: ${COLORS.blue35}; @@ -81,46 +75,6 @@ export function RadioButton(props: RadioButtonProps): JSX.Element { } ` - const DISABLED_BUTTON_STYLE = css` - background-color: ${COLORS.grey35}; - color: ${COLORS.grey50}; - - &:hover, - &:active { - background-color: ${COLORS.grey35}; - } - - @media ${RESPONSIVENESS.touchscreenMediaQuerySpecs} { - cursor: ${CURSOR_NOT_ALLOWED}; - } - ` - - const SettingButtonLabel = styled.label` - border-radius: ${!largeDesktopBorderRadius - ? BORDERS.borderRadius40 - : BORDERS.borderRadius8}; - cursor: ${CURSOR_POINTER}; - padding: ${SPACING.spacing12} ${SPACING.spacing16}; - width: 100%; - - ${isSelected ? SELECTED_BUTTON_STYLE : AVAILABLE_BUTTON_STYLE} - ${disabled && DISABLED_BUTTON_STYLE} - - &:focus-visible { - outline: 2px solid ${COLORS.blue55}; - } - - @media ${RESPONSIVENESS.touchscreenMediaQuerySpecs} { - cursor: ${CURSOR_DEFAULT}; - padding: ${isLarge ? SPACING.spacing24 : SPACING.spacing20}; - border-radius: ${BORDERS.borderRadius16}; - display: ${maxLines != null ? '-webkit-box' : undefined}; - -webkit-line-clamp: ${maxLines ?? undefined}; - -webkit-box-orient: ${maxLines != null ? 'vertical' : undefined}; - word-wrap: break-word; - } - ` - const SUBBUTTON_LABEL_STYLE = css` color: ${disabled ? COLORS.grey50 @@ -129,6 +83,15 @@ export function RadioButton(props: RadioButtonProps): JSX.Element { : COLORS.grey60}; ` + const getButtonStyle = ( + isSelected: boolean, + disabled: boolean + ): FlattenSimpleInterpolation => { + if (disabled) return DISABLED_BUTTON_STYLE + if (isSelected) return SELECTED_BUTTON_STYLE + return AVAILABLE_BUTTON_STYLE + } + return ( ) } + +const DISABLED_BUTTON_STYLE = css` + background-color: ${COLORS.grey35}; + color: ${COLORS.grey50}; + + &:hover, + &:active { + background-color: ${COLORS.grey35}; + } + + @media ${RESPONSIVENESS.touchscreenMediaQuerySpecs} { + cursor: ${CURSOR_NOT_ALLOWED}; + } +` + +const SettingButton = styled.input` + display: none; +` + +interface SettingsButtonLabelProps { + isSelected: boolean + disabled: boolean + largeDesktopBorderRadius: boolean + isLarge: boolean + maxLines?: number | null +} + +const SettingButtonLabel = styled.label` + border-radius: ${({ largeDesktopBorderRadius }) => + !largeDesktopBorderRadius ? BORDERS.borderRadius40 : BORDERS.borderRadius8}; + cursor: ${CURSOR_POINTER}; + padding: ${SPACING.spacing12} ${SPACING.spacing16}; + width: 100%; + + ${({ disabled }) => disabled && DISABLED_BUTTON_STYLE} + &:focus-visible { + outline: 2px solid ${COLORS.blue55}; + } + + @media ${RESPONSIVENESS.touchscreenMediaQuerySpecs} { + cursor: ${CURSOR_DEFAULT}; + padding: ${({ largeDesktopBorderRadius }) => + largeDesktopBorderRadius ? SPACING.spacing24 : SPACING.spacing20}; + border-radius: ${BORDERS.borderRadius16}; + display: ${({ maxLines }) => (maxLines != null ? '-webkit-box' : 'none')}; + -webkit-line-clamp: ${({ maxLines }) => maxLines ?? 'none'}; + -webkit-box-orient: ${({ maxLines }) => + maxLines != null ? 'vertical' : 'none'}; + word-wrap: break-word; + } +` diff --git a/protocol-designer/src/assets/images/path_multiAspirate.gif b/protocol-designer/src/assets/images/path_multiAspirate.gif index 987ca65357c35c7f574d2ef84b95f91c1f38daa4..544bf5bf53db432c297e1d32ba51be4508001c15 100644 GIT binary patch literal 582900 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 Y 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�UhRW}RV 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

    ^1%UVc>)dc29)+DMEvoVO>R4W#f1=GV z<~4-Rbs1C*jp>c4K8AJZS`fZ0O9~h#CcqJd)^7^bLt~{s0bGtCh?yf(rpy>h-xMlQ zM}=%earLFEM?>0KHe&_FPP+k#Y!gF_&KRjn*tDHSktvXfhx!iK$smkk)$q1$%*fA#)b8zMUwvd{&hf6cv3cclmXRAM zgKZj|7ZPVf8y3nWyj-Bqy3gVkBQ{_FhK;6sCFv*<@Y3vm!p5$>5;Q@HWJr;56c{#! zX0ib#xwpUBfJ#p=ZET=(g~|g@DF`ZRzz0}N@ITw{mG#FbRPZ_YHj0;G=)+_|m1xrG3(a^us1I9`W`Ord8hvhyPKu5*d^cb$!k zdgbMwTu}h&*R8mKntdfT>_1ZtQ@z5i?@e;rq?^J&{F(1eqrO_`>0kam*Z=36?}uK> zc#&`8%(tE=xIV`4;{c^&qBFz`yv+0BClBk+AknMbzr2$=MSll1bSC_AsvK*-OFcn+K?g_;yRf~d0y(dgrbmtvWo z-@dx&DI|E|CLEKGy^tu~%f}t?9D9{;?x*y%ih88_D{A~Ujov9IZV!`~W#XyHUSezY zXp7ILWMvwCWVtUwTpZ1)#J#2I0;=QevT3oM1V8bADT$?mFp!<3^N3JP#FG$M%0gR+ zWvfRM{MyYJ=4^U}!p0N%lNlcJ@AWB+#wVmpZOw{Y%Bx%BBxV&eu&&P!!UG7C9C#Uz z!6*?nOPKnws08|gRYXriJ*~~qY7h}gDtCiSuX5kM@K%tuG#*ctgjzFc*~!|Cj%T>N zv*z?4gj!4@vrf8q_=0_uoH+ZkT2XC&eezNC2t&^)f?Ge`zErW@LC@`a$-Fv0cq<){ zJC&!)#|%aPqU^tepO0FyD>$L65^6k^e=PNe;%GrW(id51Zn-1P|64WsX>t-R4y)7y zeaZMnjbeI_uTQzzh+o|h7G7G|30qO{C#7nZuy5P4*kKA~rN)ZI-fY1$*A%g^v-QEHzpxC4{t4$6N0FMxgmE zEXoRzKkv!XE`wb`%ay!P&D2=cTc!OBtbL{1w@}%Adx=iJJP?4cHH0z**1il1;6wTn zVC^e{GWi%&rhSW8xvrZy8Fed_f6>at8)ABTzzh2oj#j5Z-IlvLn@TP+!S&CVo>47evRi+Xk(2v$@*QipQ^NdK* zpp`{1u0a{)C>dsQ!B||4U0~B~&9YdkTNv;ltHlutx1wN5R&`Z(bh1g^`oeQBflnFN z$!c+4e~$HmXH#@bR3^-Lr7H0ed&InM|0^HeAe3D%~m?GSI!u9H>h*QTf! zI15Y6o!wtbFUNOaN9`>pqIoYazqdQ{)IA9`-y+eZ+u13YfqveN7fPU?Bf0JO0&8E+DJRw|yWa$>XRlLG zyi?oA!Xui^7?0k}FKLj@4U9e*f9V*#zeo|-TtbuZa;26^o7A@TIi_o1QT!77$jH&) z!$jc6B<8xtpfGCVw}ff~Oo-|EXNa{kBu&5)lCr_)rHK3M-NP+F>t5?(S-q!Htp72F z9b#^e-Q&%v(E;K~#M%?a7mM&K4H7^=iV!$&SiBa5HVeJwlz_yLB2Y-vg{*3FQ-_`` zLlT+qT3?9fm*+nXxJ9khI}>J_ZZt3uqPDnQ92jH(in9v>l~3IBat*AO3_&5B`F=Gp zgx+8$6f|(&yHeu6TS{(vsMmZCU#6Yz6WlbQCgic9h#<~_F0at}^4KtRO(7$A(Z3hO z+0J`jKf9-kKyMYVxaZpOJD%{r<%j<(<@LVHKf-QcI*!Gh_*!p*@V^TA>l z!4hO4&jmxIbwgymL*&y#6q`eo=R;I4LSST}8iJv4-B4}sP~G&7ca8R>~P8L~iNpMKxm)vie?yZUpX zGG$^f-g$eAJZhR!07z_UO{{U|rvkB`zR?b1Sm)}(#MQPf(7|`MnhT}!w1tP!J=j@~ zV3AyIj!xf>AV zcyE~muTD1t6tQ7aDTWo^Rz5~y3+rivk#;+wma1MmnfL0s5V#X5gFD#(CX2>v_Z^?S z9LQSvZr<*XJ?8unH)fW=P$u7HxkpI8H-!m=Y3tG5cbR6obp?{WEY zlu4^l9_c(#USwD0yuqA!N8%Xf_c#b}P&P%0qW{m#$Mf$C~cnOwpV@I1f`@p7W`K2)AKQHT8+>#Zp}#r_WX5fFn{F z)?2M&`O|{EX4*~hNe{N061NweSNBPgqk*)*$xMT+xCQjxIBx^rsf?Uv%83bs-W6=p zMbe+E1vkrpZ$zi^mmBCI$K8hr6_!)y&1~KhE{J3~HGJV|`25t}w3M3i3#q14Q>PXs z3Gb3y>aD22qQk1wuO1)L#wKt2?eV6i+KFqvHAn7>fM6?UVWk}Y;fZx7e4}Uv+#j6%m z`9b-uW9U3BTYU3pL;RmB-||&EG{KJRnYXX+Ghjo?Y`Xd(2?03mhG>-aqE&%oyjX@N zC>{cm4^qcoqaK=WOQ$Db|8@=*qc?k?&Auy^p%p!kBpu24sY!~1 zNJG|8Z%qb1(r$!?CrQ$s$6RnTosCB-oUY@Ru;4RN#71d-+8B6u|I?$PVqe4JLgG1| zKD;4Vgz*v`w4bE!xI{hH<((oCI&uR`bxtqc^=K~1C`0?$0mvgm^SdI!!W#=c*dP;qWa+R6+S^zC`*wG<{}b!J(5BjU?Z8Gsa#*MMX}H z#B#?Cc0He=khg@%?-|S?IFa&dI~r+kmbN*1CWpvxen$5vZ!?`}D66g{x{vW0@#G0A zBV;r)=iH5-zMWLIRwarXhFkG>PL9wAyo}roF%~xPR(;lZ618}`A`CujXN<|4y775S zlv?Ok?IkGG*5OQI%NnC?&{KcZ6bp&+mT{IFqJrN`7SH$Q)q-b<;_==ZNiC$S$7w?g zKP=fu=Ul1>8ADU)Wvt~2++a!7rwGbW8-=1tjrcxzsX*^nWj$YwfE{?5IL?x4yoP2J zhSnRo&>dK;2At;%n)W1TN%O^1EgdGUa-H5CjiP;tMW>V?EiD`E50mh>p;}c$p<6or z6`F7~`#z#Xlb<@OE{?uls=M{7KxZ2g>R?9}QO}c4)#C7pn zj^;8H8k(xJwCD-M>O4w7fvaajrYLr~A%F6OZ^~PeJ5eVAovDAyQtfnP{}2>)w;}c{ z??1eK^28uv9=Eqi0>bHNQD`_% z>(yMt=m?rR03Mk}zr|l;Hc6>h^Tu9J5;S#ho+T?8vEPY0&rtK#f-SGkFmCPU5I5j! zpKJ$e-xFZ1(iG!11b&XL7(jhUbYHx*D~A{}$Rc=s5{0%~V!;(AECMA!4gC~f=NfGF zl6CpF^!o|_YUrTS>OM()A5uNV7pr+`-q5r|Qhf$JrjQ-@v!wxLQA7p@Z4JP>x+J(s zYAiKPfrLh;jO$wUt!GwwB0@dV>pZXy5poU2OXk)>E_-_ei_AA{x9wSsDM%Z)a%w;A zQStH<%K=J@OtNS|Coa|=GQOE%Iot?aZ&16T`dYx!$`q5U4Eb(IB)VJLXp|aRy=IuK zfNDAr#*~s1zF`L&W`Go~VEa6PeNDe28*i2L@Uf}i*QVSaj7WV@S`y?y+G#nLy>P0G z;cvZ6#y^rP#zXpwpf*AE%%IZ9)m~A&5GT=Y-@h_ zDQ1hyHlce`-!i9OQ_G7YP}H^3;J?J?YJ*s!e(t6GXzg3E z5MuH%>=f+xYc!nUj*a17fc^d>ohMgXXz{EclvZeQ-uwxgQY9YhzyA4Q=GBl#&reX) ztzav3tzWNP?7+JA8bMKKYKglUoxurzxf8SAy z{JA-hbywz>_%Ff^OipF?x9t8U>~h#N!E{wYinHXdqXriKf4__3KhUoGN7!*JR6*RZ z^CudsmqF00c$LKuvZODVoGJ@)triDBNR7ed)S`?4!xoWsQ3occyhSl0EypG!`BKp| zMhU!2@x_{z#zyn*+S65Fa{74ILu3B#S!0!C@HOMId*5kP+na|Upz@#zjJCJDj2cK` z?&Xr`J^_vT1U>H~ z0gcxn=;iC8u)V(ny@3=QR45V}cn5m0aGd5f5cK3V!|1f`K(89jT%IoV%|;Yy4w*z0 zM<0uY6gRdjs(IcBSop_ScshxT+T697Ao81q&{>*kun_s^QTbL9{XfFat^gbLyK9!K zwx``AA9@IP7nX7A0&P0og3V4QP)MGb>DcF!mj&r!-Oc&h0*0o)K7{Y)Z7|A%wh*vq z@qVD;{k5=Eg9FGI+wdN2R%1~MWmW@?4i9yJ3;CYJu#uy24#T4w6n4{`uwx988Y$ZD zi}CjSb)}>Zo*#=Yt)Q^0>H0~ie5@s~aFEcsL$O5E^F)%WuIHAgE&UV5OqPW-nZPW! z(!)xy@DJ_hb5mpv_NecRdSS?8&FTd`k>#Db`uT~3)UzHbhCSZhEMTDBAS-17e>Wl7 zbOY)!wMU@GDt#$c4jXAkx zCz5EnWrUP8t~AHO7zvGq|pXtnC2|!P( zA2?J%b*uY`NpW8sSQ!ouLN&Y3DBoSph>P*?@;+8TpX8);ZHNI8EjFbM0jcy_7^Pt@ zD)Sow0-oXku}_Bhw+{w-#@k_G@`vlFi*C}SxX70>ujYvinxq@~UhwI_&7n;KQXecQ zA~Zz?uDa!W83>VFCZ9>kJ(^@!wbY#q3{5DPn|nB|pTyy37fEcC@re$N#b5Z*QymS+ z@cK@~zv57&u&I|%dPJBI%vVf-zR)N~n21cMVqmli?-y|3iWyJmd|^iPXHF zbqoeiWTupRL{B{CvK9F!1XWnAHN#ur+X5a7BhSL7(kI~7Li`OXIyZ!=yU9C(y&0-1 zvs0PpP^D+A&9|e^`@ZKLGwh033BgW#r*iM942#*N!)$h@a)50c$r+&u0ArdF>qt>n zZBETpY&w;i_^TYFu*P@_G~-c;jZ~YLMzZ#)KPjWF(vNy|+iGZG2g9C<%7sR{>~t3I zjJ0B<5ZwLSbg>+$Iz=1dA$@#_;-Z#nJsO&h7{u9XC115>2()8E=LF6Yq=79%N6;@`FMXw@tBoGpp=SG0PsuiGj6v<|UtXS?0<)M7Okt(!^ElmI6yu8k+Aeh5+7OuzYr-e3)13 zgwbbI0BpB9HnqK5a+0cMhyJ|z)IK}nY}WA%dRDrl@cV%o0D$0PhKK%K z$0uUa+r}J%9JWzlm(BM8wOlb)heR447t9Y!U#K~@rxW7|uy7j3#;0K+C~v{l2zfm$ z;fjdyNmxIx^+-tzd1S?h1(c^9KNnc2KC#&~eJXQvMS+UYelIR4 zoAtiU@SQl;3J0`fv~j;)h29sjeAJqFwQbImoRwHC#*fgOf%T6!#ORA@hjIDiQA&%x8MS9qC9xLiQ6TW*05-|7*oDt}P%-!?-uI^WC{y6J7KzZ+aA{v*fn_yY6M_ME+}Z%*bhGtvn%i>#y_pT|JMcq}Y{?5U*TjZx3c<=pn7;^O z)n#L!51M}gV3|TFblLC{{0Yfe|IdZp{}%LI$->^&b4_fd-Drf^0c)Adf z|K0{RY=VPP#eI?glIni_1g5%iXgq77|52~oS1wkR1DkIDQLkGha+n1S+7kcP>zXVK zu)n_`d92fXX9I`5wg+47{$SF8HgK)e27K_)>~0mBP((Lc0haszu0pfj>i=^UDoKeN zm5uInH)IF}XA8Aoc>dbJ6qRQO@ep2jtcR-YEXNJteu3o<64Uw{m`rZkTYnu8T3|N^ z8Va2qul3;F#&AhUdF^jZRX$N&d8PdjRlh0^Y`6bu5IHzleeyeC_Ua0q#ngfq`#Wj? z3l2DB@XIKHBCusy)^%}H;h%t~%5T=gw6)|lOsT?H=+tTKJ?0`|GpF=3<+Uk z%PpXLRPnWFj@w=%C_&raC^AXEV(%s6KIkJq-!Wrxsy!PZom0W~j~uK>y#?){G&#OQ z`JElCY(n93c>4h*fgO~C_#7y5>%~Md_zPdyAz1e@Bx{RH6`kHu2vJtO|45VY`28DP z^y(%PM!>mV!QY!+dQCq;@BKy?CA9td#Gj-O66@^g9XKfihf-HjB(5r`WANIKKUcC` zJFt!yU8UHu5k2(>C|9*zq(s@=-Ltc8-2GwH*)Sw%Lwls@EK+%t+1sY;haWajy;OeE zpmic4W4|{(@@S0XWjpoQ!HJScyq5cDqXL}IOv!8dR8~z&lut?B0sdY~ZZ6$wlECO~ z+8k-15pv!_?E~Qgv;aqIf&)9hXSTq@$d2+_X%paWx|9pe}C(?v3w;tCbilwGeHCw9SLPt zEC2S^=t;u)N|~Gg#d=T7D<4MI*S}AFkYfQ04O3e;JG*UOU(eq1KJ2_Y?#UBA^k>h; z#^?$@UB`Q|d|>hgdeJ-|I~o|wsvmk2DlzpL4{_^9i$Sm3{6M=ZsHDXd!%E;e4rd%4 z4O|J8s98M0sn#9aaQ(qV2`91JSP*x6!2^YX9>U3LSGR)b$XmyBagyib%ydfygs*i8 z#=biG$i8}nZ4e>Kwqa$bx|NBmko1XBbt2pZ+mz@TDT2zjE<*6###o%U$kU%zc3idu z1cy8TDaW{nhNA_I(fz&;93$vY1S4rTnR@Vd@MDdqE$A-gI-`_nEYN%#1EP-e zFdj3DpYN%{OD7AOr>(h(>|sUtP#0**S015(@mvqM+rtt=Sy5p%gSgY2pCMma1@tBZ zbKxZfBg|rQD7S&}pb?(M@`HyCn)CMP~$Y+ytC3_7uIyK;NxWvV3#CsZ` z_e-VmC{QQf*P7GN$}EId8id;G#(HXUrfQX~g|KpbsL=Me)~Yn={R*%1)Q%b9cl0n~ z*I!MavpD0=cs*jLA4{Q=7&l`VD6?x+KB?8g>6sWRb7)aAsVmN;UFYJlV&&7Sm!wK! zm4j|?T~6^O>>ISasQ18TPFuf6R=d8u#Moi5^$X&5l%z2{)WLvR-ymyQyP_`i(7AWP zp!!C;sf^gk`J;xOF-cQOkIa!EJdF zX0i$D&KU~rusAs{Y={HOe;aZ;68pm~#f+B?axUFL-r*{$_jwanCw?rxE+vLrXnoGm zv|pkQtOlBMFq~V$!D?VpAj%$C4IC8DAgMQH6$JJ*BYn72?UAQi zT#jRbd>hkroH7JqL}a#G+F6nsS?8*f?1XAMF&dUq6AGrfpm5wD#g2Y3ewa>0vCtam z6>Y`S^mIiC8Uxd_GeS*PV%Ci%H?>b3o{GW*&Sy|e0AbM{v~mMgZLioKO1gfT8V zz>l!V7KgW4Q8prsw6}7n@F+%(xU#Kvq9>Tc;oF4i(S19d87;#vEI3fe+Uao+TFoVe zE@&5R^ul6ZT2TS+aSY4L*+QqupmEF<5EbAc{i#T!dQwrG4KR;IG{|$N)Pz&hTL`Fp z(K0{Vg?8y-%?o)aIRh3`g( z(W;9%zDm7FO(%J-^|}1HkH(Ak?Ai?uoZV$`q{g?bYY1f`;EqQ1nicz~z#BD(AHF>rFEF2|;bQb*kKfgODf)p@$ z-%oOy=8KE}8Vw2Hn*w7^7H7M}=z=Eqn(;9Q5GCdSo;=09{Kwd)0DjjioHgK*^wn=O z|5_BzGLS110?i~LUxI>4K(6EpczhAW6=BBv)f0CdA<%4rD*y1&1;Fgh4ss=tF4>J2 z;GjQAJ{ zrp(Gh`yj(oNmYMt0cRUjPi#n($-tEPjV2z{NT(klxtneHr@z++7q{bJThL2y(eTB= znM!-}i=yBIOmUDaPtpcmb_4DPvXK)lY~--b*7M`Fd)BuucgXtv>y*I5nuaT%U*9*U z`pRcN{7sp6|CKV&!EsT?fwjQu(j*MT|f~_Baoz}tEwtb`($UpN}KElJW#kN8D zIEiMikd*?;NA?_fjlc3yhBFRr6XeQfd~i~mKN|~jr6pU}9@BG2K%6>yo{lKnINRoh3eEJ8B}Nt+S-tRvVS;fyov7?aq=?BpqY6Nx?JklFF{ zhf-4KZ8g?k`B?Mu%zg&ifdz@->=qZIO8P`3MOE8?R5u*|P$Ew#VHLbpQE$Xq#iCr5!V{;<9xZ-`gOt6U~S)H(j^Gr;8$cm5~z?L%zs9i!2#)WPt z`O%Q&E@VYqqLpEUxvrTxK6HxAGTk>OE}gQSYIsrAJ#Xlid+O_;7x|))QoXn zs`Z$(|H)HhFe@G!roQ>v-+8{Q_WBjlL{%20YXAr4fCo2$(342^`qaE8ynI;4K}NY> z668yhYHJ2^RL;2x^20pc>N3z+4zV3&!iEl2<=DORr zhr2yws;;l^QBlbRc}tO%T89WPnGwdPOVG}a%c@|T-ZOdAOGoh|+BkcCH3}XAnMWWD zw#@K8f&{(SPJy znFw_bS)?Zrl9e%kknj@9@K8x$FxTm)7xLBcP~Xd7$R{ASf_w|AV<)d|4x`&tFlJIK z8WK~SNcFz5q-5nuKP2AwY<{`*Xl{PUyk0$qcwJK;;hJ{J&y&)Mw#^lpF$`<9veM(u z#<*`8++GDsuU^{bV-!+V*H>i?_KC$*SCDha{G7v9ZZ#sZ8+3nuD(i5XL1dHsc4Yn6 zOW#|DhK1e-`Sv|5_qD#j5(A(mv=*$&gL@N+Jn&-X$2Lla!V?+$Dy2fxd(Zrb)Uty@%kX&j zPY`VC@@&XAFE#fsiuDPKhk7egKC($>=xdhA5?6>9+iSJhYrF^}u6iVMAU|k7TWXy0 z_Fc$#Gt-v%!o_4_QGan~ru|3gu_C5KW#RWUKy^KYGHKPX7}X43oK;B>ReT3w)N+`qvK6^03m0cpEPW5#eP~H5`dlu+VXley zn%>jK$P3RW(I-4a4^_Rzw|%sRww01M={lN4x#?)AI1OsPl+n4~; zJ?FI7&Tsz7SY>@u2|(6ZzxAlwL!bKtTkRZti(kVJWyyHIbf{GpT2p@SbBADQ*$jGI zO#+G`?M2SRVWbV!?{Egha5G`MR_PdG|Jl~>%;$*PGnJQ!Sp(n~j-Es*2X5{d`|GQF zLR}{w@i&#pCYsANostv?e*xY+wsSfE-#YkLO{_7yl<`fhB>5iLNMN5d;QKBW6yLAe z4FaY0L6?A#j{D-0_&fhV^zH)K^7sz`2u5vyHc6l3Dw>S{P8gu zk2d7(a{zBGC;}NsDiQehZ}u%`OJZpoRu&XyfAKf_b`35236NZbB-Q^f<)g#@ORh|h zZf%ZkpO5aii0&eb=@yLnq#M)c9W#&~Gt?aOc|K3v~6&OiW$a)xU7+KOC5zZRYfh|YH%=OcCu;nPI z9?fvg)rAeV9E+s*;zI6Pjta1Nx@)lIDBK5bjI##AwvxCx(~^+jTBR^q@RCacOWX4S zT`B|r?shs+kWgZ}WvRj%HtLlrai)D=MxMXWM=<<8oKVmpK%GbI<{j;o!x0D)irjp< zN48%J$L>;b1=gXj#r+;EtR?BcXYa-(_;(~qyZ@#b9IuqW`PZeq{WoZWx8QoEChiVJ z-|Mpjb)&89K-1lLr4uC4@F!2D532v(%j=BtwSPBi|L(A6>c$uGej-yC-n8hJBGJ?z zl&o2g?cpG4H5qW=1UtecK2|$H(KvE~cg%hamFX zbF_wGS2cnjcwH|Msfd#~DXBCAC~|4l`=gOdiG%C~*=~J2(P9&n_x^mYrfs?RD)6w@dGoo|{1V;nF8Egd;dABdN2{7otC>p7_L` zP6m}bS_8UeSe}Cpc}r(QmJg}UM_kI>o`O2~`!9QQx!dV;sn@8+UUGqRBHo`p@|2@>)IxbjPd9xsuJv=~j^65T*|#YPsbotndF!O^l34Eq#2dHli~4=@?ao^*;VFc0 ztX%F?-OFj4ZaWdXJO~{5My)E0-PJ8!@G|Aq^Wlfn?I$0+sQqQef{g_V(^hizf1$q+ zPdHyytGPV3G7%S1Sco2Nx)^B4^F4grc6(#moh87ccH;8nc7Cg;t#hmEWwx|77eGZ7 z0lOr^xj?J$LN7&mh3if`jWI{dh@FpdWbp86qe(Kx!_@)GHy3)*D}L?I<#@|$cxx)x ziQgI#5;SEBJW6{G)Vqda70CzFl!`6oxCV(^Dxlpud=-zXH3fueAK($weJsR&5ytn) z3~C@xKvAONhsj`$7kyvm0G;45XT!#XVtVhB?zhntQbk7Hx_l2~xx>WZ^!K*EN(u+n zMmcdzQfiUOv0^AkE2A--ekLPHV~tdBK2%1LI*}H?nLrvBZ%B7pKI7ogNVsoD%XDv0 zMt-)}Dp`7&PI78MHPbCBw-}4%i5HW4;*Z1-Wd+u4>;CsulkQ+Sgk)G(iS|q*B8yL+ zC{Tfb92;@3EGZXTQ%}zN_hg3si;UdKCMDgQ#PqpWdR%QyBSMOnnfIx-ZLAfPY|W># zO{u5^e=v`}_TYWBAhL<0meCVgrJ3Ph%-p*&c-!Tb*pN%OH};y4cvL4bF%NHRSNtKl zT5XpjhZ6P{&#yt4yFG7eMCE;Hv-@&HPm^8mhnmV0{8o;9^~qjnjpd=J{X}$tJ3Uq} z)@Rf2EOcMD=sygaitXyDMwQl;;EHBr8GlC>X3CUt{Mu7X+2@P#?X@P#-;a<8Q69)Rd|}?v>xRT8ZBo_f?yRI_Qts zD>dqCz6Ec?9@kfhbke|UgV7HS9~kKL#7)%^Z&xnjQxdnc#nzG4abU74@ei2GHe~fy z$w*MDjIGSP^PzSylrhkoHrB3-4s|kT%p#e*t&eTENItSP@{^mbNNg&YangEm09|D3 zYyMg6 z(%mfr(%mi6Qc_AvEV^USE#2KI-QB5_lG31{;yO2ee|yi~&ogJv*}s|dCoI-5^IF&E zbzN`b9_p`7ruX(l$IZ(mW zE?B=2@?z3f#i|19H}n+@qtc;ufr4QDX2foSg83>PxxgATECjB*_|U&mx5^7DLL%%z#6Le)LXOaO4 zf6z+;c5L&ae=-)SP83m3W~iUEGP0)dBy||&%gX-i{4YsK#O2+jeRR@?lx zo)#GKXBpo*1O&b}D~A(1<*QQx1LCa}r|d~_Va5#Ta568eF=ZfV7-jraI5)d(|C(oYDDY&2 zm9(kaA9WRIx!+5LUTN1Xhky3c@oiOmd{+5t367W#r`)+ZLiqBaWpdqrdS5i5@#p>p zLGEkQ027w;*U;b8QvMpWTYqv~fbrLmp=CTwJQltZ>MjpIz!ML($8SXssznRU&-W*= z!NXSfk52JZmkhY@2tbAf6y$q1&w3Y_L$+G*(4C=wmZ2k(kZDvlQVB?{9zf&_86P%3 z4I^P=V!_=4n1%krDir!|FVJW*8iK8 zN`#u>hX>uVgm{Lprv42}-`%p{as@f0G5?Qq&HrouT+okM@{CzYi&<-p*;tABd>gYx z7P})9`$a!?&olNQE%vB2_S;JA>22)!%D?*tKWiEcafk-r;9V_0Ksf$;R$4q1M}cs# zG5U5N3K4iX1^A9@AamIR zo7GXDThpEQXG=j=eO7z@i4xJg7G%|C^JNEqtZ>tZF+po^>RC!(&}nNVkyVfdoO<5r zNClUfyR5GEJ!14Wr@Gz`90z-0!Q;2PI`6K^dNwD)WA{IQoTv7aNd$Af|8a43ToNDX>|+vK;uTjea|XEQP-xc#dan2C}OBqN#%~(@q2v zhKzZLL=iY9$Xj)rgo6l5yfH%6bQWqQUk`TUh)+he;v`6H>0Y!xllcNu7GPFS5YycI zk|ZZJnn-}SAn`Rt!musT-8j^%AXOxQc`u!*95p!|Y*y!GsMUeZYP`NxEik;5*w1kj z8D8@BL1D?w7K4CU>7B+(VqUm_cTRo?#lb=0C&?qNs3dE{>>>@b^23rb7Yb;^$A^db z(&BO!K)&ke;UOLl9?7UK1|Q<($<^)4A0FZ>I}n`ht9ub?+nwD)5^IU5&m$HtoibH1-librJRy=`2eK((NHO>-p~;HEt-9&(wbr zEIOIPd9F_raFC-jdIe~e6Z3zh^*~Y7#a>f&cP)f`=SjS2h^@Mn8nb z{V8>UL_-C(sP~kbXEa9mS&yEpb>+=#eKl=&>DL9%zAM>QbT%8C1W{+NH8tH|t#j;V zw|w+&fm^n85qgokFZg=AY@H1AxNceTc{`~;(T7jEzu~x?-MW+N)F`wagXnlG9gM#Nw+vfe9=?{#WK{eYkZ|FhkG`&UhO2K%46e;)dCz=}k3i8y~b z&p+?p&)$uNn{yi}vh07=+Wd)hAo^=|(ii{YLu2Xdj{9fP(5G*=1{m@s8pzMtH^v`- z|_bPmERBu6C=mk9rchKA@FfJ}KH`KhWlSU`Du0i)$Y&0^t(!r1((@=f$#b|6- z3@?R0(@HyVFp(%&Rdh!P{eU>4U?fjAv4Gc@yBSR*z8k0>Vp8sV!^b4_6l2!7J@LuC z<-v1miWzOwn!=IyHf*>p`JLZFa`wMii8HeBrk^GjDJ(?b%6W4o;VhK!-54n>A693n zT1O~HmxsGA%=lz*fjSLeX-YF4 zn=YpP%BZG$1@WCcIX{$m(tp4QcP9bJ5Vz&0tQlsx8m93mDJ}F#! ztNFv5H%2m1!k@>MT8cAI94FU|cK$52_98nHhuE*~IbPSNN}swWAB!Au#I?;QpBh)a ze|hSN+p)e_{iOF7IJI-#q)uOBljE&+O|aOt6kR2>EvogCN9Uu38K?EN(dOL8PLSu;q;I54l`B<_S0GL}5vA8tCzr7 z*@6raxY0Nxv)ZU3hHW=wX>TGUERk*h)>hkt0!a3As|=B1RmB~gZ@^KkVlA+vB`sQP zI&4aSm>%Z=nM{2GV|8H(-^RWfE;S1;rUqSFiq7AqMNBp3#H5~#9~{jJ1iyX50kzFP zI6_d+&@BscWx=44`6O-o!-}c)D9~#aB^ILqr&f(8SGlcImKsE!@Ya!?QuWo6%RJ)3^I*S$vH|C5or#wyypJd(w zCBv2n1gNnaC)EibQ-86H^5}ln>2q&oq`w&UR@l|xy-StwyZER<0vY-YLzx-d*KHF) zX#NaSB7DZ0&-hGEx%+xHo^pvp0lKFH&m8d2pm&J#(Zx~&`d$Yc2DD(D`NrXIH4NRd zlKZ(~NK_%4g2!ICx*$1f#H*M}C*VZm)u_2Ig6Z?8YjTV5ez~WvVe*8wGgZu|ItSo(peE&%?B zKT9bwV>ruW&mfdpfC9}P$CFstCO}LdPdtrf3YBU$m4&3o3yfpggaUcwsfoD!hrl>i z!uKJLJ@-==2yn&^K|KIe|A}K~0@DOS%xOc_WkWGtLT%GnPaV*OUfMXi+ z7>$Nco^`LD1&m|e^+|{Tj*v7Ktf?(Pvh+dObVG?4-v{jEBhpYpe{P52N`!ZSc`OhX zT^B-X8q)DMkBtZ?DGrZp%8#tHdGydlijQcz1oX)wa_9cfS?T|PRmtKmh2pODw z-KNF;Y>oT968Gme4j_+55ROMOh)3~?M@x^#Xp6^MjmNo*$0LUk2*ZdBV88y&F48Qh z15hD7Anun?2>$;MacPx~h@5$f{)-NP>vFoVO8C!sP_`m}@mvvI99FKzzmAU-p<750 zRnm!KrE&eE0|dr!nIf*i>{iDfbb!rn%EPrTRvON~d)cR~Y0leCQ4c!69n(u}2#@{e zN^M4Gj~45|E|RaO`Lc;&@z*YmBG} zBCb4zfAigbBDmt1wjxI+|2h{$+!4|soIi{p;)cqYx#C(MY=>#QK{G~)53t#ZcoAVk z8R4A=A};qL7nESG4h=-y@^^-=0(&6h5}lxJfQ2OB3rwDeuJBDCr~@P-u%{b><3Z?j zpfNy0oviEb_0&U|1B_!i10yKFr*Db945o}xavz7G!@SJQhd36$nG1^h-52a4p%dKh z`9euBa&t5B!H4TmfsDub8Ezor9!qAV7baO#JZJ;6A3`!hGqNMI%vg@fCSdKWxQG*5 z4-qY#=D4yEv<0eK|CP}mSN^pHx~Co@+8aYQpckiu4H$m7W-|SR23DSNbBk9u4(YfIITa{K{z!Ll?Y-5w+TB)!UZ@w&v0%yH4ssCYSmF6 zr*J(~v--n-iZnXg6RvA>tB_hy)%H?8-Kgt(%qk36-!(J2j1Uz#)QwRjDshdobEaHK zYC7)q1MJd#Z*4?}7p|0^BVsp9zZfTKG?FXPY_K*KNNSvrA;hj7N07swpEsxPYP2&y zwZE~{uOJeTvq-$>SF&2!9FNRHs*ATqc0v zq;7{?eQMc>>Q-(t51h9)0^{!ZTgUL@2~WB77Yl9knQtHc)PupnzoUtTc>7w#>+8GG zST*b>>7W9f4#%1xj`!alJy7-Qwo+xau^eWxSiG z-hvXj8`CtX(FW3=QG3=$IsFM0wj}6;B+F%W?Bs6!XgYjJwaZq{!(K1|FLci?NZ|f`YT5GxnUCyJe-pU$2 zy0oid3&(zW$tS48ncx{+FdL{4FU_LGF*snAjn*{&Xo&zeQMtugBrp(OX$lAlQS+ba zk2v(rWYuL^J@y|Kl4Ldm_?^GrRJTpM{v4k(<4^)uT!c$VwKHTNU0X>okIF})l?RQm zl{`CZQ!&qY8;WanfbgS@JlNGW2ixsH$_PO{ULzP8aR%}nS6fBFI;jBHjR9m}eoZfp zIEhg&|tat$0B%812Stla24(ywJGQVCqla3x+> zYxt>K#Zz5vAHuAY9ogK4(^OmjS*l%9J2?YM=H@0`VIXVY)7%!ODKlyyZXr$1; zv1cM!zjLGL@ir};s#LGG-j~zo22=TK{hPN|s}TGtExMu43*Dnn&pfrFCI@5(kU8~Z zf)(0jJ1<+hF+OH`Ju`%%Ct2~cX}{8MIyOPE5c&w0sb$xp>cZl5>d$w(h_u=;C+bcc z)U@S%Zug;h931DtbIYwA-$0&7&&s$R_PCv%ry1^ zkv&NglVS!2QnI@YkqqxzyNz{3UIfo!u6FxOxJh(DRQ=(`01HGqj}%b~8>&G_Z;V0~ zSsE31G=hhTAamE~C=z2U^`ea)2Y}XszuSz@47ootTp5L1apZxJT*jbS`Gx)gl9yf> z2xw$szZnd!c=bY9qRiv1gM%O?F!;y4HDHI;8g+1W_m4u`(}Fj`xJBz7wklgP=`FcV+6T8-6nqm zRtz$kU8%!cOQzbB+~9G;PWY?3pchrY><*>V-+uxjxg&~U8EK|nnaRX$_xj~BAEa|DPU^CH zy6{BZ_IHmN!rg37HiQ0tn@itU&ooo&LwQ==Z3~23@5eIN=EM9A%FojgZ=W%|C2e<+ zp8grz`f*1youpB-hF~h_4^w;Gl9JCR#ZEWfZ6_m66B^fDEMJeFW8By_e(h~6RpzO7 zy5Ehk>wQ;h=+2hA0vrL{%H28mv&y#Jd0yuF9%13p(~SgQ?KSwHsDbAKKVG5VH)#Qm z>@;^o8o=^v0JtUE9cIfY!AIZnf8_#2iieWdLF+Hy7I8zr>fsXszN9NuTXMb_^6V?5 zB*?ioBf3z$3!jP0_gdV6^-@rZfIy_&z`=dii4y#KMpj%5;EOJG|~;J8cRB2VNIPUJI46!1zEqDoH`X-gDaO%%UNlps%% z5>ApfNRstRl28A4{n@&$U+ylD#3@@^KR{_jpnz9pudn>niT^(+v*R3pYiq#e!n`H$JMT; zh5q_+zR9Vh*6sI>9MN-N^UUw#Jsddtu7UFVC6 z1=4!moR$peun_TJJ6Qv(hx;+#P89Y(1UHk}g!qt@Gev|6g!coiY%GVNF(kKJg=tTO zz|6YP)3!KwX+N(BG1#u$x8U-}VOgbls-2Gr7Q9EQqS5XLi;w71`SIJ9kE!-94|D0Y z10$p*uPkGReBhA z0#0j3rZ8({PXdiNTT!<}&+26F*U$9Oe@C4Hk3-RByGh>3I`sgAH_jS_m^v5gq_`>E zFAj%F!0U(7jdiw9*R^?67z?QC23ajO>W4VrM%N~oh$q$eb0fOFRTjOlbyG^MVkn3iq;R&}8EZmk#^VBBHZF?vg+v zd-^JMZx?LiZHG$JCw0si!KI6@a4rB_epPQ6Jfb@wFNKjxN%{d7awYLetvoN{-pjW>Z?7MU7VC-#6~^S zZ#dbiDd)Y%s;w8pB{+4TH*P*}m1E-j3tW;bJbrc)&RXMp?AeX;_!`5YTl9N$;w#wg zcIH{z&kWwjupgJn6s-;ijM{L?AG_0keyAm_A*1qxu1ZFyU1mf0i1jWh# z1uw%I1VH?kq&hn$l{|`8og|J){JY0&IlpM;D%=8`-N%n#ojkG;{V4AYAnnAVlh5^{ zg`NkqU@4-A>c2?s%?U-Yvyz&#``PBY(_6u5L%XLz0Az4go{3z$fe6!+|p^Peg0Y$cg(Y0_1@uRb7 zoHC1aX|y51qnSA0g#t3jYCMw)v%NbV9c4cn--}aNf@eC#=0<_6!VW$RdDZmMuDoKJ zie(}M$YG2?Q$#VGi*}7Jf)j)(>g+ft)EHZGyyj74S1e2^==jRWO)g-bQk6_0T|CV| z5CqwvaqTV4Q{Yrn8S;GW8dOJyp*Ys8tGy!a2uGN3d&mQvP* zfyU&*Bx;qe7WsKHw^(VTB42;dOz~YlRo52GX!&ComN#%ix$Uc4k(pKR%PVxvCVw%n*qg6NhNQJ9KW}VZtjZ2 zc73F*d8=dp>hil_{biTpqO4mU)`{T9>#8$%-`kg6SSv*z*O+}SC`_X!h`Nrt#)AS@ zWYUI``p_9p{qI^#Q#38L>99Hcm7?`YocISus;DCAee`CG$@&j{?P6cHw$Y(S$fKfM zgezp3o#J@a6DbgwX+>>4Rr72VUE+>ottaYrb*z?CzRki*vH*})5Y?0>J(6{w|H8KL{wyo7X1u&+-GjiR9Q{OF85L);mH$IoP;^sgGjiK@N5zq~Da; zZt2E;S`&)@6`0Ra>B9c#1Wa^nTkn>l0D~br7kSW5 zCVDvO*eGqHOZc&@eiw>jMH%~vZqBdID<)f$^jcN!kLOlFIk+oKvkH@@$QThdvX;r2 zs1VocFd6RCs%`m@}4OL6*@}@uk0kHzb*jfV8zY!w}ik25B|@ss0QzM^8+`va*+$9&l4xr ztbTBZMVvj`^~xYKIT?hJo|&0@b}$whHpE37%f%8My!c2z54yqnj}vG5yM$&+KEf57 zpI?{9vl=h!MO6b=lZJH7zxc!j^dncN~`EQTKs!z4X1n$VsN5~ zN)lRzN+GrH%mD+yT6~v_-~AB5*bhHFNk1eSKk`|QO*vwUkpQyofLh5wR{X#f4dA36 z_%4T!ECEHC3DkrHd@u1=VUS|LHnpjE`NV4#FCTb$QknIOyIOwl1 z99&HjW)J?HJpd~IB@BmuCy6qFL{~FJV`@YX%d?^6MuWoe-QR>d989PsqI}b65^mYx z=4@a>y+B4n6wkRU&jt#^AHp9*hIw$|;Q$z6iu=A71?h{yrHNg75Qd{eVNs+KQA>XV z>V0_h+Q|33j{fiDX%7}-X*D%Cu<5PYa1l% zdL`?pCmXgU8?Ppt+$Ecmr&F~kvsl5JMLXGWmYP|NJ3H43UT#-l+md$@8)XB^i08ym~Di+zp zouL-zZdI}w$Qy+wmxm#Qmb0NYx0Bd`HX?5`sw!gEeZ-+<_ z1Gz|gK+2zfkT9|pPY&iv48}nTqsD%y)*b}zU&n8H+unmi2*w9a9cm~G4?_r7$($%y zW}RR=Z65?~e-gpfGIuELLn7nahC+cAqRgQ0s=}D|83iB7~XFt)N#J^xDvy_sdhzPJ%l4Z7%RQY*p z>7ZrZR%j^e=UJ3u$}nn``YP16IMzZ0{cE~IUs`b-Mey=o7Uf4!;;ve!YM%x36w z-lL3}e()b-KFIrxZ%3CKE+FzDU)&m+P>@uQS{9S=Q~R)Z?I9?CX+3sWx>99RSXx+Y zm{lhJP&e!6hl5f^dcdg}(bI;m1*6x#*ZS)i z<(WE!P{&yv6*Jk{43ks39}s>w>Li6-pj)RxI-gWGg!nh1=B2un(rFgrmZC%yyHsNy z28R$>-#VOHaN=s$hf83cOG)#~Ej1`TZvbaexu^NA73IQit|n}WtMB-hSf(AgRt*a736@Fg*cYdB?{XPZaN4L-KM`%S!#=;SfMYjq z+9Q6}opFymc=suAK1*m8ArrfPHw<4K3X{eH5T~P_4hinXc>HPIhcTLXhDXP$tncCF z#R`3qDEsJbp1^5$a9rQ^IsOE5JLmnL*41a&=_4h}en6&2_}9tDs0r`mQ75F|lG6nn zK6;X`Sj-O_8%UmA&s#KhNp9j2iA(O5u)}U>|A0<;*0kqxig%aek8ke~ZzB#1 z%RIXE?*BBP0n^Q5-P)Y~u$>Qw8(_X5z~zJ+OaqZ5Z5kLf1q9`Di|bo5AgbpgfJ7mhWNKU+H@nF7Q2icCbCH@=o3 zvO9~$GRq?~6BzEGcZ`uCgJK(#$*{a)8;xU2!+`=1ENYr12L53nAFMOH+X7z)E!T4zB9)2PbC>v6T5~ z!W3bsCV#&r-E;V%T2UTh02>bz4`^m8nIy(yy4gIVWqA@&ua$&-@>0G=KvSQCBOG$h zB*d(s~?MmV^t6vfm`^m{1$pk2 ztV_&nI=E+Ol(5{1bz)s*T*kkCq-zj+Q{{bEVVsFFmdDUgXjH*+PxpS=MHZ$h^)rFCBvs zS>4wCuN*q_ts3_M@yM0ecL%$2*;q6Rf`I49C$eL+N= zZQVklmm%51TgBxrb(Is}BKe=1qP}ixHTp9)3qBeC854w$U9D-CTlUPt(7~)k#NX0(N+_9O+Zixg zFV}vx!5ON+vmCe9MW>1EBBOZ&sAn?m^7N<|zf5v?KBSMAJL2yS8iC!BPiAsr8lq0@ zgenFg08L7VD1wvM)8fxWE|TvS@>4YAy!nTuQq@TS;0>Xb?lnOqGJtoQN0Y^b=_F)6 zbi)~`y!G5}lu-u9^vxPx=MDxcwC9DmYc9aLEeSX99QAj-9Cj9)e{m=D#zZwKg-~Ws zD(`L*0=VWL{N@%=Ya6lWWi^4*EiPBPYiz$ce-jsX2;)xaN+*4@W}Lev#l3_aYt9}4 zx6~!#Qd|x}_&%bZyDLdf+HBYF0zlUol2L#$3y!MXEb2WO+S@gM*B_$*>oa95G3F099T<_ddCv;5&90fO8PgIqQ!#Ot7T~)z0%rg8Gwhv)_;sb1?;xNd{Hs z1+lsWO=|$3>%oE>K5}jV3Rke2S>V);FG%E)x5SF_fN~nXsyu7ZKDlgoAV}ndr6K*? zfut+JOZ5R}8bG72vpgC;!2uhB5V5s9t6V9*y*%(H9NKdUrGNxCUIMm4RK^Evq%&a; zMD84>g+_92{YDQY@>=IPcwmq=EF7yg9A`GXF%XCcKO0vl$yNx61=UOXN8qk>^Gy zjyx_!V>@?c1&RC!jf5zd;||oFw}7UD2ODEaHvahm@HsplSuW<9HVzjWHw+TFL~Qs) zG-+=1@LwXo7b2k;h4t>hXoUX~`AmH8B`~2MUrz8}5^CT7XTbf=Al2O~)iXWSyDimc zHP!Df6-u5KD4Z5-kQVBd7M`A_{_hewSm8sEilkD|1i~N$|6d{}MGQ^aAb0JDqWu>w zS|o`Jia4Du9`K)9bi3uzHS=hx;ok{~N`rLcF28%Pf1Hs>6>vgAzwPfdnc&k;?Fb@R zX)}L`{6dzj7UC@58%zi~BW?AwgE7=En*T=NWZa@SVt*$jG@_P_MIM|H%o>#6+~AG% z)=3cY&EB1C^aNo(Z|`W?-RuW%tWVXqoEbTH`YH3c=tRIIsDGoGYPElr8>NNlLX=V23GjIZ}t~oJ{+7fV8fz8GDYJ6iCpL2 zjmGGq!lywZPW({eL(>WqQ{nEx0xNtwigc%qt00l*yYYuAB>n>ya50j}!WpfdRB`9S1M@P;ASa9{=f=Wf?2Yn>>xVjSos$J9budRu1 z)ks3nB*^gTgFQmL&IXKfh_VCIv7kM&`~(kQi)?1i?!|;E7<`9FI#*S9S4UOLel=M? zZ9?tosIHOwWK^S%zVYh>*uFGimHuHkL*8+>V?@*^%Pp4FFD+@DHh>v$%mfzqBx?Jr zHK>w?`5z8WNku3pj(X-9#}E2g&t$w{F(Tnr=IzjKn56U1dOIq5<;Dx9|J$YGu-*+` z8^M;OYegkq-)m)+3L<_3LC#RCaZW+Ln*p^C8%@eaPDBE-7O%D4b#-0|zgxn}&Q4t? z=~V$EaDSDCPu#OAI%|5%@Cfk1z=10BGXXw_XCL;iZ;PdmsCS7}XbbV(i$wdXTcu>q zB(L?<4!0|?MY$#PF08w`Z7;jwoyeCmrBChi(H^R$nQ@Gb-uf+1lR6|juKtL~b&(Q@ zE!5-AFnnk_{?lRBkGtT*GX0{vQ+8G^&g){hqpTlbleYBLTvSu*y4_{`?D!3T(xkW~ zDY0AcHhlPT-NPj2;^fiW(T}r1>yKODZlarg09nrfor=z}sP?a)j6D#6b2Fr@ksnDZ zB1lJS0l$N=e@`$zM-z|tBBla9fd76Jo}7VBtGS4xBMrE&Do;o@=6V#DxruV(LmnB^ zqT;`mz^}G5PO+fDfxGQVWtN_EDOjYZTenJJuf>N7Zt)1mBtC$Bf9Zt8zz+QCaj%NH_91x`3trrx(|^0>VpWvFg&3_?zq$lVS4W)z50%;(J@I_zlZ!L1A=N8{M~As~x6=mJw4b z9FEyS4UEPKDe!JNv-7MH<&qPmHRV8(#_Y`ntG|88*3qn-&Zpv6!WxU@3m!Ys@>rZV z)8TgY`6P>s$TCN5OK;RIQT-&)7{F%g`)ryYVtrDb-dIft6cFRO=&`>#mRK)_q#6TF#WmLUBeE z;Ylca{OMSQo>hA+!^*aEV-BZKTWBEgtTu?=LCFB4FT%1}X|?kB^=0|;Z2NqZFJBe? zNzz&mJg2EPbg*hw0#h$M>$`GOh=a-tBk`RjwU$=?xnq|aOuzPn7KQ-$4sd?f?(pm2R zEOB$duC*U&&tBP=slRASulCW@Ndz~QMI9ge0LQ6ysJ+{jd^92eh>3mlw=U5x(zhS8r zYXBctdsLCqp0x)@Fc>vJIfGWQ!gxt1C+$pl5|^W2adoRV7hpjj-U7tt^=6Vo8g0;h zlZ&%c(z`e63K_xs#+o7{H68DqkCn||tQP_cA{gc9>Pb2kB8w5+B#rLEMq8TFOBqwV zDii<|l`3TUBLhaQ|0nxVF#rHHn0#*Ecne0+`s}HZ+8CabJZ+xf_5`i^hT#G(YVZ)3+3?2AZBXx32GcamfW8`eIH@3xXG!QgtrAq*-S44MF4${q(Y_Q0}3k_ zK;DWaVr4_1&D&kwv&!+^d;TpVk00kfs^r$xS$&#2i%$2{DJ54{ybpUFJPYT&s8dsU#bu9wyzF1)DV>r<$!#< z#lF4Xt0#{G35{@I*;}!f?H4KG#lELPK)}>80p%?@C`5Bh`jwzkk&Ohfa0fbh5U&Ta zKQ1L8unADO2wc4+;I*L;z9kSK3u^6U2lW#W?uRaYb!Yw2@SxPRE?-lLY}h_qHr#v+5>?;FmG3nAORvkxNqC>|LhW8-x>|VeG60MOeyhXDeK@$3<&o< z2d<5t#G4~gJNkHET3O$rQF*kolF$T$a6gw8y)r^Y6d$ny!hLSo1Kg`ebfrW&y2Mo- z0N4M(Jy#52YMfa>d{=Qi=4?D}8!HM842;_^{=)qX2=_g4gF=tjY}kIxJ-|Jc0tpcw zCu`dS-0!0$@{9;49$F{58~}J_iG;7?Pb3p?a}y>(x;KS||2y384aU)`98pEg{g*3bp+X)kCtm+?oMMfqOf&HXN@woBj#CU7b3;dU z5~)z+@&1Y1JMzVhcuv;-*&P<#HEw@;^8LYYG3)e)VB-1w-5m~NK*_R{05?Z??LSAu z1_9bgWCt?5fCg|MPD6>ThxYnlt_<9Vd*(R(pWm(-EB>d zD1lF*^@rHT)Jzv5y9FMnK+_9+$9}LCOyrKdZ9t$4`Ym!VOOx;rYkRR>0D&lRaalV=G$PC@XgRV!8u+#Qw@Ke`5m4y>{-2}oUBJ$TTsLtm1l z9(klBXuY8yCG;LEmae@DkZB z03tXhY#1r?8{s&2FIB_%cqR)CZjWF`rL4c(R%?P{y`&Sn?b>}(HmQHARkl33JoQC?*$*gQzyCE>hx(yY zwrjsyuy4GATG#`T&FJO@7{Q`K43y>L)K6ys*9}kk6S0jN5@{j1paFF(Bze5VYpR zPjs9a@QLJ+UZi0V?5Vu^J@y#YHC;}uwqIF4p;GXWF~SP;z#=F#+)Lk`J!i3zaTmqL`RVKKOw8Rm8>#w z;gq(g!0%=nTv5LW)44XI!d!V;6B3Dr2o1n_<~anJs*CXD+t^(QXRbYQi8Oa8xcg(% z%`-$F<35o@+i)->ErJ`HhD7%?nGv57D;KRa;|rO;wZb_vL2yywD;8pNsZ_iw_XMg9 zde%evmMYEUOb1JBS_CEKdsBc{h>l&&cF6cAccNq=^_F7TGnq#hDQI4_d_M$L0y|-` zV|3KTv2vp%y7K{>Nv7;C$yHrWFKK7nAiOSuN=~tfS!eHz#a5;Ge!po*Kk?ZU9mcp$pTVMirqhmMCnuX?cB5%88@QFNov!6U zaVH-tr3-3B=A1{QMdtIWSz#(^M5Q*c7C4%w7d*MH5|gP^BgR~aKm!d4sv_%h zL(L)0lbV(25sRmpdQ=FB6 z#g`usmc7di^V}iPuMYWFnr5mvZt%X9#sw}^ZRs2Y&3Blgn4ES&YHRtk?UEpb`i=84 zb-{UtX2_YT4*1P>P2^3*r!IhVSf_c3q>Mb&J|KwdWmtWh zhAhM5IMIo1I#%+Ly59x%8WO~Nd>1y@2?7M-hb(*_&F2z$1&%E=k>glz|2%O zXWm(-EycKg1@1*O4oS?Rtdqwa7jsWTc)lG18W^{m+?WM6u^rnbcHX{2tKyD6N_`N` zX~t@TsFTbvDOX}Z(cH(%{@Y$V?U=Pd!ut~f3*5mqiC*_Qm~Wa5>yM=ix9}FL7ZpfY z$gi-31cA9{Nv`A)Oa}~+9h7g`(0tZcC*R1oz2-fALnt~&1)ltfL_Uu}%i0PRzLlPf za8e!L(?7xhw@1!T^Jd0OB*E>GZ|q4?xH7v`g34_u46uMmPa0IXzTg`M)yrr^njMa? zJGHxd0w z!N!DUHNQzmw=k_O;;NUvG#aLDi#C~Z>F#)f8KTJ41Xh}e9uN;HCKbqPZ!`D{S-HP{$)zfQw_ z#oo2jzd=ObtpvSl>W|$5-0}v7@44LKJ>TKpM*H;%bjS9}9;nS`xHWXwvOG)NIP+r~ zXowtiRFy^=EBq_hHwewoKtBLf6_#OL~zk1^msx^URn8JMCR zIB6%1y+c(^ysp_~@+1ADTnSJ5ZBNbcyM%o82cGd4rc*h*t`@I84UV6vgk7oLaxQEa zq=bk2p0cz7!^;H3t>mcAemHru(bjkyg5G_!0VJga)VJ;$X6*9`0W7^xJR2f5d3H`n zP_bDMHYBh}7mxQKu+xPd>D(WL`(9UHb#8w&XMbvLmrsKKg8MJSdFg*{&i*9IZ} zMf|SbK+0hPEcqZUSRj&fAUTAC4vpA4Jd`Xiv;e?oKypFBU4r#m?-9&1dh22EB)VQd zR+~1qDL>}&Velk|Gc{U6GH%v04jC5Lyc5=kAKq*Zks1L9Phvl>#7;{>%7h*S_u#*R zdl8z$)Cvg}b2LtTJksBB=mU8doKa%x|Ha;0e^uH4>%R8{1SIFAOHvwdH#j@%ly3V*L7X* z+m1ACP3O>2`KIG7>)sEcPbdE}3ot%d}+Wu=dORa+7Y?VdcQ* zf~$L?Y}ucOR8ime=&u8 z_75P~zE=Z8a^GM5dH1id{dxDlu1CK6I|#6W+CDbykUHeMzX4M+{aa;;MG=W?Kif@^ zea*4DISIQ)epT40rU9c!#QBwM=d!c@?GA@spwNP{ve`%Iq~=x*obrB$^lj1fUP(Ht z^uBQJ4(P*QdvA7S@bdnZwLxQEIqahmpgQVDmBnG}hB{FljEGlIrH$Wjm~d-L>=lI$ zFg;hPo5)+dN_~3|a)<9N&+W<78FNUY#{dOd3$K$R_+?)~TU*t0f{*5<=O~i^ZeF*( zrQRv>%YO5sIU=85<%#;O6MHhxUA_g4*ROu|7>4Kjn7iPEh5uO(f%o2~;YK=wa?uRV zXEX8mCdZ#$$FG~#5*ywzm+7*MIt9!F5wBd(*Tuw^zru>0fAtomt+sDvDiHY% zl#VO-trj9me|@9g`bawc0H-Kow5jas*Z#0WK1%5I@Q zZ=j~t)PCr`q?NXQVkXLMD2{5cUGUm!OH?i!p#V&5LbqE3tEX+UTJbI_kL;mRS1~!yaKi?%;~@ znO{qcq^1smHLYqQ!8@KI9eduna%i0{xTq}|7C^x2D%#eToR z%jCtjY}4e3v`u{w-=16%7;YaW(U}C__VCO3m)-)6l{$Ns^+wCP4}IEKZoRhM5roC? zkQQ$4e)YQ+cnlDba>#qQl)Fx|tm`#3)m(F0KgQ0wTJq2lnq!r_E&5@A-?!73n@hoM zOlx=StgG6qR(h6l`X_aEAE7y&x{&B2ToJr}Q|?DPgjbUVA4mg^OZURb13rwc>R`}e z)x~Qj7y%fq1JIg1S?6E6wRrQxyd-bmzjJ!|lz6y*tIp;@P z922iE)0O^FtV78%Pu*OHkGdPXu(XJ?)9h%L5mNj<9`Y3(Xpg4nM8(_$$Dw^Jqi#W5 zctwB~8_c#R49-s2{!47&<3H@yLDFB3|0$u$0DnLJeqnuN0>=mcmfkTIn849+DK-mW zq1W4^PNIp`_ zdxmelB}4aABjK4R(0awJ;)3(;yU==(ek+~eJZ^Q#Zkp+9k=1pg*1=ELl64X`2AIJk zqp$Zm-Dkg|5aW;4a+;;v#jY^dmPl&;pib|Qh(cjc#tiWdF>7X*HJ*EyI0lh)$Sb7) z_(`z_3HJ$mF7sK^Fyb~DX4yOObuH|jM;hI!DXo$_nfia7Rr-7RXZqpOtqDB7%CSPQ zUJZM39R}z22IBY1EfNIZh6FrgruzIYm_5I+(jR2>yhKxIExqXlNc79NB`} z%i5zK29_~X5od?8LBiZfiQgS@P?Zzl3x>)chE4zZvcCXj@U^>T9?m^NIV%mIEWmK5 z*_SYge?|kp=3zt_LE3c@sv|IU-=KVm57%&bR|cv$IOE3^p}jzPe*^@N5CK7A4n=@1 z8@B2mrU8#~h=DngQF^pOUF%V0*K}Fx#IYdJAOft`15)7U{sVBfD@N@wa{L_<0YVYm z#Bqv1LN+XkjJw9 z#DNh#w-`*ALMsO!3vnYEdvrOhO%Zrg9^NS(amyS9>j1*sAITD`27#i`q@XZKLPNk~ zDX#GY#c|{AkcAsG7!-^J(cqgm5)CNNINSt@zl;E1x1rl)?3lGlAR5%!LaMi+*Z}*P zK6OTG;t7ZbKvGwBvaxw`-RC59KPYZW64!j9W@yT0YYO^INiO zRrT%97~-(IKXMH5I~zEL2%3Pe;v$mhkOB7njzbIDU74?sQWl%HpRp5l%Rq3_d!%5Z z*}d4svip6I1^+A=%si4hRl-?txcfI=zFRLP&5BzeDwoRZeyB;u{;+rsRoWQ)^91ge z#5&QGKKgNGo-R%orekH1miG;Bg~m^Km1UymcqboV6iK-X&gwNjRQDiidN0+2b8M~< zo!|IQMaKAnjkXJsw>)ww=IxVyou4{lpcD9@-2b&{*6#W0{v6eYiNP{z2cp1pg>im& zVTlxG3SW=L?jrb1#JxxKDQF(YceX)@6TTVx{hIJ=j^(}9Wuqrh>dksLwWl9_5LJRR zRg~9$pNf;keKudon25~fmIa9HJyXyDoxlL+W0{w4p1s){p4SmQeB(3c;X{G>$!}-U zq47$3-tuwa`m$wu=gH1~%qJVkF-N)SdML&xP!()XR}M~sO+Rtt2)tv!M~ z1EHDkO&J1X`9P`-D}Q{mX;GC`TLn{p3|6Di`iRv4RYoGtj+xFm9Vgy8k#nZWq9{*`zBHeVR$ zRPL3`w!ns=1iXSPca?})obg*ZHl+f;nLt-T=^@emZL1B%y_21Df>_Z-ww9rTCVt!*PVb62{a)_27v)&x5_GVfE2 z`t`b3e)Hroy$K|)7X!8YO?|mRIdH8~-urU(ZoMn5f3=c`NdxVV(f;V5h z%b@V-4tj84%b33w%OPlr%QS+1>;QWqz3_Cm;FT;VRR|7hZPVV1g9z>F&xJKfRXELd zJ`AYy2SE#tR8eEoW>mnP2-^r2yfO#ak7Y{Uvq7oJ@BJm?^JkA941Bm#A5)n7<>}6Y zPP0h&bi)a2*5tG?mV8np!^<@i_W9AQ$vOpn1rjRRQ^eS*Q$2jK$|jUxageCDiXa8; z3(u#E36H(n%=MhD_cfUls6US~BPX^wgN5jQ#TuEet8G)zA9dS&b@@&oXvCpUGHHkY zAW1IJD$Z9P<0SQj_4}hI5Y!jI06kXqZQ69hap4cqb;Px`;#)hyA zihFCMCOTRoF(I4y_12|Bw4~7zD&whKwiuB!>frLY_fPYhf>qPPmL*)e7Dp`*6Kdlj zd+0z%bm~126INv_d@Ox$g}Q6M$-y%}b9{ft+4@N?G5}PA*9DKbzruxAs3?S3eX@8k zW+Vj$fPRRj>r}9V0U*h4Wbrj3;7b%@G_y-SUlV71fes@@z=^NRJp~om;2*wFcRY0~ ziZI?1U-z@LP;!H~RueEASH3!mx-u51=xbJw z6WjM?=Ub=h_CZYlCNmYgqQmB|Q(Fcdfukr(2j~d0Bi##2K}WFeukjmn1S3dC0O|bl z?B0_drmw(4ld2hR$TMuYjij^K^>{U+2~_K2cpdTDD)HB-UO&1Cl&6kG1wV5S#@6ba zbwAmqR<_JP`YBNnXhmS^9qsBhaeI^ma#uai0ySih&s@JTug|{_v+!KTu1ob9O%BT1 zZ@O-YKxxlUl(tWTm?pvk5t`NbKqvDjy=I!fQa=*Bx0!(>^3-ca-hsV-(xgjbwY2lM zpID+=kdYsCScnA%AzC^4Iw%S5+AKYR4uN0);rCE535Nvy6?)k(z~IjlKl$R&>3M=X zpd>gzN`gvx=$HAYeZ`^Fh81{2MQp=6 zdcig*G6B?l6sS=bj0p;ZVz*5JVhxr^DyhgH!{pvR9%v90ENGMkSriLQNQet?8 z0bXT+4V5Dmq1W$u4IVrv>Y0`$6>CKAb?Ruak@$1Ryz^v)iH76^kbiOqcvm|r`oKoh z0a+GEyFOL6ew^;D^Wb$<=m$9u+?ge}8CCcy0dioH{}_?j{K=_FtY_Jkrl4`Yapw;F z^Fw{Hx{b)&YQF340^*b#nOoSt%Gtc{{bULqsNu_z_ytnFIm0Bsq^oE;+NLhM_8NXj zqN+XJDI3QS-i>J5`_-9(_#z_Re;>ye7nMcxDbV(I(tofQ8`1H;PT`aOh5z;Q*H zUWe2tLZYto**qt)#|!vHfjdaAa2%UeICG9N^SJwpWU(;rcd$p<@1vLW)W45PBrb_v zLwsb+5U*alLPRl9-#!stGdyr3O`uw{xtUkyWs54m%`Dadr{!U!Y7^VdJ z6IX-wyB`@N%0ky~Te8UQ6yUfrA4w5sw2IJ(!(xmR7VvMk3KbJi#fe#crm!xNd+-dN zDAxCAJ%$S)8_?wUYP6*2^i}9snMic4q9P&uFd*UW78OoZihgV$EXN5;NsM@W_x6P% ziy99-Kba(q#iv!dk~1y7T8Wm75V1E!|dvJX$9}cC(Ux2kl2uPLd~Yi zI%@pRExUnlf)hhuaPNgXZ_9u+w_%$S{lkbXc@HLTxfqqVUfQOg(4IVa;nz7Sw}n0_ zyULqGGW97@J7X8^u_&XUy6?lg{yXnYc+`au3YBy9p$O0M$%EShG~3MCD?iHaeK&;u zlJmHadQG!Juc*%3mG%S&TqNQCHR%6P$AKuLOs>UNB`LMBv?d+dZbronb1k@|ZHqv8 z+MoE6kDkr5g3!)xHgYW8gZxem?h|HszWpmq)Y@J(?hEZA{)}=y>+#8i+y{d6eDPA9 zk98b`Rn>x0;~q6sGUc@EW{AEo6$>1nM7Eo0;R%;SU$u*K^~y4vya}aBX9lpeYpuP4 z4aL55Z&76C?=;y8)J|w!_~|EMekk<9UHOiu%x5_Cpg8e`sm<2ed~vQ<{nLqD>rNr9 z^k1G0UuEv;;!r+%o|x$sEH-9I=dWdt_|TkB*!yz5{lomo#Lq_fi|kq=An{MGTpHz!Zx7%wY-z^mv3Xcsmu^tz5WT~Kz$i7$g1ZRv2~5WB`MjUb{K-=)fU7Cn;@uL$R8`=Xu*0mrI7tLX zi;Ruz&fH&)v#|noG4u{#wCF?Qvr}`&TO9kJeds&zJWHMa*oA+G4H>U{mraq_;Dy(q z{O_<~`82oYe}fIdS?w22m~Wmu-*aU*TIK}pf@kDGCQJT$l;64R)P)0TVU+$yWVFa^ zzqs_F2{Kyr3%vJ(FZbmxLO`W?dvgXCBV-6oD5S%#!7VeI3Lx+Hn+mpIPeGOYB66nm zmXg84s3l}GY zto`%O;jEv-2Uwr+*M%n{u|m8-yFi7H^_tU+$mYcga|LJ@uBg*{K)b+uV;4MQt;P-8 z;X=SuCqhHio-OG`!7qVfzRwBejwN>jtQ;AA$uT6yan1FnEm57C<|Fhm%9>vNR!h_A zz5dXEh}~s)?%E*oWw`vYVl$?s-xATAJ$@uMyz?)_>Hart`0|^sN5Dhc8^i_|5F6tD zU_;mJT}X5LwZ@3c@0_CG^&Cw>$d4oy0*!$FQ4b7NnUsx=Hj51jeN*sb>Xc-M=kjkP7s%-dZG$5$G zF`$NcUk}I_z;2mEp=-pc*F_IVBU=a0w~4D2ftqYsZ8=-jFnPIRFs&0lb4W>_r+{JNB>dkR$bGJH+5fy-OP#*h%2HP2%O3^(r;XUx@P7 z8lbb2MU|C)8k&i}mf0x{s9vN$l}aZ)Nb9_5C3ujNq$=gKSmb0Y-E@vMvRjS-De~-+ z)W0hW{O7TO=kKw>ukbvl@K;;m)neiAi$Z{+Xyl(-!ao@Ce+ovxsK7Qu@m2OXXYWMn z1aF!s;UxPy4#@;tyzEzLVL}o<1sMmO#u@%`PfvMe^+Dbtee@Q$cX#qS?$156yw;i} zb-P16Q5AXEyI_@dEp ziJx}rsptEe`|V$!eG2V=$?p`U9(4LyLRb8J#p%KC^H1avKIe|PygKb2`LhM>56hkh z@oZHI{TBLEJl-O-S+$k#ukebd<5Iqpf#|9)e;!<3YB)0yk?mKW3y^w?PtouEqNkvu+uM7tHJIIk`SuW~ z9eBYm6wyV=U^uB<7WXIeF?ac8+KQ)5*j1>J7(vm_7{;7nu8IiB?jZsfh8y}rh9t=- z>H9Qd7{fmULS@o>tZ?g34kh^hEQ2h$2k{HxBe4NygN!!Z57g4vPh(o-yGC#rtp`5u zDz*%sdmY+%t$1l}{`i^bHFyv|Qt@HaW~w<@tw> z?lrwPIttpSN{l>cv!MgOMpSomRWF5{B=pn%Rdp%XfxKx0rupi+Fsdv=&m!4kei zoWpqPqVHMB{6bi_=BU10R;*H{=37fO1yR1)JsN|1OLI9>_q~uIrBqw_0Qaa@PEB^E z4wb4gf&^7wlZ=mwD@FP;(<_aO7aw1HqmJ8VVy@?$2cue5zG8no?_Ndurlj z724MR#rv)I;;SXUw@*h;_D)|BhHm@rlRutt6tHP;di`|rLL>AyE=HpCzS)+@q|WCB)gb(TvZfG?n# z^6Ezsm;d6Z^8_lu#cpP#?|0=j(pYuRR_XPZMHz^I#=!0mTN<0?j?SO{%wf)prECxx z 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

    qNOFr&+R1AL@X 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

    y0x?oonDhlJSz@>^ zk6J_?F$$5`bi+Y7vJ?ur=Se%w7s10DBAyOwF1*>2!eP~mAzYBCd?&!~29EMQ)$SU* zn|TJkn~JP2BWYvx*OcV!m5O3_imVKWjj(dwUyCl2j4^r_)$OSYPDoQj(LHLM=tvY6 z)t-cE^oC;t5$wF4-qvJ0WwCUGvs54nI)rQi@|&|yq+;;zPkr;HA)0Y)maKZ_hCAOo!? z7&#@P$0t(NCl*Ns74Rl%fedtwjCpo~FmL>v4Vst-4j`U>&gJ9ou~p zt(A~mB$fEL%Chlh=8r5=>_PE!M>- zcs4AN^(r{`w-ddM$SyVoMnNS!o(st8-od8^8$i*!VLdUG5b~f4%|DQNt#6?U5FkPZ!LjeE)pF{${4@eULU|$0ow`k?- z@_U1@N!bmD>I(Y9i0&w6%hwkUMo~Vn{WMf>91NkkfgbaC2-kmw9x7-)2tCd{z<+=q z1{KQ5fKrV-g@2%@k|#~jt%H<(9*lTL(kW@b(yn>xpZXVij3)}|*vtXkzY%W_vnYt< zR_q23T6_bu(_vcAR)9y^c_9H69m!|!N zI=X?O!Kfw?8A%xiMD_pWxL= z1>gymEd*G5ZLS8x5}6kaNwmw>LN%XK7Upkt7_yQr%^2acoi9?NExLf7P;Ddpq1Gx$K$V?LPO7HXNM5b zURxk53vVNkvQ^VKKvlyY4zk*W42i78mgYB8O%>#?tU>2=q(pxmYHQmxZrfB)%q`d01^uL-<3-nB;mNF_c_zkT}9w|H=8?gZ8e(_h$7^N&wRP(hp3< zTxJ_(C7}3?Pb950e`pC3BDG=Ap1Q+Ha{njyXQefMPft;pJk^@EE>NhSOR;&Hut=Kl zRB(|igDc^Kf>ZaVBT;>K>L;Kmr)Akgm8;p5^W!xSK<1$1!M74MB`)0M!;vjK;n^sX zxFAY8-nzj~_2+b*Qe!1y^F)xlR6_%gr+=p2iC$#A>_N1b5vLe;Vt!b^WrtMb9nH?K znYi7eM%DiGtajxAZF?=4s)6n`2UnouNJ{z@K7MJ~K z6w_K%3swDn?q#3XeYK-8@M!3Z#@?&~+u-se!*BaJ9qT_Ia1&pmA!j$uJtWS_9PP2B z^Z$^iQ>H=?$kIEjhqj3lbEgv~BpJQHE8{}*oLbjgcj=&9@_pmIs<(d!GJcg379yYj z8YtQR41*@T)lAI<5Jcpoo5=G}V8;3188B|YZb>X2S|ki6{Xt2XLMc5z$73opTX6L9 zqW7NVc%=A46KO*pfbC$&T;kyvUVwEUpQ+k?ZWs0O+roo)-$qA5ISXh*D2Z8^O#t5b zLc6z=kA)i&qFr3qrL)o7B_gNdI1F!N5Gy>CT~~>6)BKRJ>OMf1dmQs(L-*dXoUoMo zNk}Tc8DlN$h}z+xMJ$K;?Z-BX_fiv+(*|(aedS14@!*)=4>#_a^u6O`=kpDA`Shb= z@vV`zeHw?0`5mTPfjGk7GbW=gsWIVU?7H7GwR-x2Rid#MQl#i;w;0sDcSm(k)H5)N ztya+0!D~REOc!kh9xz2G1Z6sUYcQxrbUoqM*NC!(VX7RQhm<)J9(u}izs%8U6dH#bT|o7NgSI!oc7o`GQqzw~euH;52Hn zD4092Cic;vp`Y(?7_L;$5Su~;@TNl8Y!@Py_sQM6Jhi@Rv`49a3#4f2pWA#IBWAQg zufzG_H=ED5-Ib$t_v~Sr`<56_j0PJX)S(!nY`$1 zw<+onJ1+j{fj-nH2;vHPZ)*7?8%ucy?h`koEAm5z#z%F*Qh&UJ_q&$3J+YQc;+P0? zv$*o_ZQ0LDWg&lDYZC5#(QR~}&#yjx<*{rl|NUaIYu`=D;wwa-^zuzUW}fEL90R#` zl=EC%eZYI9s+C6jQ0v>~<|Nu(tr?<^T+0srAvv~YcW4Iaxjo!dat78GG zzfd^;_)htmL;Tlv%$E{Bdr#aIAnq2)A*4v~e35WJ#Y~04u1K8-SVUZze4e+nI$K`m z8MbDB^Y}>inpb2btnef`&ybH0Kvr=7(WG1LVG;Isa5a160*@2B!*ySAGK9}H_03D( zhlIjr4-S)P!k2QWl&|dIDagX;C<>l;X>?#1YXfAWr!p z>g1|$15DO|FOH-cl2?_$7e{5?>B@{m^ZS^Z;#iTxt+{T2({#s1wJWD=4>-Du;FpRr zkZY+*`Yc>pKi0+$Ks{8(D<2t&CTDVuSW%_Ic?ovvfNND%Mj~r6C81m_fZU1{7YnG6 zgN2^^!%h4ftYEiTVR+V5)o6c>Isd!NerUX$)!Wp(V6~fdfJa4!tSjD!$1T| z1_Y)`dVtk#N>4Q^3@&sYWW9+q0QckP<>sRxLy2O zITWN|;x8dgswqt735L4s!*ZNZ=Zh$Ig74J1i^>NKKu|}EM6ay_6?josi!42n@=OuZ zizF#KR9Ntvt3^CPckA30u>%Ld14U&dIi7x6Oq_2LLBTCNJ{(qq&3T_GsyHCZk|J^y zD+Em~s&0s;UkdO89}Z2jYsr&2hXd|qB%xTLI`z?Gi^LO@p?M~L#b8nNT2Nc8wfs(Q{>@??8Mv6O4EHIi}qC81eqYUM<6^J>6o1JDafZ%5IX zMDgm7*v`UmPgE#bWH1348bdtVdm*Afl%VF8_!g4b z=?qc4(cHwS5=@D^K!{4Nmt&kfepFrf@1rc4&OOkAhTayD?h$pniH3pdY#d{N^~ zhVc@E+Yjq=k(f=Eyb3hO*oO%d_7vW$R<*{N4d76mr6_GSAnt2;tdHpyE~s zWJT6zP#9-4-8gQ;dgNOXxiy8k2W<3MbpUyMPR$AUo+&4NI`0qI?xxO16U|50&&LEy zb(#4%9r<`4@(Hf;iKq)mLfJpojLqx!g>xA|Yr}k+dR-{lG0c zjsLjZXnc`N6qW%oqUhB`-apHYTKIiTyx|C!ek8Wszd;N$-fB;Bu|}CL3SwHS^fL6@ z-N`ObtH4V{Uq+a-+_^rMx}Yu*wcdZ%;f_H|1@Et210m*H2rr|eF$4q*1i0L6j>_J_ zTRajzF@K-`IEp?;?ZI|Wu0rLru?{!(nH=WMTyVKDS`5g*(>3XA{r1_+>EmzguD0VZ zk6G|`j?#ru%T1-`_`^Dv-Ni;b5Bcs(~sVyuEA$hsD+4Vl*phFO-aA;|BAFN89N z%4>uX`LV7?uvSRlRw*ypS&yQqmRFDBnYT833{DlnPx)7NzQjRqz0-_?lj{}5i=f5` zSwXK2%YNVOjbygl5i@R@mhDXVP+H=WRAbvAdJWxBn^ys5>!<-Cd-q=E=vR-GEZ6n4 zdkWC`a+a4|ctpY3KA2Z4LCnW2I|Zx6?CRiedgM;g2R3Sw(0Fa{>|!*;o&gjOSlunn zM?+|q74uE@$l?;g_e#-)5y_BBzw1aigt~;91E_xO%>gvVY5{1Sw;2=gp$Mmf2!dX3 z4hSwKW^YYyERKC6HCtz8Qzt!wtErG=u)4*Rxu;s1PbKpC<4^iT`b{hD9I(#Ey|~F; zl2dl+-FPV+Juv8dBI4H-5W}RN2gHVTo!@U8*7lwAWq;FtN<19jyDxe`I>=*^T|bDW zq?GX%eV5}{iqSyZS&5}KxnYEMw5dVyep-q%9`r78{d1zhm+9lQ$5jav60NkPlT^gM zS|i$#{0&mF`*Te)sv5B7St*BudQBd}Z;3MI)o`x}|UnUwsveLR>*h z^EA3|AMX!-jbA2QTdt8-2)mv=8*t5{6&?v{j6PHK?)>ev_5hDZM#n$NP@8x*WxuN%DHsMRry<{JHD-}&V;~?pbIIYedpKZUELmP@e?SR)7 zh%>D$n!hC9-H~`WJ8G2tP?_zT{@3!@_UTK>1;XU+v$?os@wq6ajXpq~N1%JX$^L%) z)m~|X@6WHDO$~+HcDaAfSH8dg`RCg@!`v^%VFeOQBIt+9Z(K)W`A6zl;uzd@ZX{~S zuMUK=(D&|}WOe2n0Xs}}8}9=w>y0tx!X@#~LV}o2R-qi&Qa?`P0_Ywv9p7Uqx}{hn zc>84m-qU$0oU<3V`2zcZYja~b?b%W2-3^BI*l;myS!r1%yW6-Xl>K*~MMu2tUndK| z<|SV{2$C(nO*m-XOeY!>`ZRlrLT4wFmc2gM!O-;L;+24aA7=FV9W$!xGEwmn3k!uA ze1{D|nFj>QQ6pczkmq106o;rp+DjKpF0v>bXgT|)ZLHAVS(j%c=1cTTHoC`KKJBjRV+m^+wn`NMhd|l)%Bc z#!?i7nBack2oYkdpF{wahw``HQYMObP8p>A!gY&6v8|^P4I*DEx-hJQIzdApUiuJq zaI@}v?m<1=dm3pic-u^)Hf{d5C!eC* z?}!HQAUW=87M#xRh%-=26rsaXfAg0}Z#%0bGL_sTa8dH6i zi>uj2)a2^sC%=?3i^`o38hQG&&JyBEh!DluU}~~*g{SPoS+?(W+{rRVp2*1B>uY&E z6DWsFvP*PdY56xaSF;ST>Z5!m*lC%y76)q{j@D~a?lfkMGQ%X);ImeQ8gWiKCc0~2 zX==ai%q;|U3&_vvZYdv_Hhx%~KbS3#V=gsf6N|6!_|Xuq#c9UWG1sc%+C+1C@a&bX z#_YAFc5}AHSN+~S?V8tuOs+35ZB4-obqJ)vTP>#NFTgFSdqLM} zqNbAC%|h-F7IL-b724GEWUMaK;@~q0mdBu=J+C}frori1Ypr1JaiCYHBo>9{J9=#1 zXagnl+-b@oNz96bW4&NVI%MGfVSRu`^g2W7hA;M?HF%@Jd?UA4YqxzvQdqWSKxE4G zduSc|vxz6`ERUDQ6Q4ThS}SSykGSBw%sWTV;VlTzWR5uv)+@X4Ao;qOh8d;;!hLBs zsYyE~*MIQoT^y*>t*+k5f6JbeHo93D(mqzE@*}-53L@*jfw`n*8v=FT(`2BYX^X8X zG#j(~8k;`r{dOosnf9PaxqU%!ur|alX2-y)W18uqV1rD>bNw{^#rK$8O$wcRHs3ow z6jKS-3yg_6M}^F+s2o=H=h)kSS#n(vJgb?>IdF@U{lv)z)Pxs0pkbGM{GdYn|wK zonyz|rKX#WyP9aBx4AJVX#qiokw!emeINIEBXo7&59^nzriFWc{?nsJOb;zi4jlr13`e(N;Xef33_#m8r zbYORNUs9B@qhI&~@F2bfK#-CeAqTv{LhHctVsLcrr3mQh4N?;#m9P$wBle|YCFK$( zLkxM}=M5=@1c4xOQtEcc(G_;#*K^FNc0mH8M9M)pM2!Yd#Vqsd`dX@O`{;o&

    y;Y7;fk!BuLKeWws6b>#IBlJLKqjc_Fh0!|4iFnsUNd&w}xq*NnIBWp%+$VfV0 zORnhSDggJCqjYmg$ozUn9=NB}r4;F9zKU=uw}~O(Nv~#e_o8A*y99EmP0HPDqqiVZ%1>m9v zEN+^BdkS`vg?>&MxTn|-tgGMbDMVvs8aCjbV)j@xb>IuQr-;PkLgf?Y<7EYRzc`7l zY;7b9O0g9uYg%R$rra$l-ArS07D-GqPK{W@h2jO!dRn$nt@(;2>~3X4`^uBDUAGkS za+oE{w)6Im6%zB1M-dl06Z%vFyHjuP3^w-!ISu0L7`c z?0{@e1v?b~c@qGsNWE4>LS?Cl?8>oW`BRmxXgqe+-DvR~x)_W^oMUaUdi7$JsTYiKL1%Fi#v55W`WW^c*``?+4x?f zk(U37K$M%yfY>JZG(41dEMbOPlJ0bp=RA7xy(#-x{On7on1luL06M`r{-mdFrn-c6 znjoVY*DqQ3cPB2wrk=KbQvI@=u&h>c-3`lC+W%TNhet{P`|J>f*P4!W;A%4pmxGCn zgxdYOn2l5&5Y8e}R!Q9!?KcqVO|wGpm>`uATF%MVp#QiV8^!Ij*2o~(n2+{^w+Aoc z&9ke8H*wKn!Nm3hZN(0Y>S{z%+#?#^tt7La$(dXYuB6T78u@^t+9^NNR z4&fwN!%^r(R=D1zdS3+N5v$<98qT$({6Me5U3pDPB>u}G$s&OSFR7+yxKY?5Z5Rr6 z2t#F}a_e?Bf~gSF_S>m{N(WhNC!^G(O(|qNrHd2LqpZ;LsmSR~oBI4u%XMBOY+xWnjL=r>Kv3p>1nOuGS`Ztk;len7why znm9b4kdPGdLzkWOLP5q<-JW^MoOZNLQJbD5+4dmw({mnxePBA7<;fWN8_E%CcM`vM z{9FHqB31Ced&*2^BzPjZa9G(Y5RM#99^sksRI+H{=VP?p5-oiSJB%K_jdz)wnz)U9aus7mxLl!lJli;w}mT( zlQQ?2p^~W?$`T#%ggH=xUK@J;fm_ z)gxom$=I9qS4pX$6wgxqoTySotyK-(u{H3xn$JBuEgj%DWq(Mm!Hm~~?>V=xV?(9W z{%4Na!nYibZJ>@qE<99#EPpZTgsjXDgUi?;vwxUxt|7ge1&kg9j2AZ5$KrF^;9u&t zUeCIfm05t_JUTyENYdic$V>wy|>ktf9lA+Aa@AdQF|b!7-=OJ|;>7)s7q9{E9fo z(OylQYo89`blFr~N^}k>K*h*X_qC^DQ(GEi9E@Iw&3>PExdojBd?Yvw$~%NwehXCE zWQ?Q;&d%UpE<1Sib7+6tifL1M$f4rFgA`coh1##;5X0W6lj! z?8kSan!9Xj<=dwjx|>EA>2?_?s3-D@xXYB-_r}eyy8m!BS7BuDXoY=fH96!za;58* zmD8JRk+rV$O0`g-_<6fFm%AjWdcwrv-qNGo({g5I9peXLg>9A(%FXQe9%~pZ`Mq`* z%TcDXt}O;$v*UE!;z@R^6kCo6NU5>qdXa=9z4Gg;`x9yai3JP!{D&N;=X%*;=pg`9 z7kYHNWJU(D{2KpkIouP$cbu zWwd-Pfk-&K&e7NJ0U1-=*gIZ&M{x%bI`UH{1khXy?!4N8mS2kPvd|bjRRW=-XC#8J z!s!+W9r2fl3KdwD9UbqqEebkZ-BHjX-2S|f`>YbWy89wb3}I|>ns5B{P@+K0e0ux^ z2ptFenn?H}H_dBOnQzieT?jnT5o@AjjSjrZVwPocbm(<`A38PzR>J*XH+>S6a-`^}ng-EsM_me*NP5e z0bBN@uF(9$#}T3@;HlKt6f#$m<&P|kOMYr18PNr-y078UA?I_nFMkNsYfa4ISALu^ z*OX;ZgnS@`U1(tL5#TQ|<$o;)!?q^Hk*E5e<_48? zU)M&1n)r7(InD@?zHRW6B@SqkL)MY_A7BAY;PAl{m<@47U-f3p_kMo{5yJBM(@Mie z>B`?52n~nzSRo%21gK91Wn+=T7pdsLE&$-yB8VnLfn08-nO+a#Ax0jC!N4>dZ*SnF z2TZ38$yE@N>jbdhC|s4Y;3oriT4{9JLfDx?>*dG>Z*x8?BT>^0k>d^PKOyn(r1lkd zu`IJDXC?C14Qn^yMCSAndvzc4D`C)@1Rl5p2}55E1???6VX_+RC`zWN%77?3j3DVV2uTV~^93!+-ZBmc zVI$cZcuPrEyu+ai!UjCr7|g33MN<*S6s!B?B}79(*dPiAqtSyPY)po~(xuIzjF`0M zOkpL*aCB5}jV9_1e;pX6bsSq<7)>o1hi)9_hs_aj0~@e5Rg}Et=mq7CEyAQXJqn@XCw$4j7e+}N#l}` zBUY5XHF^UZ2a66=OXS*1@dP|6e_`VRo15+~nbnemO*_%^-P96Oz$xQj_7-C@2pa}^ ziB|yY4CP(=5C2a4!3{C8nvH4^d!C2y(U4TF&UXV|#+4gyvDudqSvbjZ0xT0T>H z^J2yA)pW_7JiIcse_pIKdy!Ql@u9c>d9h-uheu?3_FVt3yrokDN>_V@S|9(y#vlCW z?vCs4K-h5aXgf@R@ZYloVdKHO5lb<=^woAy-YUa-OBr8WV?AANHk$iXxDSb6BR2!e zTOPU}+aB+qq2#T?p8fTQ<6Z48X~SdO{wm!ar{R2SKwKR(35 zG4&8}cYm{PB#8C#z+t*n5gSQ-vaLx;2yKzVWKq->qV3LhJC#{^do!IZP$3bNw<7X0 z?i7@7W&Pf5O#yP>)rLE2@At9F7`b67^W+D6&U7 zaeW9;)kabWHz7K@Vk;l#t|V^gk{aEI%!rEFs(mos*FyV1l0_QrAyZt9ktII*wdHZS zQgWwcFGq4$$kazf{ic+;gU!zmv-g#+(cZu4f=(DXc4GT|&Y^;xK1HHs9L^lY7Smg1INge@5 zr-5WWi6`#E4tccaBbqdZ=O*lpR09B4^z}oJIsZ4bo^qCUzYkY~@BGnPX&u|8Uu+~h zJnQg)GPjRK`V4wHnml^Z_B@Rxr+u<0$89sW+KR)ar6 z;9|Abw$S_~MNF!n29&pYp>f_u>@Ve@w@f6DFaY9(QAXPl5+LK#?4!MM2$#mYJsC;)m`=S| zE^RpaGZI^d=>ri`9rkS1JDC4YZe0{t(K?~s&|9MUA?rJAW@LF6GCYN9&)q&njSeje zk_sYX+Msuj(M5(H${vT4sF5T^&dRamPQ}~cnJr;^#b0y}SQwl30ow7s5{k}=dC3N> z9|MQq<_x>gO5@{8V)qKRknomlWXtPX$*Qgp$JI35xjQIN%roU28~471J7ibJbZ_t} zV;Pb!ZTP*VHb4TclO}s5qMR-KJ@Y+!z-3#Tl3{~$`saq=#~SX4x>zy}qK6%b)|A+^lu66fa1 z^5Y*D62)foQpPG^=V|1VAl-3m9m|(R)l8Qp=RlG`+an1&dv1x1F>1U^oGn+*IWSG{x4pT8^~V?@51Y5* z+_p(}GqvlQP5oc@t=LA@cj?nQUfS2VG%M+!pfz=_xN&)!**!Z5C2#8uv2dLcn>o$g zYCmp1v>vQ%znm5-KHJpsImKPv zS_Pu55BJR8joHwc#3ijK_4I!DE|u}bDn(zTc%6@f&j+$F&&~&1jq{1-)O#?Og1|#4L?g`!!4bAfrI#@O_k|-p28jC%e+?hIpqZo9CIH zZ!E?Sy+}E?oLh9SM-i#dGrK=+4ni(R9Jb!4){0r>`BD{Xzxba1)4N4j_42)Kjf+2& z%UZ}vZz43cA)AG6bDgha$}4s;ud>v7QAR(`!_xUx``IqGj_8|ka;0<(@x9@L_JPvS z`tmP|i?W2?mE~LV5NECAr=-TLuMY)kNgFHl3l`>MRb=X!lx(v20f3Noq_K!A*+z-x zL!1`?Al#mt3u%7*MDJ8(VrpNQEXKNBBiKR;J=DL`+4?m$rj!H@bL7om0ouSn9t&i_ zVkhe_zb93Uj6_6To!K9r40c(NI=E?cPEb1mz%z{FX!-2*@b(Kh0X;GxUXQgtF%>}$ zo@yZ-)L6MDiNpZlM+N!WtQ-y^rkNq!0WVjVQK{w=ahk*h!%culWHN*xS*zqBD+kM! zYV@DW7}3t21+0(wV5{wLnDIU- zcClW6;n+CD_<7a=H6X`;GyLE>X-J}*wTLism!+{{uoMlQiHQF*1_@_Lsq9CWT7@e5 zm3=Ly+=-2Z0; z)1&KAEa&eWX~vB2zQwdCNF*5_uduG)f2d4S$G&!+dn8bBJs@<)3GEjhx;KS6L%d@^ zsqgCo|Fd(F-{&4G#9nhkr2AN81VipT!~xlBe&8rk-)ed%-f?Q%`}Gtjq5O-y6CZhE z4ophY-xS_*0fDRUNH`X$un_)K!f1@LXt!AW+P7&~hXUDog92H|dZsznM0(w9P`Ks2ki#%!v*U03o5W&rhwu|Nmg^t-`X3*Y({&N{Murpu|T= ziJ*wIba#Vv35ZDZ(cRtM-Car}9fEW>NT={0pUyegntSbiU3<^HjyZz^o^k)~=Xp^& zpo{``SFiB(==~r9ekZCVo`m*b$wNL~M-g^z#@AGgOo-c^@u`=j7(Txkz?XpCSLH2# z?C%+X?VUgpNUsXFtwH%PDp#l%Fd`51RRJp8;1y0kWSc-4dH+UuFVK#Py~0lu12Ph@ zv#uEGwuqDZpr9Qkuckz)=LFhO+K&F;$Ncn(f;tuaz$LJsDt0MXSXv2;V%+#0R}9Go z*xh14@3v2IlrQYKjGX&99!!ohd4&~o#qfkRq)R`z(GG4o0d`hq%rQvssqJ-L5GY46 z{$TVM!{6@%4!5y>T`{1rhUeM>t)_4dDA?%B47ZOc3c17X9I+lj!v=^VbXUUD4Z<3v*!ZZBxNXuz6bM0vFGeJQP#BI1Zh&Ehw1RS!O(0B;8Vw%J3$wJ1 zT71|Bp8d6>_#>XjM`?RTkLE?Ak43*jg&Sg< zM+{i0e&YyBXys~88SeO1LF$8%Q8TWg}NOVDy8x@pveIHR1gg$VsnCHV)*l^ z0K|Pbj`!?`c&jHY{rOa|>xVp9jOiY$l55nH>ztAs5|f)6lUrt!+pd#4h*SPQe{2x^-+XLP{D+?k z#~EOJ|MRK9|3BU(XnTneqGINq{_R}?8x)x;stslT^)8Vpk;p}UefH0H368z#NCf1F zzdaAbp)~vmg0h8X$J1SHh7UkYqy5w&xl}`iek)j02ed9L*1%5%A?X%J>ks`292Sc$ zktbT<1BDHRbW@F)SK5ddfm>7U-VYybjEEB+&i%QDPtnqv$+d?|9o~c+r9bOn<@V-h zZJ$A9Yam-PoiEZ!aci{DVrf`=IT%i8*x=zvrj7R`{Au#LS76V>>TLB#bGmFg$6cv5 z_%7jb^dy77k7w(1;f!nLUdT3R7B-lT1z*vC;;}>gO?QS>%t9@yq2-F;zYaeM@Q{ZOuNm zh;HYEBeQ8f!I3KOyr2$w(MX9#5ZSQ{`RAts!u!31ZX{S6h4VEAc5lSLe<~OhraZ$( zm|?~K?z8eea+u_Jo@0>xIwf*crN3lGMm`L~zKi5rv;C-SyYQKaqN0(#k;+ZpnT4|I z%#m}JZ-lcqDvp(7w>)=fX@d}xhZa+~{Iwd_4& z<*3i{F|i9^gATo1fxs?4{ihrc=~+l-G6!`{42a>w6FTO+$uTduRy+f{EPqR!kmk4M7Wez#~Y z?b&UDhX^GU5SSicAXarC<-xmP+GottD`X(-jL6N=q~Gn<3*21GzF;}U!bPs|IP2NTQBz($`$zj`sZI|!d-j}F95MFp{8!5 zs?5+R#2v8-yr_^k%YHfm6rMd^ec+{9HnI?dgt*LjXa+B}NXh9Nf-;;qxSVHrpPdL3 zayOi)j};vzdqrtTP7_$xbF~-2A>=u9Vzu@MU{kBrKF zsWv_e6jY>!9g3n+%!v7Mzk`ZY!)e+9s7M8yJ@j#{+QqMbA8Z~E9Pxs{Jvv?&5FjiX zdE|u)SuI(Aw?-t_f?=PD-VGIH(-`%W_(hM6RKP=XIT~JPM}@diAfZ|$6V4ao_8iGX z>_whbgH}u~cXxs0HL;}O#aaIEXH*iOB$Qka&*JXS%-HE53hH^(xgw$FK-fT6QV??< z4fDLdHDszl;XG1B#8Bmn-&AQNLA;h0!T$VNRS_m zn>A$uEsR>vlYV@SvMX@^y~h{%TCKiLxg@;RP#3pZp<|J)gbsIKXK+WUKp`$W?s<;! zD@nC+aA*wvc;AG$X{Jc!tR}P-Vm!t*JM~aCoyn_hZurzfZNXu>4)XZG*jQrX2f>#T z{S}DKo1YpLB$o}%+Ow7;fv})oA97%2R=cOxLcvu#-C8Q1j=nGx_oHUvH;v;ri^7O*cwSLejk5jT-*9la>3%qL)28q>A^?Mea7WN9PSDfnF?2b zuAfJIwVl_lzl`u*6)<~WHBD;2@Ou=Z{X-_k3D@3qDP_Ex+Z#eKz>`ryTSR<({7 zJ>T7(EOZ`v8rtA`D*Z%~4e$wxzc7Yb1hb`l=-;2|rK4SpEVf&_<>FzNJ+z65bbqpe1&Kn6$2)$0&XW$v zl@hO|@l+mlPo>B}%15Tg4`m#!$m2jH+E{~`g}XoIRTSYvbujb_4}@DUN=;l+w4 zk_$&`Eo{j5q>DA4V*>oeWebs(ALm#XDFUhyeho~wm}>~C13-W@o{XC$Jps^B<-cm3 z)#bA2XRFeLcmgNp0lotO7Z#JP9~}{Z1?2bKath~%8C{wy@AMl!z`L7zo&n=%SSX#k zLbh3ADfFa-61@VTB!pnJ9`YKi8!yr8q+JGVYNU}LL;aqJ zEa*H0PBH4>)jTpfh!V%2RD|=wLQ&g>zsB#9#obN$v93JLVqcUbgDc~fOpipwD~ItS z(elR~qP+tFT-QB`Bm#7s6E(gdbM-1+EbT;ir$w6YMPk>W3)OGTkEqCBujYMTA8=eN zFNYd9=bG>-`xEj4mhYkwm-#qmX@M~T;B3Pk_$iv+V(nUPm4rxnDpq;3X>#IRD5kr~ zTG(c6_znwqW}%J-TKBNARYqzeO-UO^$E%=|dzXN?wEtfJ-L~e*{SevmB|KXvii#w> zY4YMxQ>Xi{e4NWK_DU;^&Fmf!efQljcqo00FFK*wPd&fac?8xv!yiM@0!Z5hfterJ zk0T%zukgS71EcvkyLB!q@?LZ^*bIFxDf;%0K*`9)_EW4a$oPyP8Z^9#ZIz3OOb2v?q`%`)G(vz{9dKq6aLO|}1Wxhw?hlTA` zKMqxv4@iB0_an&+KO@L7R0sn>mf588!9YUmU>Io2lLgwPgNGKNs1OIw~mP7=z z$d)!B_{aL#{MAPVI~apC7*jqt)eC3<#Vo1-f>D1E{HKh&&ae0t5QTt}QR!7c&lUc+ z8HQ%=P>}oAIocG7;ZM;A&p2ZJ+-A_6@n%r7qXfA>G^Bkyq+bBeuK^|*>Hp#WUXEtv zeFXd5L6{L?f4P5ugZ1Gy{%=RKhXyQo@rX17;E_7XBe_445i}I!{>Kf$r*NT#Rm>S+ zp2vy=x&IV=R2rD)M?;@GMbU$)CD0dBF5*R__3aD=alKFMwPs^=u4DCx;|zG>4AtX|o#IRrfKE|z z*$sVa^BYI!dqd@i0vu!;G2Y9{jll$t{1D#8k48hVzJqiG$2=wiZ3NhNIMmj z6DVYiX?_RmJ3zT-MWs^U z>JVkDC)9I3s*f>J>!h1Ku_S6huh8-vptL?|BgFJbh2#AziE%44~HYJ|_% z%}E7Yoz5Zf1lE4D$E|Y^b}@NiuJ3XxCvzP1+^W-zGC6&FHSdA2$Sv)5Tl!_$oSm%$ zO}CnWXK{}&%yuhUF^4uS#iEUSIRA9tX`rx};^uSLhVbj5(zRNigN)t<>jR>Nw&v~1 zXwEl6Z7#|!g1s~`EhjBs7Ft9GZ%MB(5Tu^I$*`;^Xcd^loou}vF)6#%gAmep0Zejd zZ-bllK!T%xLWd>f1K)m=LJ+oXjyXe$GdzCEIR7W zrCyQ*0_6J_mhH_{U+KNTzelbbE^h`h`76Obc~+nDd{W*20BkRRBA6L=%wye-R?-vc0wxfwO)Ot=CEuL<#;2f`HNZ&pq_I~mB zleE+Z@~g&L1&VdIvUMG%M<@L)4d{sYeYq@O`UiDxPU71TJ#USPV>N!-2Fvgokp0F=O#}%8%|ItA)x)6nqXG>hx zBq`cmgpC%m(D)#$?5;?4Qj*VK>?Hg7^=L)~nb8rJ`RI-3rwpuIV}a@&S-GmH=Qlp9 zLNo(oCNeSp`!Sh%#kow0|rucYd5QvdpE{KI;3+7&~O*T4w6& z+Go}e!-L9bM{-}$kt2YGPYReVaV5FvQowNA^$X-t4Zl=V8*N zuJ7(;(TN1#nCMCmrTgZNhN#%grQ#%5Q3=j5g?ukTJ*S3#|xUD48&-v+> z41gRsDzi-1K|mnzOpc{BK}CR{imKy?!#5G_eYM}1pWmmXm#Y9!Vm?J|c3%95X3sO= zXJU<|sk{b0GwgnR0zpt-6B2koetANGxK1u4bib1oT^s%yS^z63%Qd}h_j9O(8{M<| zGDnwBeIXn2`ykE7g>8DXir<;a90}#wT&Z}y+%PkqBZA1{IWn})&FiRpbPh3#%agzF zfJFMdk1n6Z#TE)n7Nr^~fISOFo8v}(xE2Je%-#7o1CT?&a25BRg*l%n-QKmaAl#n$tz zXg;U1`kUD}MA_n6i8?(n&zLy|UT=X;(?hBl-`#67DOw$|!O3D80~#{2uKC4bV8+GE zp%&ff@MYochZgsJPqF0M=R{&NRv%2#2XjN8u4P3)ZNNsTsa7hQ4bKw^s7sla}vqtP)~x;w#?n ziJIYW>)TzY9yO^rn1~;9e1Z<3cOlXgFrtbLT^25hUiHX|pYpKa>uf--8CKpt{0d%m z({2>L%Mf^1kgYq_fu3`>TrORXvV0T9xvb`b4SH6M+2+4@-@)2~6XFw@#!tVud&Hn0GS#=OlS=YcP#>xSyZFv4UwF z>VZQ+r9z zUNkT~S@vzm_N}#pb1s0 zoZ=N0dIm%G4|3rd|2Pn@Qw10`1ZsN*Cc_67fRv{qVE)2iAv4H-Cg{;|PzsJW?v=-l ziU)|-Q^f+a3&`*~d_kIzXX6dS>rh`y(Eu~-5XWtxO$-YaJW045*ufQ|^)%E{G!)%7 zbheKHxg#{o7MS=$*Gp%>?r}&25oN9;WOkJS>>h7k;p4F~pZ76<-Q%i)@VlAt7~}|+ zZQ!R^LN-@C^g8(EPh@K3;yTxtDJx(W zPrv2uKLfKk;gA6|qU6^WDExC5jx!*9?*N7Wiw#{Fb9@l2Taq{6se)jAMG4cqdlD4> zO_jhkqex{h5)iCQM@Qnp%#MQ9Am&(Z98;zq`ZW=jAjGv0?#&swP|wGCAXujm{sz34 z+x!qA2CqIZ29{TaqU3fPa>RN?%#1=5(d0H_wSp2h;`KuIyBA%%&ZytCK&+^sw*I^jR3pH$|%%1F|>3$zF%RQ ze~QB{10doC`G@A8 z7zFH{yrygxv_t zu7<*7Gz3)=G+&ge`bkJrsyaeL_t`|~Mw+Vzc3#gNerNCApX!6vf@Lt?? zFIK4DFRE@l^3(x;w=QM&3x2V#i?|4rdgm57xOmO{)f3iD6ZPpVcFS8+vt0X)Yxng( ze4dnZANhnKE~lp=gx@rGYI3?96v{nu5IHAj^8uu}ZkjA6e^9ueX_3D8BqD@1-5J;( zyY%yF(?sj;u8@xJ8@g93!`thRowDziAG~!2d0%^|B)$c6%I2QmvBB zbRZ%B`h;Ui0iRCy4vmD_yM2!QkqCkSI?j;~;j^D8LW+WL&RDd}yi4fJxI%+Nznou5 zk)oV#wvee<`f{FT&OA8G)IUbEwHCJQJB#Y$rcL@4m|dtZokP@x$2S@nv6qQo93V(& z&Gtg+yA;tUKaqjhF{%&3GsHsmqJ=rwepXBig#Fz7R6%TERo}7?_OAr^ipIh@C)X&p zW_no!vAv&eXmv{B7Q3pf@d)LB{WW=629lqa-ez%h_Xh8bLKpLTKLUVi3%u? z%7v)*52!R%#p3^Z)=t2{r?ER0nTyxQpbN|5>~SHJS@iFDzM~PG2IZaQvd0%n=xL15 zH{7jYBbf}o-i=C}xyxk|#~rFyK27N1)nTs|mr=9k2wFmWNPK%Dav?u_N;N{y6FWZi`1;Y}5u()wYf>+#TwCQ@;UcsMb<_}>e|lJ(FCz!w7(@ZPt9fW!|+Nb_bo)% z(c(IB9AaHU_jKWc)oNreGWgvr_0tR0`d^+@$v@s7?kZAm{dyjjI;Cy&JLzX3cU=u! z0F${$v)br`pIxcmGiFOg2F>rRakVvXm(7ui=N5V{YT9ZKtac>S%bThjnhy>dV{VnV zRyi8Vd|51WN&BV`N1B&N4^3~)v<@LSEi1K$GGn(fKjNla)UwM&yNfl>{bF0jL=Np| zLF8dB-KN}q@_e!S72jrknh5KY#~Ap?@1{G$JZ-F=YY8KnsCFDZ z|K-F`!ax5t^4sTc76Ffw6>;9@0Cm)8A*fU_#Dm;D0Rpil>=yHDd4j#NFOMZ*$~%^C zpC~3;RJhi952(E7uG%^wovhQ>&wRsIKas1!z++)-><=hBQ8-OTW2-k-L?sHUC(1Ae zDx4nZ2ic)=(^4_quX>cRuuxE(Lk48>;D^fCPUE93mtw%x(-MgNd(71BZ>-K#u9zMC z+>&^z0l1{T2@#Z)F{12bK5HHQ3atwYzkl@^3Rht7*Fa9<_+~ zF`nGkPr7Dnj1n`Z2#PZ`IQYbK3%|E9dQU`V1@tef;rRE`#hTfMxdg(&)gRq&#)>Kz zsF6$a#=I2H6Q9Bs8Y$O`M6>nk=@U4C@w+5+)7SK6O;CB)&*tftLGU6gU*zt86QOl! zP@&BnpdwZ=>2)Gc12eYLdKiEX`tu3Q%fQY+X}k~wqqRr@{0k2hmpnDJ zpXgHdiDN6ec^fVL(wQD9;ab*`B2g&%7Lieh0Pfj63H3-b?V^{RqU#}UCaxR3RC(Y8 zP4ubU6Q3y`=1zXcv}8IHE!wsqC;6hXqr_)`@~e0rV1OmMn&yVxpB88p_+?%1-Z64P z(PTZJ<`CbNx+u-oFmAMZo{z#e|AK+n_$wb4ZUR{`&9CaQ_hrdOkKOxHvaaQ|a=#>W zEv$;J+)b#TTz@A64nis66vdafikh`vr95(zknuPwIFnG#mJQr^`7vhhXyAGC6X{>) zB{#9=+Ei^LZ>?QLfUYk&a0NH7mFB~Mj^bw%V2kCvG#zKZTASmd?)-tDUvEE%T9XP@ zkMGj+lS^@N*GYRi+5sxnZ3xlcxm=>hZ#KJ!@w26v&#E$%fK*|I$DlmWQw0pX$3}v> zAy+_UBHil*oj_p)^$H(H48TjkCg@{e%qPY~aRh~x?p`U%3L8*Z8LM~i!*-ui^=ylB z)0YQi^USbNut!Z8Tj=mP`xu@SVDpFpZ|GeM#$92;3iNZ?pGXaceiZPhHr}0?UUhbG zN`E4?NQ0-It*P~eCm5+S@)&PH4W|z<*v2yKV?eR-%d`d9OyQV7VWooMV=pYiN=_5#?_r;6|{0q1p3(V4H@JrPU%Nww&#DY@|fO;5M{{y&zKoD?e z7Wf?>`xkgIr^5hu2q>(K!-uAVfV(4L$}x0i+j!0qiYXVoRA5%zK+%5%j9fuLzTNCd zl;;SSc?E&3lJbMKO@K#8ZzX zaEc^Kj3jA{B%6(-xQ?VEjsiL7GxaE1kf$d`K^mi&X8%VP=l}nc#rywLz>WPh6z)9; zxOwb4pkeg?eb6V-?kf}%1l&3O{{^_Sq*HiA?1-o`{|j)B{y0}DaqCWw($7PWn{;v4!=vZcWjbRIyQZ4g>SVZr*Ul;K2K2Zkr91oO)$hkw=)P$`hipVn|+3<@gQP;>8o4ZcNXD{%PGyd zht}#PhOvc+Wp4z&>J@TqYnD}ilc6ioAV$2#_3#gzPJ;0qT8(4LbFtR~>4bPq+o_k# zTzc8KF|U=1(I=hv3QI8G>`SHJ&+g|Y%dj*x?(sPsnWy{R9(FxgxODV>;o?2&AE~)J z8q&RJIqtqBZQbhdIJi1zlU|Cx>{In{xv+|U;JV}qrsO-dNcP~n{iRv%uCvT|v*+htJuR4pcDxlk+G>`=91u$OA z=@U=tp{z{{jEmd&1UKp-T;{hw0T&u$Jy#IqO{;K5dpl0NWW(IIP=CL zBNSfaNkD_k3Fj^I&_U%V^~>SD(NJ~Yx3CvSb>u}sdUI{A$=|{J}AYm z;24FGO^Mq#cph67*TIwn;prdHavw=}=VPcUM*Q6v$1cHX-sna6^#EUwW!$hmEhj1Q zAcwJ?t5t=>S3>z45rOfxQMd`4h|-KSg)+HQ(U3z|I_5Q=hc*`t!?cuB zy2*;d5w}H!w0*=iPW+-l3(WO+q?ga%y+s&>`bDP^YSRkPK*qc;II?#TcU~ir#Jbv@ zMd8*`ir3O9xYXgLlfEr{uBcJ&Qzn-*>AIsN1yK|pKl5N@)|FdQ9b)LI$qzcC7qR;J zHtzx}zfBk-5nH5?dV^WiUt=yF4w*7hsLd044pAXans_N#Q>?RK$Vn(MO#lx1NUlRP z5Pm6!@thZaTv$_EyBTeyRW6-pGM}k|D1GJg&37-gz&J7=@@x8BKC@S>>wB%7L89_O z|FNENx5IRo%5+&Wvz95Lf;{>FerXWWicxoxYRl_5_xuBM^S~Z8wFk86*k%rOA7c71vz!xs35?@sH`Yh?ci6j|et`a1_6$tNtcR$G2247I$YVePt27n{Ac63Fcylwb zo(BZnw}y+MPx0$!iQwC5HL04KI89|R_7e+=2GMAhYmMv}I3DE!Xh-7TND+*6(mSdP zSqb1KQ%NviB-73cRw_bd#s5Y36Y59_Id*9GD30}!*uvjHN zgDPRlas$p3(dqt)?0U37wSbLfj{EY!@FKTW2*p|4v(#CcK{-~M3PaW=98 z)A5;R9!*14@1->92djnW6uOS`O3%+<3=S*^XWsU!M%lN#*aY}r+@i=xcrn(uEZ1Z< zFTH`kGLd|)TKDsf#5~KFEdF~H=1g7_&UYJ~gi4$6jVDLegqFM+m1U4FV4SXF+$qc%=_HBmsgoY7TW#cnOZ z_O^G=%@ZqU)^{2GN>Y?ONGQ_}@S?Jj@Lh|*x<}A2qi%=LXZ&~C>hIuwrbk|WkXVlA zc{eR!13!{|g0RMgg_q&nrApSc<$RdWSapeyWMg0#=Z+QWT&3WoI0jAdawmD}3A*RW z?;&}rShN`ctG^hm@yTz2fbE`e0$|OMBG5Auf*D6S?!m!dSwDc>F95wVAT)si83;_Z1&03MW-|~sXZQ=zQ>uwUCaPe#IcWwTZUYaL0zJ7r-3!FHkn`%ih=7g6{LcleoF_=RKmRYLep z1B`3mUxfq25%4?_i0To@P7(iWp&I2+sQyohGuz6awM&dfeSV*R566Y$JphD8B#u}7 zzrwMp2za?{{h8Un><{pNN3JAT(v59jW!o=8oQI5!J`q6+`R zk3;ZI*$!pAC^4|sa(mf6u{Dp{-sU!b@_rn4r)>T1^~(*AIKy9j1%$qXf)oZo@3O?xO0Iqqn+o0nhw_+350&)6p5zn zrg`>ebv#s1Fk*Tq+h06dcK^J2z4#uLy*oM$B+j@-Lac21AaOQPb0j6x-#`l#H7CcQ zbnE&WI`}W*Ed1}pS@{2vI1@Hvbyh^EtegL}KN{^w{@5RuWh0v~`@;)ne>j8o$JDer zobj-Av6b8gS}Yij;ip*ij&AT?n4XR+l}lZ&y0A3gHqE_gc^DvNZAF;VtY{l4a$)`I zvq2jDEneU*s*71(>-a0~2aM=$3)_~c-p3Xxm5r#`j8&3U!LjTTjE|<--@mZHtNu>s zp~WG|p&H8}`sT+}wa7a~yqeKh`J89M@887Q3riMHoe9al0@p4@ssV zsuk3w!K<55|HyeEU@{WpAYk!+>Vp4cK2H6-(S+8C-lq{OrNz&457JfrU(kCl&Al1P z8an(DQXEZv5$@~TgV(0G&7x09dA|AiyEYof(%d&}q&LskFBN`XjNUO1Pm5gSE*`Gl zb1n zCULE26CVz_7pLAJx?Q$$Jh{Hy4t9TQIEV0&?|iR%%H8l(m#kgle2}v3ylCU&>2EcJ zWwpB>MDWNFuJbPGzb<-TB0CRx>UmSmBFcRL|B!yo-uQ*B3R_cT)3L@6cY>O^nXO;Z+iY-^J6IK`c3 zTr`E!iz2x8Rd>2CQjG^~qc~!kr1D>HIPp7UR-_(&r{xVseHgY*Q}mlae8zX`)axc# zo!(eYhxx-v))+@AVgr#{u)TlO7ouc=;8s9PBT*43(Una3JO43~opfkeWcG7BGipXO zj@U(!6k28)iNG!SjY=i|m)hAvA0Ud}))TpX!ufK!g?v#b_St+dO=L2Wm8dbNlHMPf zQCvGIrl@@WES-xkm5tVuX#S#j64CT!FQhTVt~ORYc3Zi!N$FlY#@BeGNVOkHC1xr% z{^LfL{D?+hje~t@B}Tz-Kyxtl1iw`AExkTlDSF;2NFt*xo#03lojvAV;AOexnJdd-^UkwB2^4{W;nfcBnV3N zJu%5ZOd18ms%0@35(JVvYG|?gQq-#pkuMF~X=&Ne+%Uk;`p}7RTl`4*4pqEgSY5@9 z9nqevMd*0ls#=HrdGuhbAHirkJQJFTlm)bbTZ`Y}2`mOMpx5Jwtw6vhxfG`TwC&d; zLi!i7Y2?I8W3R!fML1PyW-Q&YL{8+xGbydw59e8sY4%yXNM8l$r(5BL$Ya|)St?b% zxq+GD*%yEubM!~@8HSTX)M^yy$4tZ&T7(ze`ai8UJbe=LpA(_9SbSJE?(I_Dphf$p zz3@?~bZ#D4b_5j*+wWHiK*0ktT%q)hCrNSAa^2JGa3ecAcT$lb4`JfnnO>hHn+>-T zJFobqG7kL1GJ0;>>OjZhQ~WmRf~YP2cU?O>BSMi~G*$7bm!F_fFvo(59@YH2jqRN1 zuF8AyAF9l;Iy;a(a{bqn!K)YAwZexPoh~8Y_=W?}a}I6NLqWyj)9q1v4kMDAm1}tO)(UO!W(w0lM}WaLspIRFU{02JiY1yM{}3O{~tB-`1MAa!QIw zxBTYmyI*^ra?8Im2!|gw2+Lh{-|{gbvHpq`e_D9zhN0#K`pwv49*}K(x;_R1lE7^Jp88`kQe_y<`b|wc-5k zp8KK8`VnxK2Ubk_o&nV2~|Kjm~of=yd!-H`F+d(WL$r4g1msB!mOZ@zQ0yQVBra%q81o6 z9^7^n+(8ubl{=(MEu_aWq%R?4pdsY@Ovvz6$S6_hICtozTIe(gniE2QHiXX4gf3o% zE)#{Va{q6J7=gzYVrZ z(c;+{(3J+5RG}`|154U}2iplq$9-ec-?6f-8zQU77w* z<4m(8X=ok5VH5KhYHj8o`fTCy=b#S3v01PtSl(R+M%+9D1#9YSqV-7jpFotD5UV~} zlw93aq&^rcV3*6nO2+w?GOrPxoKZKXPH z7H*}vu1#juBPej>oWrE3ZV_V~Pqib) zW!c_FOce5yzZ}EGWlES-!1aAOrTj#zV#?EMC~0QLi@a=hDT|zBR@Y^r^rus$bkh9X z*H-IUU@nw+!KC>?yMF2Mr-fQ`*CQpzaW9jY^X|Zp^NzjY9%R>j&UF0Th=BjXuBpJ z^%8lrJi$4`i&7Tqt@vpf;g(jQ?=d1GzE~!jYTs9areD4+h@SjDs)Ao^BfP@CW!xfz zCz`H)`SW9BVLkYZbv;$l^P`$1LCN&{7R)IR>D$%E&KK*3P_X%2PpmBSinWlmJr7a_ zBd({T2#H;#7WFIk>M2XWgFn-l}$Xzmy~37KFXsSlbRM7?|@*nuB3S05woh`i)t z#s7GgO^v|X%fHGN?rS(tleyg^qEQv8KAHXOrPEtMG}g$t5E@$4Epe_3>(HKC@+U%t zee%PlF@>DDPvxD&w%?RW zIb@>d?S1|r8+bOJzF3mMZ<#3j^e`FG2%0?o}>kXZa*ZSng*hdMOY3vH2DIxTTz2 zxi!C$RCb))l#|z&u70UMqD7i!Mqn1k+RT&D$N-31{ zHp%wLr-Ftn4zY_^V<9ai&dT)?6J>W^#o`;U-!?6N&Jp-r$d7HNlIDP)DP;xGDQr}8 zFt4p})lSoWlQ`phSIzMHrMV&Tr`aHb&xMv&Njk5ZX1ndDKS!6U8@at7ZJ=<-%1qrd z=|r39e5i9MFF)TgU#Zu;8{+zq?Q3e*AOAB9Pft;RhXu|(Ykr;j3u|Z-o<6$E^tNDi zCAk>@P+;L5*!`eeJUDc~KLr4K^QH)VF{hE_=_QS4E&QGzW!KRck1>r~!(Z;<9~YDG zKL_aB3;-w`m0m{40PqggMh>$iK^$fVXIKM<31|;xe(mSKSsdPgX0WjNH?o~y{zx>d zo??#PC5djg@5r^@)dPJ^Y!Kp-9ybebjXX-``MvOn$xTnwee>Y^zo@8XsR~{_zT(PTJ~{S!-)a0&A>!_8e?3%=?6sk zNIMIldok6tz5{_z&tEr1FYh3cEt-T4tuDyx@qPSDLYqoi+RvVuA?Cer;P8-qPE6Cq zlGyO*tH6oyDO?mo&fCep;giQ`j&ob@V92`PJvNv!HY%pu?7*riOXtWa5o_&Xhu-|OLpS|y%8ZPa2qBLe`A%1iMu>X zMPx7Vj(5$j=; zC1o;wwDXlDM%r#>7w-ZjlgAj7-^MdR4{_}oobM0v{hwVeoAfJLZHICkDvHg&D=*-lAzB`}`4R0#?TdS_bO!JRmkp6p4DKQ2(bsGKw|dtt z$G`Jfp!Ys_%kaYPkY7O-@gr_Q=u7-`Eh;6)K?cM4q6o z(0|DQ>I&(qu+i`CdhL^X0v1zu%nGl+x&p?w0c#)ry9RB61}w0%=w$$i(}TJKBcd^Y zRpANh3LM)WXKbFKUW`7VuE6T6D*&fL@8<>T3V@f6r=PhPz2&xF4!Eyj<72yR@V1Xa z^9s-xV*rf>X?h}VM>q~K2AHv+=Vu@v;GeWj4@TUDKb1VkZTcs2-u5$eDKmj-SAiKs zL0Q~EIch<9jzI+pK}8KgB{M-~S3wm-!ByPBHEO|ij=>EH!A%XpEi?by5%&uJKOEPP z|4U@&S*ZkjqyM|Epmi<3-WSF3Y4@LT)u6;o5fG0SjD~3ciL0-5F^Ck-=qHQSs?8S$ zrt(3TI7pC~D!X_VrYk7lzAPC6BV>Mo)7Y^fXE z;Y({_2N|u1H-@PIOjpRj)#$N2{Q%Py7%8+TYj%HBe8@M_c80?nxMy-){2ZB3%9hCC;QOXbarpp>!S_I=*QW2lQxN2=Q3n*CH2-`6VgX0>~oxjH3 zGuiZjMD~7N5Ru+k4UDUG;Qb+1&;btNoCc4ma)WU-j2Aqj8qSZ*upR*(QC*J|qb*#I zlH%G~kCqc<*oaY5G24h$GcL?EfR*Ut_54r)IfJ-e-zkmECB@ zj8cPw(KM%r-} zipSDW7dS?msomnoGX+wMC;BlDn5Uw}wK*pgKed((ze&&gEb}29!$I`b4;P0vi=#P* z_K%N3Ue?(Ty4C(jkF~m(UtWC(jbBv%p|py+m;&Dc^B1Y zN`jW7Oq1c8r3RCfyPm->^R9jEUpVg?M}*2<&Yyosuez9{T)J6UROD(so5$@sxzfn= zus`lezIVI&To~?pwm$LB?wWb6z3EnbkCNl|V2&hYb@1$Z#@Ex81r@gcOi~9f9^vuv9-3ScbN=pfYbax0yBc+HmQZqw`Fu))w z-5r9IfCx&7q@;)ff^-TJ&UxeKoZUV9%h~*6DCqygA!+=RhZsD2ts(@n@e5@N=P-!%6^AI%sU(kc!+Y;!^)D zr}nGvMRO7BEyi-q_KyuAWkrr`VZRmif7PaEYjKGr1_;}Tc!iG;(};04sJkC{hCuRH z#1+!D_k$;*#~)2gZ66FgjjhW@%>Vc{9v~l3;E}Ntv?e6niW#~0;vhFs_JQPK%*Wt_ z@thl*P9U(fI&xzovbD(RE@!Mn#7OZ=l5ME$ZKpA{Uk1t0;7oDR3Y9RqlmcpH=bf^Q z&ZLLlh4~xKtqz&0FCKd2aZneiH^ms-IrH?ro60WdWo{5nAzEgvR3RLishlQFRWefG zqMbpgS>ZZVjve8;Rb)N|4?*WIiLvX8w;6f?UEwCFj^?Q`6ZNj*K9*mW@6(QJ7u%qV zo@i@5SaX>`^Z7WMeRQ%SZ!~@1=VRx!nk|`Y{@MSJcxLc%x#_#MnJS4Fg)u%>536Zs z193jT45MDOl`(+JUKYK=UMFzXbu)ikRjy;lJ z#sa}hX4;IQ?*w=BW!#d!p7plMAZnh3@u#meru9B2 zo_E*wJ2tSM32O$!ZTMQ^7`Am@zi!@+2Cm*pE<7E&E^iRS@gQF>in(+Wz7Ie^HdeX* z>V~rQAkf@=3f{R=4;6`40gMwx8h?xhk%IdhHrkM=(t!x%p2qq#aN+MN_3)3V$C0vs zpCl~8vj;|MG_o@p&K=&%eG}FVy6FH)H{({4BSvWpnNZ?mzpvO&_Vhx|??=84I)A(u zVEkgWx0kn@r=OSbVEW6XCH$>y%mfaSqKtU07o$l9(#Q&cto7>I^g{GuI=WDl(hUu9 zHeApnCj)a(OA9yAA1|GqN6Wb!&$#2QhBLos6Ox5P3+-vt^6YMAesjIg^|WW#WqRdD zx<7BX951Nc$8)1^YkH8|-zE1@Y#qocK#mCnrO{bv(=`r#?6M}^pu3bdL>597IeReK z>`xTLMN{?kH3ha5Jo;Fivu>Y{GxhGef*csR2xfd8erdu*!l1*;7x17@Hy_Q0XLSj) z`qe~uI$6C_n$s*lL0cf73>XDMxmv_TRiR%k49z8C8vHcfAGqfCmVdd$dXgV@uxDSY z^gTri-hyL?B*#v{KG6PE>Ug*pldH7sjBzK-J9F4i;OO|KaKAOz?BHNza^Vd#UU4H1 z+u@5YEJ%UK@v z)8SmCCnQ~#9mODJI2hs^UvyXO$uzXB^%TKSg52)m1r^aO9mY`E{KQ=kG-%E#4RhlF z2Yw>_MqqOq5B;N=T|&I%bpuJcA{))JbO_^t9o1|`Zm7uz<)wF~LWtAeB16@%J}ZIJ zW%`b+2|H9wa=EAHvyaau5Ri1i9k z5Gw@!$@66v=;80NtqYQZj`&`rB0jG*TfEAY#ZB zcqUFsIrz9;t<6}uVionXYT@?J00q$dX)JhZvmU+MvCF{m*=u~oQXLxZQsDUPGA|B) zDc2A9C)){t=lVpY^{37^=O=s1L%F(LKmqjW;U?foyD%6KF3%Dio5pzw@T9=;8L`AV z0G`0{SvVE&6(E8R7`}`Iz5)QAG!iI)=6K-@3||8OWd8#^`wf8ENgDt>Awot8vj5CZ zb}v82mJ~vR6&Is{)kz%Suf8(#Zw`>=Ltu5%kPW(;f-Nvgi)}d9VxMm18t#y8uM+^z zu-)J>%5t+yg=M+OxhOc;b^hei3&5Q!)eZeaGX-lrkZ=0*gd3oScsrkxt zieIDaj9NhTovTq*efvnJfaV8{DFKyF@2RVmCk%|Ln}$lfx0U8^O+8ln8cV&SxGZ5* z(>e>us%hSI_qnCG`;fZ!-XWV&?VD|P?_GuSk;x|t7-{M~7*?r4-P_-6S^PG5ES5&^ z2>9bGYltv7^)9r5=JmylhI91~>4Ar+h-HG>(}`QrT%?R)y6wP$*GslxP?U(VzBi|D zIA!F|Vs_HI;WOgu(Qyjx>am&53%+sncFV(uvL{tX)wi1gUSAG?W~v+H zqlUL19FN!)S~TA`)%@H%>(nS9^3Fv@$#=mZO#5IVXdctiZ1=>l`p#Tv3iYX7RIPc7 zMhv6X>$zg_nyv3!28*dHNLwqZMGsQ<K)CYPPcpQWlJ(p|M!H`}*z zD0jTK(d9X3Ti7?M+D*CwhXdAv=M&m3--aff?F?-W$-MnUWF^}_#x5(nFT!Gd1cMqa zU7jpO-TrgBl1Pe#`MJrv9u1Iwxmd?CChNX9ntp=0JY7o+#aTDScpT%neO1P$OO+eY z4ZQ---%fX@-;g>@3}u~-*uikj_mIc-HfL;Q<(ula18*uV=8#0crC`$w`@>EMPW%Ns z38)jG7Rx6-nU;?Sqk`{bFX2U`5mEr)35Mn0z*wx`W5RtNjdPQgER9DAuX8V2*TItH z$=W;4%(@to0(u(AeI-f4o&3pCICPT);S17gjVAXP~ zZ0KU2!mZ(mLFi@LFeauU{r%($W5j^6ocTn2$U9CkYhLZU5-FCGy^G>gEgzjF$dZQ~ z9!iJO=(LbEW*^Cv%+JNBXq4>daJg~HhRtBK4QoYc@{Y^iZS zRy#1^@WtH)XIajlIxgi4Ls$2<=N?Pl}P zpSeq`1s-BynHRXD5!J_9&nd{zQW)X9W>Cvxy>16k-i!%P2Q_i>RgW--1ZYjO?~x{@ z#gsvFJrmF)9FP4VK`pHf-ns)zAi6sNE!UCmvxL;}4F9Zn(EqZjouXENh+30g)Nv2v!O-jfHBzTgu~+jc;kF2R>vT_8yT?NdTH1WUQYjqX3oA zxx;WAIYsi-`Bk?e<^$v{1yZJPmhKa_`lsVcRIES>gY6w2oEb0Oiw?S<&8OJ7#Ukie zk1{_%;2%UXCLX5QIp@G*K=C9R#V(#dweYw`H<;9d^Y0@OWDF9SH@vj!&};c{^Zq27 z@!Vr#kl6}8H$k^O*^*fri&{;hFcYJtt|?c0q_=*y?9cR~Hr`>Add(a`dK1!K zY=f048q-60xY7I1rt>`0ZUoZLzG{GozJSJ^oK;ynuD5GsEdv@3?5BZbo z!tYN}eo8CNn3DKJ%+MRWDB&K6dUu~TGb18Onsdp--{_AvJj7{5>&%z%Q*Z)#p5OcR z{qtjD`R;Bb;xCdok`oXbJ+@%mDAv268Wy#KWU=wrg2O;Q&)3g5${?C6V%*>v<$zR_tUsnr~pUU%6c zEt0e-uNNz(?Kv~Ze|DHjgLXaW9-#-~ZOQ}w@sEOYEXnXAgP3)F^}ARmyQt6e_~5$Q zVepYVqD|fbEH3@acbMdCfn^0$tlF_#-w??7G2}PC3w#s9|15v=@;61&pXVi3UP*qE z%f#v+%-)kH7vJ@|ca7RWIAvBKLQB{#>h7i4`>p^ycrKIx4hJLU7Z0o>{-7K~iIPIk z{n&ArLbINNoRTeYLEzD8p#3+bF^ajLo8xgZI}o(vmr+yI!D;>3fuMaVjhg8cAw_{? zpP>hG_6sNEGH2)yFoM(up$_EiP&j-ngccs6{x@f5oS~NP4^#Xe1}poUvyUPb4?r7f zND+z%1IY*@vj`La2($DE^Ogw9nFy=X2phUcJIP1~v&e`3k%?O&Y^(f{_hLX4{07XH6|BAxXFPNdjzl;}ZW|4VJb zb1d8yfaZF}{+SMGsu(TO%rgJ?3#+(JI+Q~Z8Z6rLPs0AX+-@Pe2k|qG#^di!VeKHb zL^4;f!atMg>{h~xNPF7YD{{P=Ouy;_{(E8dw?eG#YB~h?MEdcnwgA{E1QPb5!|P!v70$Y`6-v#Q<^y zQQ>?G|0mGaT8Dy3s2t&uBv*kp9TFcD#hi%`kA46I+OhaW&TL?!QyfI>4UK5~=M2Ho zg$aDjqwERf6v{;?OHLREiVMiI6I5t;snCl01n5)++n;GK{q~hWU~XxAAuRj?Id!k~cx$HZ!`M4g#Gz;tAvFyAL-Q>v}Q@ zvUZ&C g^kvJLclu_qqKCNJ^o!hU(Wjqt^#}OT#?WKy^DjNvS58CT*>tO4}P#XD{#!pylGPg!aw&T4A@9b6{P2M27n=!_(df7Pj$W}XJ z8tGY0G4nu_NzBW9F|P{i^rl&N^ubl*i2bsy;QHd;Qg!RId8l zG+U1U7mKuE|Az>y8cBsYm7Ubp;}PvUQ_tmVXn*)(1Y6g~bULel-uDW*z46txGoUBO zOO_0udeZ%TyJfBBe5Wl8ikhh3jFDbvNU1r2QDf&_91P#ty*M0|w|=`@l{F;&y4M;V zY;45Eaz&2v!J83`n7R!;JdDZ7x7WLJhs#)rA=x#hBTE(F53L4jp^h4{y)z_a!|d{HwwtY@R)_F;L; zd^|mWlF01%dacKIxSNVuYa?iazIEA|Dbj18A}JkMNibhZ-;Lncv8l$-;*}%2Sr2NX zxtG87NS8@a{oo7N31Y+21j2S-eRpebMw&*oUcnxZ7&WxrT2M=;aI${T!v$6bb(;5M z_x0oN1lgbGwX{j`?I-wF+1D?WeOTY$*A79eQBaq^A0<$Vj__V&Wt~<#1A7{#E@)D+ z6TDIH6i5}21&*WE~Yocs1t0BFz!H#Qct(PO2V~obZOMP@9 zc1fQHL7Mh~XF!esgK%hz3RJq$I$V|u*JW1KmSh6>PQ9{P5HRc@=aP{EStDo)=rGfu z44G6a5|`?KUsp{TULw0D7R>v>k7P8*`_US>bpWIJIeO7`F2_^zD6SKH#ntgV?I5iKSFaq z*V6F$HD(iGou=?5ev*5%sjK_Uw{aD`|<2~2~}fuZa76pjtCzsat;X6taf{mS(OoXHqx znv$E?fv(voouQ=38XDmmrf4T!+DuZ+KF`(CwPREdl;i3Gf2KN9Fut|xlpU1;U5*x*-h*&370K$DX`tl46hn@I{n2#T=5Gm&GrqAFpU{ z0@5<$(n#JkY}-m>`z2UvO4ds*6t&QpU*<4$rKF;h1wVXBUkVBeVX+oJ1;^t}FO zH^I(B0uB=k(UZ4$57CJS`PyAdSlo{l)%HUOFQMUZ0XA9Z#A(^1hDP+Q=U144F5i1&!?ZfZw9z=IfVR&~`+V_d6~u!}nQMYus9MePo8d8I^e$&2Fac&^6+ODQ zhoIW?gYrBX#i|KmD9&AncF_zs*)PkoVk`GU4bta4IqS({ zC1~kbmifv+XcVkWo7X)^1Va!hT~>uy$L*}{z~?DBz+^(8A3j6p)dHBRkJk7{#k)`} zqg+wEJ@QqD8z98Qoo;ZKY0wk7Tvj%PXb|mbrzsCK`a*4X&8(y{GMdEl3BQlf4EwDxJFC3 z)=aq0X}BKU{~I};M*NG;u)gp^B2+Qv(+0*K4wY&&#;=1N#j-7SfSc~ zgw=mXHZK(IG$J|K}=H>XjXWe8-hk`m(qoq(Ng;1fDugfMrX9&Ce)F!w9Cs(mcYk2_x?GX4PVBp3K)|xkt^W$sS@{ zput^$E{LUnHp3QuJC=?;Ml{omJ@!rm9W+X6Lv1RS8(f}>;v|gVMboaOFw!WQqgc=4*`%Y9wI@}HihXj1Bibp}h)dVaZt{o06LTtVWv}s!AF4h& zXeaGJl}T>>P&q1R#W0FzrD;*$Go1AzL?+jD6Zxok@1+>Dt*fLmqg^zzXeN1ea!IIM z`3jStm1mgh7`v8>RX^jaFtNjAR2bD{8uKSMj;B|~w|x#_1C;ERp9h^ws>+5H-&&@A6t&p$=s#-SD*J?j2$qk&7+)YC zv7~r#G^F7+_o`G^@nd8Emd-ZyxT>nQUYQxzlz6T5Zin!ciRiJzk2TP!7& z+x(dJwR3RV^keW@Z*Az~i!Q~j!1omLI-w`OL}~tjoa4TW>>nUaT1RB2Gne zb#h9(zX^{%z(Ujfw)-Uq%dbV!WHX;j^ea&O7!DUdhvL)n^qi~jA?P_Qz>cLo)Fm|$ zkf3jEdS%TdC8MDdMPG0*t0nL7&+4LN9gJ>-MYpofl|@q^Y^dy`B@i5_m{hOtQ)Mmf z?6EO%+WAnL+oj5Z3Q5*h4)gRfc)h~Orl=2Ei|#49TPvpzqebrL)IP77bYS&z)?7XIjC$q0$b)x(khRz#^{s%dNUqqh zEX{<&2cr@uUiyAM_uFZS;j1+A1cQz_qgnEgI3;p_);sqkW)US7XftG}ds->Kbha$! z4kf5~*f#dk1mV;@9E0KUR@sW}oh+gM>7o=c;+gpwyG#^^K|Pe@W4@*+Pu7-{O3-3_ zE)y?2(5^rq(os}+^9zr0cVUj3onaaW6RV`mI0z&QH3QVYjwAgy#<&eAzq5VX#)xD{7=O(@%K-3HK z7za_^qShB2GECx|Nc9B{!l8*4QV`Qto#GlS-pcu5yBu(<0~j>Jr&V$YO)~?5?1Bkw zZ9Qjtb^7F~Df;p1euEJ=mnt5DA35A00(E(QZWI9P+FE#;jn*i=GH$I>#TmzX#0P_B zipROyBF)n=y`MQ7n*>1;L&*y!#m!vZB?Q<8bB$VSrTi|uCe;<_J=kO{=Fr&Ey7;85+)*@+$@U2SE+?d^tUxi>`l|Dpzj2} zd6+D5L@Sk)-4~kTV^4s~X4kZI z)Wu!@DZ=r){az=XEYo`-P&*?rj^4*)D$gCMkyp2%`V9wN7+GxsmkCG_$;J7%>E?8s-GlX=A4PHp_q|mw1lBX)&*a!yk4=s4epWa2=!Zx(m5tf4K)N%E zmlQ;F`r|=jf!KA1iv+d7U&w6?XZaVls}{}AyQT>_z)f7g%wdqrRlM;>jR?498dO89$XX z?U(q0#f!Ia-x63pZYS;agHrW3z51HGWpy|&_m)Hh?7=V-C|?9#Vuh9aG(6pyv0#T{ z{66)YGI>g7!N3ZgmiTfg|cPb_WL2za}3?%ndp>prf)4ON4X@UuMK zU0EkqYg2ro!-Oq)$&c6Fg2VL(g`-tE{EW5bQ*8(ei}=fm<%#;|a?0aZ>_uR$U4hZJ z&-a@(v3I6oPF^A2%v*?ZfURn!XIJlm6Nc6xR46|%j|Vuu{nffMLC^@(k{^--1i?Lh zW`p;Ya-bc3K-3!aqtYHU6157#X{!K3mww?&cJJxa#?QWO%-bYef|TG9;uu(;ZwPgR zy)XkifuS$I;)M#}c))+eu$c8@y+0<+y9~hJ1C8oB?$Zig1kl+aa8^QiW~M_D{abb~ zJ8s&5Y0N_Wnc=6)iffm9iCq_Kx|p+h%%9UwU4KqKVg8&0*&!VqA_>PfgX8+c@zddi zEpXx)ILRrTj1EB|iJ&q=(D)I?ef=tNx?`ma6OwMV=5XxAR?+M`{2v}=!c?a{71 i+Oa% literal 122155 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�mo5k( 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

    3C=6V&O&cP-jUE5S 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�b)#PCH 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

    Ju6{6 z_{1k+!e9!o?h_H@MZy#l{r!Y#244Hr8K~I(E*A73 zNI%9w9RiBeOa$~VdL3WV{OWT}h3)gW=!ngj#eK}vx$-5zuG4Mn) z@cr66Pc{C#SL zv1^SI&sGWV3r_Z4&y1vVFtml?b1l{Y8-KsMQGF&Qc4>D+xSG6q`#P1-q7=RSR493! z=^P?x;Qn%a6#S-;>ZFW3(-Q;JhohK+SKeqm4Cc7fpO2S_otukwh)ucm_r8fP> zS#pIjKw#vPWG!M?LEa0+300L_J<+|NiG_v#BW0sA18?^h>bW2%XVj zw+Uv!ATiv8UPUoozO+E-HYcW#l3b`cN{eD-!D*_TE`CjBmXL*EzubroRaFwev9mji ztz;4!o&7Fo_h4)3nO7%%_V2pV@89H**!8 zUaW~POizp`X?l`B)sw79Q`>b<@_c~4DR#eU$`M5)16xa9?kUxDf+jSb*k*2-rsGuNcpojDC5~UQ(I%=1Sw8-k>N%t+bGjyND z&R3RNSX&AG)@`nuuPgo||GJM{&kWf}*6^0p#^$NFUf2Aa?5^S?+mJRr1U~t@kHxl5 z6FBoL8x7f$_s8s-_zWB#{t8?0edXxcwi2jG-Zns5>H2Q@i&x6qoZaM+w=Jy(o1qKE zN2K6PbLJPc`GxmW_g?$xW*P<@lQ;fiwuR@40|3;R4PB&Kl{nfMl^~=?GQbJ{cLfP1 z(EU=fh9@+rV7=H)hxGxieE832#-%=&Xc)3JkuN`OkhNV7aEk=Mq;E*5PzMHI^wg-h zeWH9t4`)3v1Apt&XFj?i=1k@jpfJ+ZnNyCxE5Mql0#q_7bU*%B2>Ea<_03e_k zO8BU_1LVDBHNrphmP^~WcmnD4L4^6_5vt?B`?|lSpPs}zLVaf2)%&DxUUtE)Hd6oUaf+o%3&Z;(hcQt z!R~%xX@Se6Q}4$EoPr4!0rXX{8Ens~znjZhF`9N&n=jM-ojJ&OB|AkxjR_y>Oa$As zI=)a5#y_36qXcG=^Ku=2_tH_I%|j@|t^)+-fdP}{iwe#{fbrMF%;!?O!n+X@u4e0R zKQieMPJBwm?*2wV#8~#TjLkMobu{#)4;GK7)sKpX7K4(r+SbY?OYbQQwm`+a#|H9hK|fj1za(-9DM$5XQ=J zuqM!7nLr;DM!u~5aP{N0A^Vn*+~xo>3q?l(Qj;qS*-_lRv<$wl9~!8VA6SpcHSZF*6%PkpG|yibz5e>`hZJI8cP{$mCHM~rS?;xfVbS2OaoxG-+iEx{qy4e0 zhDynztT{j@t7E!!N~hmmy6TB2zr2f8 zKoLTq=^`*Z5m@O6oE8M$5(57UK}Z=-EEEsbjVJSrr$~>dYKf;=il@Db|38BF^M5N@ zF6-P4KqwyD(C`_f55&>^|NE-JWQ9Xna*sd3u^zepFC@Na%?qC@lzp^9^PhcHs*?eL zR<@3PK<;m{9PF!dm;j;g+%ox1I^Kz=KWQ^;MIN92>*$ z`l?>;xI6d2G|8sA7T#WsH*l9M|DMGIm-w43Czt!;Wk8E+Xm^Li!oA0Vym$!X&JORR zy~Fa?$j;6`8*CVBvR${GNMs`^vyneQX0`SjrJ$i7cuKRk78J!?mi&rP+sZ_rxMW~1 zgys!}HZCeuZ9$th#i~FvR;hVCg0pc?BU1JYPd6U-yw#=x4{gZuUl$!4M7jeau`;v| z5S?u>i&y0LL^$bk?QbP1iAO-4H7$pWl4VTZZKu9)u}(@gPT4QGhYC|8Pq%E;HTBW0 z0sE?Cy`Hl^Zac&I+0yIpc5?|%DdD+rGMv1;V5;&mUrK!WwE{%z0&7IP_N%W&&{ySb zZ_=uo_r34(fpPNk;)h7pDZomN3at1ffK^qdmW;!)TE39O4{aCM z2OoOypW0OoFktk2C@R3=0@@=(y6a1olNh0>i#$Y)qzJd8`e||MW7$n{z2gtNUi{_t zNgWlHx@tIV@$F*k97&y`C%8#n6_9U<-C;!SsrYy!zw> z!POl^7SRbG*#hhmhFIdW(uSGyX~>4CW#*k5uX@`*eEKte^I;6KDO^2{e%4NCnL#fF zZu$BgKJJrwp7o?(L1E>|fQlZ?(?Jb_{^G2A?`RU{8Jz#bFVF>aq%K0^xk!gzK7W0# zYPqWS^P^)J%`a2?E*i%b>(m!-N4(>ZE5BsjC7>R9K^!-~Mm$o$GCp0ed^<+)_szt^s=>df$`Y`tf?Htk>TI{delO9DjUWeU*qW;+hYh)##h38RlDKpuMjAgKOY5k{9ZlN93sP)mo{fL4v^xU zMxjbq4Pxof$9LU<^&{}m`4MnJWYon|GVcD6=lyH;2w4Hf^6`kKpaStSmI2oJ50MRh z1;lDYBo7@<0^gl%pn8`Hb5R9HnnPnKe66In8l1fxX|SmNyd8LQZ4qNpUpRAqNhy3g z5GT7?IE#k;RNVAYtkae$4(XDV7;j13lfWA0n-FDM4nj5 zwuhXk$wqB@nOTWx65Ftb_F1ZL(hf!TzJhISa7M`1L+Ti8A(uBwndOjO`Y}17H}d1z zzG}Pd1J(+5hG!`zlCLM$JdqMUC^MPK@w<9x*YaMsGdb&Md%~p4@<9a&`E6UJJLjIN zcVkMB;=TJ%TV=xDKnrTl_xPA?M56qlg=oh~4h zTZuC|HA^T%tTlaJDdv?2mwk5Ie}#CZT*$BaPEKkc=INzbE}~UVzYhd{x#=uxb3Qsohb z-dnKjes;Hv^&ch6`0B`)H1K)+fqqs?M@i%ND}8I_uf*>5bz$kR8%9w%@oSC$7Axs` z#7|CCqocR-San$y2V-JCqbK30M)65M1dEk)TilET080940wm8OKb&&JoOUGLKGEVE ziZK$BY{H!-Lxl3^vk)3e4PR{WZ_E6>^j6oZ(`08x_LFPLex)3|DpO$`qD9>y2CK?| zWcQ79rR(10*rj57vw-`K6aZN@9(t@WA*%4RAx6TXx&-DVHI`PE3WvywY&<}_&Qo*h zNDd-RYBj=>igJ&;=baXfbwIn##5_7s?eAh&dPBuJcA@mv^BakN{Nm$>4yRb5TqcBN z8J}AGc;ES+a-sz5u`b=pwM^Jk6QLT<2vMfyvuOZ3d^&WnoeN7v9zr$V47Q&b-5s7A z-%HVa)}FHoI!{cP)sOt3#8xX`MniEvNeGu`iCXLm^;|jUY=6m%!&%SO?H(~xM#%sv zmWn{Ip|Idwu}$(oQw%lAPH&p?_4XVtL_QK(`6pwa^Mb~Gza4(TCYFsByQn)W@ zbPG(~ZR6pEwQ%}%@YmghJ^+9P(3u1f3esZnZ~}W?pwLAZWbb}W(<;MG%Ht0TUD`B& ziIt2)Fo3&^kmnN4heiIhIY1zdPza0jar1rXq(L_*bm882Lf46t@eLfzLXZ9xy3-2) zfpM@5hNlC4NRfDmb~B+)SqNTti2ZsfS&Pa#|-e1UgS=pS$w9d=A0 z#LFbiBQ1<|D9m|13|ZXY9 z6^!oJi5~Qb9!iTIX^#H17(IR&JxLKWEf_Pa6Ep7-vzQjM+#IvA_-`Wd-oGbwWkI2f z3*obw1%t}}on93}$ao!A7Eg-DG6nxduM8k0@+OwZqUA8`cl7j_}T>rdy&yR0|1TBHnHKS<{GoA z`y{`8L3-UD|oCIE5@nt$Ir@>Gx8wZmV!3$BA$kp49cFzM|jGOMNKkdJN zb(z(&5Oj6^nL3S{Z=dMu+P-;wvxoN8GxczN(+S>6uSCH#j9FS%QAWm zGKblPP`c1djW8--){O|(PDxYghb4O(QOuQCsir*hR*X^~YGgM-dM#6ph5WdqR~)n= zgw#XN&Gr#$pS)ALgyaJHRvoCNEK8FtsDmfrS* zo<{djIeAIIUPLK~gmY zNwp;TA#4hyuxd4s!eCR7JoP(T^+YZo6csQG9K8Q9c)kC=0ma?6q6Gz`=Y5i?JSVtz z5z<|gsw`<5MZ~KIksGD8<*b>B)#R#K7|-CcNTm9#(>&g)wGlhTe@M~-tNEPRc356P z)&70tIYkHlizsf%%bnQ|%HXOXk20#BcC`}bLUOg(wQ`C>+r>O?P4j!Mm4pFX6JbKo zxK>XQfCpsa2U+8@5{4h<`y`A6)aWOS>gV53B@iId&SV9Gl3ZnGLkN;FU95#_v6?mwS`e*FBiU4w+?!hrR|BrlXAYhE0OG45!3 zUP&Pux?(-`2l2&7CKv_xzB_VO+|B+uSMy3xTxVHaJIt|RHeR)5$}iC*U2|T9GLEQ)bHhUjFTKHPjMrT9<3|49aopG{2u9Q zqPZFEvpx2jbtRvuJ7rk!gnn0l@cq%*=;*DN?d0Q>j)h^pxEq_#BxJYWW)Jl{=XWu0 z>(BjT{C$7r*2Sg&?j4PDy592^eQ|NAu+_eGF=~L^knRMuL;c`l#)oSkU;HtU4)6?E z`-6uC!w8HCbc@dec&%C>F801;?WvgG`Nc!65H2*)hFIvXy*SUDf;jM$a3AZ4_s^-) zKmKNn)9_Z})6eRF6Wk44q#A|9xT(SuJUK~8{ONf1;36n$i?qDFi<^&64zs7MOag1IS2Wtf!+b$`-i%Xk z6DBj3wo|#Y%39B2O$%1*OLl56Kl3 zcZgjk&X@Q|1eG3@5T`FBnLK4|9ut2!llbL{j$kq6*v-?&Z+4k1ghKe0d18q&zt8SG zvt3YrGJY1cTD0>bT^*^2lH=mP?_&nr)R~a6B+0w7GZKq$RtY;N$;Is06lYmdrPiJe zCehl3jh(6z8_tG37&DWenpO*og{EO|TgoyUE-1-Za z56Q(=>C?+3NQ$+_=CMkLx1*oGo?f7#L>wsxkCJTc^fx~fk(Rx>MWy#sT{2YE8Kx{b2`s?960FFv^1^~jwbW0$;3ZQ7`)&J_Kb06|$ zv?bSO9%aD+0|!)(-#dC5cVcx`VWQOn0PGhFI);4EgKvpgNb}xG>>o{D>Jam%B|T^q z;kd+#8wC_FI;s>NK>Q{VYUD8hb3USC8?>*P&`|b&_&>JY%*FDo zd$v;@rpNeh_L!*yYKd3z<2eq|Wm-Q2VC(9;{dK~Asm&mEA@!vh1QJCKka^&t(}29G zFNEv?fwS7{XW~;CT^3j6$ZQTg;Ms(SdfJ>E z!5>+y@k1^hL$#KJRdAM*b-UZolu-OY-rP{;FU@2);c1iHRM{8oc!}b&Rvih1AhqQ_ z3dB-|KKhMHO3q({&QO8&{y7^r^0L$pKRK(ZXh)!QtQ4#IF!70T?Odl~da7_FLA1vd z3kaN{$H&E-_orFXz1r$r+*7Q4KM%(z*J|}T<;3l1b7BTGDSU%yJocz%UBy|}!vB>d zYH`fA@3E4s0oP-r+aqCv!O`(NM)7U|BM>-EMT`jgJ?Wq@ueofO%V7we($LrSgR3`m+zzRz^nFyR4i>p?Jz;2$!a(c-5_Z?!H52W zrVJLC4hk44B?Hm*<8%m-EQLvPNV<5a(IuX!$IGP}i8(mv;= zTccofz)&dt{q`70nzX*vuG^3z(32kN48Un~)apReyjaFY6{O+f%L_SL?G6$hsLXsA z3Ly^WFdC;}IVt>@C~%kA9oQX=*INZiQ;Y&N9EMyt?r6W-Cy%?OAl$qo&6$~cY%sGs zeJXI5+4bMLdCI&Ek|xT0FCg`a#Td-&4w30o{p119r)gWQza+HWS^z!io@S`U@b-E* z(>2;gD04{}g91xr^F|a;ta*mCARa>e?gGbDG^KCJW*m&6-wY7Jur^0Xka=z;2tH(^ zPE_p;H;{gg*Dao;Qzd8tOj+zRN9et|+D;=6m7`6!;V8oX+*zfS0=9n;^y?T&);enVv~+)KOZdHn`iSM>a@(M<3d}-YkuF6rotU*a!_=L zthXh03ZG;qc0Gecr*{hy38(gO)3+z|a`I*+^s$Qxr}eX{(WDGKG!af1WOAlS_{b2T zpE^Vr&zU?7&8LYUA+EVWj1u-_rF_Dl%BpG+Tl$0;$3A(Fm@t6EASPcB*(0V<>6H-E zg*;q{8D+71?!6cDpB?6|Oglcz|8c2IpEdl9elaKbQSYMN1ewWiV7A+Sp`h55ov}jF zrSx=3pw0Kf%54>C`&Pjj`K5Y|fP}VY-TnK0omDAD!Ga3ElRV_nw|Tu zeyQ8J-n6xQqydIJ`^<%Y)dy^K_{sZDZC`7@J({7dJ9@lnSaltr65tZ;qoWT`D>woI0eNVZ-HS@3kB^T6HfB7L1S$|dY*uUl4rY@KA zmtBuh^Y48|QK4&%mnz6F7mgjGEte7xkUr$XD3(Y5i1^%BP!D1ZOZ{#!~Gr-0)CUR^ue1NTY}GD%#X+67Htlpc}n6L z{y_XfWzx88<`X|4h+_ohDASd+EI%S)w|DCmh39iAvWY|zG-l`rt0DD=6A8~HEm*ad z`qbv9l2K>O>7l!AcDAY5*61BoUANE(ULrL0n@;7J-DVHClC|_BN;eDM zfhI4>GclYd$t77{lwB#<(yC@o^ld-Q6;xJFsf${2v!rQR5_eMWPa8eoA^fr=4ci@2%gW?)SC*nV}noZbZ7I z8yq^NK|)#(L=he`rmHMrAA=_g!M z*p-c3pt1|^MQaQ%c9yxCd1I=Odt9tj_{u!ZL5yR@JlwVG5P>V*D=@}-Wg};g{Kh~K z>TOSO+FaU4%Eklo9$$TgMY_8O_|0hvOnzYw@(6%Kfg7$}xK?Q#wS@$H+upa^IJ@=~ zt7jj6DhveRkgB$o89UYPm4{hP_(>&e#P~~n+koX_3P4cdV-!mfqdl8wx=#F}`~^9Z z`d&P{lttK^COi29nJCK0JfgCLr_vdq)fq(%024Tl$pUJSE&L zVH#mFC@NUJxrLqm$&C10JgQlZP(9K29S@|Pn!{~NEqPm$W)fo6A>JJu0>ELhs}a+H zotpyyhgy$~IYTg8)1Q3(maXVBB$?;_aOVC}T;}?xxH4X_@&%ZPJCTQhX_LeB!M&Up zGy{CrBB{HYmc})TW7Tr7+l-shx1Cmo0XRfzH<3Vdr~1u2aZB9-ALR1TviJQ6FF#s` z-n2av#GCLaRfBzh{S7u6#kQ|so@^5rEXB37a;W~9{;df~S~u6VnpzQ|O*Mb`bdG%` z%rypX!ksm@qGi~U1=)$+nVv6HBL`zXjK*}Y8cuNB4OZC&AC*%#L*(Ee9?p`zv^`~^ zDLFKf{u~|o#z&$K6cJ4Q6)}>AfH{1no z45mBG7&=?7Z~UmU7#G?Zsld${8v%4g!4RTVaf7$T9${8ZAI+cOj%)87q6g24LdB%2 zgUM~jU<)f0gaKgav=o!vZ(^JnN?}2lYHz zUu#jT&*5V73Smk+#EHMW?SA8Ij(zDkg-F)yMTyVib@bB)sGkSN!kD=U9D;oVgu%m9 zIBEJr43D4U2O7X_rD6-<(Uz^QQK+AGc*_Nzg#Q_J>5t0F7X59pn`g6@sI8Iaf?)_( zx!Bd|JcSaT>I#|{qr~unV|zWt`$j=<0>_~W*uLfu^5Owb=bzbs*0>hn`Cmcfl-}R5 z0-43RSYG%B?FL-?#>4Fpm>?J=Y#b!&6(k-XBv~6IJrN{(as`<3;=zi>!OC92s`0_< zwZWPb!CEK5I#eNg;vojcAx2&y#_=JhwIO#VLM%=~tf)e5#6#~IhuV9EI>d+G2jT*M zk~GEt9UafxC=z_`_nlqwHwxu@0DRRDl7kmgfcRwSprrVzmV{O&W%1iG-l!}`M6jVD#2`Y zQ47e&_}j{J;t~~Cr*rnZ0#;pL+OJOMv&J7l_`;9y_B11wp30dwY$5JG26I_=BJRwXA zoX$B1lo%ev6<%l=)nyRydX2=z+#!^BA7>uQxe|Xj)^R1lAv<4N|H+_=jvPc zF<^+nYb9?r<(cRRznW3?E`r?HVeQmnpBNO41b zKh&^9?KlE?L+w0tq(l`pM$WH_rftZtgr$NkRm8hF!mmh_N?xWwdflv0hg=BxSe}-9 ztyBH*J%y*VCPg=gleR0Dct%!FCXl83_y8# z2j-Y>#SKt#Uk>$X=1^2MYV}K3cHE++pBfo6nuU&7RM1v8*tVI8j+$b1ige!_p7vC8 z@~1eqbPGBcZGN(mB-ZkD9%WcF?~6v~rR0y05`X_ZDM|dpD;2|&;cy|kx;BKuox1io z{kIZhw<-I)`%)h@)pcgvqnDg^+<#kt@68SK`mPejk+bo#S9i{hDk@?c>T8l_q8tzCh6-*~T8|t;JZZPdf%u4U&^!he_s?>huaVY6@^E+_JpO^TyxcI%vb}%F6 zhuX%Xub=JaG@jq-()f1W$o>tAoAcXAvn@YPuYdY+aCEbVocQ5PTQ3OX3GA44;2v0! z>C)gB)+VC!kmUOm#_4Uj^;?l1)a?tHI1_Ta355RF4|*V%i9V0AGTt4 zo^qm_5X3xDC|l-tkV2m!LOF^nc9QEpRzddQhfgTXu|DS25H=>}olry>lEAft)yY`n zlzKdLef7zVscw1QJWm+(v3$@&K`z?)-CP&`aKxN0`9%4sZ_xOOW-kqIobu42uAl$2 zbb?-0)sa!%py%j!nI$+>xkUBuc%$1gNl>UsY3YT;2=_8H)v7{e%LS9%)j4Pd)o*(0 z1tb_OvCr13Gp6XhC_!3tQG0(7qJf5#wa@a%m}u-T4|&8@X5ocMsM_oi#}x&C<)c37 zeTmeIX(F>0suRB@im4wv-e@QM+(gxxhBSKeAp1r`Uf*M9(%>&VY!Yw0wLFVS1J~SF z#k$3{jjBmgMn}F1noyy%V>d}(T)HpGV4P_Mj*awit zr<3)4Q(~>t6){34c30Y{mQCnB54@FeJtRY6&GB znI|MicGgkbU(z5Q(~tvZ7_Jon+?+Y?bKLUf(oe2O=Hhnb>tt~WK9r;^1a8h&1O>)j z>SN`JRfWLHl2H!VXjOkBWv?)=HU8JIZ=t=|#_a`yj`H~MJT;ivP^s#=;m@0MYrFwYFWTGiBKs@K zLxDgg@{c!l9=w`P`)0(^XdZq)1UNd^h6z;v#JuU1AEN-~Z8?L}?xd?y){fBkc<3W$ z(s$g!;its_=FRN6USS^J{Se%_wA{GdP2R1?x6yK|j}*(B%wK291DF?I)5r|6Fjw=K z%qBP~#Rwe>05ETq55PPZd<m#kcfLHb~WUj|5^jH?i$MnGid~*K<;+ zNBc)}K@=r8^pDhHN_c3xAy)4t-pBY->Vs0Y44F#pT&)1ggY7;+aoSA0Oq|W>LY=2O!Z3n;pTb-uICm?vKL`$y#sesUigg<=zxqStUKL)OLBWtSD*`Ou|vK8wxJzeNX z2JU(b4I}_C(K$yo5C9&!7{9{2Z}iyRXv?73 zo6Bn>cE^gCy9NN}rRTQ}0+Eet4rfz@&qt%7bpJWw(yOU&+JS4end^CswG~- z*U=9Xp_lF)0|vJM%=^X%U>PDC*ik8U3yU= zd{d`iOm;8X@^Z@{C8wMj*|U_P563!@xd@VM-CouEv7dq3+qkE3KA-yIq)p{)K`aK1 zVd3lx4-8Dc;1}@~R73gX6BZoe#ex3fY0$1ec!CSh0q!dpKxQ03;T1p?A3#$ZKsOP< za1y{o1(0AMi*X>ES0G1xAXjZ5&qN^KNgzK}kf8X#8VNsA{W;^On-&Z#Dm#n-sPuP? zUks&?GycHtV()+4mSJk0Z`Fov2QvP0TMkpWH}*`uDu1*9xGnS6+JFe&>DPqOYg7Yx zhkqTv7Utdxssw)WNY;qUF|8Jw9lQF;W4;AzyV@7;=gw9E?q?10E8};)#6Tde%j#!Y zsLn4@eH&wj_7{5hL0g%eW@ecsr zF$`^f0(g=C%J|8z(xz+Fd~P~-tr0|%0}$2fVy_rMM#%K}H1LxL zk+-~04c89)0vsJkMh0NB0c9b4Q6L#ftPI?i$pGUQLS+xM^a0}s{Nxb|;2jIl(tpX3 z4eV?I$wzrIw_3xzSh!0{5U3weJTc4A1Q-TJWDXUAvnfcbllr!7UaSD+m8BmYN6^}|p^+sg%8$n#M8vKBy$XeW}r!jTd>Ai@0%rdFS2K4t*VU3W%24vGwbI)2f zV(UDwB^@H2-x~ErW9JU$@y2Er-aQ|eJfg0cof?uBmhJW|>$grFXIwM99R!cEALr23 zxIgZ$cz36ur>4B|@kihA#^TDCmC=ktrN--@PL|*u`ufHCVva zR5)BDe_1$kOW>iv=&+4>(b%|aa?$v7;AL4C{+qs%N#r#b8KrmN zIEj#!@Fls-;!x+!)t|Efj$G_U5e;mlag zlILtX=|;kZ(U%tC%gl;Lk{7FAEtf9h1VPN2a2272A7tVpn96+tT7#BoIO5{iDN2ET z@>a(j#?pig{ehbAt;S%rBG68)pl*5V^Jn7?6rP`h)kv%>4X`DN*xrN&v{_?36qlkG z?Rjn&Wj&6vsug8k`TXK&gAp(8M3f=4|D{Us*OTa4Ij(Hn7wn2(YfC2-cst*`vLUg- z$*Ps*mQ;SNE@!JSVyq~rO!Qh;*p^_~7$(Lx5OEr`NH)9rfvuV7jsLJM_34BpY^?8< zZ=oe~OzlVTkEjSrvZVuj2@=uHsK~X9C2SE11;v#?gkO6mbAot}vIPk;i-(0%Ax~X5 zg(&9roviET5*j8JM6p%E%eWpADyDPMh-=8D3m1tS)(nyHh6i?n59>57nm@+}uw=7t zhkkl0hu|8Xc_&karZx4oYtVb<^Ar z-qHHrz4>KtkQDf6o#R%X`t6>f*zyB($Z4*!&>3mMQG2$KNM95&F`2YLE5FIrR4NSl zj^;2|Rc0MHsp_YpA9CEf?A8y08h&0tvR@r#@qZm<)d0Lh_|&Gk9~PVlcbiPs#qdn7 z{XELzqva@iTNQeB6#P8OUXXEk5U5+C&Je8-yV9JOPVb)S1xQk7ms}lX_tYmdX<$rY zf&6T9eJ2;=RsN_FVf+bST>-=YEN`X03s3o z&U|4@u~C)tku{iqZjiYL!4bYf7l`-MkbO!NjS zg=OMSv3i+F-~(2)RSgNFmnnu#)PjyQ=(n7Uu(&>r2bi95jdfPm+}K3Ag1VZa5IKJtdgIMoW#++wxql~7bB_Rd}4I7@$!YD=> z9AhAJG-ci%{J^Fa%mm-Tl!kBniHMpIr?PYi`CW^6E{(==lcMK(_g=XFvtOGAhf}7fx__#bK`$-Y~#{()Rdc!+sWm20*iE z**(hq`JxVa&Kbz~Eq$`XM5U2jHk|I)Jj9Qb zQ^#& zuDc6SrMJq8z7k|HW^6B)bxlJjm*WgWCG2(VoW1QWiG%Yp5w4I0J0t9o$t7JMz>lSP z3~}b9UI%mKq*+7jjicR}J2_IH{y1>ZL7W-nWk&gV=4B;7svWgc*U8qkGQJwz*UC|j zUB6Y(IhwCgQj8+w)~LufC{VA#jOA8ua2_pCYl$G^QELk|C{*qG9K)m9D?7@g)UQld zq&O^Vz^gbO5mTfvEkDJfGb>2uEWgNQuw}T)jO5eapc&bMZ9~bnIrec4w)KwZ@SJkq z>h;{nMTODu=b>rGK6>v?|9!hAUa*k!L$*9m+=m7Ai=jrcxY)8{itUEd8gi-clbtD^ zGtf@9;l%PH?!_s=E@qUHV8e}lQ#Umsw^%nzsSF>X(wlg+!et8MqZNZn*OT0pR4VF) zE3_MEL@M>gMh`j+^^>Zq%xtHtsx94UML#l%X?nKYdm~+4>-7AsXrBNn-Ld^`?V0Mj zCyWNi-QESL=_iIyGstTT{Ts~08=vw+KScpy)pgpL!NkEXFt5u*~`q)&Rhxu$29y?ceHZaCY4c0W=Y20~_ zC)zmBH9aH!DRa82aj1Wqq3M0MLVv@|xRiO*r^&brncZ2pW|`S9K{sXhmkYK;cQ$NA zn#$JP{AKO-&0=m2AI8o7Sld;&jbb^z8H2%ZjixvSKCOY}i|E`Za_{*;XAJwGw8KN{ zZUkw%Ew|`F>`i%B9kYr;zBoq5lh(ipclKCnzHY#cU9$%}tLnpmua36}*&RY&FNLYi z0o|KCz4)jm3WaKN-6txIsVLKrinWJ2&$Jb7$hvbB35|3OT)M;qTm9NL@`dA~sQa=<|L2K3xcrs#1mv_=kDM{kzjXuNBH=#0)G30D{ zka0;?r>G1ij`V0>V9I;)@nxlMM2LYUt6HrZ4V&JZ)C*fS%1K2%N$9I|;jC*KoIQpS zP~W@ZYHePs=KoIZbLcB*&m}z-B$mTAYRt0ck)-<<}cA-Wv8tP|q&1y8<^} z*4+KdooJBGMw#>S7B=R7;tc+(Se3XIwI>1*bzmhaXRPJ)PV?qffcPlWHNty#i z*;|61dm5yZX~gc}ml8!Vd8^4W8WD8JW1c(YVN+2YC)36Pw(;^2p%keROND`ybjaLC??Clsjauf3j`=U~q zHvt}KFIrTM2nfeTBhA{0kq|}R_fNQ!?gSV(Ruf}@{GRU3XU>eXV>sVZTI(U@ee5A% z!TTNisNgp7i@1ti4E5lrP5 zWWrOU*jp+Gl6&+$np=D2BOu27QZ>n-s*|X8Gz;9s$B@KJXyB4AzQ-^D<@) zM-=Pjr3S9YMox|7=0U+mfEgpM{1~0LF0(6_S~wov?h^ay5M27k&4} zq?pxEnfeh>T0uGvGr5#I$yj}9h8_&vuJg=p33tqSA;tO{^Y{_24jV?RDKkdo#+`Wr zYH!AcIzWu&9!n&43uQ zc|CF^#!Bh28xTt%pBu|x-=eY(6_uL}5!@Kd6+iS6)Mb-{05isSWyW?k#WU=|j`^)^ zfEi;E@!^JPM-M3I9k8g;aI0ap4#^E2WN>4F?drYj05g`tzBX6&vL>1<%@r_X>o^lW zM(xE1y=I%^cgb0EDkW5IwK^F?ix zbw_)#@;2|{c|TjC=07bnkX4I&BE7^rf4c6ToaSQ_J@y6=V^lJS8j`JF7KhHp+kR|R zsAz0HVmzNoRoTydfNA}7_(S)>jPZ-?En34*{GzJ=%3<#R zW)3?EWchRV&a$t$K%5MHqLu`ht)%$ds&E{M!2Knv*6XVAzl*@hBGoEZRMP(<#B%Uo z4prj(Cd4`tZ9oz44E`d-2(a)ue1QGR{}5u%8^5Z;K~Eg3eb0Y>ZCil3BK}K=)d1Jc z=L?NLXDcPr0aNGTO2wakH9Sw^PuTa^eeG(tQntZVcx|%QZNt;F;c#;nSkLLI11#Kh z$#WnAHv=r?~&R6&vxs zBHP>Fc=MVWvJAeFR{DPd#I~+3mH!opW$F9@#Ih~^0AiUs{|Uqr0T844BZzrkf!I;i zA3#htmP@nX!{30|S8toiQ$s~|Qg@c%A|>HH5t zEa^88!~P?P$@~$-xc&pgaQ-QXt^EbWLVto-z~6wF{BI!U`5TB?{Z}An_0K>|={FGT z=KseacIy|2J^#lbrVD@=&05KeK|Mf-LB;_g_F{uGso7LuSvICF-nH0~hkyK+5Cgej z079%D5MnQf0UkD_Vu)=G5Mr=sS0}1KJvbo5oB<&g$<;^k?sr10G>^mF z`yFdBTW3KCAjA#u?JCc6cxtJ~iY3)qfUdKJ6^3V<=>yNpNOOK37kHPnL9vJ7GylD! z87NObCK$b_Oe3EzftiQ}{q&)$t}4h5isyymwC{YGlmxvO|A|`cF*Hv@^}B5s57Vc6 zYypW9@6b5rz20k{3b~uRI^=Mee&Tklbgonco#iVIzKGCFak~J^6_|8F!1|E#*T`E! z_39aZVR>fE_x0Mc)zMYU)M#J>*AznQ8|XW*IPh#g;i7{}SIYHVF6R-Tr@e;PL^UFk zmlohSU0mI6`4alsnnCdH;zL--x%z;*W!6;OR&`b~WDChLHT{7TmO!?!{*nwSu+XGFE`qDn*PtVmfgvU96S!>!TyWXPl6mYVS#1b|x1Rzxb<@dg`MEIG>B6 zV|oebX)FZLwR$qGYel0i^&!LDjK;Q5e8V4WZ1#-()s|VhZoS8`3W#UV1W|lDO46@@ z3mc|=!P5mrQ#8c@oV9w5#3!05oIC>!v__#TIhYg#7aV*xgKq-+j4*gK(`cqf4y%(V zW;#T-lHsXk-`(FtA z`!?*q2Vqw>jQ1beuv@>`FxY?3hPC};8y5PT4HNliHf-jn4dVxF7~bF5u-kvMVPy|~ zvtbecl?|)-&4#J`X2b6MjSZt_^XUA|hD{3mvSIcSf5(Ou{ndtD|Dz4V`-2V3`wtry z`Oj^bg!peZ?DIddVKpwlw_%%9{|y`V>^B=W`zLIe)*ozG&OftZynqc8`-2Uu{jY79 zl-u9hFgmgSrVaDn_|1j^o!P(GurL3>h8@rT9UHbC_y0#5_O1hr2BiOA48H67o8de? z=FV_Btjf1)71_T{j|hF$hzCm^(WzJF0>gO-F1r)b?13zu4E1Cn9yUUW=GDprlr%?6 ztbpM>jj=18Wo1LflwLSp1H{9cyhS%Vs~)cYv|*M(9;4-#KfhtrMVqI8{j(6NKSouG zzVZevzLZ^a&d8>)2Mm`fh1cA9An!ef+m z>x9$tr{kB(0bA0mjKD1vgaB@#0~Jp55jv8G;bUcPz;NE21paF&VTvdLkTS3({iK2l z9)uYRjOw+|_uoA9eofW1VBwEWfo+1zt;!^a&q4LCh=(asI4(s2@i1UZS`_%ih2knL zW?_Oy61Wa+}q`aiz z%JWSKL*$E;-A4ew)1uT7g%N{O(M8T*>Z6M}b`zsZ*uYPtOZ`a9qRWh~Nkx}43D8DY zFvy)pRl4XpMOCR=YeZF(Jm!w7Aqv2Ys>jOH0FOO61>Q7izLB+dywUwhBt>z96}U}> zLw$mmg~P7b=tV|`^~|G2YD|5L#_C*~ipEu~c?Botqv?w$7vGr|Ppy_WmG@A!gqP0n zHOv;z@(f=J^%L!*iV`Lm7U@eCu)usmUk;fGW4_o4%oTh+m2WOty3}K+UIyFBR?n-s zeJ)#lBOx36O)RLnZcfR`V&_YC&TF5xBD4JZmEty;noYbeKdLqBU9ISCjSXk2o$k*O z=bIn9%*%I!Nl=wL5(@Lu`~DL1l?QURE&Cg8CYDu4@7)*$4yPICYfemp=7moA3sBN$ zIY}t7^Nj|7nTx8`rp8NsZ${qBRfOf;3rcc`1p&OYE%p0}*bQ_~tpE{QrVcuB5gdkr zK+86(ap8C}G<)K}H;YUr(($~w*+jvE3SSNsy~v=k;UV{ethY6dd1+R(y}Ns@*YB#5 zQF``<7V29cqTmza%%M6jT7+z}ksK6^+2PNh1ljCnasBzF{!QXj4_#{XnTZiu_! zzvQQ{Kd|e>6*@_x>TK^WjKqHg84ZQSJzHP~OUSGEX-AX3w`II$a#N>y0C_X>?lr?a zRXtPatCCMkR3_BDsvpW@s@<0_9A0*t-Pen2IaogNqSiE-8;JKuU*XrCl-K_8CLZOw zf}T#TY-gk&Kd!j4l{u;E5a#MKLPsSQx7R1+82L5ltMh^ffXxTzxid>?JhV%Y1_z_0c>(7?aAZn*P&h!{i4s?B<8~x{roHAn`PQ zB2X(Drrv0EeN{eUQO$H*eIV)+d8!d7BF+6BaK=pIf0mELno~Fa-~(gA1GVZsff}c< zc$P^ze%E41N^CabVkgHou!d^D18UPs(~9!J=r$%@khBUZ&ds~py`-Zlp%v2J-yrzc z%>q!tOqI3a_p#BVC!37it0mVql>%Ow^kv(t!>ZIwu4%*z4tkI=e=KrW;+M#rQ!8Ss zC^jmS;@V8W?22#ANFh&@DL~u4yfMP22#C(h z+7NFJj1*JIVPI@M1dMnjh6@KTD!x}FanWL;qmBG=$Yv+WZ8L;B2^2z0nH;tqPa8-H z7lXCYnaZ>@pOKOkObFRwz@M0v=Pp6BK|~(;FwFBW)rnS2`aaIuF8Cn&ah8ut*UFtL?|u72x5GUHn_QKAmcKs3m5B9&f9x^dvBStu+`8^vl9 z`WlG^4TLyRbFh4KeNF!WDbatoUv<|_1C&fFTjkCwVBu;@v0yKWSolmkC>Qtg*_RCd z#0KtkcRjvKd!&Ppm>n|+uI;*}uFyH4{G&Bv`@%M$kP~dbg_AEtz-G*CH^$}dQD}(9 z2AS|;A@JfrGNM^5Mtns}-Q0D+2!vbY)NyoJ@T(<;+vh4uv5r)iyNnquA*iOtk^>NV za*@k3K1}T|d~-xRix^-sBH7q#Q&0 zPLGWdeEA>~z3~f~iMZc2XXJB);#ZtB@rPl_kCg^rHs%Mw>k+gNv>mT}R@4rR&{Hb% zseU&YB^vfo`+VbN?M$J-jh;`wMQq~lrKOiuu4vJt6SSPmtoopt{iBB)XFozvT5B# z`^8L#)^XWP(}uUo$GK^P<5e9{=EHIjhNn3Q*BGv4f6K?20?v*}2ZE42YDFV1F?M_& zvS(N>y+ZlU`?FB%z7<#|MltoY?>WQawA{G@o<~->SPqEjh2&dTSvZ;OZh z=k!0-pH*bRpYSQ>qCI5We>#Gm4CzpVp=zR+6fph5>JsXhX|ObY?$tH!4e(93)(w?SX#ggVx0 zzSyNeb8shfY6GS^YHss94+KAbMYglQffXL8G*ip_>FQ3Y92!UfWl=Q(raJz`WM(u0 zTr3qimysZRrRA7k(Xl%cb`S;ng)HP%bS%zR87EuECfj5s!92UpUgu%NDVqgxCTCWR z55&se2>ZY!OD7PBj-~nT<>jPbzm}i#&QY-582OA@nKM1;hr6Q=@b6Pzc0%Y8@C*^X zubs1wT-Pe-9J#MmqKu;8)~qNtECBXWklY##*&_w&EtnKM>TS-3g=$?9NFKFbi;+Ur z{vq-rrD0h^UZrtmWRc>u>8fzhhUQ!>9m`g)Kdy!3x&2bp>h@OB;g8; zX~W9lTMD!uO4`GcB2~Ai6Gf`c#0(F+%-v|KYixtes%!5dl0EV{?nZ~_tylNmYc78|ZbK$&5)5!RFN>kgQt#;$wyxDBi=PxzSfWR0+R(5_Z zqeb>`v)5T{Z{N16sbUv_lC?XpPzU9WwTz8!dz=Q{28%p_C9v|_-~|JtP~vjMhB{7^ z?mZyh30S8cKQC>i5qjUa+-eN5593{R?2cIZ@+zGt*O5l}n@^+{CkNbbX!hV%iL{L* z>-Yfw%MznxP88+{2K7{=dkOnu73xKFy|gb`qrvo&FKdElUXs;d9~1*lK2NG z&M?gyt4^~HJ-R2HiDHpZQWqqS@j2?N()q$hU4x^A&$gemq`4~5QL9BCi$Ep_TTAOsXg&I%nY@qw zPVA*4s@Kl~@#2(hUfAwMf52WvY%0m>&+Hg>NIIdpg94+Z?n`Ad4r23g`K#=h11AUl zC5MU(7cvskk;%l$$wp95fdsN+{NZ_;_pZpSG8@Q_sjF}erGBqu2fAwa(}3(4dKmZx z3F%dKEJOS-PbZwq0LYHLgDB<6m#u4;(vTH}vgQ6hI~J91I?iSI5u>Bffgo3H!L+~V z#hUhS*)eIg9<&Dp53GJ=$MRsiPCEFnCQ>;lI9}U@Td)Gzu@fAD(4VEsiO=dlb}Zq$ z4LHpt?FB`7CP9y*5@IrqAIOe*1KF{K$tjd15FRVzv0%lWPW=}9uBqs|oe5f2%9dhb zIQ{GRuRwNe;;4=pen)rBeJtYEasDXAsE3kmK$G*Y>=+@?s+1nD2C`!*E9l5wwkPZx z^kGlw@jyrAqUw}DcI+M5opydCM3eWuw-l{;fV*Q26$S|Y)O8{AVw|18^OnkK52-+u zhk*UV@7S0;#>BaCm8Tf$p--dPA;Bl?*H_eDYSYn_L9811<&clD^g*F~hD`9~Qd1y1 z#vyQt%3q`SsYVW@;Qu}PhV}}o8wiiVOCA7AzLOnz7PxP116Q-ZQ?vPY-byi8hf-co z5Wq8bd#eUp1#DTbTsFTxG}$~(af%aZzpu`>Nh?5-*20xunaM8n?V3M)(0!#0Hh_c+ z;AM@(Zs`@ILN;Pcr$&p`pkR9-JH}tx9lf^Y0%XTNuTxb5*|FljLNe>?CoDaDZU%4r zq8+sB#2ujJ>X=Or_-yWfs1C5Ih*Zed?LpPjEjcSBe#>T=N)rfDK~-$c_zc zSZw!E`7$ol1KF{BjE#T;AUoD#@2P)LFgRFj%saEoHAUh`dvsJkzU1JY^ zoZs33WXCuReYjQML=W8yNx0?6x>YlAom!6ip%c`f=NUz9P`fMSS(*xf{PecK>OkCzjU$S*^Tc_gRnAy(OlzSOTFgRzGgyO zGmTeEz0zJc?$iZeL78~|m*y9=SN}}xsgt4IrD7EXg)Uz$^%{v=!3T#juEsKI57xki zfG%qq^SCu~rOP%)JXL<`GKPKNmkat=_zpjH*>zU@)`6=m+?6g%(UJ6s_@&E!c)teA zNcz3jZEiZB&ZAUFUw!eD^`m2rHJ)>!SURWp;owYzchzK+@Pckcspy>fXtY)Rg7Rx1eoIh@vb zlWS=?Ncl?>u$td`!fJ9*gu%Du=ZOgpwpuHB#+d<-Gtw+M>vcqSoT(&DPLdB7Rjy1_ zJ|a&lod%IFQ6`yC!2cdqA6v*bSRY-)^CdC5m}^%uzJvqZ5L3!VA{AZ6a_wnUIkSLS zTm^;PIkJ*Wmo};jYJDDAP5js_wuUgkEH4xGvNy60C%quD{&v}`$Oh^6PLYjhgBp=d z84KKz%^JJCkBZ)fCOWoeL7(Nn&ttxm(1JVNvD3QbNwb?nP+}@zP89caSL4L~ZDLo8 zGd_R&;(h5d2c|b%t{U_uZwq=GKFkz+x|T|3+_MWfv(Kzw@DuyJ!LwZb9Z=uG!ER>X zxB(6B*}`FR0ebF{K|Ps*(NUXOf`XTnT6d zwv56gJp1^L@tI_1rhY{I)WbH5o%Pq=&as>9Uo3<-U#-bL*eLJfyO?4`OO4-F+n24_ z>!Q`B+EWo~sW=eHiJ&~t)^BMz#FMi01$NJFRvn2wEfGBJe#Izx;+FnozJK$Wq99!oW+4ShhE0|N7jHy|^R=8%D@@VEUTsi8MXK=jXIb z)>|mJI45%o#&g>W>lx&U6x-e-xZrD>*s*iB6QSCM#v&6T&jH$vUUQK{m~y`lF3MrV|?=_1!1HU+0u9X zIx#^)SN}J`HY}vZsxqF$QIobyic4N9O3m5`PINm$`coA>=nx_jX~V@nsia@*8kH~2 z%A-3eds|&F7MW?s_jppqY%4lO0NtL!V^Tvmg&1+VZ`T|-3A1yKitk^t6Am$vvS-js zc>6s`=-lpB?p>kR6W{GI!n^xi5)p4L6;}y5sMR$h29j9~Rz=M`wY-j8lHR|~lFg$= zDL(ZhO1x1B?16Ij4m{guM+d>c!O;UD%m(TBA>S0}agm|ot^h|tPtG;<9#Z7XxRy8Nc?GDVuQVjyx$9;S2A4(fP@1N@u| z*NyEN$(F3jVabi-Ce;%K?>Vqa_T)A0Z$egS77=96`L_wF&W%?Zqp_Z}!wMjxyul zL#>$jP73T(?}Gwh6lI`V9v#`~i2=-z%Dl1%I?#G}N2w9hwTZ$9aWs$slxB4?(Zfw` zXIkA^_1N+P$7ro5dxjlsD;m!9A=vi4cSwY_avw7nbf#$-u6c&l1H1GVWw;VRS(FFg*PU86vHZmr^6s= zEi%_!^iDQNF}jp9yqCMbbOF0BLz!ekP`1JwzDww-3G(W zm)>G~i_#=-Yg8&)cfXDS4P3Um zKAJHgQuH93qTkg^nX!qxE78G9_%P0F&u)r|DP7tVCyu*qDIj+ z(Tqs|)54goQBMipvuN8_5?sCZFDue{-U?nCv%*8G97fRZ6Ki@`Gfb3Pk@l<=xJ(Z( zZB^=jPL5WMdn%5hgMi%Uje^XOmmI`?Y9fNo61`3v@jrxnW66Up*c&*{WyO_n`7A?j zuzq2;_JYu9C0S~})p6eAb7F#ReF<#^i8|lMk&X#oi zFNyNfvpr?trqbF*ACM!9-SXj}hwnN?$!t1ld(IRn9XHlAZO`tXj`agMvI(h2S2?op zej0>Kjr~IN7pwZ5XCaLE`^hEj-?c5(fHvi`e`k2?_hT7TfMs-#@Zs|5hNY{vD7p{2s^_eg|ZSzXvku!2b_`4093?WWvDx z5`>SjjQl0YG*9mWf-EfyaV5xNEk(PtbSz@2SK>`#z3p`z{p##3h>>fVNKXh8Ajp=e zvvm9bL6++M)iEdSI?4Tk)w77pqsUF zI+6Fa3be+!G=W+rd4Wbnu>rS6O*XPXy@7CyTfN1Zyilzz!hlDu%L2)x+&eZ}sMIe@ z&Z{)6Y*3^)E{o(*#6tHBs#~yv~WIT9TWZSkRc8#m$O(p)v(pGvRWTdGg93HKA#D zC5^T-;Y$5pQ^1mmkso%N{8p>{X~{&pudBTFY;{U~R$ccfZbtO8$n`tN_slHmYU-ad zqL9Zuz74cq2L1(xwM9X|UP}{DtE?RZESbdk6FhV8jyQc!anq!>w-U>4=hAg8aDP76 zZe)Eh zyFn+@m%Dh_I6S;z(e$BDpQv$mS|hosZ#G9-cJE8j51F}Tgum>;S_7Zh?zXK*Q~734 zOS9dv+33xYQw{SAquVzG-vgrr;~pe8_w|V0wdR7CSjkq3uv7NUD972*oPW zUNNKdKqS}<>RZ!(iNhbNlW9iWC#J+^MB=N3ZcSlss7N77Vs1|Mm2#6(xtLBjM+P=DMYol?i*=trF<79ZuT?>flDyhaN+(+zSNU+M8y^;VT`GhX%B4jPi$ZhieyyhqM+FG^Q2i>1z3-H=N#Ci~ek=j3>g z>Ic{8iuPsRy4xD&#n8}}c3VDgYIRZzsDD%YxBzv$CNJS|LPM}UzhjN20-GD+nG;(} zJ`VYVz}>`|Oe=vJoX@Ti!>?8=t;OX`)JUok!D}OIy`N6C819qCmw#Fn4lqV(Z_5ma z99*!=+EUXz`VkDwi@|k>^9O?1+|!9X925dR=!{a0uoHsdF@e#8;Wh>t@@pJAiaolK zdU|P2*Vb_GTZjGvWVSw#fXIUkhRg0-Ps{b+=7*|bW2>i9rBU6GgE2Akhv~%uKqh#I z1_5*Fyyhay`w^TkSGMlp(}TbSeijJx27ws(iE|PU3$^U-=(MYk`6UJy?aqY79UYKj z0ROp$wv(C(TP!A**tg(*>z(GemjO=U!gt$ zQ)Cwd1t=CH>>f4VRN8A%kr)D8dCJoGQCt@E#PA|L1t#Kd)X->p;pNMR*Ak~cYI%xi z_N-|&CQh__QPLP?tf0x}i>Sc)~h3H-fo= z*&+;K@*T>P5#OG+?5feINsG?p-o-cRY8NXVNqq7I)uVhZAja_7LRP5+o4a#QvUT+8 z%t&`8pRPa@YXw}WCIQ{$=mlZnj4ifM*1)KTT1GO&QMlypP{S@1yjK8Km8uu?|FMfj zOmL45FIW@jq+Cayca10OjI+=gC*QCyk%wfVgUt~nkI+o`{=<`uv9&N+2ky9lM9NRFCQm4COO7oaG*zXsUcCwf*Sn#xAZH|jh zFNyMR&Ds&5ck<2Ark@&;hJ!lnaS8`KC-3EMHUzRbmnTic z!8}ZE!DOwF#bO~Rih*og&1ctet@JW$&XIBr0dlB zqmGzC^(=5Qi}YrCt^1&|-uK*PxjCF&S~~YOZh$8{rG1x=$n=J}Dx3eH|BYwe#+!?} zZ*87@;~w1HD`1bUQ3R+0c*%MY?Ej5>Gxgg~dZFwif6X`FzdL#D(C)zT79RhX0$JC8 zaa;++F}R8fh+{8+x55A8IJOJ0#qyq`l&wg?X=4`C>CCLVETSfXV*%-p5QL;l3%LPKMU0ASXTu zL(~F%Qwg#(tTSMZr;>nWO7rvAI4$(PuPORL?q5?(QJl?^E$5NDQe=cBX+Z{Nft{K1 z=zZqM)CcZ`nNA2iaXC)7JO#O-%$9|QQCFY0%6>F)6l7v0|mbWu|Y8`3NeTkkpm3^^(ql7Y@VXc{c z<#8qGOVMd5l>?Dk;RI&Q1)iDr`Oyex%p&VFD&@jkdWlbj_fBTYg}&W~vIu>TQmTMm zJV~@`uYR*z{O>%hkJq>tsJ^|2+%_b`VJEPqe7 z-YjR#-F{}vh+mWoAdY#;IO@~1kknLgCaXL%2TWEqCEUL#7eE}-6@27XTP>}gP+Ka? zOTu2JEUoRVEN}k$@01H5j)jw+^qAeHy9}DfFPslpFYwiLy|PPk?z78FzYuaQyldrb z@qY2qRm*?+!7s`M5XX#{fJaMfUCxPkc^z((!0g1P;bduY&hgmqd#+oQ-g2xvkwN6{ zJLaWJ&7DP$>fJSKvQ=6pswiA|D@!^KufAElTJ$t*A<5(&>Bke~Gw8$1V|I}&uCqPdUA?7mFBN~2LJ+v&5i zQugZ^Dd6lUmV1&EAGCbBK`qoMhm(bu&hW^b*EvL1zxyO>@^qE2Y4%QrV5lbh{I#ih z;}1LpP!33#jZPTDV*>6Mz(5WYRuoal<^rmo=tE-9tP~^AP4i&jVsU;3NuLt2d|FnY zU$im!eaveI4e8-jl;bHa`+=m~%diKJsVM0@jeHCnk-)yMJLx23OO%pJX0TCv3t?0x z3OQGJ#VCO#*`Mj<9{{H>qD?T!trM04z+|7QItYPFH7+c1>)Ky2>I_ZGLjfcik(pe? ziI3(*vpP1a2^a)nP&j%3?La67R_}~*O$~zxLX~>u1C+d{yCGSPSIm=l{T=YNA27L`*DYl#h zNbAXBYGCvF-JakhZJh1D_I+xYnrPtHjc*+_zr{Osd!m$1Ci);Nj1AZet=3Mtaj?Sa##ehSvw^p{K! zw#PZc!attpS2*n!7BxRE5U;Z;7xf`X&j+LMKQ$>|SWtZ3S^fM|84LomW@QYVMG!!% z>LA58sWJI1dp|10tt?KUVg8x>lTWi*hH|Wc~ki&c8lveE?2Cay>u=2f9kIx=w-&aJVYNfPpc} zic4YrqX=JmeGp*=t5|NG%ZTaw)l6BEk={Rr9}2posAMrE>nm+ivABRJWPtFb)~rX8;r$KPD+uD0&3Zus0=@#4f#fFavQKfZ_bW-Ccu z;CtT2>#n=UKZZM$&vL!<|DcVz{@;jWo&WVLMuc{s2$GZ6A4&XApbP0h68<-&N7a8; z`)ka{Ql29EoJ#&t?bqdj6piG{{I2$Y%ma#OF-^vx@X}w^{`&o{GHrgK+TZoN+HV@F zwmDz_>N~vJZ>L*lbB#_e(`Y}_LH6yzFRN%G@MIbzY1|ps54fJbl(C+eL=&QjuE;dk z?sR9F29bNgiDM?p{sg~>W0Iz>I=>2JEI^Q?tmy~gcLLhFZ&G2zV4g7&>|9>y} zRkQ$J8~X*ixa@@!#}xh`jtTrGjzNAA$4uq_1YOX`1H`dSoj*Yrk5vKUn2EfH8srb+ z81Zl7m=yrJxDN+i?4Hue$8W-kV~%jp#bF)2T=pkuiELi8%C2|cmu6^j2%9ODH*7xw=Ey4X(wHkKm*aV-Atpo>;G=%VZ|#Ie2KpogA>P21O84NbD~9Mj)c8}6URbne-X##<0B4xe-pH{|&mx`3K_Ip=c4mLy26@5MHq(O(7?oIL7)H(8X~tKpfkWn3$I<1&Cuj zaN-#2KZ7oKs~F{fqHAQLy3hu&1E7mUfH-FPub_+1nQ-FR*FkehJk2bCI2Q2FpbM?c zKZ#?q0O(>K*jVEKXB$h&KQ@+hf8AKt#vh=}(yX6_{*5^H9!?xv==#@XIL7z~ajf(Y;#g}OBkvy@OVU3!mK^A5x(Md^BTbKg5yzSV;+XrN z8_Vcl8_Od_1hS<>Y94?%_UupM7%e~?Bm3*d@*@8iaV*i#DiI)#6~Z@`e7}fek^i)@ z)B%WNDFAWosd7Z-AH=a^$@A9T(Z6mim3|S&cJf0OsQ;Nb*7mO(OAe(!iDR7TU6TJu z99x?HkBMU>|3Dlg{DV05*NtWNKWr@L8Q{b*7C3Rtg8@z)gKsRK{bghM7vdO?>feZC z*BXB#j$Qw+iDNzgNE~yo{2OuXZyU?_zi%u@|JYcv{3ebS{!fWxvjuH>Lsf?#4bbk4$$L2Wtw)vw>~8yg6npX2i-fas6+pi}Bm3!4u?8Ucr3JWwhFLl< zN@WVLvD_L*X4Jn8G4w&2C{iv(VVXDFnJxuNW4iV1mecUk*!!9K{#p3O@)oyT_5q?A zM1QQ+U2L6#1v6v?eiTDqB?uLOAH{k#U*DZ+h<*U!14ps!17}by2IuoU4f&4SEh78X zc1mmDDAvy^O1bj-4*$P7h!JpW0)4R@U}FjN#o`ry_r*YuQ0n00G*=`edn* z=XLS}FJDM;H~w9`)D>|-vehnOA-``)d=YQ#gZSd7xmPJAtX0iPrB8s;SX>#?WLn&N zhSjTNU}M>w2y86VV=Jj~JY%bfsCbjB3D~X^YM??Sv9-90*D-YvL+zyc`wk?F4!o=IVL&VV%mwcthE$g{?KOm?gTsySDOW#pCx$D>Vqe5d1)CO#K;98q=JeWhCEQefrgFfd!hP)UM| znIP8GgRXoNM*JBv$p;`-5$7LkXyw*Wx@!)WljzY*>`jrPYb6Je#e zM(BwePnd6G!oPois2<`b%utUV9!8a?G&2X`AfJqw##@I@x{2_RL!vNx*Kap8#4fvz zLXW47S1#Se1>5CfToKnPzBNeDa8&#F)*7RrY4VH8^+vvWzH!B*DJ=I%A=VS=F(vz; z1Z~nutS0m;J+|eLVs%`?jxx~XN0Zd}6qocl{wp)Erqug1nbdT;fl99_sQW2A1?~AJ zzHgI^4##wImB=P#WawZk{WJZk04eqsiBTJIg_ODd0bdjXU}-PN+JT!k3D=K5H`_(5@1+* zNArYEAFEVAHcrje)>PW)jQh-`vS^jA><)l|C8CyTa!u{y^Ymo zGhMdIid@hSMli~nUz?UoF$x6L7!AW`5W%!2^uR^|hVft!yOX+$ik81~Mp%Ct(!p=SvEWHZ`8SXz!JR zsEw$jbuMC)x_*#6gDJl-T*78C9i(@WOq3>F8#8Nqteu60fF5R?Y{30gf?NXi9K$p( z#^7#el(Te7 zRY$N~vIzy9t4ih(k`W7hzeEhQeHDp}TYzM*NtgAeHc{p#L8T#orcf<15w+7O{&`N0 zcu<71J8u}aipz&od{hLp8`F3DJe{<}^~rgTHc52pgI#FTQL5eMYMvitGElnW_4j-+ zuIqAA+R^LTu?}T;O&94cof-p`LC@$ZKjG4M>g=G~^^IJ^%WC71ZeOBeQm*GG0bcZw1K9j~>U%Su^h9^x zY~IrfJCP-$X_vu$nw*w&v;iyL5gk3&H03$*J?= z4l*hSis|`O5pa0aAObYR8BAvYW_LK-s@3#KC$a~j(zSxIk9ZAYUlR1OgdRufqi#GN z2Ms0nok(^6Tz};4KCa!rhrFa5UoV$|z_+qpVm<|ibP&w;2%H-fwrSZ!dw$*%;7^yo zNhdw>Y58UbMlb3-sMr8??g2w8eSw5Dipvg4{U0uGZ@)+O{)yms`TzeY_V3iih)Cp! zI;nj6qroVc{}RO>F3#bYfPkmVfxksDviW%6O2!@fH~%^Mb1S?;xnjVEv@}%5s9Zw% z-s86o$pR~kkAdU;FWkk;rcax|L}2qb{I!|#+veGC+y&Sh`Wttl$#6cv1(#hudjvdG z`peQG+E|dwHrE=CWeEWk*sj{W*~;;^^-ayra2pb5=KHidxDBa)D7n<8VjRVf&^aV1-#N*t zS$<8_Ff0C=q~o&lHQC@lmR%NV!=E()*(DlC(c>I=*3HM8AmU^C!=HTbh8TH1DI z(EY&eyl@Vl?YvlYcFVVkW5`{3ZYO9Apa|Q*&LYqIfmX=WnLH&$In{S*v86fPS4CwZ zOY~NT%_V6J3T^24`|>>q*QI8CxSmYAa^ok^mon2sD({VFyAxh&Ei}&@NG(@G zZKc*rRBZLP-X_?p@1@PyihqlPeiQp{r1DMsLMwqqUe(PCqFH1E>sSX_mU`%J7z#*gXb@SD1kY;85SiF9S1E1^7fFP;yj(uq7; z75)o6{WYFCyaNq*S-gWSB;-5`9e1QZjjPgCTR-(&f8m~Q%PaFZkzv7pcG|?T?0Fim zoz*rxL*c@wxttAcUsxjH5NP>iS8;Qd@F-KjaBEmsVD@{@UAz8qkFMb7Yft7jogY2g zcLNuKX-nhYyNJ5r9~`hsGJ7kmgk^-pWY{GCgfGs_GE!AP_l2nfBRGE+8DFDoAOONh zJF|dV*wD4>HDSbvq=!*;-kshzVau*!cptezr1R{Eo_=E$^Un05rv@ojpVMRoveO`X zjbBCoLUa)ipHuAUF^<0ahQak*zu2a#BE2G#20`|$=+8(T7jtSO;=W{Yy}BwULz6{9 zcFq^4AFBeG7T=QdH;AL2PeyqsP?9HdN!YYahPfupQGHI4fIOLEbjUZNWY-w@AnHh; zY$HLl!zBq4z>P_yHm0+jlO#<7nqyFtdo2Smu(PI|i}N=anl7ZK*y9qZdrirm=|$9| zrb4Qq2F$e8k_uzE{yhmsPy5`YRXA!A`$xW#zZ;Ym5r|K#&7gT+LoAD-_bPdQ-;}eD zSPt<`e8$HaBOWnsxmQo{!n&ZV++qasBxCV02fgOpXH9o<-#+3ceP=4zIkc?y78lD2 z!z>c=x*YRkIL*ZpGZF1-R4~1b3ng@36GgLP4>6mGKvJdUd@(Q2{s!v%qxbC#WrnGj zMku*3Di8>r6`DHryx`e;OF0LR>72QQ=d3rOh(G}?7qhNN`0=hn)B|Y21J&Yo6HBcO z4+KPwvl5Nb619e*kMFZ!lyU&3-xpUcJ3+N9zX}f_z>xt3ilPXC4BU$no^75#E2sG3 z1DkmOZM+{?0Xr^L0F|cJoaci<_Ao7kGCf%2`&<{N4`7~Ag;w^qfN?ihd9x0;_)FELB9C#r=Ejqe_f@sbq!xNR(vPb6F zMetwBL*8lhvbxkilBhBf0vUdN!$l`}K3IrqZ<0gZL@RAuZ3e;c0rm8%?mw0Rn>a-uev`RNqKpLo)d_XzPEoj!c1K?u=7){pEk-#fvr%DqC zYw?|)lS;Xq(ubMmD_rQK43f_E&z=>V`1_16oPlE18K;fR->vl9HdbXL94BnguXfRQ z=0jIrhC)HLxd(2>us1%p06uo?PT>7Lay|%pg7z0VD((^bwG*uI4Em>nlB0O`-{*4D zx866;_{t*s2GwvPpV{(CzY`^&2D{HSiqZvLpPPkrT$-n3@haL4l{mF};ebG*Pds15Cmikso zK15IsOb)x)+u8xu$q%=jw|u+#5KO_m&T@A#Zb!bMovnP|4YcE21435u`5E8{+Z%uK z`g*-X{%Xs^OVRs+lL0*7{VML?wITg=RQd1w&o%ywc1w8upNQo58)p>oruZ*;jvTHk zdJ#?aV(9OAt{I-^z#f$?*O}{N1uV3He6n=AiGTo*ewU*f6L36-va^8F;D`qTbhY#y(p*y z?3R!=B3Q)p&7wRZj0*6VgOtpkA=o35r*ARJe?yreNYG~w1 zI^sp|Ug-vf8lWStC@duz75t#^z9`<=d~HL1xtX!|(n$rxIUu=}HQxuQ(gk5nIGC>q z(#SBGZSsrcf;b*5A-%EfO~|8xGtpAaO6WnNFL&t?u>t@lT9#EBNbz1m8a>>gSyGac zb;qMpQdzyrP+U300DWIFpGJsOX*O?J393aWKdX?9kk5dj~QBa zBmv&wx-w!$&?om3M^RT7Rh50LHQmAC> zbk#TyPMWj}J)PV1rxVYH4Lhh$=L&N(?LSLdFFpON8(iShV$i3nq>?;y||TZs;uO-iwC!r>o_6;RU58sdfZd=VGtCn~x&>vFk6BCC8I~c*ftgeGB!>K0VoO7=1HyY`xchaWeg; z>Gti z%)~=R~sfd%Nq*f3lDYw>?Do|5Q-)u5P5^0mpYr9|W7Lq!yY{s1WSY=44szWVIX;h!A9+Hi19S_5!}B~;FZS&_Ckt_`X2qb}@wb!tMcmQBlX<=g z43Bi*NyuM`g`_#XV|BJpUARkA0WGl1jLcdy*zZ$L?OB=ijhXWD z$tS?2S?)Gks&_Fo+kSF}gy3GPHH{AKy6Ua;7aM&Cp#;QIIc&vnm!?nRkk)y1(hZQ@ zND>C_2iCxj%M@UY4|;!RKjYuouck7RS*@HF`suEjpqQqLS-vlh!T5LhGxkYj#vV9t zto#-JeELxW8-)$aU-=>|tMsJ0OT z8K2#9(dnO~RifIP<>WWr(OTQqSSVolKzcSbG0kMa1q_(jKvq02e$dxPg;wO@+N5Bnb9RQ6N^kFP4>3`GYM}8g=Y5N) zK%q6P;C>#g>j+53wLdZL)Y~bE`B0ULF3f$9sm8kjTe@mZAh@d{DDfvaze-p6o)y-n z{m{;%G)M($;MKbVo}J+cuCBaGAGbamJzq-DN}0=0SLW-u;EHAjJoC`LXI>fVR9cS* z$6PHe5^W*&9v$R&l;0f-wQMV5el9X`HmK-j;l6Aj8SebVJLRK zt7lI7V7z-w7|U1Cd4oTU2>MPi$@lf0KS&ElZxfh&uCa+ZeYxaQ#&2u^)B#sWIpjCPwx0GOy#^Bd;!EY{ueNgfKYhuk`5s(;& zW$=?8#l3$$={*2WdejoJPyfzI+XUEU{-f!S0{=Ye<>In?Jcq@Cncu=sdO!r!DpbSr z0bWHbEq+Hp;VRYPEa%@5(6F1If%7*fjfT$AX89Kyl|Lb9`|N@ zlYVtZyW-=16AT3=2Xmh=5f>Fyeb9lEo`x7%T@Q#!1`wRf9Gp!Wk_OSel_U2+S_=UL z=Sra_sqX;6d0av_i0kO95pdEYQnUt7uy&&JpwOEL^KEi$#EK9M635A)6mM9{ivM_s zfw-?QAE#s%y5>r;#M+6e6-4|nncR?eGZin6*eBJZJ~SuIrkS4Bn+@~GU)Eu)*xVBZ zg|Y`kw@**!=_Smyox6aa27Mc$RA`YGBW2zLQUEntSb=fFFslG2QFp4ebM%p(M`_fzPlWkpj~j0$bdSEc%piFwPSAp}UNI_h%_ zD}^awYg#+1w6PirQT2RZJHlXnV3P4PU88A6ZV#^+_oZi^=>9qMTk~!hM@8!yiVKVU z_2vwV$l(~WT|4j19!pm?F;jfE3may953`UB1QQVg#%;isY>oTC~fK9$^{IARHxLwZR!eYz+F^3EO!cJK>B2xXtCM_+zJ*=0{>A z)I6S(Cg8ATR!w6V%cg#m%`QFb(SJdDE>yRqAPORU^Z8_sq-LpVfue`3dhyY;ZuJtI zdT)*dY405^>x7_#SDlp~uZmmqCQ4KT7IVny`k32n2A5UvGnJ;b`1SBfqzr5__pxm0 ztog6#vE|%rDS2{so4Kh`F?-0t_dO=6jgfeT8VD0Sr|LWp+4rgtE2a+-ah4N~^C-XJ zp7cIjzMk(M|M_!r`a8MTr`i4uzSWN`OE<^M>SXP!>)2U52aD$3v*%k4<90tb3M-lo z_A3PLu6OOQyhVn>Gw)8WYji+(N`jtPl}`8g$gUO(J5lDN9noIvBKf-tqCYwE#gv&t z!kX%6xEc4xC;fur%qhGVIKhJ4yNp)VAUvE8VP%1?-s7L^9_obzK4#LpZ#U45@xVUl zfU4(93SO;eY|*7VTzK8aDtJX)9R2U zMi<2he$hOPhRc=*TCtHcekry6Im=Q6ZWcooUm)4u; zP5sr>KvP1ETqf~L&pU049elm{u_VWtd=%#$sQw$JBoS(}N4}wi##u@U(Iy30?>@6y z8R4YG_L@=DX^LB;D5W%P&|tPTNjnDNrWz=3YGoATy9mo?ycH?DohcT5C5)35ny^K_ zQ+x+?-NeoA*f8frMxS`?_bfW)=NdLfGrl*1T=ufcHYM@AoTqqv4r;Fj3$v71R90{9 z+O&l_3|%0WJRpD5fBPXnk3v|x^1H2wbv|8m{DcqD1=xu@0uEX-NgtF7aYi>--L;h7 z7C?(!MN5oq=H;_LC>LJ@?9k;l%N0I&p1Yb*0*%y?k9V9X0e`ik?c4nre+Vh-&$l9* zoL8tXh%3V|w34oypR8URd(Wb}$Faks*4~a=ad*1Mb&#gocAHo!hGfHylP=R}HdBS9 zVgq@+0EG`HgsPa#yxx8u(L1NjM3%B3WSFY}h7<1)hAfpA;y$eZv^PThGR z*8|H5Ti4-*FIVRcoi_()NWu%5&}7>FQAtPVYMo&lbTBNG01$Cj!*?GgMZ+FN7&$AQ&k%Jh!2-{Cmcba1Hi!qXW6QaKqkO zs}5kt8l%XBKqj25ajd$S+(TmK5lPHWKxgj`Ht_9JfZcTiL)Ih`J_KKCYYjp7SBcJ! z=DFM4J)q9-k=%8fnNS~PS-A*Pdiy2Zk*0QC0@RWyOf3*=8g0DV&|A+q%ejnCoxGNb zp2Udyn9(bfr^vpU`a0V`yWMFAAHqt#m8`OQJw6o~vVg`g@oXfy*^n#CoRO;yRLp0Q z5I;kc{BdnSn7p(@dQvsn%<&e(o3(y#&`QMli7#{q(nec zjZ|k#;KT2+c~V;nJMPks?XTu?!ayAYl88*{2SfQk2JZ&<9dxAGtI4da*5?e|E-kCD!Qk;*&iF?06G zn@L3wcBPlVHvPR$Ut6jGQH_Ap;DDF80WuZ=a*gCHbN(NIxLN7*;aA+0PGPtY^Brp- z(Af?g#SOxzBQm`VeCrov976w}MnIwvKdz7fjgTO>kdTy+u*Q&xxsWLB%a9nN&^WHp z1dY%nx6qW7(6q+TjJeRP%g`L6u(w=c`5IvbZec|!VI_@WWpiQWmtmDe;niH>wHo2| zZsCn7;mwWVt#je+m*Jg65#3x7y&4f8+#&{u{;j-upNJBeRYc38%>2vAkzkQ1A2=}T zqlm`*+2$jYQrY|f0*nc5IW7DH0?~`K#YK0kp z_~{29V*6jS3Kp3rr&#!_a0R^0$4G$6b+pnQ4(IZ6TfxQh_uO>gZN3~uy|Miid-%z* z^a+>N_Yc4F<|5D09^4p=hkgwJlg4lYPsludTa!ERQ3o)q zSV1$o!)|T!y!^hM96dY6-*$b`1Wr-NhZa5~u@D$T@}xwuzqr zF7JSvpM~?+l>n#*@Ky0nh#3Tux@@Z$qf2eChENY7y;aIcELsa=%uG=UWBNe1F7^c7 zY#zv)mlNoS6EMOEAa7C&wb6_9f><$&H)6zS&KBYn#^$J%Q*D&o%#^;?(bM|dJ;dM2aJyAE2f1$U(7tBHg!O8A-CELlKv0f= zmu%AAZTC>y%kBJ+V$GEAQl6L>hoox3MOgt1yG0*r9;%0-_b{FrEktuorRmhPmpbcFu6j_>5d8Bu8C z6gRP#!5E&YG{^3NI_TlGs2ocX;svmppd;=pe<1RVcrd^a+nO{;m#Y&uND|NJ*u`>@ ze`5Hog7lR>dwjxoF&fU$9uR#a-^>^hPFwOM0hMgx6qId=O-$ByCuSO=c;jTFrtbAj zUvs(TOq$=gAaMrEc{Jv;sdroXyg>~X;kOF?MWf@p_c6z<*!_@&(AYpJ<;p;rioe(eeIBsuSKEEu~@wE2LkW#9A{($ejmeMzt2zv7$z)_8;O6?G!s@$l?+ zZyICe=cgCXe#XlCK$;+yVU&mtWDw8xo-}YEK^q#4{2NG9M9vcfLV}zX-(!)L0VdQA zpIC?wBwqrPqdJxl2`c~*s9RA>z+NKc>gZ5Rl82B$RIzeN2db-g!w}*7Zr?~uM(H#kT z9+6mrnS4a&9X{17rPNP&1=hWm%NAigNpg{e#An6I+wMxaa+7Z%h$UJfJbdW{s)g%L z44Nrd(nT)QC2G$Z)GE-YXdj-vRaxA86M^M}y#VyXijv1{c~fw(%_ntdbF1&z5o@{cvvuU@je3>TZfQfTlz zd#MWFmp}p=KVYFdMr-TjGP%-?^HbOx0{fC8E4q(uPZX-9p@%4aEy7?s9ict^Zvd5e zTeiYucKFMAb3+>~B*e|@>2mf=GVR5I3}eOwT;PZ;~W(Ot+*d-@LD68wkADLYm5hI@bnm_ z!;*(53Z0lF^df{Hj1)|VX}&Os&X2oMpw}30Sf=wF!*p!Kv?e~6iA2G2mi7UMqlro4 z8c=H-@yPURDVv%5sxOD@yMpHV_22g9970Y(cf(VolB-wDwl!^dJ?nD@LsAD(w^Ytm2 z5Ov@Lt&GNd3W_cNObYFAR$fx?$XA^>j0i^S+{PyL_+owx@_%8tV<%#|y5l0*H%xZ; z#Ju$}$ubr~NVr|H0qJwpI|>O@7p&v_7=yJf8V(hutW|}12ty(({j{v%{vP+vAEbUZ^2e)=6cIIZd2qEK{&vweB%PbRPSx zi~Zo4(ROwzDQbIc_JY?|OAO?aoe%D1zcgnW-BNs=Gt@d(4THcgq6GuLbqS!Y@*m>& z)|eb)>fbLve;=3Cpv&I9%Y#a8Yl^M2(BC`Cqw%!kY{J@$AzwapT5LQ60aY68m@NS| z;ai{c3_8E(a|&#I&v86qGr-pO3lc$*@s9FeN0NM~M z2%W%XJ6DTn{>5xCb&`Z?$bO^+@Jf#R4v3x9MMmMzKhec&kPf&dMe?0D;zpexvvy(# z5Li-+!>WUQtzK~KzW|tX%0B2zQH$gw?GapB3yfIFvrTo82vi!q2FUndstGA+X#J2C2@%r7=Dc+i==mN#!uE-l zN(+8U?~`V{&#WLQ{UIt&>q)(*ZPT${&|Xs%*3a@5VPaCngdxqAm~J7V4A$-fNm91H z08Pw<5Bv_Tke&f&`q=(wu`=<4DY;DXL(Wy0@x#nre2@Wf2x;sHM0U`=CoP$@b`qD_3`>% zWwJ-7*3O%`lDe8%Ec0FHI(P8T%p-=}U6{{%F1J;$#C~03U$rGZj9J5e^hRqrAPI}J ztBh?d=Bux=0GpW2-OG!OdksNN!g=~-O*?qb@6^ac>7j^olM>%h zH=o<5$ICH4)?O?LeEFtMcBisIA}F}>CD(5Eye#j~tM6hV({Ps){ampZhN^TQ2L*%( zzN+v9+iMG3Uw*4`rP;rAfMrPzw?dpB;6-F<)PyYi->uMKSOCL zpizmJq~JF0nTu#m+cP;)$tJjHAbMxU>O(?Th>B5 zyqAlXE74adcI>DxgF0TmT~AW45cm#l4Slk)FEl1ritcp|WSU5P>Z4+mTQ8N^mqtva@|aPbIK?cB zEiM0N0d@M?Sk2(GjHQUr{7nOQa-N&h?sq17uzQX2lmsg2LnG@P&Y$I3?mvHg#`Ia} z(VT*iTtYm$>SI1+mq|32=eekf+ak}-CtZ?M@^)XFOL5{UhDV)JGe>SoXL2i7^g6|{ zJL}7lX(?VFsJsyr+mcM>R!KgG7QXNrl*Le2$);g%dKi> zhVRXYzoSg?>SKKZevYx2wff)#RlPUP@x=IhT7@Z}>M~SwoD;uje|A)_JH>zdvd>Cy zmP@?_MJ?NNbj?6AO{4JVM~}$FH6#89pNFJ4^6C1D%=%q4+Fb}L0zdAVSn_D4zfr5r zMJ_Y#IMLXBuNG0L`qJ`-d*S%5kD$5^*~&IEO{=z+<8?*k#!LDZ?b7>%jeQ>(B#7s= zXK4t_QWAGwje6)zqcp_LvJcqFrY*hq;H+^V({YXD)k_ptFEPab=ESe9cVzpiZ8_1} zLs@O9+(x}{Pu1p?WQ+dZ=0)gT+x~0r`7fz(bsF7}FCJ3@G9yu!hy$x4wanzLOCK17 zN}$MEwwhz#NJl{+6%zc^$QEUej!M86tTwVn&~n+w8pRd?sMB!odOyIr9ORw$@yM+= z)lezXTZmRtOoRXmp+rnv^2i40HH;EQ9u^ypYnm&QN~g*Z8Ep<%r**RZQm0LAJWb~Y zwNp!_^xLe4m;JcwHIPhd4tNU$=1#T^^f@{{`%Qs`{@)lvz63rzv55eJu-st3?N2kB z<3h!-X3|F%zc7SjwT_sSF)t_{fRf0=3W>3--bQ$^CuXsN2#!(^YdoM-6SZXkhEQ_6 zsjHMc>^;TLT?zSS_J-Xf`R0u657gnK!1cE5h6zC*<%hP>{l%Jhqz9q0p6mpbHHiR) za6rLe0yy4QUjxV6m|<;^A1+m1j<$J4+LIs{XNg0fK{gbm-sUpmOYgIR8__Z{N`P8r zOJ)c7*9Q#5*ISr)~&Nl4d@-T#_);~}g+SjizL;Ppo7 z-Of``Idi-_+5#Ig*HJ8Tw|NBZ01{#oeswtRE6_+QEsv|zxVKz<&N52RNfcTY&6`wK zyp_)s3iYFX>%O$n4;LPKhfQnV$1BUr*vQ$ul5UM6K_YeAV*T7~mLvdR2t9WPseC`G zzBwwa%p7hkX;D6Wg4c{4tV4XrTORTz6*;5rfZE3sxZa*+iI6e`RdC3VvLp`VwLMOt zm8(XLu}c!YJx&Av92bmnOJCQa9GB{xjeK}Dh$nrfY|5PBiEsCXjyUV!McpYuA$$vZ!^q)WIXl>_Oh%*_JBz6Pm@o$-Q{49 zxR={6f8Y4lsxsCQH;_!hgWQ>fU?mufF!Oorw14CVoAm&=-kzFmg1>S=pq-wBg!tF4 zK2SxU;{qS~SReW>AG8&p#$!)BI+n$$m*wF9!QNX%Rr&YrzW1a%CykT{lTIlCC!x~P z4bmk_C|#4Dba$6@Hv-ZrDIF4mfYJy82K$Ep`>c1ZHP#q=k7w_(kDinJcpl7yD?Z=r z2if}R%xD5Uw5ETs4iSaFL?!lX*#xdI$!M|cTAvZab}czBp@c=G%T{=8DfSflF zTMZzG`+Ck(<92b8!ToXbfMzBS6Sbfg=OBta@ati;5d;9iM1_KcJrqnCy~SUk2Hg5ZSi`y&fWWau0r!O5{Sx3NS#D5O2?u5u@-^daR%(Hac$F8?ZWGa2LZ7n`zHyu7hK}E5x$kv33E)V{ z7V?j~k-H>O!Mc>Qmyw+TQJ>^E{%{hDR(` zS}aa$EZ$-)!Bs2~RUC?!R#Umb;7SG-q z&$$@SeHG73mB25WAgGrhifK7 z5gtPAee=$l$N92CRU8BR+UzjewT?6q^cWr+LQ9d{x$PO^-;Q78? z2%@wqnRyC%ySoueF;oO*xfgw4zUy6LhO|fm&w*0$5&q!};aFdyM9gO9A_ZNs`T?OW z*j6m@!Gd`xZQoPyGMmm~D^A{dZYxo#3PewzVGun?G9+1CLf3n}xScBOoA!VJwGjR_ zojcuw`HlTRT3&`k58F-_&Jrj-^_IeRazKVlDrXL2SK=E$*9yW6V3zA0c7cQ-VzkSQ z3k6lm5{fddFna-6+EUx%LbJiV!o=hFT{1w znY%cuu!&r{YMM!M;qu)~FJIP@G`8hO5#IY=QTGw&J76yF_$_ zx6faGKcWATY5Qctr={<)1N{Et2}4P7v-)<()UWmjDqh)UNm2xT$KmqM>W#+HuNMa_(w)G%1EPr3 z?`(`thBe{U?n)EhoH@rBy7=Tm<_?W?XOe(C$t zfb@NdwCF&snPr198RPU*39Gmmz^1%TS<*3?qTq1S*gR>yf zSi_NM&-c(Gc2l-dMT|Ge(X^S|Z26LAo)hURi_BbkizGRvCV+%$90ygH@+*~r%$HKd zD+4+ou)|f;EVjOy&7_fglDu~ORKOsfw|k>hY?|P6vttb|p*k2`nY3Sz;Pt9690O&_uj(VxCQH@z;D^ z9y>|sJKLFEBa5ZhkFSEBL0YRT|#Y1}?EU$%TSJE2XC-#fb2;u?h=XH^_oH~N#5+knU^=Cm9GqSky zgH;J-9uHs1NJL1?wUISYX}waCf3LZCGd|NKTzFt?>h*knX{I@0`#?`*S$`vcw#Dkn zp@|F4<82}G#%JiyA&o^Jf({Kk6gAtEwcAbaAE_gM>973N z>UjL6YGVsm__A}lL%Q(D{y2$M@Ir>jT ztmmt=G;Q2Fe$8m8he4mx`{>+JZ{e50fvawhJ|mx|=0|m09m;k*=!wp4%8VC0AcTPv z?O^yNcV8Fwc>Fkc2TYlNE5M#eo<5Hkhq9pd4@>zwN2;xmvgULFy5n`p%^$b9y;?`X zlsU27ev2jLYS=p3IbBAB0}boRjS-&e$J*PN*A9V(&o}UT-Z0$b;cd*UMe|DrjG3!#L6#2Fa5l51aNq)?dj zVd6$%mVhY^icH%U*Z_FqEGM4LW;k$jF6*1=VOzjnomQh-gHm8v&IwKU;KFx=+`!#;p3jd+$oHeTf6we>~eI$ zhk;SGbxlGxpi9T+t5R#blH?I|YB1g8;t{`eHrXW|FdEpFC5p z5lj>xYkNAAw^dKg2b#$+klqCD-p`5s*=xNBk+kS0TsX%*P&FW5$d1m2iqRdoxq#e1 z_D=W;Ar>Zrn)sgWKp#*BLQewjJquLg3xt^lVj}`O;(R5rc$VTF>mU$<5*JWco47IG z>T06bsI~r0o51~D=+g!JFF*a~q=R2L1#b>=8t4XpFbzaAftZyLp_@Pmusp%Ec}X22 z*+PV)%F+Il?6nPtqdV~%8;o#si1cGsMIo8VyH}Yn8j@Fh4+^L8ULqN9;d9Mve|4>AyT;yoUy$Ct;@9`YSU0N`1 ze(N69;tVv3P%ML??gDb7h5U_wT0H;cn7EP4ZOML2)D3_L~(3+^Un5c4< zs7jTjE}EpNm!$2Hq??wc-{%rc+LDcV{>bl=l1B&y||sqC$zgvb|3|AX%;$)ay?v zf7tHk>|&SgdIwQ2vF1lSrG8NmeK_o|9dCt0SCnK7&L8AzQ}hClHSO5m<-KdmRHjI! zMiiG>-Q2PhGj`uA0ovg2Rd|8`$WH8gzC?L;kD;Ox4Q4`8GdQPUFI&;301_Rt7WVbS z+%)#}6XY%jwTlE8QuR&W6u5yA-{7v+R_gxO=q#09RkBm*Vq4Nj1EW=~TRr7^m0zD? z)Vx0+c*rYzuI*VZjfp#3(~bV&qNbOaM#xE(;#Xp=H1?x5M`@Y~D8KT32kkl~*5xFA zC64BqI(V4V`nN%>j`sL5&JFL>arP71vU!rR`)X5?;RpVhw2yYnAK}=_)-6ZB*XRk%Za$H??-&0KHTC+@ zW)=s1!;e5R9^P{n^a-!CB*_=T7utb5jrMag+LC>wQG+r+5x$^|uF3jPf4T92hq%~B znh$|rQ}CSk>PP+1F_fY!+{S_F@(XDNLZ|ER0RiGT;{_TYMjKl8H;qHD^&7MMk0Tx) z+h0T=(O(3Y;a&3tk^IUH)W9?X|Wry*#Cm5(9Ju)8_-6`=`K0PHO`o_o97Ey91eTQM-~al zzfs^<5pW}|wE}ANdKD!F64o@S`0$;(9G#EU4o1IHAP9v^#?BC3@X1+=uS3O1`&YJ)A`^X9pSSVn(aS^qrvRyT@& zWRg*?vZPYY^rh858)tE{I6S3c_MV-`FwI=pk6>2rJNWCsy9 zBQ9>~4SvGsV%ly-_K32#xQHi6Z(oq&S@NLqp8YG!kES#?^FxpezF_}$3ub|oVMF3m z50^|G_8i?|H5Pt*TX74{9m)}dxYN^yOhXRBPorAIZz9H4EQRRPZbog@-o&hmTM153 zeAK#KN-%*+oO!@}56`m0NOtp~*F7|y5#T0Oc|K>`l(a{K8nXmcfwX^`zUfR8=7WOj ze*Gzzpt0nc@;9{{I72FiLRny)T~5O_YxN;sC6Q{P3m*gj!0ol%dYSRB>v_l}0&b<8 zXh;*hAj9XX7W*e%cj9g-!Q!85xrK#sSAazyYG*(*L3$#Tg>7E(7XNN3!D3*$TFo84 zd@PiNiB<;yE9tO(ZiS8`i9~Nw%e6WwxA(#7khf3XeMX~1;%<%|OH#oZQ09dJ5|u>c zjo0RrS`mAq*ERqroZs{BB}{tqI6f54fPNz^oGYP{n24*tg(lo$Z-Z`|3(r`K<(q4M z#uyMkXn;mq)Yx3s@hFcXW0y!k%$_s$&;qp!B_R*dfoTTh^m?J8Q0X)ynOrh&WWPV# z^ZWp*IggtEHu0DZUTH!{C81$5|DZ;!$)7vcq%?C9aQ9N(KZG{p1|PlGYiRQ~ImwM2dbQmDj#)iuwwG8L^y}d061&S{vbRtwy*dVPi;_ zXVC=z0C+o|>)${ZMzdKOj>hsw=@Lw+j0I*`5R;E5&t@Ktp!U$Af8roaTKA)48D0Cm z&HDFuitGy!tjYTCrklUVFMSypk?(I#u4DtY+>DP@um0A*4E|eO@`7cDb-aZV|3-h+ zSO9lY@=~7nFR;sSRU_=K7Uw62NeU4mLu>KjazgZ*a-wy)a!Mgk7O2ixz399AN}D}V zx;e2Ke4eTKV^DJ5lOtoeB%$5)e^1Pb#^A{|1$Yj4Wp=;i7sjEladiIah~f{h>-s!r z40KB&5tH*V*a+k%4(b`C{Rpnx@cG?GQqS}IGpKsw?LeZQIe1Xmcm-(B;6{CF{ll zdTogNFC#wt1M{chMxcs^M>L*>^u~oWsYCKX5kDD;%^US1FREuD3g;xMlQR01RP=~V zG`4^AI8*ez6eQy7t%$e26Y|p@6 zlpJ4=gU~h>YcH0Jif*>VdOv_;TKAS2>7cP?H7|@UnM(Ir8tYGywyu_^+<6~OYv+?@m@^vy-Gn)r3Q$m2I-}Sc%&lJQo~zQ zBNtPnuTo>F(&9za67|xOJYZ0_fEu1u~SVl{qM|3YpwZE1|681^Zqw8vO5Vub=;g8{`4;q-}nt)sNlfgcz0H3 z(yP#)PPV08`_EY&msFjlgcuc3?>{2m1zY%a2!#0Jc0HbVg90_a@B9*6FTE4-?515I z{V3GWZ(s7+NlN13nfu)eiue-TkO6T^MAQs;RwvZ%SsMZ&wE{)_qgPQ7W!|;%)%RdD zu5ur5h=Er4c3I(r=J-m}o4tklmnm}h>JuTnP2gGGb6=C6{c@w_FX)Z>0fy91^*PU9 zxQ$(+e*3=Wa4mWL`!_m_!QyX{WgozaSF#@9NtQaRhX+RE`fPaXy=Fuz;8~s4d68xa zcvi=xM#tUw2|TO2)Cd#C=j*~@AAp%Fa)!v>V$L?ixTusH6eb|%yd~3U>GCC3jzv^8 zPT^kZR)Q3N7%35I39y}{rcXZasOu_fj)y8zyX|6}EV}8T=Vbdeoi@KTG2MQEDlbC> zn-9Qo{@TirB|KcblkgtHS3q!AQ#Ca@sM>wrSIQ3J0Nx1h2MvoEh` zk(IPTe()i;A>O!^_+b=AvaS)%W^c#$NuEdK z^*!(_`}k>3zNolQhElKMW=J6th)J1x!?#^>H?j|(yl5tCk~M#(y)# zgWA8OdcCrKO%J}XxCTme#$n%wpWo{^{j{d#Ej3S1=iRfymvenqp!1^f(jB^$O zq3PP@6S&?su9)u8y@#Ur-x*dUpYqZFk!oP1VMk&J=`w5^m+78c8+t9tKWh!@xK^;CrZRy5y4 zvz3sb-travGDYy)Mi5RN6PuxT-<0`EE=)Dr#_uB&%>+zFt}QqouVHHzXcnU$cS=zC zv2~?+)f#44XW7YdpYpjawd!GivMh9a%|vg6#yLJ2F1ST^G&GXt@fsa97sAH3Go<=@ z3em%iL^ldh{NqyXA#)$ao#}E^Z@M64xX|F;)Lh4Sw7{R_ERe5#R1)F>pfx!qOJ-omKt^X|ycI;clA z-2dg+H3?})zYE9tDaS-ow{Xng?P3*DS`*+C!CUw$Bw%E4eKmZh+lKKlkPSsMFJGvA z`5w2I2fN9h6J?Q9FuUJL#D;6Kh~0gHDjBf~GYuS_fz?XK5c8Ea(Wc)WR!lKy`&fV8OCj9zUSw|sV2(6m z9ed@kNWyw~eC_|@Bicv%3@u`mAnIAK{oM_JmI`#kHH%yel<0xkpV&7)^G^R9|Frns zG4*iU+_`+|jnz6D@)zbp^q&e3hR+2Hk4_3u{C0X}Z$_-WrFZ;zAc%f{pmffMcgink z$`_RwC0ECfQwHU7(7Tj^j9}NH+}U3>&Y$1Zf6$5R{e^$InQvw-fPINzX7GpPqF(;= zsbeLBxx4W~0yX&paTZ8~khJa6K*k`60A*kfW5C8w2nW(kgp6s`rw5HSi*Nme4P*kCj)GE*B*wzv?~A+lGyB#xAR zQ;eMJgCtC_;L=)7X)Kf<&2Q+syzZyiN$!&QVg-d<25QD3Id1p@Lt*#OYdCQngGto@ zicqKI1*$Z6z~v|8zGD#94kQ%J^Vfr4ijZZchC`jg69&W8YQxz!!m)vfe&UcuUG9lf zw>AhQgwhAh^XGL$Z}WT;7gWBm@=YKEM%D>?YamBFg5@|yNj6au++D}{QG~7vf+r(UO+Y)|%12 zn9+Ha(M6TnBbwQ#mpR~(Ih2+;(wg~kF?0MXbCN1+S~P1$FKf;tYauObsg(ZTnAjlw zSD-HgCgA@&Kc0B!1?Zn8Xa4ue;}2`)Ou00?RJDKc;|f|Ppe&EwoZ&T*p1oaJyQg?z z8w8EZvN(?I^&1%$r@@z`Kum`7U~_Dl?Ct>r8glW4f>;O)3Z6W+I?qs{ zrV3t&m>{+%a%Cd4MNJVQV<=)VAV1#tJ)r2hgZ7_WejI6D@b2y4)WtZo97#gw-X!Bjn{v6Pl8_H@gH&HED)198Z$%04IG2~ z_~Yx{^;<8HYxcL}*)$mF@9Oy5K}x`twfO#AZO_}4HO)%iE}|$cBpB!u^ivwsg@A!R zUsQ?qU7#<|uCBWP^5eQ{k#Z+iU!ujiEqVbB!FT4jfquB7JHG8!{6nVFWH8VV%TJJF zTkSC=i4=i>K4T9r0=gTF`8AEAEi^I3rs*m--6(zUYbHvMM*=BoAABbpvcxv+ z?~TF!0v8o#x~>wyqW?KaShQrfV43flH9uBcA*+x<8H|OKUB&Lbqp#iFlfAV8r6uoh z;2LF3pbM}dyNQLDm$FRGKpOIIZNPB)_tGY5w6bUU>_OkF-(QG*ukI#sv9B7Y#^|mt zsZ-zr+M|QJ8q3N1U!k+S@_HpJ5~67@y%sWB**Ft`yHq--j#1sbiu3SDW}9R#S>`9k zY<0)^+(q>V2&)jUD(25bN9ilyE%0m+-f*l$dZy`QLou3oVocLJhxp=EszD z%tgZ|wO(U3%9)SBG$CGNB=fz_nN zKM$8q2ySMZ^z9E1gg?8GN~V3rXH-et#N~^gT+>I-ZrR}1=#2kjYWlZj`?ala><(J+ z$ILfzqoP-vnZ;;gTIHeHVtSQ?P_GeRPi9e>`VXH4Uf1HzcrCPHMzzT{;_~(Z93Lgb zJK8Z{G@P0I$$oT#Dr@@Zd?6IFyE^K|!~28c&mrHXs@IXKHKefm?=^)zk4Tr#GK<7j z#iy9YKO@h6fa`u0M}EH&#a7ohe@dWG2L_4 zJYZyjKrZx{@$!@6a|Y-Y@JNp@%&y#XpS}E;J*+ zFAjkGfQR|7(9%;ZwoB_D#0J@akx}S{$ayMGXxd@02B;6+d{A19LE z-`4qoq|{gEXDZugz))%)5DY&xsuM(BE|7l=P$Eo0-7Vzy2zzgKJ)TwMm_Wd1Wyr{DO9hTxS~5Tv}yBVcmf5q*O@&NuB^1tI{L4*{sc%fUbA0jug&Z zcKExpQ_hzLUy#~x-_vp*adz=@&*9p`@fa5$6K2IdZB6a?Y9Ie{_%NC74gSTO!^H9@ z#G@4bVsDuq2Lu?gI)5zvs$3_7T50+qUUBeqQl-cFKDt(f+6SDNhGB0LVNn{r`5SGG z2A?8MG1Kyo=VL;}x?KBmE;KsJW`&kTT5ArhV)N_LQ!Qz|m5OnT2HSP@Srr}oieZl^ zMvcdviOvsPh}l;5P7_Ndlekqe%cggH1Hz_Z3{ z=8=_|af;HL%5XOh3KN%23XsG(GMIfii?%~i^w5YND&(?pTJ^Ji9Q}UqSePk+ozOyb7bw;qw{jRkb;x<$GoS!11LTT!~uGnOjGrkmUwZc3Sh-AB*0FgX75@`TK42 zQdj5Y<}Zy@Wn>qmr7lzxS1nWq(HFsylZImD13QCXOADPB*l0cbId7L4Yv`(_J6B1a zfAy^t@R6Y)>$osfG45{V(t(@W}#vcZ7C~aQgGO@(9ETh#*E1g;UBCURpp;j+b*1cqc=cI`T&}enVgeae?fQz!hxlSD ziQ=zRt|ucZvB?;KLL;|+p_4uIJ%h`_#Woxq8BV|Z^K&WPID34R9$1Y91 zH1G#>6OMKiFzP&3_kx>ah|0XTI%p?Uk-V4CD3}kMS{TnIS=ug1=7Rss1_#~{iOOzh zwG-!SEEI;zw{!?!K{q=)O7gOykh+!-4Ydf4li+$VH+SU3;YEUO0+!<3LrLB54rG9C zf;W_W2T}>TiCkm~jBHpp3d$GtAv8+WDT*yG3cD+6a0*#UvnE%n0c?Ml>FghoJc8=SX!Jo8^vS2c&RiZ8Ej68#e2}2mtCNpV2Hf66E&O!6mf&Kz{H)M zSOM(>kR((b=GYC6TqK#a5}C;-V(qm;5> zF|E=pJx`SV{{t`3nzgc+_4z7moho}%Of-8-FZ-)U_HJ7Cx7O_a#q7hY>|?5&Q_-9s zdN~&!IhScU*R5dSob&f82cXVH5z9r>&&4SFckBf5zp4cpPg-7v|E*exY^^OA%Ao(B zsrzsBEaL@Y|NRIDwFJBRFoOJF)O`gE11pc+xfj5G@edzl5X?LrA{cS;Pqh$5rE~bK z&Fk(QwWh1n7ab6~8*Nr5{&kPv1pV$DRprVI9^Z$;kB6+es}`_9!vkrsnJxuKn767qObm!%*Mo2dG!PISY^V#;XMsSy&Z z{Vg*zA=zT@-GnJSNl|7g#Ui?!nAV^cs_8|W~(M6(P*OeEb(E#4r`E= zoO1ngW52n%Vbg&1o6M%cmw_uyLk=;g59LfzX`4sf>NA^1y?Sp}nm_t|qHP&-n)su( ziuGzWcGK|Fz~yG3+qsBL!t%Yi4LT|Xk1Yx;0liV%OiF#SwfiH&?bhx3 zj_k`l)nVV*1GFf^UO>5mn|`b6Q?%!PkHIU46aD*ZBC_!Tg{_}PP-A#@&xJy~q~>u2 zozLjy`2aj3%g5oDOV6swufAkF{&S7?X6If=dJ{MFdRO4dhwE;gHOaFh4a;x)SLQk0 z$Cw>o_6SXh)4G9F;KLUBu|KMKZV%RF>s3FO(armN=nr91Gb^z){3Bf94zy#5?S=Dfl$XuFQj6r^uX+}=UE&>esVd0!CDEyOZ$LUe0%HF{Q&} z_8L4peP37G-as6meo96bz7y4A8+;a@;CBFJA^3rMGoi6`7B%0XD5kg9={>+7_%zX4 zz*0c92_5>H#FSNpI9*oL>?Go5%Tm;bikJouz#)yw;VZwI^kf(0!FQ1#5$f@erRFJM zw%mBCrtmzKC8(%pr5n&ao=$L1%zJ35q`*i`oH;;(3a7PJ;wnqaYwIs{Pe7_Y3)6(L zpXUo?>8M_5PnSGJ!$4&S;4NSJqkRw z7jJ5vl^?ui&aFw`Jz4FIacG6GIn0aOIh?-#3qb!?WkXU8I z<7Je6ON_joax3cJA4Q0okt@O^O(p# z!AHIiC|;mGM(ap?drV38QTux*MHX3Al_uuoG)BbRj?=MfRhf1r@|OY*8f46b(t_e- zUSuVtUloFsh2tnO<12nz9)M#aJaY74WI~Dj|#OnW%}yQ@$8-4=;zD@hT_z5 zf6MyBqsXm}lh#HnSN`07#odZ6k8vW=w>D~q)`AoDQ)(U!Ib_pRbgHh?Yn4CJ%p+_| zZtVoaNU6rXL@kG(Y5tl=GKQ;mn&nG#hTQxHv;d%wA3WcQfm8EBSzhmv#e$SnlWL;! z6RD%Nc@$B9$h-ft6XQZn&l!lUe)TOA_*d1^puEmbe9yY`IkJq1H_?Hwi?96_HUh>y zmw$b}g^lL865UDPw|sWN`VhEzl!qrSw3mJN#@^uF8+%xttSTn}XIvyaN0kK}Bn02I^R-Wd-9xTxYQ*~HelmIAeVp}H1Fn-l#^T)!Jm7pt z<~lf0V*yh=^QX)`=Ark8SCMh$IsQE&fT$AE5)w~yZ2y2`!uNVR*|mQb0_AP*%~h2B zJyL)lq>tO-ug@=PQFDJvG@Qndwi9jg1pkCP{eA78<(zX|wvpm-Iq?ke_6{`pVbuKR zMz!IECdrGmE9_QsNFNXM^q1_P{gkmD2pnWJB95Zjx=OdXh*I3>Gg)|v%9z|`^ZbA= zKLTQN-8mxEAt(kC@n{Os(fzWXg0wlnC-uY;E!LeL?tUYzK$q)KVB+z89!jn2hm(ic zbt7V?^gEb$fnAbt!Dz7@?a;7DSzD+mM2HxVz35?b%nSi%q29{1fdo!WB96Y=MMN@} z(5Em`Wf9tWlvjLwendzrT$4a?Ih4ngfEYsnhOUoFTyXq6QNpY>9&w1OREY2biJk6k zQPDO?VgU=u;0wmOgcx4>L14E<1$PP59j1p0{tHh+{pFy6mn6sq+U6T+;PTF1kd;s+ zr?`P-g$m}KyEsPj4M9_My=8lh{NJJ?wTW`D0`>XAxog8|c4>Q@5uAL%2uhk!vrvY0 z|K~f9HQ_hKETM*R5qJ<**<;kvpAxuIAw4Z*eJvy(MMC@4fYE#)3Devwg~$ z4iZg7k(VIQwC>lVc?&ez3lq(>fMeNFDr&Jt6k%w55Jzc}(KsUFVMpj9lpH$@EHg+& z>CSKMM?9S^q+2ei4YUL5kUt>Sl*?{;lSso68r2&YRiO@{Yz4P)60s)}jir*rJ(6(Zl0;gQUT-AHVkcuWCinFuElWY# zpWbp!^LJd+M2{n{C@n7U9oOU-19D9cdT$Dc$i0TyeXde)iBkiIf#6p1&{p;^?9_m; z)EGUw=N@+Jo9s$yw_KA*Yg(l<;Nd}$1A;ar9$n7Ek}5s)hgAPT2f=cEU3kD?JydEf;Som*6^= zh&qo%EDx%mNA8(NnVv`8mPfmkM|YjaK%LJdmd~u8|NGzIn*L)x{$oD=i);Fi`S_3d z_j{8RnkofE=2H;rQA@V*#%(I5Z5-P4abIx8UGy@; zUYN;qDp)+E#6qy^v?{>xx-jg2FyDK&_e_JXHrejcHlRMNpzVxs3Ct{{<6u(|={&w($X3Nvone!=J9ohhVYD!Xz!TgPbTD^;Icdl z-BStS|C-~NaC;aK>`5*d2K{p%m+af~2&T7;G#iL#_uIzxF5VckG&0Grvcx6kzrjQ` z@js#dHXRqzP{@;Ht&Ewg{>ltMaz(K`=b+YnZ=&fS!}X0n2B*I;{6{hGt8WI`;lg2E zCV(uQRm<&K`Q`Q7QruZ~%`upEq2yViM3R-#FAE| z{&M=W6}laGI*WA+i4~E|yPTZ%s;Ro^*^L#)zhAz%hobjN!L|Cjufpu1qVhBoIaA4x z3ez=e{my_-4YrjW@U!G4%bN?hXl@ove~MgppeH%AVYNu8HSPIoI5~fm#F_(FhM48G zdRFLIkv)BaVb}RwZMVyzP~NEim$u~QPcDise#yaqs+qB7Z!i~CSCTdl*e(t3)cnSoDN z;BWn_A40F&lb?Z9PD$H%AW7Lh^yDP8mtz4LnVKYyHFX@Fv5w-U+s(n99*G_~*Z3+)4D2CR?*du&!H*uabbMo&xX%*nE za1UM#8-C_@Wt-O1=7!wJ3yeFb@o-odKV5XNrvprNewnj)%?}HQ)TMDu*9ldh)+=_} z-@248yw)Kn|K<<@vI zHLg|(+&i_?DfXOgwyI8_-2{M1J6OlxhpGYiFE=FJ=I|L^RTH_ORwKe;1cGx0iGjX_3erB%-QG5aktwOWmjCw z&;4`Uo{XDExqvqeJ!b5mF5|!EfAa6T3>LcEE@KR0akk*}cX%LAg3{Q91BP=0bU|p} zaCt=api;z$ib*iUq5}+{rEOdNcs`Dh%>Vu>Gu5hUAN^*raAg}_3N+K2zqwrk;*SyI zz-NdpAS~K@^rD8{M-r!;@E)K-5k7Aj=#rP~35mJwG8pc<428$7l~YwF81*xZPJ<6u z6FT26l_)Go+PY8C^m0VUNTa<?lsYo*Fw}?z z_l*keWc}`NV^2*0d<1zYgqspXRoTJ6>-Vp7u*Jw@4|xXtg$exGA>tti_6CX2hM<_K zh({-gj;WWWtfbBPKB-`rG3ic^a0gnH=(-#Vay|Cvp|m!BIJF4;5+W9u-{HK!_(?#I zKTx85TW4h4)fqh$0p+qN%yNFC^HA|!BGv%Zu^n?Psi5ahLHrv*y-r-6$Sje8T(u$n-5h9>UYu$n<}Fm3sR;VXU;u_d zVdTUH0u|#zGmET42dpt5$bb@P&?QOu4QN25fh*8|AnYhwsM6dvlXCxMK_cXc(PN$2o1@YwAmwni4B;u5j)6p+JbP^>UIYlcQiQF;?fp|L@>3&QiK4O7@EFowN~M*XrA1w(CJm=;gGC9*R>ddX zvQ?^yB_La6lIqrd3pg3GWw=UZG+}47=+UQnq~Ebs$rE>NNF&Hrt*40Xkq?ArF4txH z*-}oVW!5rfjd`#y{m<;9|>W8R4~an8Cb%x-LXpc^tXmckT7zfC7KwvQ=0>UC=m zs0$V0De(`p#O+>oqfSOz2`+cFNvWvEB<&Y*vJET!GyFIxEHKU4sMg*anS zkXaVLOxc{N4+9l}BGbL6x*vCvdsYTpJH-|bvkyY0d1dpvLUc0hU45|d6ZBhfBUh^fHxu~h%^O|eDHr4n@khR-gb?awq@VQZyd4~ai>3p;pc<@akL z2dBBIvG3qf%&0+CxVAvo9|c!zYlFS;gtoK&1D9GHgK$aEg?uS?8ckcNOHOI;blLat zOBO!A*1(7=JAC=&{n++MbAx9F(r0Z^E#^9<27&Hq(8M7I;YiFwr~BfMn)!dR_a0tN zHTt&pO6Wxh5UO-h=>jT6EP#k0(p0K|fFf0z^qNpZ51r79^p2E-CRHhdh;*bXRYX8( zigH)N`|ftmzTeqrjJwYr_w#?qSXs}S^O?ViJ!_Yi_X*vIF4p&z5DXlN4`sI+G)n)n% zWn895JAc?}NJ=t2W0WBh8pYS6hLl&e4>sV~Dj7ZX<@_1D9~ zZ9iU8e1BQqO=Gy3Rh!3zf7T4~(47Q=^ybdnAE<93+Jqpn_xZnF-Ib2(NBfbTp1UsY zZaaP@jub?VC=USO6hr&mKU{!pZff$WZ#||#kk&}L6?wI9S<(jUP9IT*K>-Kgm7%I} z?k4ckqD70A{1F5|*J~PY%mq1J=%Q)E4Ft45%_dKm6bg|6O$?D&a|9Ekzd%$SG%;4M zdw9N~p#BzYGQ9#I8Z=u(PnJ=ck5IW&Pm<6>iyN;HLrpz<9n)RioUos$V;ajpwS3Ee zr=;Dv8`=>v15%MUoYz6N|HjidrQ1IALXI|%KqY4MVLM6;@0fvfU%61{iUZ9gfnT&Lkqvel>Ty>g2G*HMc+;(O&6-w!!%zUVilXdAk@LxqE1 z8t-ZSCZyQ`Oj0Ng`Xw1!+Ass_<6|SPy~m>-lXly9)2qi-Va+r8PM@ zgAkVWB$$cFd7olY=QHu&8}nA%B4i?!zW4HAH}~PU_!+eDnTYK@tRNiBM6v?pl%dzb zOvJ>Wvd~BUZ4g~I%-7Y5N-J0s87wPUc92Wv5lq zKa5n}HW?P6hf+LpM4fw!>UR_(ZuJ9g?vg}gN|lE%XmfMBbXmB7Hg~*U!0oosr+bho zCHf&3A|e>s)MNi#xv&d`jD;)oHT%c`9$~6(dR=8anRt>zd8J)A<$R^;tzEkr+m&IR zD;nj>#Mb~HJ|62Y&Jo~k`#vmVKbC&d{SQ8g0wa=2Ct=+v3^IyL6VE4p?v9)ecs{{c zhH11#ZIDMVbQ0~~py!)^3K5GYHjSEYm4rVtI@36}B6qDdm1angnb_C&MlK>~0f4~W?Zv0>1ga(8Y zxn!9F?~GZK*Axsjd24*$2mPl5{+f+Kd-JlI3xjH>~MZ66qmUECUqjQ#t7)9)b&~|0y83 zlzYJ-SJE?AIwki~?{7Hy4JW_hoM+)jeYIR%bDPl#PDxyRKSXaRL;Rvihfm9M7OOOz`@QH`DjjHP~@eaOWM5U!y*w^dU`p%2D_IMiX4J& zKYk%$(5?o?QRpHI{i3nnU52XUpCvY|{stI)T9SE1$h<^ws@j;zzJNo{TBR3h$EH)7 zt!8TdgpoH(9+BE_R~C;&M#z* z2E*Kpm$cXHp9{u(>%B)B*(+ia_eu4a@x_*>=_nr+>!G*}CR}3BXTN2zW_DsfXDhYT ztB_RGY!$g(eT<_2@8t>LXXB#s{9r4vn%gjTx5e7m!+rRd{yI^j{>p|rhtIO+OU zyMbIRnPcA@EF%3`>}%0DOMKtG?TTGxsOk6N+B&zcFN^#UG2V~3q-uM#NWOR&MJS7^ z+V$$VD(gK$ES|h6lfyV8?mALx6y`vvYQXct7Mf7inzxg;5TSGU+WG#9 z{NCexL5OVca7ffVBQfzdGHde3%zoVp8F9N^c6Z}A*=aY$?;P=dv_W%KT6=^`x6(@x zz`a#&TWu?hYq;Y&659#hOkiV4ZO&N=eMzGBAJP)0=!0fLS_0tH5`>iD5L~u%Nt!ln zAPDL_`5)2}l|R!G-E#^)Gq4hd|1>ROzCaAs`rh*-(sj?OIg2Ce$52SlZdSLER55*> z1`Fr6mz&lfz!M5nxuQ_o`uhfSW1G`N=)G@OW@cl~jxU-&gd{Mt155~N61%G~B4OjD zQ?TyZoYV1dnP+%_HAvv;YR^2Z@d{vaWkPpkEdy?%?V=$I@XLLnPit9-WbQ6ovfG{S zOYV_(-Bw6^0l&v^bar@FtwMK$!C2-{0!I7&h&)Qe5mv~#-uy;-)z4d#=h{aDV&xZ_ z?MDpzeGeq5$y%4p%|zQ|^MOK1dnn}TM+OBxkf)2@r7%!RIG1Z!k!)!m=8yAh^VW zN!$^x?m`rr0k@8{P(+TXU8a!BXYYndQ??JGv>>79VnU+`%K0xsio#yVnqE&xQQVGG zlrZUTc#*qPDa$=RIvXkQ1mI3sE-YNCkg;}!zLnn}#FZ1>^ah2Ypne`e4n589!fApJ zQvA9Z2b5uh%6A$;T!A5pHm#U0MiNy8k6{@nu=GphsMmx>S0;!nV4T7njggNgbHL*Y z3XD_GcwEVs4%a|NfA5aI5R4B};`XA6dC<6@j_sMkrDux2S>?A@@>?tUt(E*+w32^gkn%6H3hSQ4 zc#jdNk}N#Bf7OWh=*=(lUiTM=XQ-+U)NR-pcqCa`;b{76R+Pi(^L&=ZbE}e}w#3x( z-GxdQZ@uADs7dR-z(2c7Ar(%8Ac80t-MZU=pV!SI>wm1Qvc?n^yKQ$;e)X0%n4Wkt zB-5uSDVMPfr>5L1kUb%%k-dM{_2s?73s1t;4m_mr>4}Qk>K#+hHz9TBvwGQ!bq_8g zN(Dy>hPV2=U&h4d3h%vez*mR z*mX6IhIUI8aqJZOez>H+sk7UBt#8WDjSb)IYVf(dVZfbcazxYG1lSc`w=dD@)*Kh& zVwzTTN*N)Ie%pGQgCD$CX3`$H|4e039u+)h3iYdfNtReSXB=@aBj;kRTi4cova}D3 zdx@`9ri*&emz++Y+KEw@1hQ7=!WB$ix*Wa^Bka+1G2HJnlDxP=#WEG3bU=A~v9HQ1$h1CYz zN>TXTb93U4nU%?(4eZ7T%W>bj=27-$<7!61@Up{$@0vrL@z_sF+HJcO9RXmF@&pW0 zEWL(rAhujpg%;@bH>c}qWM2I^xlR1M$yPXP+aDacMQ6A6gCnB@cB_+ev0? z^GA=qH_q?$`m_s$JRn_==RzKB3DEct`=#$)hrIY|y8bX<0%R4r7n;Lg{$LdZ$SUQn zAgkmPSmnbptAJU`F{^BOTP*rg{SB)$CE{6ShQKOOdyr6FgbIOG(g>`Q$PDF%1xQE- zaLbXdllfT71zaMBzCQyKa`*eX=kkM$;To8(m{?PiGl*hYIl**A)B8-}9X_=GfrXFS z+dylwpvNP3q$}@S8F{FGF$k&^q=5{QkPikKrr9<4m|>Jx0{LJ;#|$&I40k|zzm2xnByc3=a zi%=+J>{_88{F7m<3&TK$i92Q(P2Y{JP}!#L;=4O+=wjJjqKg=S$~ z#nOAZN4+61OvN7zgT~0C$xQGJldR{+iNG^VopgjI5>45I7V0AU21YL8C|VU5eW(}w z0M3M==fMD{RM>H-SWryK0>u=Qs9&I%B8Paa4dpyS6WND^^(_FTt8noHm-G5@2DK4* zh(W|%Qi1)#3SPx9$qR(H4aHrPVdud!Oag&nqI8ZK1|5qpgSCfP(Iu8hBr=;OmgJy} zvJ-*UM5g&fO9I2_c|?N@V}ui=kYOk40U0J7WEfWr;H@u2ERz(BgP}YU!&aFBaEZ}H zuoxBLaFAhI33&?){U^gD{3UOBgl8CxR6WQrDW&ZxiT?AKAvHc@Og_vVlSRyQrzb8(^UwSbXU{#ae?$neXd4K+HeIPVlc-LGlqwl6a)R# zRa{2ZP)4>D%SutkltShg55a%5)c=pNior7_&u7Xh&u%q5yFK|#{rfXbw!Ax+^6vd+ znBNTZn_+%4%x{MI*BJ&KmZ1`8DHCI**#gd?GVPcuM}Wx+@GWcNhsD43UBRsiXpBK0mg&AgDI$kCeO z?}~!gzADidDrgsL!UbikC^3nXU8UR?b9FOs1@xvl=U>+@(wX(wX;ynyVsoOEgjZnn z+Q3NCqr4KW50rFGUGjZ9)@|f416E)VeT$*d8n%Q+0*%X=Z>fYh%=kz z+N6=Z6&8I{df&=}8qezMdwmUi8$s&UyyGLPI+AJ>vhG&)vx}2;%d2O_b*$~6e+s;^ zHYZLgUFOv6;K_6Nyy;0G(czQA>#Kc+{nq;}#8CwyWPn-4Hn(EO`7hRFo(p7Cx(*Bn zn+9!cAC{QLJC8Ul!i3m{nEYId`x45c&vlqoT+nxxdAt=B(}ZJF-3ynmdy?oV6jRx4 z(remP9wrl^ETL-Gt&*^Akc4=~nWT5rBbO*X_xe4qnRT})H{pw0{bBOir(JLIbGy^i zQ!I2uG2N_7UlFV9mKVKh2g4H1M_H9x4oEccihQD`<$N;17soQ-rTE+ke=83bG@MUE zS^Ttdsvt_2w?xOKNaM;UMb%00%>XD1j{Rgrls8sdUhZ@fx}F8U&;M#^G4J`Ebq1EX z8)p(V==~Gq|PdBT2`~K@Rj3U zVG3&uIHB!uoo`ltVowv`Jo%JxhXe7DaEIgB3@lpuUXrp>uxt~CC<|FxA@n#|@9<^d zymq~R4&gTS*iq~l|7Gs2#5YrfCh)G zakf>?aBe%lVg!J)e%Flk{R+YE6!^@@Ba=cQtn72STY|V!T817SAs>RzW z32v{@DbP*Pwv|&Epq)awp>W`%=zMsO^CoDgX#LUv?G(dI&`!CtZ_YCFm5!Qgfm`g# z5kQW%&T;VL<^qu4$KL$fiIeZ`=R&YeY8>s*el+;_p!dMX|7iOi={(@zAz>=&yUao& zXZ__2OnA>{`!U{E3A_m>1C0r+)6N-fB_@D{+>r)lpHKj2&_l{XknJ%xbznmbv{u?2 zh%4Q>Ox&rlI-CynxoD4rS8(AKe=&ahlPrF$%KGQ|VUjC;OH#g2a)#?5$;esLtvD)S zSp`6n;r15azsDyR0FZmD(*;4rgTB@g5g~|f?grSn1VLkhG}?kBka&`5s0%LP^#{|K z+x$U%ns}1AAdLhi7Uz8=k3-0|tA&?~i$`7vv@Jw)D@1J^v{MMZvF2Cwe&Zpj^TCY! z5dVE24lsC$1r)pC$td4clu2BWMf6Sm^!?CmEIfCgzLX%ekR;Qekh4Bp$ciCEF}J0> zH9?_8Ed1s;yiwYzMOmNkt+f<7OhXFRu^*`K7$Hg*DFQn63P|Dk;4HjTAIe=BptcN| zXMXzZOsL^jBr#o-%}4~O)w3znr!HxK#6De?4%N(#650w`*=NV^0uP2UY5}J$oS-;X z5)U8_T=LQkgDpeyz$Gt4co#V%1rB|JLi;j+k79yZ0GJAlLEnq<0M3k|KZOBKtFSi~ z;xQ&2#2AMt5*8?FB_jR^ zYskmffVDCD_z&W-U~TLU4u3slxiF}apxFye;5B=$WTrJm^+XzI*_VVezXj)aWs=7{n8C1RWFr0W`F!eYf@YtxO3>`H(m~BW zcOt>QD&sRwWK$(2SUz)uRcKEjvtavgmbU&!7{(w^$20HOZ_EDo#MkeMuiq12|AvXL z|HrbJf0<*l)q0_d_RzaIU)!y?kZX7F68)Wh9=K1hdOWF1-V-Z@!+VVcF zCFH3V$utrnPhO(ek%Gd*%Qfv)ompOObc#6O5GiB`HpKFOIhM6_78_0Cvlzv4r#vCs zVXJrf^mN6x^FlL+mw?un+LadlMaEpYp3wfq4+%Q zGt!Ay^rV-3j-&|V2Pcy;8ImFlWyWqR@MMC~^n2ZkaM6Z;>H@9muH>2}tPRlUZB zpN!UF6EbY3i***O6L1Ya%5I{q`U}-e&)=E9wuhX(KX>aW&XsA!6UA>qgjHmMRZnn{$PF9Ev^YoTzHV*`;6h~4Fjg-*3q4w2cNe!Nv0o2?IpZ+ z`t=q4>GjGLw(ng`k`;zj zY0o)0Z?!YeyoL38ya2H4Z@GD0Daox-((h z44Nzv1szwzU}8VlolYR-P&7`Jne|K1m$>WWzpSfin^$VIw99?&Y^F;E>%zH$$OnC0 z>72*k58c_HDx%RXDWKij(>b2_ig-UunD_#~i7&+F?LQ~JW(X5s3!;RHugl=Xm-$yG zJ^aL1b>qX!YDiab;!98pocJ1X&EA~Zqp8@6m@hsIq4I-wKIq-@qyITQnDX)J{7Bom zxXtuvV4s$(?PvuehtOik`$2Tz+mXtpyDMdQn2XgpNb>j1?4CWW5s(J>&oMmxJS|Q# zXSIF?CP3!9MZg#2O*n)cAVN8Pk^=gefekkV1;59ww+LD+10_FujU+yinF?X0xCx;4 zAORMLv_;4_NyKIWw!69}ye+#;}xlS@F=+v@|Rh8xpyr=i9BH00NDFs8&_zIju0vIR1Fa5!fV~v*HH#z(VjT%q=osbr4?$ z!>*0PYssCk`*wUtYbjV5qBcBtF#KvEW7`V-YfF5SjHa9Zu_Zo*i6Vzy=yv7={Bj*a z!nzqJm0|B!^j?7}j2x0r%L=g*3Cbwpx-H z49NlUg**HOIU{%lkW4`La+WcOFA>ZDr3&nXfEVonoDM_JfdRNw*lU&X_=2AYo3kp{ zgMno-l6^aTnJmkd=qM%{G+!VTj3O$&N6c{~D99^idS+$-ydFZF9Y;DAr?C}x4nudl zC+@@B7?5Dp2?Qf5@CU)1CJ+ouGLs2T(9DC*948nw&S(|t@~{W?#DhREP6=N@f@w`C zQ9yUhM}q`Y0TPU65=CW_F;B9!elnF~@?%W0U0br=axx_Z)0u-Om>L4XTsbBfGY8|p z5R4d}VA3g`c8xI=^$34({=-5|h}Z32nM1Y?3Hm`qH9y<^5IPGp@TB^Z*q#wzr6 zHKU;VKP(3SPjJj{g86N}r2ZzD-vslUVE)xM*}sEe7|~MM5$1X_?=p*>OYCC=mD>dA z)kn`4=mkX>=nLL^uJBCRuD?(%^_F5`wRyRFD!EFI+;}^^Bz4TAHLka7ec1fka_=YI z)?zS3uYn}MtX%qyU3TQ$Ms1d_T2Jp8Fa16+emN^*^JtHJA~hI96`m(nM6F0WuuYbi z8Cj_N8LIc9%N2-EfAYl7Z7OnUw|7gOf3|TtYB2n8Rk86sNH967cL!W|u;1A$EWZZNOqkuP*ceH*_-Zq~{n&+fN8~d| zFfTvRxYS4cd{)t6n(G4zhJ0gP?o_EE$&oOgVBGKo^Me@&KT{DzAr(XY22U`Yem=6M z``f!64asvyBI?Y-EpHH(5snY~SL2iWqfB3}qi^F9X;W{7VF`LTcO8+9*|TCzr6 zY4}jVkLjcbmx&+$c*Gbm*0hkmePAMNdVau_LV3G7=5wzqpZ(%d?^ULC;Bl({INGJZ zq%1#GrQRZ}CW6m-R5)hp$6{ZrOwS|Z5{&A7i;E0wZ-&(_82wnc3~>%7i(vY;)OmUK zC)1=T{^%i!eoc!kZ}`QDa`S8s1%akvX64T^nmWvFf53 zC;~UD$MqW1f#YC*PcSS5f_W;`w}$#B1heHGq5PQj_`` zz_W=7(;N)elr@dSdAbK5Z#tILQRVHwa&wPNWk;;4`f~R_p#0_+`*V7n05eC&G{b#B zO9okk$N_g5@(zh){5s0)^}kCQ{;acj@#D0pXQpAv&n7Jg0F4i0yudI9W{szrkiXIl z1vx;4a{5a4NIf5Uf(*Ii>Tyd8$&6*7=Vz~biKm$lf6`3EGU7RbW>U!zx8M4oV+r{3 z*l*+&a!V-y>KO22&v*SMLQFmoG-9$Pkz&~asoDOZ5z~D(An6A5B0u8gGW-rd>>i7~ ztQa6&i5z}qq{k04*oPbOGgyJ@zLSkDR`3+4?hgjuRfg*5>0i_)ixPdY zE0M!1qjqV^PWM0qWQ3@Aq$n81m?4F?g0sOe#wnD$H9&P4vM)u6kPbDZiy{_}dcKGc zW3EX9$vOs0(y&$VTy9&GP)zhVp-@(?M@Pc#bV>@HYKlH~_|x_sI5oYXU~FL-p_z@Q zUPUK$5v_rRvMqNAEQVMy@Et)`6N3+t<1P68r1k7;smK=*h#=znF+pD z=8XaTR~bWDlkg*96N%_mrnpd-gd$jyif|05@tY88WpeSywK7uO#LhoA#;oxge~Q>L zsPU(k@}}0{V0EFX)LE&vZK)*-skI)d%_?c@^2ynFjX#;7@h1-AHU1QLdHf;7;G%T5 zw)7cnX!=|aSKC1vVPx!&TG=$-<4-X;VA`O_oRY{auwvO`&8*7F-0=|nk+Z= zL%v3)UP?RO2dV>3-IQb1b}y?DUu|yb)TPKO&es%1`m;CakH>FlpU?Vv%a$T!0&--+ z4Pg79fQM`hR!_SYKk)vn$ZRt{JgrlYUHtsTpiyi7>Q1HB>2e#q1j8+bYo1Qi#d(f? z7SyRpN>FyGI0>*`SbLTsVyEVJ(r7c|k@<&aQKg+;<7SfjmV^Ymr$w^Br{4N(npz>> zGVc)q34{Isr0`<-Lh!x?2$K9>mwZyP1KwZ13y!lF0VappN~WZRrGxym-?a1IrCgYoqqhio_enBMf=BO_L@ z%PveEYuIs7T;quMq79m@qWe2{f1!UfILt6HzH0a4Ct-S_Odb8d;+7f;YkIWyY-!ua@m<1a)IduHCHwvcu;rvGG*1-j-LYrZzZ!W5K+_Xs zn^2H#HmyFLf$>ZEZ4#22=$mi`a)8m@iJA<7z2VP_MdlX3xmf&V+mP+@Hm|^z*@AB} z(t#M%JF+}j+>JQJ>~kGFNxI>ZsDMi=c4sX8H%0@XkU+{pKjIaHSQ{Q}GDneO;(@8+ z0U+4Cs}E?n0lnIdcngjmquh*E?C@Z-`S91Coe4k8Y#(mU&)^7x%^e$Ote`LmHkv{A zm7&I{`QhgnZdx@bYVo|VG+_m!w%}Bc^F7LMJ$Y^`}B2%Va*`hz>px@WHJS$IC=(y zY=dzA`U=lBE#yIJrV(685gTB6)|E)#&FHl><-mTR0Z*jp+ej&pZJ_?bjv@8QY<=6I z+?s(Z%MhqEB?=pASQSP5Hfk&=5@eg%oAimnhMUr`uic@VrqM#;=wr5N0@()U#5;yg zg~X7-JV9CJ*@^?F7@lo9$Rjo7W0*o?8oG#rq3>lXPZPk+ib=?JZ2k{IJ`0w>u*JuR3eeYY?@SJ7HX88WO_4+dOpdW zz&4gDXpn85-~<_E*l9tw0U|)Q3B~{stBi5Dq(mGn*&``sl_{OoHM0notsy{mWIee>tf6*VtzFq8Zb>=fPJ>z(i&;bFr*uTG;m1UNL6$$g`_1 zr=wKlx|spSb+_Kja9!<&mwu>nalP)1&$b>a?*}<0D_?T7l0fCA*GT0^BQF&>Ng2HB z9IC~Yrz^YV+Ze5Zk<5%yiM5ri*1YH#&j*nTkCSVfjrnfX8zTJf6laZBd!>NopmpmP z4KqJ{Jd4(PP~yFS{A;LS1jH3rmG?x=RXC`BX^utullCv9s6A*@6~;IryDv_{W%ccpd7eJj}*B)-^VX=BxJuU@uJ3X z=0ZpC^9!f99lE?*gi54%Ey|y#gcvTeoKJegV|PCBGzc{0-v`$2)ns=Fo7EiyP2PEq zc(qSVM2m}Zwj2wq>JJUx736Ox?H!MimHA%OH2b-#8Qs8BLvyP zZQbnTkMVAG$!ZO5wDFJ52^#$qg=Io(vsZ{GFSogB)cnIz^4yCR_4`}`lv zFV@=kqut0(&s?u^v&H`1QnJg*!?`0PURDxy2c-MlJS-a9d8IN0GT1umoQ!?RQ@)uk z#{M?oAC(!zX5z{B1ZAcZRAy)c7s)lwdz75C4D9fROB8r$+KR?!z03b7NOp?^yU2oJ zFyR(;zzx5B0wB44_|-!^`&^7?GPs)7a+E;)nk#yqj}KW&w-6Pi_GY#sm{8?7Ffx$4#~%^?j`=RnI?BJ&FX{CoG?hc2#-oNVMdwUFHVEIbw zAPa#z`bIZR{%fl?k~&Z-~QIR z4}_dMe#txz#NZBBr3WYf1I|IaT(l=_9K7igAcwLOQZ`acw!6*`Q({2^;{lh&gFwhh zlJpmg2~3T_L(T{0z>ynJMQP;R7~Evv_2K>lJmi=lmi8Vz=7(AC!)^E(+(5`#u=d0X zN`R148Dy#qeWYx3NiOg-zn{7|>f8|vG&tGLc+6uZ5e2P6Y0jez$LW&^WwfDJ^ikcY z)VCpL_aQMWND+cZa}Nv8mxdMchqm7g-L4HQ+Yh@%7k(}#93R~v@OYEt8jup>8N%$V zRp4hLMM(}sFs{J6rJcAcBerkQzheTV2HmztBHk#wz8#0ZTcMw|3<7V%oav_bSqTFd zn4ghDRl!L!G(yhJDyy4uLm9To|6mF~2jI&$Z@G9enrI%ihh;p#(vz}=9UrM|058O7 zI-OyTNs*5s6T=fu(aO`#voN@3#5_48xSY&xWpo)~1QyX`ZyIrK#^l0cd!=GEv|Srhg2?jec9pW)y3#}b&p*bW|3?>`PW4t{uR52KL9L8=Q6G)Ll$&=FA zjsaU}WrP+Q({T%J+uq?X*D5uWz!qAC%+u*Hrp6w@=7Ur!y0nfSpsR=J6;7~+BCS0% z?M)A7v>)EwopshL;>g1MtICVz3m1<(dH=$|a=O>Tn zmtr;yxqC4UlkdsF{bkQwR05qh zq~phC$?q*ra;tTi9$-q^#dj%_6{L(@{dHPK)4y}-#GM@&{Ojs#P3M|dYqSzde4IA3LA!8a-tJvc|T;fFL&m}m-0RK z&7C^$1F>`V{R|P`s;gRiAjdZ>FL0qC{9m^JxM8^-a`lJLI}_l_=B1UXCqK02j0GCc zUILslcePCk-L!d*^H!8;jl?y6*cGsw)>y#-jB<4ykySqULcceDILW2Fmvn~!H$_Sy z+$3!F34`Zjx_`CEJN&4=mbp*`!i}ykoarG6*6-&{;AqbgGR`oTgJ^Pe01)^DCmc+0 z#H^Oiz+?*i)(CJDa}&-=4xH?EB6jyB8@J;ox6l6z+{9SFK8Bkr2V#T=SE~mn$^^V5 zQ%r`u-4<|_Ja8@8_iCO0C&@slRv;BQ;z~Ee9Z<9pvpPl2pp0de0Yw`*UwPC6zCn9> z7GJfkAcwQTs|3-8bo}9}PB7FlSR*@F!ZZXFZKj#PGF$*C+8B@r^N9t6BLP2k{I{3k z{`>wsN1CWlyDk|8b|`*W7&&7kHb}&g5Z{RT2){*zV_Ci3{kee9?_>V>UYb~ts#X}0 zV^|EiXPmTIad%jGA-r;*9!ppVU==nMyvjfvCQJ#-3B44E9BYzp_Ec7bFg7cooD2nIK7 zMGr1>6Y<5w`i6k;7?Zmh)5jdEAs#CLiKF0->pXIdkOIkO0Z%sH-0@_?kxU>PZudlx zY~*4zAo1pB;}t_6u%ILPsvIE>@hU1XYMh`NhDnnmqOCn%U4>nY5Zq9L!HrzBS1>(*UiMVp63N`GUWm&Ic|NkP)k$BP$z5E6um3Z%)OO< zOWPz8qJ~}=7Bf*8sW9mX<51nT3WTuM%zRv{EuE@&_|Tg!v}tQl%RMnP-B({R`$G8h zLjM$F<$MQ<;Uv@L@mw^7AFi5l8|O64N|bzI7yK--_$KRmxQ>h|BDf!VDcZQdq4tx1 zo`${7&xX3sQ>cfz`H_wFUuGY}JK{r2i$4T7~m+OAK@G?O)Q+?WedAX~^W_G}5 zVP}4#G5m;2!+375ZLqK8!L^^4jnmgZ^nK|!L&Ut?T>dnB?fc5y;UNismf5f7n?nfl zGb_4CYe?Z-04%mEOULtu<$Tb+GO<=zq&8|kgqx;|#h5eLav@YavQQ_KziwqgMevT^ zc=&};J*^1kt;ZjtE{i_u0PbGMe;BREBopS~e!}Ww>_y(9#Ms+Pp*eBN0^)L1cOI|u zCP?QMEGF@^iy`1EL1ar9=7x~?B+I&ktQ4b^)ul9OyGI-YQK#H;24qrT2=@om=V8xYfiFClXyRapZGVt*k1Z5Cd9^3iB!D?iSbe z$`L(cJVMKr6rC9yhScQTLO{>-qQy?zBnIjnZsiJZB(x-|xdKcUB9yZdpio)t! zB0y7AP-|@oQ`ZxcGf%vpC`t$4vsIW4?klSu_NSUG8ofhWQ9n(2@yqo^`q9Med!!>3 z%{!yJ6)zxXCB-z!_Tn8B4tzg$00MF~o3|Oh-gC5M?u*|tKG`wssLB;RBxaGJVz{Zn z6X5M+Bk+89`~JBS_*WI4=rn^K+J4*EfeRI{+1|+hpk^6lrF){)Z5T|Pr=X-e{Ozqm z^lr^NtsfUJ-q5`nSYxHK@Y;Sv+*~AP+%e`!b(4ur+OF#TzTkK|qROnDNl{Gt`RRm- zpBE>$XpTne3~V<(OU<}2T*b_s;8BlXpc0Q7oHZcHz|KqDZ2@m$nf}5q+FALcmx+U3 zr#+47lQ~#ODHn!h`SA?I76oiF$Dx$xmv&HzkotDkxUo3 ziHN%CSU;-o=}2ZJ&3jVdHYs>j@&?cI6k&(`Z_b*KBc& z&kV@>#24!i**8(kKbd`2Ti~KTQ(!{S-AC-rcbnCeoRYc~v(8!cTr*{h^;EWM2do`l ztDK25?~6B*%sl8ZQD8VrbhvPFY@bbcyDQB$H!ZV$;-*alL+XIH`Q;ZQ*)DziDXe4w~8DS0FtHCbdxQ1#kRb$cPQ^huqgN$kfwi9wUoSnMt~#M zDUEtM_r|jS+Yp-JGfOF2XZKi#D5LI)o_1kfG!p~P+TO_fUb>>-bud(IHJnW(kaY7Q z#l5%&=YpJdtHm>S%4O^B7Tnl5b!SmV+w<15BCE^%XG$o0GbQ6nX4uVGa^yyjt__Y>HV=`pwMx=->5e zsaFPqmu#GhR9k7{D#C-NA7oR~b~6K~h>-UA zA5Ec0?xW>dH)fU8sNS@+$Jg6LDqHZTPFY8dR)2wR48~L4pQqujX7097Kk#@zGo&M2 zsGYtTtUA8JcCW;%dE-I#l+2RTJKSJ`sC(*<$&Z2~WnXUe^kHpuzpUvrv1sx8Hj-(U zY%tp-PLY$6Qw6C_>((uc6nI#K&pF>wYznFCQ+`M?!8h-m#JR@{xD7MpfE_J{3%_zLC9ug14!tg?e96^BRzEJ0^Iv zebg(LXdPFeFf%Rg(r-e#nHE=Sa{eZ5|70HdV>^>EUPF~POfwF)=7;yM-Hqg}Pq4Ky zQhj{m6?Vvp2LLEF;c8C}_%rH013Ic>3%B@&vu2zNw3{t&zv_Yj2u3XvkxyBJplp-q zY{}zfll{$;|Ha1BwAmp%=77OX9ifzV9>g4qU5&8MwvTg7hp`+0OYzTj%U5jUvl%W} zn}>qLF!TG=S=8m++-O=w{6;{1)2HtcWV{#uC%e5S3L8t-@f|WE?r$xh4Zdi-zt4Yg zrnk-J)aOh*=42gX4)x&z3oSx2RAMWPitmG)kDXC&-{S~-Z+?y=E>|;$1d(ih03geH zUGx4TB`xA`DP{*D#{?jpY0a02s$^cSo&;ho43~4~aBqU3-?I5Rq|SkHjvzv$cav}f zbD&;b7sQ-3MX;`TUNitQm{qQHM&f1jRmw_P4nU79Z0gCW-E2!wNCK`=PN8+DEJTj` zp1nu$)>X=uhfQQeXb4;kX2iPA{lSmx#+$CnWchE1(5L+1z4o`hVrUSH?|$CP+*LV(sB3%lTBblhiz2tkuKv(^eQVQ| z4ETO?3$jz;H}l!=#oYle_|G4tqvCrESbE1yaYt1t=$@24H`?2Q*_U0)I~ReVV6mq{ z`J7mRlaj;VDF8I?Cuw!PuJVYc++-!m!Y>ObNFf8wp+u&FnY!@Pxy(<`K=X`pgp;KlJk=vE-dKH}y$ zgPuD(d6v~Va)vw7Y}Y}^G4T^rhLY?dzmhSUW8EyJk=Fb$TYg4+eg+p5`#TA{b6d#E ze5t$soBZp!*vP40VsJm4t({cLPLUybIu=t8TJQ@$b z5{31ZlBR5l1@u?oS<H=R=CI>q@CZh(=x&#Btk1YLKG5tUz($ZH$b>5q)_kVtA$W*xghRk2xGEyN`9y* zVe8EBW)x8sYK5F>4NJd?4eiweUgZE)AiZoliPcBv%tw=%c!Bhii@%KN12)f^_#^M} zpoy)}9}3aAt?21x^j%1dfN2Z`BBpmMoP$-g59-|vfhL{2YK1A&6NX4{ojk`tCqDS7DSUf--tc zcRU2|dC=*42qy3|-KPMItmqzK62KtlRc!n&I0rBnUm$_*ej8nQ2ZF-~F^Lp|i4WzI z3_X&lVv_W5Nlx=gk0_EUd6HY(lcwb%m88N!E#hms7+EFkSPT@DOnRKMHH!PTZt(zMT*-Kr@(1uL_!lrkPMCS zf~2*}q&ZrpIV010RnlI|aFyXw2f<}#MDlPI_|$^*s0h)(FscH~lPNvvW83MmMJyjC z(#y;;=4Avo4l*`bGq+_jzv*Z0dSvcnGQZ>g?Hd6N|DB#0gE~tV0axS&SqFLl0awxp zxWXw#jTZY0uGFjyLWmp|hI`%>{(&pCYjV$S*-O;+)|QNcxN@s2h4G_KmF2r)qrN&3 z`D*hkmsnvPWz&uBU)NkHr0jwrbi0(Cx3OaL%tW!BJNr_V^RLjSR5JukTZ6lxY#KAK zanF|%63(3)J;c?lzAK~(etFp(5jkA>uurndvnm+E@c7eAzw8r`k;G;PrW>(aAJk7# zcXP8#Z7&bzzPLB=zV7Mj_;Z^iWsc|Z5V1NuuK1elbt!|m!e!J2a3{Zeo~iM`t$&|r z?bEFN_p9IWxWfJDSAuybAWU62=kLjwJfcsn#Lr_OKt0!C22(Gb57yqvyBEwJ%+IUE zDO&pu#h<@_H&p6`cq^sgOa6zd!oiA@5zf56fA?kB(YYw;{nA=_E#BHTsBJbRz{8wbYvrJ5WDsE7^_pnIqO6R9P zdS*-X<{Q2vQ>5jnvTH-5}j5 z9W!)ycZVV+4N^*q2uOE_BAuendGNp1KCgZDxjF0HKNrvC`%~ZFirP8`HJiX{Dr14b zmXn}K(l$!**q&^JChqNMZtU`{McQM?i=o0wqn~5>rlS1WuTlg36iQ{G{)gUkifKEa ztOoWs>h6~B4HzXKwD?9oiDgJq;o>eRm;KS@5eQ<@L(1D@@H`^%FL6 z(|Rdx+}^OGh1Q_X>lv{xLDK8~&UZKX$sGY}7aoN^FX>iZ1m(;X+7^|!CSz;Vt^ zr!VI4z&WFixQsg- z`>*IxdmdOXLM;%VM;W)y>jRVs&se@sejJI#(1)L49qBJ#G9ap3O1;Pt$#qC=kd{Tv zv>P8S-W5$qhyr6g8xNF0%OTF5>yJ7amNl@zDZDAGpum`ZDJwP5!4oZ&yqYN7Ut{rPl5Ep)EBfEeK(_j5Gl#cT@-Rhm_rPI z8r|MOjJf2!m2Ro)UQko-lE1Q3;^#{Z`9v;Fk$fFa<#V1Zo@7la?<;MR@|86fcWrO^ zYbdDgJRgilPm!9fGBQn=JIAvk#n+Dn`*gg+qSdEjM(&S#$gt%u)vSSj9;o70xyE-M z?)<^a`MfC4Q-W>9ApEpLJWA(l(N&49-1%+em(#C>;Pon4wY-GKqqIoc@RdC?4iHU| zR=GB6HMfPwm*$J6GKe^~LNF{dy(OhQwQJuji0Nz5BTzZ9TB)qzYptg-T4CBNIhw^x z+HwSt>L;B{EEX{xZ+~*XP8iuypZhsd6O&xi%WRB;p%(Ve>s7j$RR!;gfpkM-Gth5< zi}|ZPFAch^lf8I@erup2{s>lovJGcCjnR93rq$pU_U4#@KrdLqD>ZM-!GisbemzHX zO+xsgkeGvBTsKccIV**=*puXOq>NW%cukGY^=r-MJic0p`Z)Tp=umK3QF9ZNmCNFL z`kJ#BP5))3@ZN%9;MrBPi&c$uGQW|J%5}>83aef7_l5-nKAOo(=bsf!t0xiZ?Z$3L z7a>CMqwe$0QqMY*A;T5MoYwbvf(Jt0@FL{oc~4<-o#O^h&(wqYe1Xr^L9&Ju4@wF9 z?mq9!P>!y`QoP$KMHxaLDkWo9rhPDZ_167I^oBwLN&7>i{RpAO4ct1PGU`E_gttQY z#oehG>@*GGh=VDzyQYC9bQsHC)Aqu*&${*c2{+We zW2r*>trtH0{(PABwPgJ`Uj-@1`@Z)fURWjflFz4HJCA_Q8kJc11IFwZ&Z(z)+tES3 zOn%NM(q?!FnK|Ey$oMAh$E@j6k~tGXPq`AllK(wvCIg%_i=_Fc7M#OS&Zh91`Ea{Q z00e4c8hvBInx;=SFe}-|tM2Kv&s&N<2MlNaMltt2Gf`kT)9+9O68d|Z`C?|Wuzw_t>4F2fevb;q9au}7;vlVt-g1fl zAqb92a}ELtn^9e=_`FZoPYamXHuMBe3abbXsug8&~%?HZgt3CE;Warg0q zQQ;s#u(oKFGelh1_H(gY2955s;-)+Xp2CMil5D^|W@awN`+Llw^As`|l@PnaM5Kvl z3S}Tfen=1$rjk}QWPMPD(ThU6b?`Qk22DBB2McY}BR_BfeUElprp*`_Ctzn6rY@B6yMt$Wez;;(-np*U_e9fzO|?FYtK1h4+0i| zi);iBoZ8m`iHbyEp1LaGX28>xgBoCkvf@V!1G^V9f0p8Ky&F;m0XXGExPv$RJ~)Ag zsGdfk;zvfwMtVg>suV}EpGHmqeK1%s&<86ZLKIN@dLU&3q=>y#fkK#B)G0kQp~{UC zFIt&DI$hvZCJ8iqpP;ZRWP+LnWtc$0C$heQ#R&`L8HpQ(S`hc1o!vgPRt~Qo%j2B@ zo`FxSadIs4X{>$J-!safD2O_Ue9mojpY*d2C=R$oMiqIv3$6k}lKQA(Iq0N7{0u|v zf&li?zTb)fbS;ZuCkwRaL!L040GuDo0M3t@#a;l9z!U}V{oS-UVMYL(mM;R(OMzF{ zS&82U6aUEJ4Ye_$FcP8rM)eUSq56{V$N^K9It z${UFY)8Z6RZwk>y3Ii}@LDsX7=*IzDmZ$AZQ?}$|z!R46C}7LNmkknrKqT3oBGZm1 z=bNH1LZmF1s#=YwF3+L}Y*|kJMj|J1|3o4v*U5wb-s#icZ&}irhyxsoGiv%XoZInS z88dNVnfAbpCM45^G}HSa^V>#h!F?o>`uF*ll$iVHUoyNlvXV%%Ve;9|=Gj?{**W@@ z{@Gc7r!47{e>Fzt{gfr+$p}$ZbU=DH`<;zwvaatTrwlgp8_s2>)+o2n9t5%Y|md_$X~s^U(Rf*3KneZ7wq~L>}MBz zYcKf!dJ6MD(iqTxMoS-l-hu>RUwsJeFTf3f=g`Zhb1$s@^p?n#OLSju8~l82$qsa6-@L z!|P#?THZ{30v$kOXcZx`f7qlyp6>>Mbupw}YK5<`DfI zcgqUWl58qo0N3pY+o^LYN9gzRaiq;3p|XVRSDFim5m`dvRlA zIv8XruV@d-=Qx=NqO!cc<;5DheLIl;cO=rQ{x=eN`L9UC^}j_TGHBl_GG6>wBtmo_ zi4gr)Boc8Si9Goy5_v22;gOfF)W0H;PYczvD)*7dBVKl?9Z@efscY=}NM!In5_!hw zs)l)&Rxfc&(LT}7Ev}UMF<+e}b->3QH+7KJjb#ECmE&})`>}6V$_PtwUe+j6gK)+t zhQ7Sy5rZ7&P`+8Ge@1b>?%A@Uwt*}Dr)@J*oPbkgI_ogC~Do7(#0+-)C7mN8tR(dSbN7%srdgJDU zY3J`>LWQ^R5U$_QPcDG)MPiWffM`wv@%8&a5k;w2BacEzwBmp5U#C2Lp%$>sq^L4c zl5t_BhS)h@8x{2thbvp^Jwh$U(XJ9F8g&iFO*6oHN036oROZX~%N!5cv)R`%nFJ42 z93>9v{YZz=7gO5!N0DL;iinBiE|YTe%l11kv7Fr6x=d6u&$KC5e&1 zaE%@)2} z#Q(`;UU{0F*xE4Scd|#;rEsO_M&o!`kPGM!u7%`dIk}LjcM*hviqbH|X#ZR@Z zr9`-=%$|6bKj35};b&4yfBCh5`jw*M`E5VgXgywl1cq(@Q$2BWI?aFKK$I~htuVqZ z&Jt3t!N{$h+P-vovximB^s)?i z8Y9a0oq}5q~Zb`-kJk#5vUhTc_kIcUa@r?CRpk?PM6sky}gaA+>t` z>#*?KhJEv|A9cY3$Y z!*^??=&YZSPHu(k;>#+==9+1!w<9Gw|H-1;+_$>R8YkEn$#Q=(ERJAL@NxOLX9l{7r+b_iHKWQdR5eH}NlnT38IDEhHSIM)xnafXZsUKYup~Jw-)9@Txn;JD36* zqXXlLAxs4Fk~n;!!Ms`Z2@pys?Ser*y|ARuPL_#{4D+)suny%Tli*y2jqXNs*Yvl4 zlZ&i>l8dyvRr8Dc1GIP6@C z;e*4-O&~FbtM@yf3N^Yz<@!56)~ zY-BjSoeQ9Pm=(jsF@nVG`yd4ZRx!g;QvY8GT2^!cQem16}^~=`#!a~fB z==g=(me}xSTSepQj{Oe{OMVt9#ey0OA2x$wUfEI12dRv(JQr3x#M&wvD(B4C_>uq+ zN6%_2lI9|m^{P}0`I9GE6zPU0a+5WNeVNzC2d?=8e(SP|I?5+>Qd$yp)k%4FLLBug zRP65Z&Jy_%0dnIDl_^A6s}2);6fk{U6e(>iF=Gh?ving!@Hx_X$lxtaMiX?vw zVjGbgXowtM7*fDBQUH&wEy`pvikUN7)Q241l?59X4k(0U43~m^(qbQw8K4l%!iIOj z0f0g{34bLAy$?ogquvT&*D?4s2teOu5wvH4I&H~cV#RGVve*xi;T1&<0}5e1pyRJX zfXRjq0k4V(Ku2udKh4Lz$B3Vj!^`zyniU{gXbXR@5kF^3-VP{)q=b8gP!xqXOomg> z0u-PCg-|gSXrZ21>7GbjoLCtWYPOLG0wobqC;h^rz;b0d%!&pC!l@5ag&uiP6ce;J z91sZD*&sYpBI4V`C+&FT?THk(MAW`X&#LjBKVYHEehQ(o?FBkh95MF-0nivTe2D|V zD=z&YOc3~H9`u+h^|y|%^G0eFN}5DFo|Ii0E6v6B?{p<|i?5ynUoc8Rzh3tac>>|>f62Y7@{hSKloT}`c z*X=nq3pus7IrXHuje@yN`nfH>xoz3G9qqaQxyE?-UmBzRKS?2=B_vc*_oXQjXA-La zsSsRy;YkAMaV+xxJB6@S$`zD6;u-x{X(~L1=U|8q)m~}kpA@20r z#wQp``$`=^3W24IOCrI4VSArKc#)gKB4$f$fD|Iv>Bmx$$2EmYm(SNVPp2oQfI?8( zwoDf)RC(_w4Mm01QkuQ*ygtUD$3;%mKkd3b|2mMGIR5ng-F4SYsxfv?ci`8vw^Kb| zdc-VAP~|u&<^Mo!&CD%!n${4wd~G@*0<8OhLQp|Bmy6d16oRrbmd1SwQKHIjINmcR_n7(gMEO0#XEZ2>97uv$EId&O2FjOODrIZ+Hd%Opw>#6jxt@!}HgXEM6B79W ztKRf-1XqjliMujam9gP~-kMUc zA67{#8zSVVUI zZrJHkY7fo;Z)W_;;G1Jr5YoTi?!nh-SChw|Ag79i#5`pnO%PUU(LE^Fn|J+XH@NieoZr`dzLQg5-0^a~%WSBq-Bs6(@j^Y6Y@q`OMD9eKH0a7}KdF4>BF^xN{M>A583`ssJ3NXm z594G|?I+XIaA8sc>r(m$s&UTNWu#CBVX`x+byjNTU&4EmnG32Z9S}PDH+G<~EY0wc ziyV=7J9$i9{M-P1AGIhNMeipX}BXuW=J+dJwuOd8o49@UJ3`p1s_ zVDcKz*JQu#tZSbrHI>j>@i8PTD@E~0=kOMIJ;X6?)lYsva^<5xLyL-vlhJn+-|*s& z*^YckZA3?_HgUkwl3|HxJZHKwM)}Z4JXSkDVz$ZPxl_BAKk*kX?RUYUj(p~yh~|(L z>CM^D9|CTM`U^A}Ep;|YR?fx`r)2ThBl1q@lQssUL5jm0(s$O0~BUtyuWbT;SKUq=!5>9=}+ zqRz8Cg28^>ZnMS6hNPWY3Bs*$7Qx0>>iSB9ENU)}-T8*d`n8>_;!C5OaF8(psB8lG6Y91bd=W#Ir86i=hA$w4eUo zXFYj!ijQC6o31M1*T;LKx``vNZ)&r32+ejVeQuXTPVDkER~fr8yH7?`0uUrUXOYN2 z)dDecG?Lp34*4J(FR>)Nwv_|gn+xR5+!5qR_Sc=%;~v=HW9a#(u-_lmXNxS{eHR_9 z!E?u=5Ate5RVzi0RT04r#3*;Np1JWCfkg*0Pv|e9;?`1Ol^NKylhP)0lT(9}CvDQPf zuOWO4j+9BEmo1?pZ7yQ_5b=EiS%$zdbLQ7W1ZUTX`VD3%7Rskg2Z{-wC2LFkd8m#Y zo?eubp#UDrO}G($1hZQNfh{@uIx{vr1i<@`I*#tcq_2EHJOJJoA@X;@Y5?AIgvygZ zecK`ftHKci*rB$s!jV|e$Si{REKs5zIiFngJPnH|kN~WQ=K*|A<(K%E@1c?K?oE(4 z7Bs)jrH~{hMJA>~4$tL=@iht2+nbQ)l$bYqngn4DCTq9rw~`GHh}M4Bk%d1isiLe9B`<2@Gstv0eEkg zG?n4yNS$0HkxbN%2Ta{@dy^eDk_%B%h_jO^?NWBl6J+>UOSlrI0lYtn;~FJp!UQFI zo2Lq7r|u7@x@@Gvs#7H%P(C9~1vJg$lf=(|69BQ1`-{c>^F(Tl>Ejyd528u*1=Gv> z({DQhau#g#an+Ye)3K7f- z)6a_V&5Fv-ifPY^TgXbdy$>J$e-(n=e}ebKG9*cVOGfCn|F;0Z)nX`#x*QiS{=f0Q zN-0-B@)3#Izc&#~P`jx_#cKP1@Ltmf*UTNttXcn0$>>Ml15}>0%dDAyN=D%ibe;8| zqZ%AORl3Lf(x2liz^GyKzGM{fx{bwRDD@uiNv&eQqD1^hfAJnYGiERj*hI{QYiGXV zqQW>_YV)W}599?DL`NtN10u?)K(9)r8Y5%0K1jeaT4Y`KvWx6OpBh5V+-l zVPnfM6dT|&y_yXpv6j;grfa}UDuvtOve&M}MRYc*y9Ku-WhZLDHUT@nr z#)+Nel2`28rV004(&{M*jJlQuY+e^BS2s1b_B}377d7OfA-g>oRk+?99W~um6^A|T zxEp-J(ThXKE1WvOV_uUz$mQmkImCfjP8miO>0-ywl94)7Uu1E@Nv=c2;*G<&j-!Bri&qMO;(p#Qje#ap8$&= z^`o%v;j3Yr;QSU#UGDc@hEBQ4)1MT@yFP+=hefoO2~LskGuAX*o*u8d5Ncg_6MN2i zZ?JG5HEwZ8vc22p(R6;dBcbW((;iJ<$+aue{sV_PapKd0c|AL3Dn`PK_jQbgNtf7UrubLr zoMQ0v9f`-3Ctop-pIl=U*YRHN$WH${pUkZNz1g2xAu4`tD%|rOL-Qi&=F~&(&lx=) zis%3wL(1^?EIt082~f~h>gxA-{*K?1$DCMAMZXvbY6CC7d+p*-_wg|F4YSrekdwpP zMlbuelU=>&x0Nu^W&8dh6vHWSbsoGU{_uGWFO(f(hKDrH>W7{wMv^(Mp)t=(cKvdV z##iqH`6WrVM&rdakkMcv=B3b8q-?+pWJn*q4=i5z4mO@6pL!Vvab8YFD6v?W7huT- z2s+uQFKwvq+sX*iD91`^l_VX>)$*kr$6Lm2LHDra!g2B33;Vzn{uQ!sc+dPYm$4~H zvj>yqonO5r+oIt1O+w?dN)0~T-eN)-U3=P?5Jmft36on9Vt?en-GN|c9)XE3CZ-*r zTC-c&eTx2Q29mlFC&}z5R5#E_H@bMn8XhfXpFm^HVcVzCav;dxf0o-5R$*XYEf%Y^ zo~5|(^{Pf*h0@?1{8%ejKyymPSK%G^WtXC;X(LjVckpZ4c^>&g;@dI*jITvUxVAeG z`;;KRl;W>pwz}jU3So<>MUB5~gx^O^zWnK)wLVrQ6RXJXL&8*FfBJMz4ReZi_^&`)GSt~n@N{Puq)|p&BZ9BEeHjN-6 z-pXk54b9RiEriZYp`n$c?pLnaPvN}LnpR8N&wkECwltU6#VhF(|J13Roq6N-v`X=k zYc8U8rc`}p-t_jxd;;{U#6R8srJbJ+H6KxgH?O(n zF>Bw&1z1EzK_t}PPBm7y5M{P1Q`yS#J(ocla-7ez_4%Pav4h@h$!x2&h^c)ww$Udd z;?|)VCujLiqa`|i?+@DFol%zzS84d(Oy?^(B@!FAiq5sq0(W@Zg;q4Yh-){}zxyIv zR%fk=Yqp*{`wc9vt_>2uu7x`KHsqQnj1xB@p-zE}LS|z`^L2MKqh6H~AP}U8;bBm{ z8V#;F=Hu{wslIxhV=~~4jv{TTQ;w)mn$40lJqCITg&3rHt#Xc$oqaW+a@PnK>5 z`9u*gonNWMTQ@_nM~z@lVQh-KkHaE=>K$alK_y19;G}9O8rm5+O8<6LZ=9=LlnRgT zvGl0cY-84tqZM0XKS282>JxEKXs^qVV2~@w^6zu$VPigY=dd$b8zCIpFYxiRg0~Ac zkKUE*%n-z&03Qtte=;sTffdmkvpvSL1SSt>Y7`=P@|rnQ85HOhysQwF$5zvI`aET! z8en^IjIU@UQ8=Q?cBoiVGg64=8aoj?!$g$1N(@*{B+B9J{?C4p9?bGd&7pc2d=Bvl z0W-+oe?V_Y^(Dfqpj-soUbk(b#_Q5ShIg~DH+wpaO7!3jp{4#TKf9|VHAWgv%aLDKsB`cgoQr<@|Zv7qvAtQ z6j`no!IeB%4&8Z}CksUj$tFHfmv^k*`+9L$=9WRU=qz2bW{2HnbR;z8e95P6Qmi^X zk6zM7Be8cE4;Aqt{Hc2hB#=s0)~`J+!L5RS=RnMt2%K~DL;!Vtjq6mWomvx)p{h?+ zkkRn~gX{Gx;_^d~fPY!JXl=81`vMWK_5y$C$jkH^|o;tp}BpbnDs6|-+xoq zn!?o$==!Ir65&hN?wpmsV^ATv~p=AV-X5x|8mCUXTk^SP~XlCHBDm>us z((_@zdSnA=NCRv%kB7~{H*L#N&;smofRkC46{5s0S&hOeZSl+ zsR8IBWkorn=0U$o%*6Z zRd^v)^fnbnnkFHbCZ(Sy*cZnThY za+_{On({WUX;%~|WXIhTddPCW@IYDwi!2PMrrbq7mpoc@*z&JU-#A9DJ71u}o-e*UvGezFR z{>}M*W~`XPYQWFy6PHSob&G)8o161YKKpm?{~$pUgQm*LxN4FBh%?N?DXq$ZadPbd zm4?mzIN7k715O|-ct1`iNY_*TJ5J_`zq#+4!vPR)EGvmSvH|JVW`eyXFHEXQ|SnnHQIyPYN?agdy*W&NPk#$0M+CsW<5dM68LUxOgvvTAG4 z%antP@Nu{LiX5kIJDU)_BpQ=&<-0u5OscU7{R`Dte*rb{|)t1qpYBh0GGGEdnE0QP8)y6 zD*e)&gC2r9&oSA4kn)|ib^qnn>(+!H4$kecTW0l64|msWDHLRyYcHs=n1K)E`6|m!E$PY+Pa7GUk@Ht3$@;&5E}Nwygdp==Qb<>3QG0fpYnt zZVC7KD&H2Pd_u-fD)G3>dYX{R-kKD9_pL*gtjg_9Wucaz#EUN+y$>CTfJM1g<)h{w zN<%Fj5}lI59mj-%_6O@F$Tvbqtq#t@d$SLz_DTaI#($laJu6f{h8V6jUqKI80xmwP zng(3Nc>lp8J@gGjYlyy_*(B!eiAJeIE zKq15Es;wcv#lfg~_TtzmH@%MrRl{N=$?=esTpwbJ;OJxvayUjGB_BOHiDX|^#FbT- zdbS8d(Hk?kjLnV-jW-U9e-f@I!`aag?@0cc z{P8I0tBk1!0G zX-sB$kylX1w~rXR?`C#eRdn}ZCJKE0SU zNpFHXy_S4sH#@Tmc~{Ky!-#ZAeG&O*rddDzhk^Q?{Hn8bgAthRXTXxe=HP7GYh@?p zbRn(zikTLdS4SFdOWON@Sz1%>Y*8*G@k3Om&ES5X%KlXqod8*-2Yb)ZPj4>I(;o&n6(2bjT37D#e{=ols2gYdSQTGb2@jd;6nOKTJMx7! z5yy2`Ds1J&yxS!65oDBK1T7QOdl$XYx5}sBh?z0a6)p`5eDm=>8AU5!L!Fr{U@?e!{+nsviVPE$DMTO(1)4 z(a+>=pzY88{&$6E;qxtTfA=^m&vb#H>q=jpLvhzDCV#3OZz7lP?KHt56NTf~{CEYe z!G@E;jGXXVVsi8ops*4EIND}J){m-4@qIuOS3qIKUvL);tdSun0Xvvbs1JhFHu$Lk zHYI}#^$p~i4*_Eqh#8A~3N!S8i*=C>D69kv+!t0nnEx8u4KjXTHbI0p5J4Y1q4`iY z3;@LOaBi4nu!!W_0tPg~WUk7M1Vk%MAVUvdQY)VSd6mZfT3-E!$fpLhKI!r?F|47ZNDrK9JvpTyorcu!;5Q+ zNEjwc_K8fb!b^{0NtAmE;V>P(Z>%8h9c>O)8NP^~2GHDJN89$kuoB~}yLe>7u(4Yw@w|kDb3b+7CCiaScw=XVaDu@@uH5O){75|igzxK zU$%{3#iHz)kDI?QtVECgHMEz8fx=3R$uQC3e!?0-V!18J;NqaK+LNdi|G8JhGjbI9`ehQs$ z3PW}ZQ~Uo7#CiT-L7b8BKX{&j^k0rPB_{6w0O=>o^Z2xK$y^@a{teQ*TAZM$&$-XS znf?XR#lY%z!*;k#{oP-X)~(ihi!H~sJ}~$0ucNKAG5uNxSlv#v)ZWi#2LqUO*o@!9 zQE@1g^vnR;`sX<7*gZ(ANi+SyX>Z*5l%=lFvSDqWv*kwwp9>$?g3*Yo=48yJiq}Kbacu#R zt^nL?H8iu0aIgT$Mg+MGFBFr+q{=*!HUn!qk{Scv_mU2{@}t5K(MDs%K5JX5!1+>O zD_;0YP9uT%Xn!k7N`_V=MuMn%JEi<#(kA*4Cu4b4Kom>)nCwHNLO6jl(y1|&dXWmWeBNHI(f zph;RL#sI)^-i%7Mwl^-%d|7@_IpY>XT~U;QomWNUXaDVQx&1Fl!`1$Rw8=jpP4(YF zn&$(E-%Rf#h*j;sXc~prseT6KFHK{!fj)YL_qM&m2nT37Ux-Z_Mn^i?@uP&9t?f|f z>UCTEk2lU8q5w#D0fhutRZL7=4!Z}>x=zd0Ap>7--IXVSj7eh`=0%?A)?&94&`fmAI|6IqKiPaQ?W=?f{Y zSow-R$?q3U6K{2A|*6twP`SazjX93li9Rxhviyi9$p^lBtBEZClXd-ViyOW-8+?Y@BX` z9h_u}pF5SBVIdC*nkej~D<~mC67RU53Mw`m2HuTyep&Ya)U!tZOTJxFTUdO^MY!uE zga5dGAD7)!<19duz2QQ}A{hU&)U^k4z1oV_eWjAx^ZvHTVtn!Dcgf?zHEj4370|O;ZQB&3W#C6z~jM#C}F&c zgvH1wIqBa~txL^|KQgFCNIj$8(b`Xc=oKGc9!mYgGAn7jUCoIn&-_lIN|-_?5nkF} zyo3y3XeA#Vj~bSIDc&#pk&;LzN=3N%0b`W-b2_(3n36f+fXx8#>QO8-;3YBo%MYAh zb+Kx{vPgSw8hJ}532m%f@vQSVx(;q)bz+)PMez}+Gjv?EsCO-_rH+Obe-C(^;tNUz-9 zvNFmhG9Y-IRx(X%?dVHnqVhO1DXsho>4Jor0#{ma*bc?B1zGb|_3S#&inX{~iI=-^ zIj-+2OakY&Uzc;?ZeUrpuC(F?(pW-*lAMWwz<(ecJYz@v;oweDmgSKg||D zm+YR`n7sX_wqh^bQju1RqV(OUu0ykX5K>2d`CV@0^^C<6zJhSx?|R@RNHv94ZTGX9 zAGH4Sqb3^l-UEkxKSrTLyU<#*aK|x$CCw=e?WX8yN5RXSzf(_fH&(|$nx%PU_Z59J zx`MN8wZU7U-_eFL>Jqw?x`8p!CMtfUn$|hLYK`6w^gBE&6<59)TzAaBKLWO%%lR<= z&h>|NJ`d|x)ID|S_b%C7^|zSNKs!dbwz&28^^UUr?wikbLF^Y`MAJ3>`P<_lOr`a^ zD{lz$QXY;-F`Fvm|6A{P@=v`3ecToCetrPkRFCS(qlO?sT*zZ?9oAl^Ox63XC(o|o zEl}@}QnJAPr`{0|jIxCoYa8V4K4oz4vM9W`p_g)g7;CYdikghw8)@O@#W z#o75R)o_bx^N6-z+8VcBR2Uoou)UXNz23jsY6Btga}qUyhZM|V2hue#&o_xjH>fcK z>8*1@CQf0v@B=XL;`7?*tg42wrB16sPaTDHO}K=^GgR2DP0)K(eAFBmW|LH$-rE;yXa zJ%vOHAL-c$BiD9YdxJ)5M~$MRvG4;>{S`?-eyvA$;Hz{rJ3fM)lEuMq+ z6mIWeD2aCcWE7_o>H&%riFwBO@O64SxPxR+w)*3aMXiMMOj+QbedHozf$k}$#M;he zX3$uri^4bkGr#<2LwW?d(X)?LbL=jkqH#ZNz&sSOoZAg#?xx2&K?wgsRQFQhg{853H;EjOTq|NQWThAfN+0n&YC91YIv=HfRao$^9pa#$vJHPsTak>% zV)DNUU4z$s3XnhCSu1y+;F$%W-LE-aueI-AUk=3Z{<;ZT+k>DBSYu|ve-6MO$>Ggi zGZEYX6zw}efFQgfyOagioFVt|82teNyH&gu3I<8P+^Uyj8Z=>Q+ zP;V&FMyP=8Q!EZv2E9N4eOYgqHuuPuF`1!oUjTh&vOr4nP|dbboi;o@pHPD~B4dFt z(<(gkC>BFKV9aTFPrfIC_vGu!N^lj@-2htpOTIh;*no%ZTxBs;LF9+U9IzjWgC7+- z3<}@PB8t3WioS`Ai;7CbqEOj4*r#Du6u38$`P-r!+(ABi#6U@<1S`CJo~SY_rnD{Q zq%SIGm=!RQZL-_ zp7n{J&x&7ci(j6PU%iQ6CrQ{8NZ8g(*!4-+&r0~#mT)+qaCDP!LXvnUka(e&c;%CL zla=_hE%DcU;vc}s{!c-g>p$?2$^P+>6G${sef)CW7rXJD>le@5D(aRh1^@t0MeBE$ZAD59AIhX3mp zb0eIj(F%gmf5`#ICI!}m6h+arnT1C4<*dm-W(TWE z(>i1|lfe+`50U9!_66qOj9o)>7<}x%d2>28P2$KG7-*p4f{;|-Yno7CT5sF9CO~@V zv~cFP5Aa^~*1aPr0?EH8V0Ne{>ci^;B2Au}#zC6zZyLw2d087~cF_@y?^Xfy9SQ=_ zx8>14=v&*i-k6)*x!(V#rYm`bsn+7>>s&Uq-`LO-RaDep>~`pc0rh4N?xs&v9s}sB zMEFUI)0+50+NmK~=k%!pJQG4`Y7Aw0BxU zn$sRqVv3LpNl8g9PXk$@w5FarjAkB5ReDIXgr>JPuY~S(TC=#}<7r-T(?o(6n1ztG z*8&B5O?|Ju&@$gg7e(?`Ynv}lx+{+SPW7u;OGxF0HP4M7JnQV?tUeBrrAj`FzT6@L zYo*V}Pc~UeRoaI$Q}fzKa+x3bnx#0bw2zi%Li}ti_tHBC$~%`|jMaT2zcYUGRkZVS ztFBh(VEgxFp`o5Ta$&7bV$rUNA;SEw$xqK#x~9Get=_Co)foqFPfF(h-kOX3)4seG zsuQrjq-p#|d`mY-boRSudbie&ihf7l8G^V8#abY09;g?l z*J^WOP1Wp(I76yss;oMUEB27D?@TaOWWy?%T zMR=?1`Xwim-S!sw&h=0WT8fRgUB*SduWJJzh7QT0LquXI=|&j3VdySF5D-vAN@D0zKp48ayBq0Lq@__r5kaL9 zah^Y{wRW7dpR@MfXP@{y&w4Shn0LdA@8`O&`~FSEHzODMj8oNlZ|QQ?7TEGO8jX+1 z*R#*xR~B{<(_oY$OPOW9E4sa)A(=$>Yz<;ZDKVnPlQr$PU9crCcB;8Al#prLZ-48E z9i`+MGadI0a_2T%oyLQgWYOq}wz3M|TJFLPnb;E_Zn2DN*+?Pt4l|(g0yNs37Vgry5v>_o=iOk}|rV>Iqtb1uD^N;_`IrdPP9iT zR#*K+pc^ZWMq&E5axTv#J{WKQ`aW=f@kIFQ8a!+%XWWzVsPl{8fkf2BF(njrEh^CR zz{2;U0KDlo?vKk$Oo?;ag+;6!9Lm3eXSvWt%`gx~P5{EgzT029U1Nz>gBTia9LUFc z5k5u>4urLIdW8bLj^!1a*tdf|q2GdU{zx;r;nDUZbiAft0*~Y?RV!1C<^9IQ6`*)G zGWd)iRV2C0LHl&9vKHicC^b)R-L@fbO8NGMi8dYo}TcbIa=_8J1|bso?_RuG_(hzS$aCB7ij*s-hmwmVW& zK}-Fa!3!gKkPv6p?2b&n$V5KuahYrVC&}hC_M+pFW}J24WD6z8DlD=+=5q>o_^1ht z`?W%YH_nL98#;&us#D7StS2DRV!^7~P|Qtce_~e?;2&A7>_`2X)N1s4%YNbQ95cRy zMfNSl<~HgHm%x_x`D&>X&Ak;`jNzjq(Y|ZzbTrBO-P`5;JKUbi?SCp91LZNv#$?>`gCz~;{#YT;yb;YN!*&AW- zHmK^wxJ}&iUA%rzEVlY~lr0NrP5$f*78G+gkCuL0PTNN<>lVEw31R^ts##wqH6K~( z6h+p<2!N>N*yrpPu3xZwe{R$!clO(RsxBJud-$ob8BZBR4#sK%M5V(xV6Db>G`DKq z>frQe!&%3aJPj=Q@zqSlSCygqVDpNo-{tYXTAVsE2xLlwk^!OS-keAG0)*Pca8eTD ze^^NA`$?(RN4lATqgq;Jm+ZllO|Q(8-L|AuYjm_eG6@W<5@8S3^+38)s;z0ao)6hN zKS-}jpLO2tI>2@FHdc}5n(Y=x)#XWFyqn1aQ9uJ^@vPAL1n7kETMRIL)`&6tIhL#= zyDPQ=NY2Niwk&c3Ks^Bz8v&;$mo)uo=nc?xmyI*elP*I9py^|PrdTN;f>Uy`mH>(t zVk)lynqdlh;Dk#F@r@QP+K)geYcvMXG{^fFn$8~i5B)~d!+GG&NYD>*2dCWN`rcrv z7GfAQga8)eXdO})6e3L(qVzH3!v?}F^j2dXVi^c!9|V{vb7CWcT{l9lsKSVq!(6Px z?m@#GBd)8Zgf0W2?1P}`t5DYd6u2`I{K+r`sA#uLh4YD0d6k5}lZ^=Y$nkU`A|~`S zB91CDUNjPE6q)1|nUWHj))JYq5SeuvnFEMdG^)TTs>myC8}Z}s_HbVhAO&F zG`hhky2&fLB_+D8CAwoFy6ZH$hw5ps=+l0qr-NQkhf|)8wmcnQ_&exJ_0NQ|v@fY1 z+yu4=(Xjq~D9e<=i$GV7mB6Zr`%}9?b%sqNU4)My4*pxsSXF=hbvhc7zw%d^N_D2W zmoEGg$~FPXt7wg*^Di500Msk+yf34C-WVvEaAwk%AB$>2xJWhiT?_)}D@ z{sVA&oz0fdYG|WBPq*A+#i$oVAmU1p^5XLJx|4Yy)`)cv#&SgR8r@FGJb956#yv zL)lSb0uZL(j|=e04w`eifxj^R_eW?(yg@nP1{@P4+hykWVp{ce8}|LD*ce< z3!Vp|gD^Ng=71myA9D!=K?Z2JbmI5G3iRtGIT%nFX?_A09=mqDoym6LGrP8Jc&6re z2Mc0bj*{Fmu+_F9P6NsWs$FLQ)2XPeD=Vv{-Y6@pO5Oi%lvBa4$W>X7_4qS<3_M#= zHxhMRQU4lGcvowFAL*>MG&obKzGgykOZ{DwewEsXD&#G-ouZj4)h~n;JgNs_`qe5Y zc1RwTbBh@sMbsR5jRLxsKCc3{60$}fUwVdDo+z8VR*vkZX$72I0QpdsmUHHz;q{x4 zI<1?udiyXoGUPs#6Mtr3m#6!wOXCc`nn06?Q@TL2gbl@`R~{Gl4+bVlxw$7-nKY6o zsW>mDM%9Zc8ap&!Nj3~<(9$o?%o(hZ&REpbHnrRInF`OEU=Iq7*iSEcs5k{scv?IP zJ{Rut+({SdezJzrZ(j35r}I(>NRSYH5uTnd+8eE;e>(k4fUdPKLC&nTKUp_JY|fB! z!h0gywX=0F-=1E4$>AWQ%|4dLyltrZ`pozF+Gw*U`t|jR?QPBJ%MzpA<#ZkI`r6GT zH_MkYeW%7Oo7zoYC9Fv97mxXMj5lbxK0Xq6lKy-&fXd{=5R5o2mr3^SyhCU!SmJ7+*{D zl&gKudrtymnF!?|DnCfB{ZI)xO7Lt!Zk6RBx0;|4G53NzN}mLw6`~4ZNmdwrtnH@@ zF{0A&l0Hv;?PGa=l!9D%@Uyu#!gTP886GKa8^nKy zdOb@gq8e$+hC=*MG37h^#L1N*Z*NhbjzuDM5<4N* z0Wc`YUZwVHf}qjmn&D#8p=Y6r_H=|kPDgksKC;y zEo6X98)>+sT)Uth9;A_fGc;dr+u>yr12Tp^aUC`gF_l`^kdgEJ9vlaR027B6ORYF) z1&HhAV(CL+`p+~2--19;N2rD$hi;}SvIK9S3|`2=@4QG+k<|mTx>jy9q&ioZ)>y$t zjAKyzeWp6=sPe%xCljUGx$K$5$}%(vIE<7Ni&s&Hn0OewMs}f>=D6ni83K050qMb` zsEvEZWlb)DH;6S*D_2`_Z|_qA7N`g9sW%A3z)L)mW>D8d8+A{GGj6)=xTchR)KQIw zLIu^y0mTEpMU}u|?Y-XEgBf`>_CM8!cG3^K2GcHY#N@RMT~l=n1+UC*8W_P!5#?06 zW|vd{@oQCR7;Y=M?kDXVn0sDI+7_R{J?*j%u8uFG^*~%Xe3G4Cpt5nR^I~k@)7+6UaIEZFLoo615R4;jLMecVHiX8V% z@;`Ls%2^r%_kd$^dqRMd+9Yxw7+{szk`ShMALkYZ!w0@W-OZ2;YLp;}EZ3Zv(F8C? z)QhJZ?3fs)U`EQM{``AL#E!&!ZQqj$ur{%$vYAM*dWVH3Inkiz@hsJVh#A8Qiys%7{_&Rdz#DL&M@lhwoTC!v67M(R2ReoN z$;^v0iN>(HYz;8u4x%pILO^fk_9xgs5YFuk-d*ZAQ>$ zbQs>K>v>>ear1kg0N3$s{zplh84DvXAjSH!dlAt^y4ct<)#f{a($dMr=wI-raP!=^ zg#8!~W5f-Mvf?Yq%tSFiBEf=E&%v7p&9=?sZ-}hk5`dNE?-%y|~m#d(xS{_K37 z{ll6&);lQVHavr9?1P+t>4YbPXaE}m(;_<#Yy|o=XEyVaY#2cVdS{Ap)>}*n7H2uH7O+KYCW0&l+IYz5!!`+IK&V49tBY#)?$dS4h|^## z|Hh2&vu(rS??U=Nx8XUZX>}mXVG9tR5u;vq;**|QP~la^*#$rn5irmNVr?bxd;`|G_HIbqO!nd;1z0=5^B;C zYPJw+ae4{TJECE>MqzedK%+R!u_f&OLYT{G*aNC?H_>o+qi_$eaIchbpO$dng>e7V za0FFEkZ44RQAC(mL_|tNR7=FAOnLqhnc9&OgKnH*;Gly*ATHnoIz(##fpAbDC0sh? znw%HGIAk1V!!@~m;lwvpGn8xd2BN9xRjCj+5K6IhSnB^S-DF)}_-2EMyLtCdgMGaB zD$`pU&*c(+8|-6KG)4-P&6XPhgZ)MK0T7L1xf{J&Q^lM5d-#e}4_TqCH&G)ToIwh9;y~|a#pjXn0 z+5VmFo*S-CSg4j87wu;Ubv6Wy`!{<&qVZ0SWp`66MmL|fPOrU^{)TbnS~>~bs-w6E zq?@e3tvUi>Al)QZgl>dD3;;t?*#Va*=sZ3G4Ot-Fj9^Xzp6`JI>1GrcFxZdg1#Z;)OdChSH24vPuJ;(=`mC4A305=vup@e;}$YCpx7bG|^0 z##gYvE{m@W*oca+GX3TlUrmjs7GFb268*f^?S|9yIxRl6=k+8qoX;DGwDF%e+F0+z zHO2DdL7E8y)8kt3o1$49I4MUD<5sH z>v%Zq_pGC8tbNKXemr&Ke)7xW#UJIbUVv{`OuBzF6MQ|yWd8hhIY(#3bfxS?#f%1@ zGjNjVj(O$Wyjy1F{8G?G?GQoiMD-h{X!@!}#{Am?`1Xk3zj67t9AWKd9Ii{!drsY-ElXk&SzlJuJjcCzaydV> zzROGSYx;yrilN%Fec>PfS-RbyYPU1%<@Zk=$(gl#fg4f{yWC{gCBGtYuQz-X5rrMeh`y7LP=o#Cqz^TOK~Dl^R*>9uBa$ZmO{{ktkntBNRp7@ zRgn4%t2tPU5b2<1@QAGSx$k^Cg~!Vf6%y+PJsfc&*4VJXK5I;8Q3-nC(eS&^t>;lz zEy7G&FC&h3uHz@43NwVgic|`Ddm7&&!%>76!6yHP<|d;3DlC~2TZYko zK98YFw6C6m?ogd51s9}mQMtQq1`^bhayJGZJ^biGUoWG-U)5;p!shKyr+ zIZv?q3}$8WD1H6Vj$(jX&c%f^o?iX~_K5LBLa1)0NX6DIQxz@yJ>sl4x^{SLrKnfl zbvgoXe&Aj{Ihjk)kOO8Zks(imhk)Pb6ycU=(SZ<9%+NfF%zFx&qaWS%3g zdGV<9A?B#ro7P0GH`{EN>LWlemiJz-ifH^reGqbJDE+WCS^C02OkQp5g^F!p(3@!t zVQr~WSSG==(WUy38Wlj-^Gy!&xS>?xv!l{$lb0xPPXnyf+1}zD4wOB4(Jyv^vgcAe zz`nc-C)rT7<+oi&E&0lOvZ1t#ud}w4saeWxND^4u0QS9fF2^Bcn-MB~%(#Ay$6#ow zWnbs0BiYT>o{Q0_8em^UZjT4RzN0&jF~ETdX^6bF@#Fb!EzGY_3`r!|i2{Va${kNv zmH=jqYzw1?V#b?*F+>tO^K;_ep0sZO?CWE&;D}JjfLuEd87R&DXyqMWSkKB@nMyAc zm5dhzT1)EnS@{BW@32Wf^m-w!i5K$(%mxOv3f#p+_*(B5f2Jt{p(~WZSWRuo2sV{h z$?=lVa^7n{@E)>A;_waU-{K#`K#kYs-V3pmWufI{t;B$S!JbOLLv%l}OVa``>uB7b z=-ikQ;qMlAP>~=%hJ}WHtzHd_K2;oGA5@VSw~6LGDbK(Z_=S6v2zQ*O2<8kg-_iYb zh)%Nnn~5l6SOJd)7-Pq(+$M`p*S2$ucxJJ?nL@cLv)4(b+IFFJgcOapg4AM1oWJ7M z0k;3{vS936HC*^1Jnwd#L;3t7aH|g9vJ(H`OPDG~&Ati^@1&SqSl65opJTMd5}>{n z;6Jzn^*zvgsA=`2%egDL&NT@m<8}KPX{vtjr~8k>)L&uAZF$2AqF$O$XAcH?8y+z85roD0l>bO9W$5gn9bZeeY*pRf|ZzP+qV_PxteoB&Vi1r`JBQ!+U)z=|#CwZ!lfSh*MH2RUBC_+3SJTwgNT$R&lBB2?~5^i?q_#@+>NF9v6KDthdskev%fRo zy|_zE0*|1a8L|*E`uckM;V&RG_Yr+3lz=4N?*x)4Gc%k9GExOGi3Twn1+jVsK~pa2 z$h8o3>oka$Dwtn1SkNd~*eh5xC0M*ASaKm)>NFTe6(TDdB5xF;=oO-z5~A7?qP`HK zc^U$z3e^z})iVnH2MlRM`cKq2`2dq$Y7cPIe_DHb0|Pxk*k?bZEPYp?(B(%!|d z+5`Q%+VeZwBmM`pNBn!*bGXtTBj4YpJ@Vhtp2M%&i~0w&7x8=AtNc}aw|-xHg1>2x z>F?2A&9B;%`#tUT{i?m&|DpCCJO8S^xZl%W^KaVo`5o<@{8@Wye~0!uf7M>V?`rQ{ z_^-4V`}b;ZMfji6UgtliJ;T4!p3~ooz}<*n*xj|C?-Y;{TTI{kLf^_-|?tUHLDx zC;hjz_wK(>d$|9x_U`?yZ0~Pq@7`Z$d;co!l|TO_+xtU%|8chWhxY!T$oBrwp7S5t zqy0mBe`pWL_WnQCo+eQFlLNE|6#V|P+7krAxj$!n*MP&MhrI}#KTmSk7FVt&x%pog z-SH`ZndFia#Q!qMRUEm~6Z67{?ea|l0U2C$-i1wGtDq0St79lkZW?BX>C0EgZYLdm zoN9QqvsyXRuN4->P4-*xdWGA9lxEl6+!uirJm znR!zH_c6%P&U!q>UYt#h#!;MOO`2vD?@lua&3^Lp@E$zjyIyI*a}STw!qnqN2d(T+ zkWZTVgL-A^#ZpNe>g7eVWop$`CaU`J4l6MpM@Tm;?QVf zg~FKBESJJ7MM$Omw3HsV{CrGerQDM2A{4&D4{?!w$Dy~U|A7g4OKXQ_W)Jp-6!Han zfT#CG=VTS%sW?Mtl&1t0MZ;T)u9W2Z;t~DlFU=|Z73{r5vUI@3aMd4E9grtUwN(^f z+H0E0CC1+jW_c`=4zfNI#A$m=Q%KWq$1#yRBtYk?;}tnjZZ6BD>pq` z|61W@I`FVSeVbstRy&PQgRaQz;eftwdSj!h%~E5NGE~md-wqy-SzQ9Y^;UwVmbPK@jIyr3jpum0TrCTECZK9Nqu!yjgnQ8H8Q`s)NUXI^K4McJ#VKs;o%Dly z3qi~XxxM5TcPF)_xyA@kofL9Snnw+CJ9Ex75y}O6XnMfu1v#bfu?Vl;R}*-Wbaa z6AMc7m{Ts6hxr$fR(VBI;<(5C>x`wI!;uZzF`;^vEGjK3G^{$Y**|PpDc{KJh?7R= z3Krf_V;|LzA@wW0&&+xKOx5Hi>66-q_w2?kYT|RG$(fK1=IvxPpKD}+0}XF^61~;z zj!8X+AhvuwkfgksXY=Bo*!C?%NS`o<*8@v^ydnB zZ;$#&C4_&QS>@NqLA~;us!vRRy`^c!J@w>L(~QjWraX-Za;(h0R=u~b|`r# zRDqiV`4l{mPxT(ke342K2Nd{zo8-1N6aoc4Wf7m(3BXHYq7x44N_^8oB+Y)dsnYQ=b~q~gvsM&e1Vfrb)&=R3v{c=IR^3Q#d- zl=E$L(+IE?TKEm<10@pho3}z3U}|nFa`EN2G?Z1t^r3Fl;%2YoDTI`#?ipW?rsAG` z3}N!BGF3pd+a~aZKRJj3Mu6GENsL}0Qht+IIb#k3 zdEq$MjS6){DDkc5QhC*b7#?~EI;Bo zR*d)@SrFdRITqwk5amaH`#Sp_AEW|KUx9H2k)aj#nNS~L9LACqbJ>r>3*L-3lphAE z^yssvd$A`|C>QCEI|O>QvFC=3lsb^HJ#UjAbu}0VGe2`6Wj4Y#V-a|k%I_o`-ZO_9 zXoR`%A}zFhSo-IlCE>(bCm#CDKX+(Ml?HwOQ05J>QtinLXW9*fKk1x*dE68_wVM=? zE~3xWlc+TX3YwzkKkD3z)O9jji~*x<7xC-9y|zF!Y1(u=DB^O|3GuI&Uw^iBEoHPK z-oU9{;BJsG4uPK`5hHay#@%CmCe64=!@0NU+l_;jz2A@#9dFuD?66b_?_MMXRuk-e zW@F`#IPtf_nDr>frr;vRYe`?%%x#@`Xz?&Bw)X=GmXB_TKWPCQY`Zn`WEzDm`cZ@h zrtWsbAwbv_CH0_-MeNm#ZGut-Fn3yJ#piRsAJve_zgOWnH<+y2<9WXFxj{x8jSF!S z0_g!$qud=S;)?KKoj34cr0LDFr_9tpnIg5OYHO#wK$5FW&nO z-p>mQdei&>DDI7sR+_}!Uzz%admi&m7gtY6X`{cRe|oi+tUE_lW4jfL#>aHYz4~4N zZsQ%ij91*dj`b(*Y5c~$%-^`T=QfC-704y1k?CkX_&~)*u+E#%hrpezcUp^qi$9K= zt9^vJuC*%mG)6*-;yE8k@$BTQXFU}n7%Pkc-J%~T?j4=Q(08s|0Nled#^Y3Glp%mp z{VR%l@)W?0d7!wr8Ltj3e|TKJ@r2Yfz(r^o*p0x@^?~a+N&2ko(`Z&YDhM!*xA7M8 z&awPfntjpP`!whML%Y<6Q$fJL>zMIH4#!hCKUdPh|pzBt<*J1@yg)qYu(V zyJB}}#kv!M&Bc0>qgOtg9I~4>pls3$(OGLx_?+s2+-f2oZtEU-E3Aj^Y+&z zImyoB!2^1!xwQkypJUq+0bSeg&pW%m@0y~dcD*<)QF<$K65VItqSaA({IK$iFON^6 zSAK3jhP`Bov%}9YLNBC{K{uFmqTDpWO3;B3NKHPZWmdzk6_PphBlclKTHwU;%hpv+ z-sjmg$1N3-`@urwEh=wL5HKa{GW*~$d%-FZidsaT80)pCLcbpAz?59W?xc$rvjqe_ zqKDQ*+f~WdlA^Fh;Y9m&h-JYn>0MC;&u1i&cQ@CltEc3tJYM@--&d!N<{t{1A&GL` zT%~EHQer$N3GyzmV#IAx;@RQ}H=0>vBsWwRWgzv8#xSEH!G){vb#+OV$Tcn=hcWf7spL+`+O0rp zHCl@4*lx%cyYYew>e{sB1ae*AMT)v3)^ys?jJY87**F}}B@Mi^rPJXs=n|zHJVsC~ zHlM1=-;@ykLGV4Rwx||)7g+|sjs5LV9F(Tb+x_e}f^Vfp3^iyz)#v=|V6h)ACA)l- z==MXXJni?%2m@pu*-E6mcHd+MaJ0tk?TC`xC+)an+X4xhQe}-Ym5?-rLN;E6y1nXj z+GTOCa~l^UZz?`aut@A$89cmgTKf>frgX&aSP%lrB8Wl@y+L+)0zKCVDDF*g7)Ub` z7wyTH>CKiI4VCFv#q^eoqj73Yeo8G^EdVZ{!>oU~fL`G>;RIqHB5PaJXY{#NVQ|() z*1bB-VT*^jG zj2x@}>H@l&F**uIzELu;^1g$F@lp)9xfm06-xIt%{m~#FWQ4G$D_aImpf?9y15Tiq z8$}79v`)^JyDQ0wt;CB$Put!0QJc(eL13)D?^G7W5P-JP2xRTh|s`U?aZ84Whfh%zhWb zikULyiT@6c2XDk68~o&_^sVp{(|mvaDJV+!{w#U(DI3enk!Lms+C!@$>TU`I<|-0k z8dGu%0*bwGe5ZA7$eUpSnYz%#9|q_-5SZhF)`%vP2N`&G0_yK0WhlQ- zvTHWLC@Sx=lF_gti>`s`Mz<10Y4{Ng$~bnC)}$$kW4ywuC7Aqp_~)X&7X4fyOJJ-{l`JzPthQ2nyvUzQgu@AyYB3-cybh{PdK0=$5dp z%e4FVThR`%pxI^}XCyc9At}R36ds!K#ET0KqCgTv>#S8Z2`umRu^wGY1BRk)m z59{gZ^hNq{9;5%<;_kt`Wfnv`u+DCMS{R&PB$B;3w|P9C-f#`9j6H|0Ls2PL$({I& ztl(WX3iAvWqp@F-vdqlYee8nwl@+t$2@|H(eH+(3s?6(*-PfsJG=KXPh=(5nKK1a@ z@g;Q64Oj-Akoq2$7y~IvkpG06)8=xVc_csK&{G!JGu%f9Mjw7t#_|J&Mk>4&x?iq5`g}ilILc=BeiA#Yd2p>o424+pqux@1<=6EUC#5Dq3U~6A4 z>aQBtJ-k^A*)26=0Hrn$Z*daQV|0{$<+mROL!=9{Kd^q#D}!}X2O(awF&^m!-rlnB zj$73Id2I9g_DAn(;WH3T-7bp0)g zvF)Q$cs2!ZlMd=2zJ4rc@O*UxsPKN!O5Eoj2i>#cntRSFBuM_+&KK+03L8^eKG@&CQW zy??j-(fd#7&mC$F3Ij39xKZ(1=l|7V^U(reZDSa8Q|;wn9Hpt-(#T+r{B3O`nWi)K zPiq?ug9sL-NCL!*#>=&h=`tZI>z>ejbgYWYBHv0o&r(+>HD&c>kq@7tkg{s|1yJO( z7;oTR>w5|m`PAQRK1CC8p`f13tGitNr36yQJ`G@68v)#7Y_ysxlFKvLyZf%0NhX+Fls$pRD*Me{Fa;X>&to}Zc*||~cggVje`tgkd{ay&f zsSh|x(`?8U9)$KJ8uImE2m4u&!g34ucnz?&p%?}n;A2)c03Hzi7whkM28jLS+212U z1PbpHe~JCf#O?yI-+CePGWJWhQN%5R-zhTQN;NNPwSzmyoUvLE7qAy5`hczM3~&yO z3*kXP?3d%WUs{|?eWR>6&w;`{ zG@&L_5&fef^GCEzf6|}uD4XH9#|zi$j;6Lp#dIRC!~`-t?^?Q|%$nN+uFsr|1&*0| z=>?Z3wp4`!Vc(_xTIUnaO~n?T&}MoMrmHoHnq*Hei*0%0`?dCj#Jad`dYH$CxOrTwPglRKTX_)m5lD8Dof_YqM@PIoUYckGYgHvwVax!LWP6>CDB zGxO(Joqexuv^rMTOjkNzZZ!J>VPArj)Y^7_x75+@n2X5%flXs){kH^^)ZO!XRZ!_% z_uTB4$7jKYXhNQ_R2JSl_#unH+J;P(KHQ1YeH6sK02{o^%T3#0fH5&I^C6Mg=en&b z&OnlET_fD{Cenal*HiM{n@M*b=25&xp}v_+xX*1pGh)>3Q@Pb^uXU6p#|S5qY;6*5@HQ`L#}u;Mmyl{<|wIoi^6xm=X_3js&usc zN^DKqPaJ06()zV1VXtZj1wgDATD`hyO-KR)<(C;(jFgvHrd;g>3sB5r3ab3X&;2kq zm|9PUBWJW@pCK*Tj73!$6m{Z?C2gT>#tH@|q)$uT3vZg1jv7~y`qx%4bMttsS?rPe zwjRFcbP!dSIwnmi)Z1V^qg40jCJUN4e9KpOrshaN=J`s`RzMoJ&1MD%DPBK@yA01A*L+6pF>DsD7FI#mLTZf6e_$VGlpU7&(ncbUYwQ1D~}7@sX2tinZ}T?)M{vYV0!i`&eNM zl&eCp=~E#0i?oKi0lD7_SQrCr%zcNYZFx(avU-v} z)SbP}Y_={*2u|u?%2Q6ocLd~qEmh_Upw_}EhbnZHYM;JQi?P<`@~@b)ehM~$16e@s z2PeQB26De~kqRL9%i6*~qD9a3U=KP5Db=p$ih4DGtau;hyT49_FsiO75XiAJ&XUS6 zlpWD4Bo{fEkpj6Ns}!HUZpWRxrweRC9vVv2V`O|U9`m`8@8a01>k~t%TId>`{_+;{tlzf<0_w+D(joEL<)sb` z4kRGL?Z&JQT^dS4KjLp)r0}`1Af8AwT2enjR9tlK>ws^6l+8Y!1gi)pC31aCRsJrF zV^xx7-urRn6v+J|9)_sE47l69*t02=OYW*W2Bx&Jmxhg$KTKdtY?B}Jv>OKtUUMXs zH^R2PD-fGn=OiB9Gmnkc1Pj?k-f{I|89#oOfycTdasTiIxy_?iI$NyD%hzQ8y429_#aK#y#_#dxwriyUW3vLe-$MF^=0@wQz}1I&vArLu6@7G({-h;r zuuq*MC$mK4#h_*^@C_7@`+@AsE_1)(y}G4MP^JLp=N@v2H?=;;4P^3L+K%T2>$koL z)UNEd1OmAq==3u8yCMD9iGsKo&kD%>5Tu#Sy{AyIpG?nVr|N5Uyg_EGOsUyF+=(ZP zUi1OEAIul&6O*27ow{NaGx~?{Al(;6;q&zA}$OOd)EGk_LubQHN2u9Bf{b>Xw1-S zT`7>li-l^~H;^xoe1YwHNuY+?fBV|TU+a(dpQ2y?CC~u+Sx^!GC+X)7WN=DA2KOiW ziCTlg^MPGpqbvG(nK$`85!hS4y80sN#beeQa!EhYvW>0?T7Z77`>GIhTRIkgP}qBb ze$fV^Rz0t$@-MHxv>a}uRRD9|&bcFvnaerv?u>`>)tr~%U;xB$BbwmeRq#j6LeN7@ z+6TG{{<8iY{QdNPigsHz=Baj9=lKeU>Pe54U(eH%(}QX$%eDs13lNr3Djq4MBnWuZ z=3ln4`%CawHV3FraCPxZ|9w~%dBvEgr7$~itOA8ZY zno5f@@s1s|@?YwG(kvcCmZ_I(&T*&%b6)atwfZVOPPOJDWVvcP;T)%Gw+nfNN}rux zh2oF}l1p)HZni?Sq z3k~E8?0{773-kmJ`9O=w~?R+Uvp1^|d8K_A`55nT~pL-=@ir zsZOfmx!P(P)Ok${wHnvrP+r(F=@7@e#kwk<0~�R_rkT4gvJ^14WVGxknb#^=$&R za7 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

    =aL=%O-jdWcO+^1q7h$b1x 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 literal 121556 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 QOJeciZ`t(!ufee9U!F(~Q~&?~ diff --git a/protocol-designer/src/assets/images/path_single.gif b/protocol-designer/src/assets/images/path_single.gif index 2582be8241b4f56f275e3bddb40380a97718e753..50481ddfa6602257f826ae0243befc64e08f6e27 100644 GIT binary patch literal 702528 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 z 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 UwMpaG}sAEEDXf^w9$TN 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�#ReogfMP=g>s5~_$4 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

    TbZB#HLwnuipyR`0UZ`CRCsub@>MG{ivwo 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 mG+h_c2TeDDR*@FWf1P@*?;`{r7 - {t(`step_edit_form.field.path.title.${path}`)} - - {subtitle} + + + {t(`step_edit_form.field.path.title.${path}`)} + + {subtitle} + ) return ( - + {tooltip} Date: Fri, 1 Nov 2024 10:58:07 -0400 Subject: [PATCH 46/81] feat(protocol-designer): add step dragging indicator (#16660) Adds logic to display a divider under a target step when a step is being dragged (for reordering) over that target step. Closes AUTH-1013 --- .../Timeline/ConnectedStepInfo.tsx | 4 +++- .../ProtocolSteps/Timeline/DraggableSteps.tsx | 13 ++++++++---- .../ProtocolSteps/Timeline/StepContainer.tsx | 20 ++++++++++++++++--- .../Timeline/__tests__/StepContainer.test.tsx | 4 ++++ 4 files changed, 33 insertions(+), 8 deletions(-) diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/Timeline/ConnectedStepInfo.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/Timeline/ConnectedStepInfo.tsx index 1e533b2bfd3..778159b6d31 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/Timeline/ConnectedStepInfo.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/Timeline/ConnectedStepInfo.tsx @@ -46,10 +46,11 @@ import type { DeleteModalType } from '../../../../components/modals/ConfirmDelet export interface ConnectedStepInfoProps { stepId: StepIdType stepNumber: number + dragHovered?: boolean } export function ConnectedStepInfo(props: ConnectedStepInfoProps): JSX.Element { - const { stepId, stepNumber } = props + const { stepId, stepNumber, dragHovered = false } = props const { t } = useTranslation('application') const dispatch = useDispatch>() const stepIds = useSelector(getOrderedStepIds) @@ -215,6 +216,7 @@ export function ConnectedStepInfo(props: ConnectedStepInfoProps): JSX.Element { title={`${stepNumber}. ${ step.stepName || t(`stepType.${step.stepType}`) }`} + dragHovered={dragHovered} /> ) diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/Timeline/DraggableSteps.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/Timeline/DraggableSteps.tsx index bf92c681796..d48ada0665b 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/Timeline/DraggableSteps.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/Timeline/DraggableSteps.tsx @@ -14,7 +14,7 @@ import { selectors as stepFormSelectors } from '../../../../step-forms' import { stepIconsByType } from '../../../../form-types' import { StepContainer } from './StepContainer' import { ConnectedStepInfo } from './ConnectedStepInfo' -import type { DragLayerMonitor, DropTargetOptions } from 'react-dnd' +import type { DragLayerMonitor, DropTargetMonitor } from 'react-dnd' import type { StepIdType } from '../../../../form-types' import type { ConnectedStepItemProps } from '../../../../containers/ConnectedStepItem' @@ -44,7 +44,7 @@ function DragDropStep(props: DragDropStepProps): JSX.Element { [orderedStepIds] ) - const [{ handlerId }, drop] = useDrop( + const [{ handlerId, hovered }, drop] = useDrop( () => ({ accept: DND_TYPES.STEP_ITEM, canDrop: () => { @@ -57,8 +57,9 @@ function DragDropStep(props: DragDropStepProps): JSX.Element { moveStep(draggedId, overIndex) } }, - collect: (monitor: DropTargetOptions) => ({ + collect: (monitor: DropTargetMonitor) => ({ handlerId: monitor.getHandlerId(), + hovered: monitor.isOver(), }), }), [orderedStepIds] @@ -71,7 +72,11 @@ function DragDropStep(props: DragDropStepProps): JSX.Element { style={{ opacity: isDragging ? 0.3 : 1 }} data-handler-id={handlerId} > - + ) } diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/Timeline/StepContainer.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/Timeline/StepContainer.tsx index d6f5b532e79..0abd86d73c1 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/Timeline/StepContainer.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/Timeline/StepContainer.tsx @@ -4,11 +4,12 @@ import { useDispatch, useSelector } from 'react-redux' import { ALIGN_CENTER, BORDERS, - Box, Btn, COLORS, CURSOR_DEFAULT, CURSOR_POINTER, + DIRECTION_COLUMN, + Divider, Flex, Icon, JUSTIFY_SPACE_BETWEEN, @@ -55,6 +56,7 @@ export interface StepContainerProps { hovered?: boolean hasError?: boolean isStepAfterError?: boolean + dragHovered?: boolean } export function StepContainer(props: StepContainerProps): JSX.Element { @@ -71,6 +73,7 @@ export function StepContainer(props: StepContainerProps): JSX.Element { title, hasError = false, isStepAfterError = false, + dragHovered = false, } = props const [top, setTop] = React.useState(0) const menuRootRef = React.useRef(null) @@ -188,12 +191,14 @@ export function StepContainer(props: StepContainerProps): JSX.Element { onCancelClick={cancelMultiDelete} /> )} - - + {dragHovered ? ( + + ) : null} + {stepOverflowMenu && stepId != null ? createPortal( { render(props) screen.getByText('Final deck state') }) + it('renders the divider if hover targets that step', () => { + render({ ...props, dragHovered: true }) + screen.getByTestId('divider') + }) }) From c9cda35aebad759932474882c955fb904fb4f3c7 Mon Sep 17 00:00:00 2001 From: Ryan Howard Date: Fri, 1 Nov 2024 11:02:33 -0400 Subject: [PATCH 47/81] feat(shared-data): Add the ability to handle sub wells in labware geometry (#16658) # Overview Some Labware, particularly larger reservoirs have wells that have "sub well" geometry at the bottom, such as the Nest 1 well 195ml, which is one well with 96 little pyramids at the bottom. This PR lets there be a "count" field in the geometry stack up which tells the system that there are "count" number of sub features in this well. For the Height->Volume, we do the normal height->volume of one of these sub features and then multiple the resulting volume by "count" For Volume-Height, we first divide the volume by "count" to get the volume change in one sub well and then do the normal calculation. ## Test Plan and Hands on Testing ## Changelog ## Review requests ## Risk assessment --- .../protocol_engine/state/frustum_helpers.py | 89 ++++++++++++------- .../3/agilent_1_reservoir_290ml/2.json | 22 ++++- .../3/nest_1_reservoir_195ml/3.json | 23 ++++- .../3/usascientific_12_reservoir_22ml/2.json | 22 ++++- shared-data/labware/schemas/3.json | 30 +++++++ .../labware/labware_definition.py | 72 +++++++++++++++ 6 files changed, 223 insertions(+), 35 deletions(-) diff --git a/api/src/opentrons/protocol_engine/state/frustum_helpers.py b/api/src/opentrons/protocol_engine/state/frustum_helpers.py index dfdb0eec56f..83499fb2510 100644 --- a/api/src/opentrons/protocol_engine/state/frustum_helpers.py +++ b/api/src/opentrons/protocol_engine/state/frustum_helpers.py @@ -220,28 +220,40 @@ def _get_segment_capacity(segment: WellSegment) -> float: section_height = segment.topHeight - segment.bottomHeight match segment: case SphericalSegment(): - return _volume_from_height_spherical( - target_height=segment.topHeight, - radius_of_curvature=segment.radiusOfCurvature, + return ( + _volume_from_height_spherical( + target_height=segment.topHeight, + radius_of_curvature=segment.radiusOfCurvature, + ) + * segment.count ) case CuboidalFrustum(): - return _volume_from_height_rectangular( - target_height=section_height, - bottom_length=segment.bottomYDimension, - bottom_width=segment.bottomXDimension, - top_length=segment.topYDimension, - top_width=segment.topXDimension, - total_frustum_height=section_height, + return ( + _volume_from_height_rectangular( + target_height=section_height, + bottom_length=segment.bottomYDimension, + bottom_width=segment.bottomXDimension, + top_length=segment.topYDimension, + top_width=segment.topXDimension, + total_frustum_height=section_height, + ) + * segment.count ) case ConicalFrustum(): - return _volume_from_height_circular( - target_height=section_height, - total_frustum_height=section_height, - bottom_radius=(segment.bottomDiameter / 2), - top_radius=(segment.topDiameter / 2), + return ( + _volume_from_height_circular( + target_height=section_height, + total_frustum_height=section_height, + bottom_radius=(segment.bottomDiameter / 2), + top_radius=(segment.topDiameter / 2), + ) + * segment.count ) case SquaredConeSegment(): - return _volume_from_height_squared_cone(section_height, segment) + return ( + _volume_from_height_squared_cone(section_height, segment) + * segment.count + ) case _: # TODO: implement volume calculations for truncated circular and rounded rectangular segments raise NotImplementedError( @@ -272,6 +284,7 @@ def height_at_volume_within_section( section_height: float, ) -> float: """Calculate a height within a bounded section according to geometry.""" + target_volume_relative = target_volume_relative / section.count match section: case SphericalSegment(): return _height_from_volume_spherical( @@ -311,28 +324,40 @@ def volume_at_height_within_section( """Calculate a volume within a bounded section according to geometry.""" match section: case SphericalSegment(): - return _volume_from_height_spherical( - target_height=target_height_relative, - radius_of_curvature=section.radiusOfCurvature, + return ( + _volume_from_height_spherical( + target_height=target_height_relative, + radius_of_curvature=section.radiusOfCurvature, + ) + * section.count ) case ConicalFrustum(): - return _volume_from_height_circular( - target_height=target_height_relative, - total_frustum_height=section_height, - bottom_radius=(section.bottomDiameter / 2), - top_radius=(section.topDiameter / 2), + return ( + _volume_from_height_circular( + target_height=target_height_relative, + total_frustum_height=section_height, + bottom_radius=(section.bottomDiameter / 2), + top_radius=(section.topDiameter / 2), + ) + * section.count ) case CuboidalFrustum(): - return _volume_from_height_rectangular( - target_height=target_height_relative, - total_frustum_height=section_height, - bottom_width=section.bottomXDimension, - bottom_length=section.bottomYDimension, - top_width=section.topXDimension, - top_length=section.topYDimension, + return ( + _volume_from_height_rectangular( + target_height=target_height_relative, + total_frustum_height=section_height, + bottom_width=section.bottomXDimension, + bottom_length=section.bottomYDimension, + top_width=section.topXDimension, + top_length=section.topYDimension, + ) + * section.count ) case SquaredConeSegment(): - return _volume_from_height_squared_cone(target_height_relative, section) + return ( + _volume_from_height_squared_cone(target_height_relative, section) + * section.count + ) case _: # TODO(cm): this would be the NEST-96 2uL wells referenced in EXEC-712 # we need to input the math attached to that issue diff --git a/shared-data/labware/definitions/3/agilent_1_reservoir_290ml/2.json b/shared-data/labware/definitions/3/agilent_1_reservoir_290ml/2.json index 984af88d3ed..4a06fc94f97 100644 --- a/shared-data/labware/definitions/3/agilent_1_reservoir_290ml/2.json +++ b/shared-data/labware/definitions/3/agilent_1_reservoir_290ml/2.json @@ -54,7 +54,27 @@ }, "innerLabwareGeometry": { "cuboidalWell": { - "sections": [] + "sections": [ + { + "shape": "cuboidal", + "topXDimension": 107.25, + "topYDimension": 8, + "bottomXDimension": 101.25, + "bottomYDimension": 1.66, + "topHeight": 2, + "bottomHeight": 8, + "yCount": 8 + }, + { + "shape": "cuboidal", + "topXDimension": 107.5, + "topYDimension": 71.25, + "bottomXDimension": 107.25, + "bottomYDimension": 71.0, + "topHeight": 39.22, + "bottomHeight": 2 + } + ] } } } diff --git a/shared-data/labware/definitions/3/nest_1_reservoir_195ml/3.json b/shared-data/labware/definitions/3/nest_1_reservoir_195ml/3.json index 5930984eab5..842b916fb8c 100644 --- a/shared-data/labware/definitions/3/nest_1_reservoir_195ml/3.json +++ b/shared-data/labware/definitions/3/nest_1_reservoir_195ml/3.json @@ -56,7 +56,28 @@ }, "innerLabwareGeometry": { "cuboidalWell": { - "sections": [] + "sections": [ + { + "shape": "cuboidal", + "topXDimension": 9, + "topYDimension": 9, + "bottomXDimension": 1.93, + "bottomYDimension": 1.93, + "topHeight": 2, + "bottomHeight": 0, + "xCount": 12, + "yCount": 8 + }, + { + "shape": "cuboidal", + "topXDimension": 71.3, + "topYDimension": 70.6, + "bottomXDimension": 107.3, + "bottomYDimension": 106.8, + "topHeight": 26.85, + "bottomHeight": 2 + } + ] } } } diff --git a/shared-data/labware/definitions/3/usascientific_12_reservoir_22ml/2.json b/shared-data/labware/definitions/3/usascientific_12_reservoir_22ml/2.json index 6a8375138d5..d17d27c041a 100644 --- a/shared-data/labware/definitions/3/usascientific_12_reservoir_22ml/2.json +++ b/shared-data/labware/definitions/3/usascientific_12_reservoir_22ml/2.json @@ -203,7 +203,27 @@ }, "innerLabwareGeometry": { "cuboidalWell": { - "sections": [] + "sections": [ + { + "shape": "squaredcone", + "bottomCrossSection": "circular", + "circleDiameter": 2.5, + "rectangleXDimension": 7.98, + "rectangleYDimension": 70.98, + "topHeight": 4.05, + "bottomHeight": 0.0, + "yCount": 8 + }, + { + "shape": "cuboidal", + "topXDimension": 8.34, + "topYDimension": 71.85, + "bottomXDimension": 7.98, + "bottomYDimension": 70.98, + "topHeight": 41.75, + "bottomHeight": 4.05 + } + ] } } } diff --git a/shared-data/labware/schemas/3.json b/shared-data/labware/schemas/3.json index e38c070919a..eef1252c419 100644 --- a/shared-data/labware/schemas/3.json +++ b/shared-data/labware/schemas/3.json @@ -83,6 +83,12 @@ }, "bottomHeight": { "type": "number" + }, + "xCount": { + "type": "integer" + }, + "yCount": { + "type": "integer" } } }, @@ -112,6 +118,12 @@ }, "bottomHeight": { "type": "number" + }, + "xCount": { + "type": "integer" + }, + "yCount": { + "type": "integer" } } }, @@ -149,6 +161,12 @@ }, "bottomHeight": { "type": "number" + }, + "xCount": { + "type": "integer" + }, + "yCount": { + "type": "integer" } } }, @@ -187,6 +205,12 @@ }, "bottomHeight": { "type": "number" + }, + "xCount": { + "type": "integer" + }, + "yCount": { + "type": "integer" } } }, @@ -225,6 +249,12 @@ }, "bottomHeight": { "type": "number" + }, + "xCount": { + "type": "integer" + }, + "yCount": { + "type": "integer" } } }, diff --git a/shared-data/python/opentrons_shared_data/labware/labware_definition.py b/shared-data/python/opentrons_shared_data/labware/labware_definition.py index d82a76d55c4..3363c874c55 100644 --- a/shared-data/python/opentrons_shared_data/labware/labware_definition.py +++ b/shared-data/python/opentrons_shared_data/labware/labware_definition.py @@ -256,6 +256,21 @@ class SphericalSegment(BaseModel): ..., description="Height of the bottom of the segment, must be 0.0", ) + xCount: _StrictNonNegativeInt = Field( + default=1, + description="Number of instances of this shape in the stackup, used for wells that have multiple sub-wells", + ) + yCount: _StrictNonNegativeInt = Field( + default=1, + description="Number of instances of this shape in the stackup, used for wells that have multiple sub-wells", + ) + + @cached_property + def count(self) -> int: + return self.xCount * self.yCount + + class Config: + keep_untouched = (cached_property,) class ConicalFrustum(BaseModel): @@ -276,6 +291,21 @@ class ConicalFrustum(BaseModel): ..., description="The height at the bottom of a bounded subsection of a well, relative to the bottom of the well", ) + xCount: _StrictNonNegativeInt = Field( + default=1, + description="Number of instances of this shape in the stackup, used for wells that have multiple sub-wells", + ) + yCount: _StrictNonNegativeInt = Field( + default=1, + description="Number of instances of this shape in the stackup, used for wells that have multiple sub-wells", + ) + + @cached_property + def count(self) -> int: + return self.xCount * self.yCount + + class Config: + keep_untouched = (cached_property,) class CuboidalFrustum(BaseModel): @@ -305,6 +335,21 @@ class CuboidalFrustum(BaseModel): ..., description="The height at the bottom of a bounded subsection of a well, relative to the bottom of the well", ) + xCount: _StrictNonNegativeInt = Field( + default=1, + description="Number of instances of this shape in the stackup, used for wells that have multiple sub-wells", + ) + yCount: _StrictNonNegativeInt = Field( + default=1, + description="Number of instances of this shape in the stackup, used for wells that have multiple sub-wells", + ) + + @cached_property + def count(self) -> int: + return self.xCount * self.yCount + + class Config: + keep_untouched = (cached_property,) # A squared cone is the intersection of a cube and a cone that both @@ -354,6 +399,14 @@ class SquaredConeSegment(BaseModel): ..., description="The height at the bottom of a bounded subsection of a well, relative to the bottom of the well", ) + xCount: _StrictNonNegativeInt = Field( + default=1, + description="Number of instances of this shape in the stackup, used for wells that have multiple sub-wells", + ) + yCount: _StrictNonNegativeInt = Field( + default=1, + description="Number of instances of this shape in the stackup, used for wells that have multiple sub-wells", + ) @staticmethod def _area_trap_points( @@ -433,6 +486,10 @@ def height_to_volume_table(self) -> Dict[float, float]: def volume_to_height_table(self) -> Dict[float, float]: return dict((v, k) for k, v in self.height_to_volume_table.items()) + @cached_property + def count(self) -> int: + return self.xCount * self.yCount + class Config: keep_untouched = (cached_property,) @@ -546,6 +603,21 @@ class RoundedCuboidSegment(BaseModel): ..., description="The height at the bottom of a bounded subsection of a well, relative to the bottom of the well", ) + xCount: _StrictNonNegativeInt = Field( + default=1, + description="Number of instances of this shape in the stackup, used for wells that have multiple sub-wells", + ) + yCount: _StrictNonNegativeInt = Field( + default=1, + description="Number of instances of this shape in the stackup, used for wells that have multiple sub-wells", + ) + + @cached_property + def count(self) -> int: + return self.xCount * self.yCount + + class Config: + keep_untouched = (cached_property,) class Metadata1(BaseModel): From 20f1f87654932386c5049f5e886921707fbf89e7 Mon Sep 17 00:00:00 2001 From: Jethary Alcid <66035149+jerader@users.noreply.github.com> Date: Fri, 1 Nov 2024 13:51:49 -0400 Subject: [PATCH 48/81] =?UTF-8?q?fix(step-generation):=20configureForVolum?= =?UTF-8?q?e=20now=20volumes=20the=20chunk=20instea=E2=80=A6=20(#16666)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …d of volume --- step-generation/src/commandCreators/compound/transfer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/step-generation/src/commandCreators/compound/transfer.ts b/step-generation/src/commandCreators/compound/transfer.ts index b6d8a508ec2..e892dc94b3d 100644 --- a/step-generation/src/commandCreators/compound/transfer.ts +++ b/step-generation/src/commandCreators/compound/transfer.ts @@ -263,7 +263,7 @@ export const transfer: CommandCreator = ( ? [ curryCommandCreator(configureForVolume, { pipetteId: args.pipette, - volume: args.volume, + volume: chunksPerSubTransfer, }), ] : [] From 917f8f20e097ee5dddfdd29c0977ff1d0e59ba63 Mon Sep 17 00:00:00 2001 From: Ryan Howard Date: Fri, 1 Nov 2024 15:27:25 -0400 Subject: [PATCH 49/81] chore(shared-data): Add some more geometry defs (#16669) # Overview Some of the missing ones were just labware that we had two load names for. ## Test Plan and Hands on Testing ## Changelog ## Review requests ## Risk assessment --- .../3.json | 23 +++++- .../2.json | 24 +++--- .../2.json | 77 ++++++++++++++++--- .../2.json | 23 +++++- 4 files changed, 121 insertions(+), 26 deletions(-) diff --git a/shared-data/labware/definitions/3/armadillo_96_wellplate_200ul_pcr_full_skirt/3.json b/shared-data/labware/definitions/3/armadillo_96_wellplate_200ul_pcr_full_skirt/3.json index 0d682186706..71c6f214707 100644 --- a/shared-data/labware/definitions/3/armadillo_96_wellplate_200ul_pcr_full_skirt/3.json +++ b/shared-data/labware/definitions/3/armadillo_96_wellplate_200ul_pcr_full_skirt/3.json @@ -1140,7 +1140,28 @@ ], "innerLabwareGeometry": { "conicalWell": { - "sections": [] + "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 1.25, + "topHeight": 0.8, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "topDiameter": 5.5, + "bottomDiameter": 2.33, + "topHeight": 11.35, + "bottomHeight": 0.8 + }, + { + "shape": "conical", + "bottomDiameter": 5.5, + "topDiameter": 5.5, + "topHeight": 14.95, + "bottomHeight": 11.35 + } + ] } } } diff --git a/shared-data/labware/definitions/3/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/2.json b/shared-data/labware/definitions/3/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/2.json index c8841946eab..7827cbb5916 100644 --- a/shared-data/labware/definitions/3/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/2.json +++ b/shared-data/labware/definitions/3/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/2.json @@ -34,7 +34,7 @@ "x": 13.88, "y": 67.75, "z": 6.85, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "15mlconicalWell" }, "B1": { "totalLiquidVolume": 15000, @@ -44,7 +44,7 @@ "x": 13.88, "y": 42.75, "z": 6.85, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "15mlconicalWell" }, "C1": { "totalLiquidVolume": 15000, @@ -54,7 +54,7 @@ "x": 13.88, "y": 17.75, "z": 6.85, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "15mlconicalWell" }, "A2": { "totalLiquidVolume": 15000, @@ -64,7 +64,7 @@ "x": 38.88, "y": 67.75, "z": 6.85, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "15mlconicalWell" }, "B2": { "totalLiquidVolume": 15000, @@ -74,7 +74,7 @@ "x": 38.88, "y": 42.75, "z": 6.85, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "15mlconicalWell" }, "C2": { "totalLiquidVolume": 15000, @@ -84,7 +84,7 @@ "x": 38.88, "y": 17.75, "z": 6.85, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "15mlconicalWell" }, "A3": { "totalLiquidVolume": 50000, @@ -94,7 +94,7 @@ "x": 71.38, "y": 60.25, "z": 7.3, - "geometryDefinitionId": "b" + "geometryDefinitionId": "50mlconicalWell" }, "B3": { "totalLiquidVolume": 50000, @@ -104,7 +104,7 @@ "x": 71.38, "y": 25.25, "z": 7.3, - "geometryDefinitionId": "b" + "geometryDefinitionId": "50mlconicalWell" }, "A4": { "totalLiquidVolume": 50000, @@ -114,7 +114,7 @@ "x": 106.38, "y": 60.25, "z": 7.3, - "geometryDefinitionId": "b" + "geometryDefinitionId": "50mlconicalWell" }, "B4": { "totalLiquidVolume": 50000, @@ -124,7 +124,7 @@ "x": 106.38, "y": 25.25, "z": 7.3, - "geometryDefinitionId": "b" + "geometryDefinitionId": "50mlconicalWell" } }, "brand": { @@ -172,7 +172,7 @@ "z": 0 }, "innerLabwareGeometry": { - "conicalWell": { + "15mlconicalWell": { "sections": [ { "shape": "spherical", @@ -203,7 +203,7 @@ } ] }, - "b": { + "50mlconicalWell": { "sections": [ { "shape": "conical", diff --git a/shared-data/labware/definitions/3/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic/2.json b/shared-data/labware/definitions/3/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic/2.json index 4a57b660efe..4c7683521d7 100644 --- a/shared-data/labware/definitions/3/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic/2.json +++ b/shared-data/labware/definitions/3/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic/2.json @@ -8,7 +8,7 @@ "x": 19, "y": 74, "z": 5.78, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "15mlconicalWell" }, "B1": { "totalLiquidVolume": 15000, @@ -18,7 +18,7 @@ "x": 19, "y": 42.5, "z": 5.78, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "15mlconicalWell" }, "C1": { "totalLiquidVolume": 15000, @@ -28,7 +28,7 @@ "x": 19, "y": 11, "z": 5.78, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "15mlconicalWell" }, "A2": { "totalLiquidVolume": 15000, @@ -38,7 +38,7 @@ "x": 42, "y": 74, "z": 5.78, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "15mlconicalWell" }, "B2": { "totalLiquidVolume": 15000, @@ -48,7 +48,7 @@ "x": 42, "y": 42.5, "z": 5.78, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "15mlconicalWell" }, "C2": { "totalLiquidVolume": 15000, @@ -58,7 +58,7 @@ "x": 42, "y": 11, "z": 5.78, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "15mlconicalWell" }, "A3": { "totalLiquidVolume": 50000, @@ -68,7 +68,7 @@ "x": 70.2, "y": 62.2, "z": 5.95, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "50mlconicalWell" }, "B3": { "totalLiquidVolume": 50000, @@ -78,7 +78,7 @@ "x": 70.2, "y": 16.8, "z": 5.95, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "50mlconicalWell" }, "A4": { "totalLiquidVolume": 50000, @@ -88,7 +88,7 @@ "x": 106.1, "y": 62.2, "z": 5.95, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "50mlconicalWell" }, "B4": { "totalLiquidVolume": 50000, @@ -98,7 +98,7 @@ "x": 106.1, "y": 16.8, "z": 5.95, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "50mlconicalWell" } }, "brand": { @@ -170,8 +170,61 @@ "z": 0 }, "innerLabwareGeometry": { - "conicalWell": { - "sections": [] + "15mlconicalWell": { + "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 2.9, + "topHeight": 0.8, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "bottomDiameter": 4, + "topDiameter": 13.5, + "topHeight": 20.7, + "bottomHeight": 0.8 + }, + { + "shape": "conical", + "bottomDiameter": 13.5, + "topDiameter": 14.5, + "topHeight": 108.6, + "bottomHeight": 20.7 + }, + { + "shape": "conical", + "bottomDiameter": 14.5, + "topDiameter": 14.7, + "topHeight": 118.2, + "bottomHeight": 108.6 + } + ] + }, + "50mlconicalWell": { + "sections": [ + { + "shape": "conical", + "bottomDiameter": 6.15, + "topDiameter": 26.18, + "topHeight": 14.3, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "bottomDiameter": 26.18, + "topDiameter": 27.52, + "topHeight": 100.65, + "bottomHeight": 14.3 + }, + { + "shape": "conical", + "bottomDiameter": 27.52, + "topDiameter": 27.81, + "topHeight": 112.85, + "bottomHeight": 100.65 + } + ] } } } diff --git a/shared-data/labware/definitions/3/opentrons_96_pcr_adapter_armadillo_wellplate_200ul/2.json b/shared-data/labware/definitions/3/opentrons_96_pcr_adapter_armadillo_wellplate_200ul/2.json index 86c28b5cbf9..3ac68ba32be 100644 --- a/shared-data/labware/definitions/3/opentrons_96_pcr_adapter_armadillo_wellplate_200ul/2.json +++ b/shared-data/labware/definitions/3/opentrons_96_pcr_adapter_armadillo_wellplate_200ul/2.json @@ -1122,7 +1122,28 @@ ], "innerLabwareGeometry": { "conicalWell": { - "sections": [] + "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 1.25, + "topHeight": 0.8, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "topDiameter": 5.5, + "bottomDiameter": 2.33, + "topHeight": 11.35, + "bottomHeight": 0.8 + }, + { + "shape": "conical", + "bottomDiameter": 5.5, + "topDiameter": 5.5, + "topHeight": 14.95, + "bottomHeight": 11.35 + } + ] } } } From 9dd40b80e31f469ddf06d529363e5193d1bd173f Mon Sep 17 00:00:00 2001 From: Jethary Alcid <66035149+jerader@users.noreply.github.com> Date: Fri, 1 Nov 2024 16:37:44 -0400 Subject: [PATCH 50/81] fix(protocol-designer): refine logic for auto-placing modules during onboarding (#16642) closes RQA-3389, RQA-3326 --- .../SelectFixtures.tsx | 60 +++--- .../CreateNewProtocolWizard/SelectModules.tsx | 117 +++++----- .../__tests__/utils.test.ts | 201 +++++++++++++++++- .../pages/CreateNewProtocolWizard/index.tsx | 5 +- .../pages/CreateNewProtocolWizard/utils.tsx | 98 +++++++-- 5 files changed, 357 insertions(+), 124 deletions(-) diff --git a/protocol-designer/src/pages/CreateNewProtocolWizard/SelectFixtures.tsx b/protocol-designer/src/pages/CreateNewProtocolWizard/SelectFixtures.tsx index e21122653ed..eda7253ed62 100644 --- a/protocol-designer/src/pages/CreateNewProtocolWizard/SelectFixtures.tsx +++ b/protocol-designer/src/pages/CreateNewProtocolWizard/SelectFixtures.tsx @@ -1,6 +1,5 @@ import { useTranslation } from 'react-i18next' import without from 'lodash/without' -import { THERMOCYCLER_MODULE_V2 } from '@opentrons/shared-data' import { ALIGN_CENTER, BORDERS, @@ -39,13 +38,7 @@ export function SelectFixtures(props: WizardTileProps): JSX.Element | null { const additionalEquipment = watch('additionalEquipment') const modules = watch('modules') const { t } = useTranslation(['create_new_protocol', 'shared']) - const numSlotsAvailable = getNumSlotsAvailable(modules, additionalEquipment) - const hasTC = - modules != null && - Object.values(modules).some( - module => module.model === THERMOCYCLER_MODULE_V2 - ) const hasTrash = additionalEquipment.some( ae => ae === 'trashBin' || ae === 'wasteChute' ) @@ -87,25 +80,33 @@ export function SelectFixtures(props: WizardTileProps): JSX.Element | null { ) : null} - {filteredAdditionalEquipment.map(equipment => ( - { - if (numSlotsAvailable === 0) { - makeSnackbar(t('slots_limit_reached') as string) - } else { - setValue('additionalEquipment', [ - ...additionalEquipment, - equipment, - ]) - } - }} - /> - ))} + {filteredAdditionalEquipment.map(equipment => { + const numSlotsAvailable = getNumSlotsAvailable( + modules, + additionalEquipment, + equipment + ) + + return ( + { + if (numSlotsAvailable === 0) { + makeSnackbar(t('slots_limit_reached') as string) + } else { + setValue('additionalEquipment', [ + ...additionalEquipment, + equipment, + ]) + } + }} + /> + ) + })} @@ -117,6 +118,11 @@ export function SelectFixtures(props: WizardTileProps): JSX.Element | null { const numStagingAreas = filteredAdditionalEquipmentWithoutGripper.filter( additionalEquipment => additionalEquipment === 'stagingArea' )?.length + const numSlotsAvailable = getNumSlotsAvailable( + modules, + additionalEquipment, + ae + ) const dropdownProps = { currentOption: { @@ -127,7 +133,7 @@ export function SelectFixtures(props: WizardTileProps): JSX.Element | null { filterOptions: getNumOptions( numSlotsAvailable >= MAX_SLOTS ? MAX_SLOTS - : numSlotsAvailable + numStagingAreas - (hasTC ? 1 : 0) + : numSlotsAvailable + numStagingAreas ), onClick: (value: string) => { const inputNum = parseInt(value) diff --git a/protocol-designer/src/pages/CreateNewProtocolWizard/SelectModules.tsx b/protocol-designer/src/pages/CreateNewProtocolWizard/SelectModules.tsx index b3bf5e225fa..575bca4ae8b 100644 --- a/protocol-designer/src/pages/CreateNewProtocolWizard/SelectModules.tsx +++ b/protocol-designer/src/pages/CreateNewProtocolWizard/SelectModules.tsx @@ -21,7 +21,6 @@ import { getModuleType, HEATERSHAKER_MODULE_TYPE, MAGNETIC_BLOCK_TYPE, - MAGNETIC_BLOCK_V1, TEMPERATURE_MODULE_TYPE, } from '@opentrons/shared-data' import { uuid } from '../../utils' @@ -43,9 +42,6 @@ import type { ModuleModel, ModuleType } from '@opentrons/shared-data' import type { FormModule, FormModules } from '../../step-forms' import type { WizardTileProps } from './types' -const MAX_MAGNETIC_BLOCKS = 4 -const MAGNETIC_BLOCKS_ADJUSTMENT = 3 - export function SelectModules(props: WizardTileProps): JSX.Element | null { const { goBack, proceed, watch, setValue } = props const { t } = useTranslation(['create_new_protocol', 'shared']) @@ -59,15 +55,6 @@ export function SelectModules(props: WizardTileProps): JSX.Element | null { robotType === FLEX_ROBOT_TYPE ? FLEX_SUPPORTED_MODULE_MODELS : OT2_SUPPORTED_MODULE_MODELS - - const numSlotsAvailable = getNumSlotsAvailable(modules, additionalEquipment) - const hasNoAvailableSlots = numSlotsAvailable === 0 - const numMagneticBlocks = - modules != null - ? Object.values(modules).filter( - module => module.model === MAGNETIC_BLOCK_V1 - )?.length - : 0 const filteredSupportedModules = supportedModules.filter( moduleModel => !( @@ -85,7 +72,10 @@ export function SelectModules(props: WizardTileProps): JSX.Element | null { MAGNETIC_BLOCK_TYPE, ] - const handleAddModule = (moduleModel: ModuleModel): void => { + const handleAddModule = ( + moduleModel: ModuleModel, + hasNoAvailableSlots: boolean + ): void => { if (hasNoAvailableSlots) { makeSnackbar(t('slots_limit_reached') as string) } else { @@ -120,37 +110,40 @@ export function SelectModules(props: WizardTileProps): JSX.Element | null { module: FormModule, newQuantity: number ): void => { - const moamModules = - modules != null - ? Object.entries(modules).filter( - ([key, mod]) => mod.type === module.type - ) - : [] - if (newQuantity > moamModules.length) { - const newModules = { ...modules } - for (let i = 0; i < newQuantity - moamModules.length; i++) { + if (!modules) return + + const modulesOfType = Object.entries(modules).filter( + ([, mod]) => mod.type === module.type + ) + const otherModules = Object.entries(modules).filter( + ([, mod]) => mod.type !== module.type + ) + + if (newQuantity > modulesOfType.length) { + const additionalModules: FormModules = {} + for (let i = 0; i < newQuantity - modulesOfType.length; i++) { // @ts-expect-error: TS can't determine modules's type correctly - newModules[uuid()] = { + additionalModules[uuid()] = { model: module.model, type: module.type, slot: null, } } - setValue('modules', newModules) - } else if (newQuantity < moamModules.length) { - const modulesToRemove = moamModules.length - newQuantity - const remainingModules: FormModules = {} - Object.entries(modules).forEach(([key, mod]) => { - const shouldRemove = moamModules - .slice(-modulesToRemove) - .some(([removeKey]) => removeKey === key) - if (!shouldRemove) { - remainingModules[parseInt(key)] = mod - } - }) + const newModules = Object.fromEntries([ + ...otherModules, + ...modulesOfType, + ...Object.entries(additionalModules), + ]) + setValue('modules', newModules) + } else if (newQuantity < modulesOfType.length) { + const modulesToKeep = modulesOfType.slice(0, newQuantity) + const updatedModules = Object.fromEntries([ + ...otherModules, + ...modulesToKeep, + ]) - setValue('modules', remainingModules) + setValue('modules', updatedModules) } } @@ -186,26 +179,25 @@ export function SelectModules(props: WizardTileProps): JSX.Element | null { ? module : module !== ABSORBANCE_READER_V1 ) - .map(moduleModel => ( - { - handleAddModule(moduleModel) - }} - /> - ))} + .map(moduleModel => { + const numSlotsAvailable = getNumSlotsAvailable( + modules, + additionalEquipment, + moduleModel + ) + return ( + { + handleAddModule(moduleModel, numSlotsAvailable === 0) + }} + /> + ) + })} {modules != null && Object.keys(modules).length > 0 ? ( { + const numSlotsAvailable = getNumSlotsAvailable( + modules, + additionalEquipment, + module.model + ) const dropdownProps = { currentOption: { name: `${module.count}`, @@ -255,11 +252,7 @@ export function SelectModules(props: WizardTileProps): JSX.Element | null { }, dropdownType: 'neutral' as DropdownBorder, filterOptions: getNumOptions( - module.model === 'magneticBlockV1' - ? numSlotsAvailable + - MAGNETIC_BLOCKS_ADJUSTMENT + - module.count - : numSlotsAvailable + module.count + numSlotsAvailable + module.count ), } return ( diff --git a/protocol-designer/src/pages/CreateNewProtocolWizard/__tests__/utils.test.ts b/protocol-designer/src/pages/CreateNewProtocolWizard/__tests__/utils.test.ts index 6ebef7c330d..02039fb312e 100644 --- a/protocol-designer/src/pages/CreateNewProtocolWizard/__tests__/utils.test.ts +++ b/protocol-designer/src/pages/CreateNewProtocolWizard/__tests__/utils.test.ts @@ -3,7 +3,10 @@ import { FLEX_ROBOT_TYPE, HEATERSHAKER_MODULE_TYPE, HEATERSHAKER_MODULE_V1, + MAGNETIC_BLOCK_TYPE, + MAGNETIC_BLOCK_V1, TEMPERATURE_MODULE_TYPE, + TEMPERATURE_MODULE_V1, TEMPERATURE_MODULE_V2, THERMOCYCLER_MODULE_TYPE, THERMOCYCLER_MODULE_V2, @@ -29,11 +32,23 @@ let MOCK_FORM_STATE = { } as WizardFormState describe('getNumSlotsAvailable', () => { - it('should return 8 when there are no modules or additional equipment', () => { - const result = getNumSlotsAvailable(null, []) + it('should return 0 for a gripper', () => { + const result = getNumSlotsAvailable(null, [], 'gripper') + expect(result).toBe(0) + }) + it('should return 1 for a non MoaM module', () => { + const result = getNumSlotsAvailable(null, [], TEMPERATURE_MODULE_V1) + expect(result).toBe(1) + }) + it('should return 2 for a thermocycler', () => { + const result = getNumSlotsAvailable(null, [], THERMOCYCLER_MODULE_V2) + expect(result).toBe(2) + }) + it('should return 8 when there are no modules or additional equipment for a heater-shaker', () => { + const result = getNumSlotsAvailable(null, [], HEATERSHAKER_MODULE_V1) expect(result).toBe(8) }) - it('should return 0 when there is a TC and 7 modules', () => { + it('should return 0 when there is a TC and 7 modules for a temperature module v2', () => { const mockModules = { 0: { model: HEATERSHAKER_MODULE_V1, @@ -72,10 +87,10 @@ describe('getNumSlotsAvailable', () => { slot: 'C3', }, } as any - const result = getNumSlotsAvailable(mockModules, []) + const result = getNumSlotsAvailable(mockModules, [], TEMPERATURE_MODULE_V2) expect(result).toBe(0) }) - it('should return 1 when there are 9 additional equipment and 1 is a waste chute on the staging area and one is a gripper', () => { + it('should return 1 when there are 9 additional equipment and 1 is a waste chute on the staging area and one is a gripper for a heater-shaker', () => { const mockAdditionalEquipment: AdditionalEquipment[] = [ 'trashBin', 'stagingArea', @@ -87,20 +102,184 @@ describe('getNumSlotsAvailable', () => { 'gripper', 'trashBin', ] - const result = getNumSlotsAvailable(null, mockAdditionalEquipment) + const result = getNumSlotsAvailable( + null, + mockAdditionalEquipment, + HEATERSHAKER_MODULE_V1 + ) + expect(result).toBe(1) + }) + it('should return 1 when there is a full deck but one staging area for waste chute', () => { + const mockModules = { + 0: { + model: HEATERSHAKER_MODULE_V1, + type: HEATERSHAKER_MODULE_TYPE, + slot: 'D1', + }, + 1: { + model: TEMPERATURE_MODULE_V2, + type: TEMPERATURE_MODULE_TYPE, + slot: 'D3', + }, + 2: { + model: TEMPERATURE_MODULE_V2, + type: TEMPERATURE_MODULE_TYPE, + slot: 'C1', + }, + 3: { + model: TEMPERATURE_MODULE_V2, + type: TEMPERATURE_MODULE_TYPE, + slot: 'B3', + }, + 4: { + model: THERMOCYCLER_MODULE_V2, + type: THERMOCYCLER_MODULE_TYPE, + slot: 'B1', + }, + } as any + const mockAdditionalEquipment: AdditionalEquipment[] = [ + 'trashBin', + 'stagingArea', + ] + const result = getNumSlotsAvailable( + mockModules, + mockAdditionalEquipment, + 'wasteChute' + ) + expect(result).toBe(1) + }) + it('should return 1 when there are 7 modules (with one magnetic block) and one trash for staging area', () => { + const mockModules = { + 0: { + model: HEATERSHAKER_MODULE_V1, + type: HEATERSHAKER_MODULE_TYPE, + slot: 'D1', + }, + 1: { + model: TEMPERATURE_MODULE_V2, + type: TEMPERATURE_MODULE_TYPE, + slot: 'D3', + }, + 2: { + model: TEMPERATURE_MODULE_V2, + type: TEMPERATURE_MODULE_TYPE, + slot: 'C1', + }, + 3: { + model: TEMPERATURE_MODULE_V2, + type: TEMPERATURE_MODULE_TYPE, + slot: 'B3', + }, + 4: { + model: THERMOCYCLER_MODULE_V2, + type: THERMOCYCLER_MODULE_TYPE, + slot: 'B1', + }, + 5: { + model: MAGNETIC_BLOCK_V1, + type: MAGNETIC_BLOCK_TYPE, + slot: 'C2', + }, + } as any + const mockAdditionalEquipment: AdditionalEquipment[] = ['trashBin'] + const result = getNumSlotsAvailable( + mockModules, + mockAdditionalEquipment, + 'stagingArea' + ) expect(result).toBe(1) }) - it('should return 8 even when there is a magnetic block', () => { + it('should return 1 when there are 8 modules with 2 magnetic blocks and one trash for staging area', () => { const mockModules = { 0: { - model: 'magneticBlockV1', - type: 'magneticBlockType', - slot: 'B2', + model: HEATERSHAKER_MODULE_V1, + type: HEATERSHAKER_MODULE_TYPE, + slot: 'D1', + }, + 1: { + model: TEMPERATURE_MODULE_V2, + type: TEMPERATURE_MODULE_TYPE, + slot: 'D3', + }, + 2: { + model: TEMPERATURE_MODULE_V2, + type: TEMPERATURE_MODULE_TYPE, + slot: 'C1', + }, + 3: { + model: TEMPERATURE_MODULE_V2, + type: TEMPERATURE_MODULE_TYPE, + slot: 'B3', + }, + 4: { + model: THERMOCYCLER_MODULE_V2, + type: THERMOCYCLER_MODULE_TYPE, + slot: 'B1', + }, + 5: { + model: MAGNETIC_BLOCK_V1, + type: MAGNETIC_BLOCK_TYPE, + slot: 'C2', + }, + 6: { + model: MAGNETIC_BLOCK_V1, + type: MAGNETIC_BLOCK_TYPE, + slot: 'D2', }, } as any - const result = getNumSlotsAvailable(mockModules, []) + const mockAdditionalEquipment: AdditionalEquipment[] = ['trashBin'] + const result = getNumSlotsAvailable( + mockModules, + mockAdditionalEquipment, + 'stagingArea' + ) + expect(result).toBe(1) + }) + it('should return 8 when there are 4 staging area for magnetic block', () => { + const mockAdditionalEquipment: AdditionalEquipment[] = [ + 'stagingArea', + 'stagingArea', + 'stagingArea', + 'stagingArea', + ] + const result = getNumSlotsAvailable( + [], + mockAdditionalEquipment, + MAGNETIC_BLOCK_V1 + ) expect(result).toBe(8) }) + it('should return 4 when there are 4 modules, 4 staging area for magnetic block', () => { + const mockModules = { + 0: { + model: HEATERSHAKER_MODULE_V1, + type: HEATERSHAKER_MODULE_TYPE, + slot: 'D1', + }, + 1: { + model: TEMPERATURE_MODULE_V2, + type: TEMPERATURE_MODULE_TYPE, + slot: 'D3', + }, + 2: { + model: THERMOCYCLER_MODULE_V2, + type: THERMOCYCLER_MODULE_TYPE, + slot: 'B1', + }, + } as any + const mockAdditionalEquipment: AdditionalEquipment[] = [ + 'stagingArea', + 'stagingArea', + 'stagingArea', + 'stagingArea', + ] + const result = getNumSlotsAvailable( + mockModules, + mockAdditionalEquipment, + MAGNETIC_BLOCK_V1 + ) + expect(result).toBe(4) + }) }) describe('getTrashSlot', () => { diff --git a/protocol-designer/src/pages/CreateNewProtocolWizard/index.tsx b/protocol-designer/src/pages/CreateNewProtocolWizard/index.tsx index 6849fc68a78..01feee56b61 100644 --- a/protocol-designer/src/pages/CreateNewProtocolWizard/index.tsx +++ b/protocol-designer/src/pages/CreateNewProtocolWizard/index.tsx @@ -284,7 +284,10 @@ export function CreateNewProtocolWizard(): JSX.Element | null { if (stagingAreas.length > 0) { stagingAreas.forEach((_, index) => { return dispatch( - createDeckFixture('stagingArea', STAGING_AREA_CUTOUTS[index]) + createDeckFixture( + 'stagingArea', + STAGING_AREA_CUTOUTS.reverse()[index] + ) ) }) } diff --git a/protocol-designer/src/pages/CreateNewProtocolWizard/utils.tsx b/protocol-designer/src/pages/CreateNewProtocolWizard/utils.tsx index e0a84c1340c..90e06a8368e 100644 --- a/protocol-designer/src/pages/CreateNewProtocolWizard/utils.tsx +++ b/protocol-designer/src/pages/CreateNewProtocolWizard/utils.tsx @@ -1,26 +1,38 @@ import { - MAGNETIC_BLOCK_TYPE, - STAGING_AREA_CUTOUTS, - THERMOCYCLER_MODULE_TYPE, + ABSORBANCE_READER_V1, getLabwareDefURI, getLabwareDisplayName, getPipetteSpecsV2, + HEATERSHAKER_MODULE_V1, + MAGNETIC_BLOCK_TYPE, + MAGNETIC_BLOCK_V1, + MAGNETIC_MODULE_V1, + MAGNETIC_MODULE_V2, + STAGING_AREA_CUTOUTS, + TEMPERATURE_MODULE_V1, + TEMPERATURE_MODULE_V2, + THERMOCYCLER_MODULE_TYPE, + THERMOCYCLER_MODULE_V1, + THERMOCYCLER_MODULE_V2, WASTE_CHUTE_CUTOUT, } from '@opentrons/shared-data' import wasteChuteImage from '../../assets/images/waste_chute.png' import trashBinImage from '../../assets/images/flex_trash_bin.png' import stagingAreaImage from '../../assets/images/staging_area.png' + import type { CutoutId, LabwareDefByDefURI, LabwareDefinition2, + ModuleModel, PipetteName, } from '@opentrons/shared-data' import type { DropdownOption } from '@opentrons/components' import type { AdditionalEquipment, WizardFormState } from './types' -const TOTAL_MODULE_SLOTS = 8 +const TOTAL_OUTER_SLOTS = 8 const MIDDLE_SLOT_NUM = 4 +const MAX_MAGNETIC_BLOCK_SLOTS = 12 export const getNumOptions = (length: number): DropdownOption[] => { return Array.from({ length }, (_, i) => ({ @@ -31,9 +43,12 @@ export const getNumOptions = (length: number): DropdownOption[] => { export const getNumSlotsAvailable = ( modules: WizardFormState['modules'], - additionalEquipment: WizardFormState['additionalEquipment'] + additionalEquipment: WizardFormState['additionalEquipment'], + type: ModuleModel | AdditionalEquipment ): number => { - const additionalEquipmentLength = additionalEquipment.length + const additionalEquipmentLength = additionalEquipment.filter( + ae => ae !== 'gripper' + ).length const hasTC = Object.values(modules || {}).some( module => module.type === THERMOCYCLER_MODULE_TYPE ) @@ -45,32 +60,69 @@ export const getNumSlotsAvailable = ( module => module.type === MAGNETIC_BLOCK_TYPE ) let filteredModuleLength = modules != null ? Object.keys(modules).length : 0 - if (hasTC) { - filteredModuleLength = filteredModuleLength + 1 - } if (magneticBlocks.length > 0) { // once blocks exceed 4, then we dont' want to subtract the amount available // because block can go into the center slots where all other modules/trashes can not const numBlocks = - magneticBlocks.length > 4 ? MIDDLE_SLOT_NUM : magneticBlocks.length - filteredModuleLength = filteredModuleLength - numBlocks + magneticBlocks.length >= 4 ? MIDDLE_SLOT_NUM : magneticBlocks.length + filteredModuleLength = + filteredModuleLength - (type !== 'magneticBlockV1' ? numBlocks : 0) + } + if (hasTC) { + filteredModuleLength = filteredModuleLength + 1 } - - const hasGripper = additionalEquipment.some(equipment => - equipment.includes('gripper') - ) - let filteredAdditionalEquipmentLength = additionalEquipmentLength - if (hasGripper) { + if (numStagingAreas >= 1 && hasWasteChute && type !== 'stagingArea') { filteredAdditionalEquipmentLength = filteredAdditionalEquipmentLength - 1 } - if (numStagingAreas === MIDDLE_SLOT_NUM && hasWasteChute) { - filteredAdditionalEquipmentLength = filteredAdditionalEquipmentLength - 1 + switch (type) { + case 'gripper': { + return 0 + } + // TODO: wire up absorbance reader + case ABSORBANCE_READER_V1: { + return 1 + } + // these modules don't support MoaM + case THERMOCYCLER_MODULE_V1: + case TEMPERATURE_MODULE_V1: + case MAGNETIC_MODULE_V1: + case MAGNETIC_MODULE_V2: { + return 1 + } + + case THERMOCYCLER_MODULE_V2: { + if (filteredModuleLength + filteredAdditionalEquipmentLength > 7) { + return 0 + } else { + return 2 + } + } + case 'trashBin': + case 'stagingArea': + case HEATERSHAKER_MODULE_V1: + case TEMPERATURE_MODULE_V2: { + return ( + TOTAL_OUTER_SLOTS - + (filteredModuleLength + filteredAdditionalEquipmentLength) + ) + } + case 'wasteChute': { + const adjustmentForStagingArea = numStagingAreas >= 1 ? 1 : 0 + return ( + TOTAL_OUTER_SLOTS - + (filteredModuleLength + + filteredAdditionalEquipmentLength - + adjustmentForStagingArea) + ) + } + case MAGNETIC_BLOCK_V1: { + return ( + MAX_MAGNETIC_BLOCK_SLOTS - + (filteredModuleLength + filteredAdditionalEquipmentLength) + ) + } } - return ( - TOTAL_MODULE_SLOTS - - (filteredModuleLength + filteredAdditionalEquipmentLength) - ) } interface EquipmentProps { From d7a622184325d4bcc18a347d7b25a271ecc48c72 Mon Sep 17 00:00:00 2001 From: Jethary Alcid <66035149+jerader@users.noreply.github.com> Date: Fri, 1 Nov 2024 17:06:41 -0400 Subject: [PATCH 51/81] fix(protocol-designer, components): clean up a bunch of warnings in console (#16664) closes RQA-3357 --- components/src/atoms/InputField/index.tsx | 3 +- .../ListButtonRadioButton.tsx | 88 ++++++++++--------- components/src/atoms/MenuList/OverflowBtn.tsx | 4 +- .../src/atoms/buttons/EmptySelectorButton.tsx | 53 ++++++----- .../src/hardware-sim/Deck/DeckFromLayers.tsx | 34 +++---- components/src/organisms/Toolbox/index.tsx | 2 +- .../organisms/MaterialsListModal/index.tsx | 7 +- .../src/organisms/SlotInformation/index.tsx | 2 +- .../ProtocolSteps/Timeline/StepContainer.tsx | 17 ++-- .../ProtocolOverview/InstrumentsInfo.tsx | 19 ++-- .../src/pages/ProtocolOverview/index.tsx | 4 +- 11 files changed, 123 insertions(+), 110 deletions(-) diff --git a/components/src/atoms/InputField/index.tsx b/components/src/atoms/InputField/index.tsx index 14a4f520377..57667e6cca9 100644 --- a/components/src/atoms/InputField/index.tsx +++ b/components/src/atoms/InputField/index.tsx @@ -85,6 +85,7 @@ export const InputField = React.forwardRef( tabIndex = 0, showDeleteIcon = false, hasBackgroundError = false, + onDelete, ...inputProps } = props const hasError = props.error != null @@ -307,7 +308,7 @@ export const InputField = React.forwardRef( {showDeleteIcon ? ( diff --git a/components/src/atoms/ListButton/ListButtonChildren/ListButtonRadioButton.tsx b/components/src/atoms/ListButton/ListButtonChildren/ListButtonRadioButton.tsx index 52a58e5f4ec..366075df05e 100644 --- a/components/src/atoms/ListButton/ListButtonChildren/ListButtonRadioButton.tsx +++ b/components/src/atoms/ListButton/ListButtonChildren/ListButtonRadioButton.tsx @@ -1,4 +1,3 @@ -import type * as React from 'react' import styled, { css } from 'styled-components' import { SPACING } from '../../../ui-style-constants' import { BORDERS, COLORS } from '../../../helix-design-system' @@ -6,12 +5,13 @@ import { Flex } from '../../../primitives' import { StyledText } from '../../StyledText' import { CURSOR_POINTER } from '../../../styles' +import type { ChangeEventHandler, MouseEvent } from 'react' import type { StyleProps } from '../../../primitives' interface ListButtonRadioButtonProps extends StyleProps { buttonText: string buttonValue: string | number - onChange: React.ChangeEventHandler + onChange: ChangeEventHandler setNoHover?: () => void setHovered?: () => void disabled?: boolean @@ -34,48 +34,11 @@ export function ListButtonRadioButton( id = buttonText, } = props - const SettingButton = styled.input` - display: none; - ` - - const AVAILABLE_BUTTON_STYLE = css` - background: ${COLORS.white}; - color: ${COLORS.black90}; - - &:hover { - background-color: ${COLORS.grey10}; - } - ` - - const SELECTED_BUTTON_STYLE = css` - background: ${COLORS.blue50}; - color: ${COLORS.white}; - - &:active { - background-color: ${COLORS.blue60}; - } - ` - - const DISABLED_STYLE = css` - color: ${COLORS.grey40}; - background-color: ${COLORS.grey10}; - ` - - const SettingButtonLabel = styled.label` - border-radius: ${BORDERS.borderRadius8}; - cursor: ${CURSOR_POINTER}; - padding: 14px ${SPACING.spacing12}; - width: 100%; - - ${isSelected ? SELECTED_BUTTON_STYLE : AVAILABLE_BUTTON_STYLE} - ${disabled && DISABLED_STYLE} - ` - return ( { + onClick={(e: MouseEvent) => { e.stopPropagation() }} > @@ -89,6 +52,8 @@ export function ListButtonRadioButton( /> ) } + +const SettingButton = styled.input` + display: none; +` + +const AVAILABLE_BUTTON_STYLE = css` + background: ${COLORS.white}; + color: ${COLORS.black90}; + + &:hover { + background-color: ${COLORS.grey10}; + } +` + +const SELECTED_BUTTON_STYLE = css` + background: ${COLORS.blue50}; + color: ${COLORS.white}; + + &:active { + background-color: ${COLORS.blue60}; + } +` + +const DISABLED_STYLE = css` + color: ${COLORS.grey40}; + background-color: ${COLORS.grey10}; +` + +interface ButtonLabelProps { + isSelected: boolean + disabled: boolean +} + +const SettingButtonLabel = styled.label` + border-radius: ${BORDERS.borderRadius8}; + cursor: ${CURSOR_POINTER}; + padding: 14px ${SPACING.spacing12}; + width: 100%; + + ${({ isSelected }) => + isSelected ? SELECTED_BUTTON_STYLE : AVAILABLE_BUTTON_STYLE} + ${({ disabled }) => disabled && DISABLED_STYLE} +` diff --git a/components/src/atoms/MenuList/OverflowBtn.tsx b/components/src/atoms/MenuList/OverflowBtn.tsx index ec5958746f4..efe9195f03d 100644 --- a/components/src/atoms/MenuList/OverflowBtn.tsx +++ b/components/src/atoms/MenuList/OverflowBtn.tsx @@ -16,7 +16,7 @@ export const OverflowBtn: ( props: OverflowBtnProps, ref: React.ForwardedRef ): JSX.Element => { - const { fillColor } = props + const { fillColor, ...restProps } = props return ( void @@ -29,27 +36,15 @@ export function EmptySelectorButton( ): JSX.Element { const { onClick, text, iconName, textAlignment, disabled = false } = props - const StyledButton = styled.button` - border: none; - width: ${FLEX_MAX_CONTENT}; - height: ${FLEX_MAX_CONTENT}; - cursor: ${disabled ? CURSOR_DEFAULT : CURSOR_POINTER}; - &:focus-visible { - outline: 2px solid ${COLORS.white}; - box-shadow: 0 0 0 4px ${COLORS.blue50}; - border-radius: ${BORDERS.borderRadius8}; - } - ` - return ( - + ) } + +interface ButtonProps { + disabled: boolean +} + +const StyledButton = styled.button` + border: none; + width: ${FLEX_MAX_CONTENT}; + height: ${FLEX_MAX_CONTENT}; + cursor: ${({ disabled }) => (disabled ? CURSOR_DEFAULT : CURSOR_POINTER)}; + &:focus-visible { + outline: 2px solid ${white}; + box-shadow: 0 0 0 4px ${blue50}; + border-radius: ${borderRadius8}; + } +` diff --git a/components/src/hardware-sim/Deck/DeckFromLayers.tsx b/components/src/hardware-sim/Deck/DeckFromLayers.tsx index aaf8f979151..badd7e80ca1 100644 --- a/components/src/hardware-sim/Deck/DeckFromLayers.tsx +++ b/components/src/hardware-sim/Deck/DeckFromLayers.tsx @@ -11,9 +11,9 @@ import { RemovalHandle, ScrewHoles, } from './OT2Layers' +import { ALL_OT2_DECK_LAYERS } from './constants' import type { RobotType } from '@opentrons/shared-data' -import { ALL_OT2_DECK_LAYERS } from './constants' export interface DeckFromLayersProps { robotType: RobotType @@ -21,18 +21,18 @@ export interface DeckFromLayersProps { } const OT2_LAYER_MAP: { - [layer in typeof ALL_OT2_DECK_LAYERS[number]]: JSX.Element + [layer in typeof ALL_OT2_DECK_LAYERS[number]]: () => JSX.Element } = { - fixedBase: , - fixedTrash: , - doorStops: , - metalFrame: , - removableDeckOutline: , - slotRidges: , - slotNumbers: , - calibrationMarkings: , - removalHandle: , - screwHoles: , + fixedBase: () => , + fixedTrash: () => , + doorStops: () => , + metalFrame: () => , + removableDeckOutline: () => , + slotRidges: () => , + slotNumbers: () => , + calibrationMarkings: () => , + removalHandle: () => , + screwHoles: () => , } /** @@ -47,10 +47,12 @@ export function DeckFromLayers(props: DeckFromLayersProps): JSX.Element | null { return ( - {ALL_OT2_DECK_LAYERS.reduce((acc, layer) => { - if (layerBlocklist.includes(layer)) return acc - return [...acc, OT2_LAYER_MAP[layer]] - }, [])} + {ALL_OT2_DECK_LAYERS.filter(layer => !layerBlocklist.includes(layer)).map( + layer => { + const LayerComponent = OT2_LAYER_MAP[layer] + return + } + )} ) } diff --git a/components/src/organisms/Toolbox/index.tsx b/components/src/organisms/Toolbox/index.tsx index e7437e1e57f..35e4083643b 100644 --- a/components/src/organisms/Toolbox/index.tsx +++ b/components/src/organisms/Toolbox/index.tsx @@ -112,11 +112,11 @@ export function Toolbox(props: ToolboxProps): JSX.Element { {secondaryHeaderButton != null ? secondaryHeaderButton : null} {onCloseClick != null && closeButton != null ? ( {closeButton} diff --git a/protocol-designer/src/organisms/MaterialsListModal/index.tsx b/protocol-designer/src/organisms/MaterialsListModal/index.tsx index 14324594969..04fcded496d 100644 --- a/protocol-designer/src/organisms/MaterialsListModal/index.tsx +++ b/protocol-designer/src/organisms/MaterialsListModal/index.tsx @@ -110,10 +110,7 @@ export function MaterialsListModal({ } content={ - + {t(`shared:${fixture.name}`)} @@ -145,7 +142,7 @@ export function MaterialsListModal({ content={ diff --git a/protocol-designer/src/organisms/SlotInformation/index.tsx b/protocol-designer/src/organisms/SlotInformation/index.tsx index 85e9a1ef636..a57de707dda 100644 --- a/protocol-designer/src/organisms/SlotInformation/index.tsx +++ b/protocol-designer/src/organisms/SlotInformation/index.tsx @@ -64,7 +64,7 @@ export const SlotInformation: FC = ({ {liquids.join(', ')} } - description={t('liquid')} + description={{t('liquid')}} /> ) : ( diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/Timeline/StepContainer.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/Timeline/StepContainer.tsx index 0abd86d73c1..01abd0eb74e 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/Timeline/StepContainer.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/Timeline/StepContainer.tsx @@ -1,10 +1,10 @@ -import * as React from 'react' import { createPortal } from 'react-dom' +import { useEffect, useState, useRef } from 'react' import { useDispatch, useSelector } from 'react-redux' import { ALIGN_CENTER, BORDERS, - Btn, + Box, COLORS, CURSOR_DEFAULT, CURSOR_POINTER, @@ -75,9 +75,9 @@ export function StepContainer(props: StepContainerProps): JSX.Element { isStepAfterError = false, dragHovered = false, } = props - const [top, setTop] = React.useState(0) - const menuRootRef = React.useRef(null) - const [stepOverflowMenu, setStepOverflowMenu] = React.useState(false) + const [top, setTop] = useState(0) + const menuRootRef = useRef(null) + const [stepOverflowMenu, setStepOverflowMenu] = useState(false) const isStartingOrEndingState = title === STARTING_DECK_STATE || title === FINAL_DECK_STATE const dispatch = useDispatch>() @@ -124,7 +124,7 @@ export function StepContainer(props: StepContainerProps): JSX.Element { setTop(top) } - React.useEffect(() => { + useEffect(() => { global.addEventListener('click', handleClick) return () => { global.removeEventListener('click', handleClick) @@ -200,7 +200,8 @@ export function StepContainer(props: StepContainerProps): JSX.Element { gridGap={SPACING.spacing4} flexDirection={DIRECTION_COLUMN} > - ) : null} - + {dragHovered ? ( equipment?.name === 'gripper' ) - const pipetteInfo = (pipette?: PipetteOnDeck): JSX.Element | string => { + const pipetteInfo = (pipette?: PipetteOnDeck): JSX.Element => { const pipetteName = pipette != null ? getPipetteSpecsV2(pipette.name as PipetteName)?.displayName @@ -50,7 +50,9 @@ export function InstrumentsInfo({ : t('na') if (pipetteName === t('na') || tipsInfo === t('na')) { - return t('na') + return ( + {t('na')} + ) } return ( @@ -96,7 +98,6 @@ export function InstrumentsInfo({ type="large" description={ - {' '} } - content={ - - {pipetteInfo(leftPipette)} - - } + content={pipetteInfo(leftPipette)} /> @@ -147,11 +144,7 @@ export function InstrumentsInfo({ } - content={ - - {pipetteInfo(rightPipette)} - - } + content={pipetteInfo(rightPipette)} /> {robotType === FLEX_ROBOT_TYPE ? ( diff --git a/protocol-designer/src/pages/ProtocolOverview/index.tsx b/protocol-designer/src/pages/ProtocolOverview/index.tsx index f622ef6e08f..1bea85833a2 100644 --- a/protocol-designer/src/pages/ProtocolOverview/index.tsx +++ b/protocol-designer/src/pages/ProtocolOverview/index.tsx @@ -117,8 +117,8 @@ export function ProtocolOverview(): JSX.Element { useEffect(() => { if (formValues?.created == null) { - console.warn( - 'formValues was refreshed while on the overview page, redirecting to landing page' + console.log( + 'formValues was possibly refreshed while on the overview page, redirecting to landing page' ) navigate('/') } From 9ae68a8804286221e898c04d8f2c4c541f6b3eb4 Mon Sep 17 00:00:00 2001 From: Jeremy Leon Date: Mon, 4 Nov 2024 10:25:21 -0500 Subject: [PATCH 52/81] feat(api): Python API classes for liquid class properties (#16644) Adds python user-facing classes for liquid class properties --- api/src/opentrons/protocol_api/_liquid.py | 53 +- .../protocol_api/_liquid_properties.py | 503 ++++++++++++++++++ .../core/engine/test_protocol_core.py | 2 +- .../protocol_api/test_liquid_class.py | 4 +- .../test_liquid_class_properties.py | 175 ++++++ .../protocol_api/test_protocol_context.py | 2 +- .../test_liquid_classes.py | 2 +- 7 files changed, 714 insertions(+), 27 deletions(-) create mode 100644 api/src/opentrons/protocol_api/_liquid_properties.py create mode 100644 api/tests/opentrons/protocol_api/test_liquid_class_properties.py diff --git a/api/src/opentrons/protocol_api/_liquid.py b/api/src/opentrons/protocol_api/_liquid.py index 75e2c6fb6f2..0cb104099eb 100644 --- a/api/src/opentrons/protocol_api/_liquid.py +++ b/api/src/opentrons/protocol_api/_liquid.py @@ -1,13 +1,19 @@ +from __future__ import annotations + from dataclasses import dataclass -from typing import Optional, Sequence +from typing import Optional, Dict from opentrons_shared_data.liquid_classes.liquid_class_definition import ( LiquidClassSchemaV1, +) + +from ._liquid_properties import ( AspirateProperties, SingleDispenseProperties, MultiDispenseProperties, - ByPipetteSetting, - ByTipTypeSetting, + build_aspirate_properties, + build_single_dispense_properties, + build_multi_dispense_properties, ) @@ -59,16 +65,29 @@ class LiquidClass: _name: str _display_name: str - _by_pipette_setting: Sequence[ByPipetteSetting] + _by_pipette_setting: Dict[str, Dict[str, TransferProperties]] @classmethod def create(cls, liquid_class_definition: LiquidClassSchemaV1) -> "LiquidClass": """Liquid class factory method.""" + by_pipette_settings: Dict[str, Dict[str, TransferProperties]] = {} + for by_pipette in liquid_class_definition.byPipette: + tip_settings: Dict[str, TransferProperties] = {} + for tip_type in by_pipette.byTipType: + tip_settings[tip_type.tiprack] = TransferProperties( + _aspirate=build_aspirate_properties(tip_type.aspirate), + _dispense=build_single_dispense_properties(tip_type.singleDispense), + _multi_dispense=build_multi_dispense_properties( + tip_type.multiDispense + ), + ) + by_pipette_settings[by_pipette.pipetteModel] = tip_settings + return cls( _name=liquid_class_definition.liquidClassName, _display_name=liquid_class_definition.displayName, - _by_pipette_setting=liquid_class_definition.byPipette, + _by_pipette_setting=by_pipette_settings, ) @property @@ -81,26 +100,16 @@ def display_name(self) -> str: def get_for(self, pipette: str, tiprack: str) -> TransferProperties: """Get liquid class transfer properties for the specified pipette and tip.""" - settings_for_pipette: Sequence[ByPipetteSetting] = [ - pip_setting - for pip_setting in self._by_pipette_setting - if pip_setting.pipetteModel == pipette - ] - if len(settings_for_pipette) == 0: + try: + settings_for_pipette = self._by_pipette_setting[pipette] + except KeyError: raise ValueError( f"No properties found for {pipette} in {self._name} liquid class" ) - settings_for_tip: Sequence[ByTipTypeSetting] = [ - tip_setting - for tip_setting in settings_for_pipette[0].byTipType - if tip_setting.tiprack == tiprack - ] - if len(settings_for_tip) == 0: + try: + transfer_properties = settings_for_pipette[tiprack] + except KeyError: raise ValueError( f"No properties found for {tiprack} in {self._name} liquid class" ) - return TransferProperties( - _aspirate=settings_for_tip[0].aspirate, - _dispense=settings_for_tip[0].singleDispense, - _multi_dispense=settings_for_tip[0].multiDispense, - ) + return transfer_properties diff --git a/api/src/opentrons/protocol_api/_liquid_properties.py b/api/src/opentrons/protocol_api/_liquid_properties.py new file mode 100644 index 00000000000..f0dd0adfe92 --- /dev/null +++ b/api/src/opentrons/protocol_api/_liquid_properties.py @@ -0,0 +1,503 @@ +from dataclasses import dataclass +from typing import Optional, Dict, Sequence + +from opentrons_shared_data.liquid_classes.liquid_class_definition import ( + AspirateProperties as SharedDataAspirateProperties, + SingleDispenseProperties as SharedDataSingleDispenseProperties, + MultiDispenseProperties as SharedDataMultiDispenseProperties, + DelayProperties as SharedDataDelayProperties, + TouchTipProperties as SharedDataTouchTipProperties, + MixProperties as SharedDataMixProperties, + BlowoutProperties as SharedDataBlowoutProperties, + Submerge as SharedDataSubmerge, + RetractAspirate as SharedDataRetractAspirate, + RetractDispense as SharedDataRetractDispense, + BlowoutLocation, + PositionReference, + Coordinate, +) + +# TODO replace this with a class that can extrapolate given volumes to the correct float, +# also figure out how we want people to be able to set this +LiquidHandlingPropertyByVolume = Dict[str, float] + + +@dataclass +class DelayProperties: + + _enabled: bool + _duration: Optional[float] + + @property + def enabled(self) -> bool: + return self._enabled + + @enabled.setter + def enabled(self, enable: bool) -> None: + # TODO insert bool validation here + if enable and self._duration is None: + raise ValueError("duration must be set before enabling delay.") + self._enabled = enable + + @property + def duration(self) -> Optional[float]: + return self._duration + + @duration.setter + def duration(self, new_duration: float) -> None: + # TODO insert positive float validation here + self._duration = new_duration + + +@dataclass +class TouchTipProperties: + + _enabled: bool + _z_offset: Optional[float] + _mm_to_edge: Optional[float] + _speed: Optional[float] + + @property + def enabled(self) -> bool: + return self._enabled + + @enabled.setter + def enabled(self, enable: bool) -> None: + # TODO insert bool validation here + if enable and ( + self._z_offset is None or self._mm_to_edge is None or self._speed is None + ): + raise ValueError( + "z_offset, mm_to_edge and speed must be set before enabling touch tip." + ) + self._enabled = enable + + @property + def z_offset(self) -> Optional[float]: + return self._z_offset + + @z_offset.setter + def z_offset(self, new_offset: float) -> None: + # TODO validation for float + self._z_offset = new_offset + + @property + def mm_to_edge(self) -> Optional[float]: + return self._mm_to_edge + + @mm_to_edge.setter + def mm_to_edge(self, new_mm: float) -> None: + # TODO validation for float + self._z_offset = new_mm + + @property + def speed(self) -> Optional[float]: + return self._speed + + @speed.setter + def speed(self, new_speed: float) -> None: + # TODO insert positive float validation here + self._speed = new_speed + + +@dataclass +class MixProperties: + + _enabled: bool + _repetitions: Optional[int] + _volume: Optional[float] + + @property + def enabled(self) -> bool: + return self._enabled + + @enabled.setter + def enabled(self, enable: bool) -> None: + # TODO insert bool validation here + if enable and (self._repetitions is None or self._volume is None): + raise ValueError("repetitions and volume must be set before enabling mix.") + self._enabled = enable + + @property + def repetitions(self) -> Optional[int]: + return self._repetitions + + @repetitions.setter + def repetitions(self, new_repetitions: int) -> None: + # TODO validations for positive int + self._repetitions = new_repetitions + + @property + def volume(self) -> Optional[float]: + return self._volume + + @volume.setter + def volume(self, new_volume: float) -> None: + # TODO validations for volume float + self._volume = new_volume + + +@dataclass +class BlowoutProperties: + + _enabled: bool + _location: Optional[BlowoutLocation] + _flow_rate: Optional[float] + + @property + def enabled(self) -> bool: + return self._enabled + + @enabled.setter + def enabled(self, enable: bool) -> None: + # TODO insert bool validation here + if enable and (self._location is None or self._flow_rate is None): + raise ValueError( + "location and flow_rate must be set before enabling blowout." + ) + self._enabled = enable + + @property + def location(self) -> Optional[BlowoutLocation]: + return self._location + + @location.setter + def location(self, new_location: str) -> None: + # TODO blowout location validation + self._location = BlowoutLocation(new_location) + + @property + def flow_rate(self) -> Optional[float]: + return self._flow_rate + + @flow_rate.setter + def flow_rate(self, new_flow_rate: float) -> None: + # TODO validations for positive float + self._flow_rate = new_flow_rate + + +@dataclass +class SubmergeRetractCommon: + + _position_reference: PositionReference + _offset: Coordinate + _speed: float + _delay: DelayProperties + + @property + def position_reference(self) -> PositionReference: + return self._position_reference + + @position_reference.setter + def position_reference(self, new_position: str) -> None: + # TODO validation for position reference + self._position_reference = PositionReference(new_position) + + @property + def offset(self) -> Coordinate: + return self._offset + + @offset.setter + def offset(self, new_offset: Sequence[float]) -> None: + # TODO validate valid coordinates + self._offset = Coordinate(x=new_offset[0], y=new_offset[1], z=new_offset[2]) + + @property + def speed(self) -> float: + return self._speed + + @speed.setter + def speed(self, new_speed: float) -> None: + # TODO insert positive float validation here + self._speed = new_speed + + @property + def delay(self) -> DelayProperties: + return self._delay + + +@dataclass +class Submerge(SubmergeRetractCommon): + ... + + +@dataclass +class RetractAspirate(SubmergeRetractCommon): + + _air_gap_by_volume: LiquidHandlingPropertyByVolume + _touch_tip: TouchTipProperties + + @property + def air_gap_by_volume(self) -> LiquidHandlingPropertyByVolume: + return self._air_gap_by_volume + + @property + def touch_tip(self) -> TouchTipProperties: + return self._touch_tip + + +@dataclass +class RetractDispense(SubmergeRetractCommon): + + _air_gap_by_volume: LiquidHandlingPropertyByVolume + _touch_tip: TouchTipProperties + _blowout: BlowoutProperties + + @property + def air_gap_by_volume(self) -> LiquidHandlingPropertyByVolume: + return self._air_gap_by_volume + + @property + def touch_tip(self) -> TouchTipProperties: + return self._touch_tip + + @property + def blowout(self) -> BlowoutProperties: + return self._blowout + + +@dataclass +class BaseLiquidHandlingProperties: + + _submerge: Submerge + _position_reference: PositionReference + _offset: Coordinate + _flow_rate_by_volume: LiquidHandlingPropertyByVolume + _delay: DelayProperties + + @property + def submerge(self) -> Submerge: + return self._submerge + + @property + def position_reference(self) -> PositionReference: + return self._position_reference + + @position_reference.setter + def position_reference(self, new_position: str) -> None: + # TODO validation for position reference + self._position_reference = PositionReference(new_position) + + @property + def offset(self) -> Coordinate: + return self._offset + + @offset.setter + def offset(self, new_offset: Sequence[float]) -> None: + # TODO validate valid coordinates + self._offset = Coordinate(x=new_offset[0], y=new_offset[1], z=new_offset[2]) + + @property + def flow_rate_by_volume(self) -> LiquidHandlingPropertyByVolume: + return self._flow_rate_by_volume + + @property + def delay(self) -> DelayProperties: + return self._delay + + +@dataclass +class AspirateProperties(BaseLiquidHandlingProperties): + + _retract: RetractAspirate + _pre_wet: bool + _mix: MixProperties + + @property + def pre_wet(self) -> bool: + return self._pre_wet + + @pre_wet.setter + def pre_wet(self, new_setting: bool) -> None: + # TODO boolean validation + self._pre_wet = new_setting + + @property + def retract(self) -> RetractAspirate: + return self._retract + + @property + def mix(self) -> MixProperties: + return self._mix + + +@dataclass +class SingleDispenseProperties(BaseLiquidHandlingProperties): + + _retract: RetractDispense + _push_out_by_volume: LiquidHandlingPropertyByVolume + _mix: MixProperties + + @property + def push_out_by_volume(self) -> LiquidHandlingPropertyByVolume: + return self._push_out_by_volume + + @property + def retract(self) -> RetractDispense: + return self._retract + + @property + def mix(self) -> MixProperties: + return self._mix + + +@dataclass +class MultiDispenseProperties(BaseLiquidHandlingProperties): + + _retract: RetractDispense + _conditioning_by_volume: LiquidHandlingPropertyByVolume + _disposal_by_volume: LiquidHandlingPropertyByVolume + + @property + def retract(self) -> RetractDispense: + return self._retract + + @property + def conditioning_by_volume(self) -> LiquidHandlingPropertyByVolume: + return self._conditioning_by_volume + + @property + def disposal_by_volume(self) -> LiquidHandlingPropertyByVolume: + return self._disposal_by_volume + + +def _build_delay_properties( + delay_properties: SharedDataDelayProperties, +) -> DelayProperties: + if delay_properties.params is not None: + duration = delay_properties.params.duration + else: + duration = None + return DelayProperties(_enabled=delay_properties.enable, _duration=duration) + + +def _build_touch_tip_properties( + touch_tip_properties: SharedDataTouchTipProperties, +) -> TouchTipProperties: + if touch_tip_properties.params is not None: + z_offset = touch_tip_properties.params.zOffset + mm_to_edge = touch_tip_properties.params.mmToEdge + speed = touch_tip_properties.params.speed + else: + z_offset = None + mm_to_edge = None + speed = None + return TouchTipProperties( + _enabled=touch_tip_properties.enable, + _z_offset=z_offset, + _mm_to_edge=mm_to_edge, + _speed=speed, + ) + + +def _build_mix_properties( + mix_properties: SharedDataMixProperties, +) -> MixProperties: + if mix_properties.params is not None: + repetitions = mix_properties.params.repetitions + volume = mix_properties.params.volume + else: + repetitions = None + volume = None + return MixProperties( + _enabled=mix_properties.enable, _repetitions=repetitions, _volume=volume + ) + + +def _build_blowout_properties( + blowout_properties: SharedDataBlowoutProperties, +) -> BlowoutProperties: + if blowout_properties.params is not None: + location = blowout_properties.params.location + flow_rate = blowout_properties.params.flowRate + else: + location = None + flow_rate = None + return BlowoutProperties( + _enabled=blowout_properties.enable, _location=location, _flow_rate=flow_rate + ) + + +def _build_submerge( + submerge_properties: SharedDataSubmerge, +) -> Submerge: + return Submerge( + _position_reference=submerge_properties.positionReference, + _offset=submerge_properties.offset, + _speed=submerge_properties.speed, + _delay=_build_delay_properties(submerge_properties.delay), + ) + + +def _build_retract_aspirate( + retract_aspirate: SharedDataRetractAspirate, +) -> RetractAspirate: + return RetractAspirate( + _position_reference=retract_aspirate.positionReference, + _offset=retract_aspirate.offset, + _speed=retract_aspirate.speed, + _air_gap_by_volume=retract_aspirate.airGapByVolume, + _touch_tip=_build_touch_tip_properties(retract_aspirate.touchTip), + _delay=_build_delay_properties(retract_aspirate.delay), + ) + + +def _build_retract_dispense( + retract_dispense: SharedDataRetractDispense, +) -> RetractDispense: + return RetractDispense( + _position_reference=retract_dispense.positionReference, + _offset=retract_dispense.offset, + _speed=retract_dispense.speed, + _air_gap_by_volume=retract_dispense.airGapByVolume, + _blowout=_build_blowout_properties(retract_dispense.blowout), + _touch_tip=_build_touch_tip_properties(retract_dispense.touchTip), + _delay=_build_delay_properties(retract_dispense.delay), + ) + + +def build_aspirate_properties( + aspirate_properties: SharedDataAspirateProperties, +) -> AspirateProperties: + return AspirateProperties( + _submerge=_build_submerge(aspirate_properties.submerge), + _retract=_build_retract_aspirate(aspirate_properties.retract), + _position_reference=aspirate_properties.positionReference, + _offset=aspirate_properties.offset, + _flow_rate_by_volume=aspirate_properties.flowRateByVolume, + _pre_wet=aspirate_properties.preWet, + _mix=_build_mix_properties(aspirate_properties.mix), + _delay=_build_delay_properties(aspirate_properties.delay), + ) + + +def build_single_dispense_properties( + single_dispense_properties: SharedDataSingleDispenseProperties, +) -> SingleDispenseProperties: + return SingleDispenseProperties( + _submerge=_build_submerge(single_dispense_properties.submerge), + _retract=_build_retract_dispense(single_dispense_properties.retract), + _position_reference=single_dispense_properties.positionReference, + _offset=single_dispense_properties.offset, + _flow_rate_by_volume=single_dispense_properties.flowRateByVolume, + _mix=_build_mix_properties(single_dispense_properties.mix), + _push_out_by_volume=single_dispense_properties.pushOutByVolume, + _delay=_build_delay_properties(single_dispense_properties.delay), + ) + + +def build_multi_dispense_properties( + multi_dispense_properties: Optional[SharedDataMultiDispenseProperties], +) -> Optional[MultiDispenseProperties]: + if multi_dispense_properties is None: + return None + return MultiDispenseProperties( + _submerge=_build_submerge(multi_dispense_properties.submerge), + _retract=_build_retract_dispense(multi_dispense_properties.retract), + _position_reference=multi_dispense_properties.positionReference, + _offset=multi_dispense_properties.offset, + _flow_rate_by_volume=multi_dispense_properties.flowRateByVolume, + _conditioning_by_volume=multi_dispense_properties.conditioningByVolume, + _disposal_by_volume=multi_dispense_properties.disposalByVolume, + _delay=_build_delay_properties(multi_dispense_properties.delay), + ) diff --git a/api/tests/opentrons/protocol_api/core/engine/test_protocol_core.py b/api/tests/opentrons/protocol_api/core/engine/test_protocol_core.py index 7b549fc035d..9ccaac498f0 100644 --- a/api/tests/opentrons/protocol_api/core/engine/test_protocol_core.py +++ b/api/tests/opentrons/protocol_api/core/engine/test_protocol_core.py @@ -1763,7 +1763,7 @@ def test_define_liquid_class( ) -> None: """It should create a LiquidClass and cache the definition.""" expected_liquid_class = LiquidClass( - _name="water1", _display_name="water 1", _by_pipette_setting=[] + _name="water1", _display_name="water 1", _by_pipette_setting={} ) decoy.when(liquid_classes.load_definition("water")).then_return( minimal_liquid_class_def1 diff --git a/api/tests/opentrons/protocol_api/test_liquid_class.py b/api/tests/opentrons/protocol_api/test_liquid_class.py index 48f3788f496..be0b432e32f 100644 --- a/api/tests/opentrons/protocol_api/test_liquid_class.py +++ b/api/tests/opentrons/protocol_api/test_liquid_class.py @@ -12,7 +12,7 @@ def test_create_liquid_class( ) -> None: """It should create a LiquidClass from provided definition.""" assert LiquidClass.create(minimal_liquid_class_def1) == LiquidClass( - _name="water1", _display_name="water 1", _by_pipette_setting=[] + _name="water1", _display_name="water 1", _by_pipette_setting={} ) @@ -22,7 +22,7 @@ def test_get_for_pipette_and_tip( """It should get the properties for the specified pipette and tip.""" liq_class = LiquidClass.create(minimal_liquid_class_def2) result = liq_class.get_for("p20_single_gen2", "opentrons_96_tiprack_20ul") - assert result.aspirate.flowRateByVolume == {"default": 50, "10": 40, "20": 30} + assert result.aspirate.flow_rate_by_volume == {"default": 50, "10": 40, "20": 30} def test_get_for_raises_for_incorrect_pipette_or_tip( diff --git a/api/tests/opentrons/protocol_api/test_liquid_class_properties.py b/api/tests/opentrons/protocol_api/test_liquid_class_properties.py new file mode 100644 index 00000000000..b1699701f3c --- /dev/null +++ b/api/tests/opentrons/protocol_api/test_liquid_class_properties.py @@ -0,0 +1,175 @@ +"""Tests for LiquidClass properties and related functions.""" + +from opentrons_shared_data import load_shared_data +from opentrons_shared_data.liquid_classes.liquid_class_definition import ( + LiquidClassSchemaV1, + Coordinate, +) + +from opentrons.protocol_api._liquid_properties import ( + build_aspirate_properties, + build_single_dispense_properties, + build_multi_dispense_properties, +) + + +def test_build_aspirate_settings() -> None: + """It should convert the shared data aspirate settings to the PAPI type.""" + fixture_data = load_shared_data("liquid-class/fixtures/fixture_glycerol50.json") + liquid_class_model = LiquidClassSchemaV1.parse_raw(fixture_data) + aspirate_data = liquid_class_model.byPipette[0].byTipType[0].aspirate + + aspirate_properties = build_aspirate_properties(aspirate_data) + + assert aspirate_properties.submerge.position_reference.value == "liquid-meniscus" + assert aspirate_properties.submerge.offset == Coordinate(x=0, y=0, z=-5) + assert aspirate_properties.submerge.speed == 100 + assert aspirate_properties.submerge.delay.enabled is True + assert aspirate_properties.submerge.delay.duration == 1.5 + + assert aspirate_properties.retract.position_reference.value == "well-top" + assert aspirate_properties.retract.offset == Coordinate(x=0, y=0, z=5) + assert aspirate_properties.retract.speed == 100 + assert aspirate_properties.retract.air_gap_by_volume == { + "default": 2, + "5": 3, + "10": 4, + } + assert aspirate_properties.retract.touch_tip.enabled is True + assert aspirate_properties.retract.touch_tip.z_offset == 2 + assert aspirate_properties.retract.touch_tip.mm_to_edge == 1 + assert aspirate_properties.retract.touch_tip.speed == 50 + assert aspirate_properties.retract.delay.enabled is True + assert aspirate_properties.retract.delay.duration == 1 + + assert aspirate_properties.position_reference.value == "well-bottom" + assert aspirate_properties.offset == Coordinate(x=0, y=0, z=-5) + assert aspirate_properties.flow_rate_by_volume == { + "default": 50, + "10": 40, + "20": 30, + } + assert aspirate_properties.pre_wet is True + assert aspirate_properties.mix.enabled is True + assert aspirate_properties.mix.repetitions == 3 + assert aspirate_properties.mix.volume == 15 + assert aspirate_properties.delay.enabled is True + assert aspirate_properties.delay.duration == 2 + + +def test_build_single_dispense_settings() -> None: + """It should convert the shared data single dispense settings to the PAPI type.""" + fixture_data = load_shared_data("liquid-class/fixtures/fixture_glycerol50.json") + liquid_class_model = LiquidClassSchemaV1.parse_raw(fixture_data) + single_dispense_data = liquid_class_model.byPipette[0].byTipType[0].singleDispense + + single_dispense_properties = build_single_dispense_properties(single_dispense_data) + + assert ( + single_dispense_properties.submerge.position_reference.value + == "liquid-meniscus" + ) + assert single_dispense_properties.submerge.offset == Coordinate(x=0, y=0, z=-5) + assert single_dispense_properties.submerge.speed == 100 + assert single_dispense_properties.submerge.delay.enabled is True + assert single_dispense_properties.submerge.delay.duration == 1.5 + + assert single_dispense_properties.retract.position_reference.value == "well-top" + assert single_dispense_properties.retract.offset == Coordinate(x=0, y=0, z=5) + assert single_dispense_properties.retract.speed == 100 + assert single_dispense_properties.retract.air_gap_by_volume == { + "default": 2, + "5": 3, + "10": 4, + } + assert single_dispense_properties.retract.touch_tip.enabled is True + assert single_dispense_properties.retract.touch_tip.z_offset == 2 + assert single_dispense_properties.retract.touch_tip.mm_to_edge == 1 + assert single_dispense_properties.retract.touch_tip.speed == 50 + assert single_dispense_properties.retract.blowout.enabled is True + assert single_dispense_properties.retract.blowout.location is not None + assert single_dispense_properties.retract.blowout.location.value == "trash" + assert single_dispense_properties.retract.blowout.flow_rate == 100 + assert single_dispense_properties.retract.delay.enabled is True + assert single_dispense_properties.retract.delay.duration == 1 + + assert single_dispense_properties.position_reference.value == "well-bottom" + assert single_dispense_properties.offset == Coordinate(x=0, y=0, z=-5) + assert single_dispense_properties.flow_rate_by_volume == { + "default": 50, + "10": 40, + "20": 30, + } + assert single_dispense_properties.mix.enabled is True + assert single_dispense_properties.mix.repetitions == 3 + assert single_dispense_properties.mix.volume == 15 + assert single_dispense_properties.push_out_by_volume == { + "default": 5, + "10": 7, + "20": 10, + } + assert single_dispense_properties.delay.enabled is True + assert single_dispense_properties.delay.duration == 2.5 + + +def test_build_multi_dispense_settings() -> None: + """It should convert the shared data multi dispense settings to the PAPI type.""" + fixture_data = load_shared_data("liquid-class/fixtures/fixture_glycerol50.json") + liquid_class_model = LiquidClassSchemaV1.parse_raw(fixture_data) + multi_dispense_data = liquid_class_model.byPipette[0].byTipType[0].multiDispense + + assert multi_dispense_data is not None + multi_dispense_properties = build_multi_dispense_properties(multi_dispense_data) + assert multi_dispense_properties is not None + + assert ( + multi_dispense_properties.submerge.position_reference.value == "liquid-meniscus" + ) + assert multi_dispense_properties.submerge.offset == Coordinate(x=0, y=0, z=-5) + assert multi_dispense_properties.submerge.speed == 100 + assert multi_dispense_properties.submerge.delay.enabled is True + assert multi_dispense_properties.submerge.delay.duration == 1.5 + + assert multi_dispense_properties.retract.position_reference.value == "well-top" + assert multi_dispense_properties.retract.offset == Coordinate(x=0, y=0, z=5) + assert multi_dispense_properties.retract.speed == 100 + assert multi_dispense_properties.retract.air_gap_by_volume == { + "default": 2, + "5": 3, + "10": 4, + } + assert multi_dispense_properties.retract.touch_tip.enabled is True + assert multi_dispense_properties.retract.touch_tip.z_offset == 2 + assert multi_dispense_properties.retract.touch_tip.mm_to_edge == 1 + assert multi_dispense_properties.retract.touch_tip.speed == 50 + assert multi_dispense_properties.retract.blowout.enabled is False + assert multi_dispense_properties.retract.blowout.location is None + assert multi_dispense_properties.retract.blowout.flow_rate is None + assert multi_dispense_properties.retract.delay.enabled is True + assert multi_dispense_properties.retract.delay.duration == 1 + + assert multi_dispense_properties.position_reference.value == "well-bottom" + assert multi_dispense_properties.offset == Coordinate(x=0, y=0, z=-5) + assert multi_dispense_properties.flow_rate_by_volume == { + "default": 50, + "10": 40, + "20": 30, + } + assert multi_dispense_properties.conditioning_by_volume == { + "default": 10, + "5": 5, + } + assert multi_dispense_properties.disposal_by_volume == { + "default": 2, + "5": 3, + } + assert multi_dispense_properties.delay.enabled is True + assert multi_dispense_properties.delay.duration == 1 + + +def test_build_multi_dispense_settings_none( + minimal_liquid_class_def2: LiquidClassSchemaV1, +) -> None: + """It should return None if there are no multi dispense properties in the model.""" + transfer_settings = minimal_liquid_class_def2.byPipette[0].byTipType[0] + assert build_multi_dispense_properties(transfer_settings.multiDispense) is None diff --git a/api/tests/opentrons/protocol_api/test_protocol_context.py b/api/tests/opentrons/protocol_api/test_protocol_context.py index 2bedbd5fb6f..2c8e8b158af 100644 --- a/api/tests/opentrons/protocol_api/test_protocol_context.py +++ b/api/tests/opentrons/protocol_api/test_protocol_context.py @@ -1227,7 +1227,7 @@ def test_define_liquid_class( ) -> None: """It should create the liquid class definition.""" expected_liquid_class = LiquidClass( - _name="volatile_100", _display_name="volatile 100%", _by_pipette_setting=[] + _name="volatile_100", _display_name="volatile 100%", _by_pipette_setting={} ) decoy.when(mock_core.define_liquid_class("volatile_90")).then_return( expected_liquid_class diff --git a/api/tests/opentrons/protocol_api_integration/test_liquid_classes.py b/api/tests/opentrons/protocol_api_integration/test_liquid_classes.py index 049edae5c0f..eed90cc2478 100644 --- a/api/tests/opentrons/protocol_api_integration/test_liquid_classes.py +++ b/api/tests/opentrons/protocol_api_integration/test_liquid_classes.py @@ -27,7 +27,7 @@ def test_liquid_class_creation_and_property_fetching( assert ( glycerol_50.get_for( pipette_left.name, tiprack.load_name - ).dispense.flowRateByVolume["default"] + ).dispense.flow_rate_by_volume["default"] == 50 ) assert ( From 185aeb8db675a1e99d0bb660ddc29fd22302a4b7 Mon Sep 17 00:00:00 2001 From: fbelginetw <167361860+fbelginetw@users.noreply.github.com> Date: Mon, 4 Nov 2024 12:21:55 -0500 Subject: [PATCH 53/81] feat: opentrons ai client Instruments Section (#16646) # Overview This PR adds the Instruments section to the create protocol flow. It adds the Exit button and its functionality to the flows. ![image](https://github.com/user-attachments/assets/220bd7e6-01a6-451b-9db1-78c06b7f8617) ## Test Plan and Hands on Testing - On the landing page click Create a new protocol button, you will be redirected to the new page - fill up the required information in the Application section and click Confirm - You now can select different Robots and pipettes - The Prompt Preview component is updated with the data entered. ## Changelog - Add second section Instruments - Now on the create and update protocol flows there's an exit button instead of Logout - Exit button displays a confirm Modal ## Review requests - Verify new section. - Verify Exit functionality ## Risk assessment - low --- opentrons-ai-client/src/OpentronsAI.tsx | 2 + .../localization/en/create_protocol.json | 16 ++ .../localization/en/protocol_generator.json | 5 + .../ControlledRadioButtonGroup.test.tsx | 88 ++++++++ .../ControlledRadioButtonGroup/index.tsx | 64 ++++++ .../__tests__/ExitConfirmModal.test.tsx | 59 +++++ .../src/molecules/ExitConfirmModal/index.tsx | 54 +++++ .../src/molecules/Header/index.tsx | 24 +- .../__tests__/HeaderWithMeter.test.tsx | 39 +++- .../src/molecules/HeaderWithMeter/index.tsx | 2 +- .../__tests__/InstrumentsSection.test.tsx | 108 +++++++++ .../organisms/InstrumentsSection/index.tsx | 213 ++++++++++++++++++ .../ProtocolSectionsContainer/index.tsx | 5 +- .../__tests__/CreateProtocol.test.tsx | 42 +++- .../src/pages/CreateProtocol/index.tsx | 45 +--- .../src/pages/Landing/index.tsx | 9 + opentrons-ai-client/src/resources/atoms.ts | 2 + .../utils/createProtocolTestUtils.tsx | 16 ++ .../resources/utils/createProtocolUtils.tsx | 79 +++++++ 19 files changed, 827 insertions(+), 45 deletions(-) create mode 100644 opentrons-ai-client/src/molecules/ControlledRadioButtonGroup/__tests__/ControlledRadioButtonGroup.test.tsx create mode 100644 opentrons-ai-client/src/molecules/ControlledRadioButtonGroup/index.tsx create mode 100644 opentrons-ai-client/src/molecules/ExitConfirmModal/__tests__/ExitConfirmModal.test.tsx create mode 100644 opentrons-ai-client/src/molecules/ExitConfirmModal/index.tsx create mode 100644 opentrons-ai-client/src/organisms/InstrumentsSection/__tests__/InstrumentsSection.test.tsx create mode 100644 opentrons-ai-client/src/organisms/InstrumentsSection/index.tsx create mode 100644 opentrons-ai-client/src/resources/utils/createProtocolUtils.tsx diff --git a/opentrons-ai-client/src/OpentronsAI.tsx b/opentrons-ai-client/src/OpentronsAI.tsx index 1f91faf0eed..e4bb9cca5fb 100644 --- a/opentrons-ai-client/src/OpentronsAI.tsx +++ b/opentrons-ai-client/src/OpentronsAI.tsx @@ -20,6 +20,7 @@ import { CLIENT_MAX_WIDTH } from './resources/constants' import { Footer } from './molecules/Footer' import { HeaderWithMeter } from './molecules/HeaderWithMeter' import styled from 'styled-components' +import { ExitConfirmModal } from './molecules/ExitConfirmModal' export function OpentronsAI(): JSX.Element | null { const { isAuthenticated, isLoading, loginWithRedirect } = useAuth0() @@ -94,6 +95,7 @@ export function OpentronsAI(): JSX.Element | null { flex={1} > + diff --git a/opentrons-ai-client/src/assets/localization/en/create_protocol.json b/opentrons-ai-client/src/assets/localization/en/create_protocol.json index 5bf2d5d6e23..55c225ba35b 100644 --- a/opentrons-ai-client/src/assets/localization/en/create_protocol.json +++ b/opentrons-ai-client/src/assets/localization/en/create_protocol.json @@ -11,6 +11,22 @@ "application_describe_caption": "Example: “The protocol performs automated liquid handling for Pierce BCA Protein Assay Kit to determine protein concentrations in various sample types, such as cell lysates and eluates of purification process.", "section_confirm_button": "Confirm", "instruments_title": "Instruments", + "instruments_robot_title": "What robot would you like to use?", + "opentrons_flex_label": "Opentrons Flex", + "opentrons_flex": "Opentrons Flex", + "opentrons_ot2_label": "Opentrons OT-2", + "opentrons_ot2": "Opentrons OT-2", + "instruments_pipettes_title": "What pipettes would you like to use?", + "two_pipettes_label": "Two pipettes", + "right_pipette_label": "Right mount", + "left_pipette_label": "Left mount", + "choose_pipette_placeholder": "Choose pipette", + "96_channel_1000ul_pipette_label": "96-Channel 1000µL pipette", + "96_channel_1000ul_pipette": "96-Channel 1000µL pipette", + "instruments_flex_gripper_title": "Do you want to use the Flex Gripper?", + "flex_gripper_yes_label": "Yes, use the Flex Gripper", + "flex_gripper": "Flex Gripper", + "flex_gripper_no_label": "No, do not use the Flex Gripper", "modules_title": "Modules", "labware_liquids_title": "Labware & Liquids", "steps_title": "Steps" diff --git a/opentrons-ai-client/src/assets/localization/en/protocol_generator.json b/opentrons-ai-client/src/assets/localization/en/protocol_generator.json index 6bf5b633936..0f38061ff47 100644 --- a/opentrons-ai-client/src/assets/localization/en/protocol_generator.json +++ b/opentrons-ai-client/src/assets/localization/en/protocol_generator.json @@ -7,6 +7,11 @@ "copy_code": "Copy code", "disclaimer": "OpentronsAI can make mistakes. Review your protocol before running it on an Opentrons robot.", "example": "For example prompts, click the buttons in the left panel.", + "exit": "Exit", + "exit_confirmation_title": "Are you sure you want to exit?", + "exit_confirmation_body": "Exiting now will discard your progress.", + "exit_confirmation_cancel": "Continue editing", + "exit_confirmation_exit": "Exit without saving", "got_feedback": "Got feedback? We love to hear it.", "key_info": "Here are some key pieces of information to provide in your prompt:", "labware_and_tipracks": "Labware and tip racks: Use names from the Opentrons Labware Library.", diff --git a/opentrons-ai-client/src/molecules/ControlledRadioButtonGroup/__tests__/ControlledRadioButtonGroup.test.tsx b/opentrons-ai-client/src/molecules/ControlledRadioButtonGroup/__tests__/ControlledRadioButtonGroup.test.tsx new file mode 100644 index 00000000000..22bae21beae --- /dev/null +++ b/opentrons-ai-client/src/molecules/ControlledRadioButtonGroup/__tests__/ControlledRadioButtonGroup.test.tsx @@ -0,0 +1,88 @@ +import { renderWithProviders } from '../../../__testing-utils__' +import { i18n } from '../../../i18n' +import { ControlledRadioButtonGroup } from '../index' +import { describe, it, expect } from 'vitest' +import { fireEvent, screen } from '@testing-library/react' +import { FormProvider, useForm } from 'react-hook-form' + +const radioButtonsMock = [ + { + id: 'radio1', + buttonLabel: 'Radio Label 1', + buttonValue: 'value 1', + }, + { + id: 'radio2', + buttonLabel: 'Radio Label 2', + buttonValue: 'value 2', + }, +] + +const TestFormProviderComponent = () => { + const methods = useForm({}) + + const selectedValue = methods.watch('radio-button-group-name') ?? 'none' + + return ( + + + + {'selected value: ' + selectedValue} + + ) +} + +const render = (): ReturnType => { + return renderWithProviders(, { + i18nInstance: i18n, + }) +} + +describe('ControlledRadioButtonGroup', () => { + it('should render ControlledRadioButtonGroup component', () => { + render() + + screen.getByText('Radio Label 1') + screen.getByText('Radio Label 2') + }) + + it('should select the correct option initially', () => { + const { rerender } = render() + + const radio1 = screen.getByLabelText('Radio Label 1') + const radio2 = screen.getByLabelText('Radio Label 2') + + expect(radio1).toBeChecked() + expect(radio2).not.toBeChecked() + + rerender() + + expect(screen.getByText('selected value: value 1')).toBeInTheDocument() + }) + + it('should change the selected value when the second radio is clicked', () => { + render() + + const radio1 = screen.getByLabelText('Radio Label 1') + const radio2 = screen.getByLabelText('Radio Label 2') + + expect(radio1).toBeChecked() + expect(radio2).not.toBeChecked() + + expect( + screen.queryByText('selected value: value 2') + ).not.toBeInTheDocument() + + fireEvent.click(radio2) + + expect(screen.getByLabelText('Radio Label 1')).not.toBeChecked() + expect(screen.getByLabelText('Radio Label 2')).toBeChecked() + + expect(screen.getByText('selected value: value 2')).toBeInTheDocument() + }) +}) diff --git a/opentrons-ai-client/src/molecules/ControlledRadioButtonGroup/index.tsx b/opentrons-ai-client/src/molecules/ControlledRadioButtonGroup/index.tsx new file mode 100644 index 00000000000..9245c3a1a1a --- /dev/null +++ b/opentrons-ai-client/src/molecules/ControlledRadioButtonGroup/index.tsx @@ -0,0 +1,64 @@ +import { + COLORS, + DIRECTION_COLUMN, + DIRECTION_ROW, + Flex, + RadioButton, + SPACING, + StyledText, +} from '@opentrons/components' +import { Controller } from 'react-hook-form' + +interface ControlledRadioButtonGroupProps { + id?: string + name: string + title?: string + defaultValue?: string + rules?: any + radioButtons: Array<{ + id?: string + buttonLabel: string + buttonValue: string + }> +} + +export function ControlledRadioButtonGroup({ + id, + name, + title = '', + defaultValue = '', + rules, + radioButtons, +}: ControlledRadioButtonGroupProps): JSX.Element { + return ( + + {title !== '' && ( + + {title} + + )} + { + return ( + + {radioButtons.map((radioButton, index) => ( + { + field.onChange(e) + }} + /> + ))} + + ) + }} + /> + + ) +} diff --git a/opentrons-ai-client/src/molecules/ExitConfirmModal/__tests__/ExitConfirmModal.test.tsx b/opentrons-ai-client/src/molecules/ExitConfirmModal/__tests__/ExitConfirmModal.test.tsx new file mode 100644 index 00000000000..1dc349c0507 --- /dev/null +++ b/opentrons-ai-client/src/molecules/ExitConfirmModal/__tests__/ExitConfirmModal.test.tsx @@ -0,0 +1,59 @@ +import { renderWithProviders } from '../../../__testing-utils__' +import { i18n } from '../../../i18n' +import { ExitConfirmModal } from '../index' +import { describe, it, vi, expect } from 'vitest' +import { fireEvent, screen } from '@testing-library/react' +import type { NavigateFunction } from 'react-router-dom' +import { displayExitConfirmModalAtom } from '../../../resources/atoms' + +const mockNavigate = vi.fn() + +vi.mock('react-router-dom', async importOriginal => { + const actual = await importOriginal() + return { + ...actual, + useNavigate: () => mockNavigate, + } +}) + +const initialValuesMock = [[displayExitConfirmModalAtom, true]] + +const render = (): ReturnType => { + return renderWithProviders(, { + initialValues: initialValuesMock as any, + i18nInstance: i18n, + }) +} + +describe('ExitConfirmModal', () => { + it('should render ExitConfirmModal component', () => { + render() + + screen.getByText('Are you sure you want to exit?') + screen.getByText('Exiting now will discard your progress.') + }) + + it('should close modal when continue button is clicked', () => { + render() + + const continueButton = screen.getByText('Continue editing') + fireEvent.click(continueButton) + + expect(mockNavigate).not.toHaveBeenCalled() + expect( + screen.queryByText('Are you sure you want to exit?') + ).not.toBeInTheDocument() + }) + + it('should close modal and navigate to / when exit button is clicked', () => { + render() + + const exitButton = screen.getByText('Exit without saving') + fireEvent.click(exitButton) + + expect(mockNavigate).toHaveBeenCalledWith('/') + expect( + screen.queryByText('Are you sure you want to exit?') + ).not.toBeInTheDocument() + }) +}) diff --git a/opentrons-ai-client/src/molecules/ExitConfirmModal/index.tsx b/opentrons-ai-client/src/molecules/ExitConfirmModal/index.tsx new file mode 100644 index 00000000000..b975ddec40c --- /dev/null +++ b/opentrons-ai-client/src/molecules/ExitConfirmModal/index.tsx @@ -0,0 +1,54 @@ +import { + AlertPrimaryButton, + DIRECTION_COLUMN, + Flex, + JUSTIFY_FLEX_END, + Modal, + SecondaryButton, + SPACING, + StyledText, +} from '@opentrons/components' +import { useAtom } from 'jotai' +import { displayExitConfirmModalAtom } from '../../resources/atoms' +import { useNavigate } from 'react-router-dom' +import { useTranslation } from 'react-i18next' + +export function ExitConfirmModal(): JSX.Element { + const [ + displayExitConfirmModalState, + setDisplayExitConfirmModalState, + ] = useAtom(displayExitConfirmModalAtom) + const navigate = useNavigate() + const { t } = useTranslation('protocol_generator') + + if (!displayExitConfirmModalState) { + return <> + } + + function handleContinueClick(): void { + setDisplayExitConfirmModalState(false) + } + + function handleExitClick(): void { + setDisplayExitConfirmModalState(false) + navigate('/') + } + + return ( + + + + {t('exit_confirmation_body')} + + + + {t('exit_confirmation_cancel')} + + + {t('exit_confirmation_exit')} + + + + + ) +} diff --git a/opentrons-ai-client/src/molecules/Header/index.tsx b/opentrons-ai-client/src/molecules/Header/index.tsx index 8221aa03e81..71cb6b7933b 100644 --- a/opentrons-ai-client/src/molecules/Header/index.tsx +++ b/opentrons-ai-client/src/molecules/Header/index.tsx @@ -16,6 +16,8 @@ import { import { useAuth0 } from '@auth0/auth0-react' import { CLIENT_MAX_WIDTH } from '../../resources/constants' import { useTrackEvent } from '../../resources/hooks/useTrackEvent' +import { useAtom } from 'jotai' +import { displayExitConfirmModalAtom } from '../../resources/atoms' const HeaderBar = styled(Flex)` position: ${POSITION_RELATIVE}; @@ -45,18 +47,28 @@ const HeaderTitle = styled(StyledText)` font-size: 16px; ` -const LogoutButton = styled(LinkButton)` +const LogoutOrExitButton = styled(LinkButton)` color: ${COLORS.grey50}; font-size: ${TYPOGRAPHY.fontSizeH3}; ` -export function Header(): JSX.Element { +interface HeaderProps { + isExitButton?: boolean +} + +export function Header({ isExitButton = false }: HeaderProps): JSX.Element { const { t } = useTranslation('protocol_generator') const { logout } = useAuth0() const trackEvent = useTrackEvent() + const [, setDisplayExitConfirmModal] = useAtom(displayExitConfirmModalAtom) + + async function handleLoginOrExitClick(): Promise { + if (isExitButton) { + setDisplayExitConfirmModal(true) + return + } - function handleLogout(): void { - logout() + await logout() trackEvent({ name: 'user-logout', properties: {} }) } @@ -67,7 +79,9 @@ export function Header(): JSX.Element { {t('opentrons')} {t('ai')} - {t('logout')} + + {isExitButton ? t('exit') : t('logout')} + ) diff --git a/opentrons-ai-client/src/molecules/HeaderWithMeter/__tests__/HeaderWithMeter.test.tsx b/opentrons-ai-client/src/molecules/HeaderWithMeter/__tests__/HeaderWithMeter.test.tsx index 8d02aeb3e12..7c63eeb2bad 100644 --- a/opentrons-ai-client/src/molecules/HeaderWithMeter/__tests__/HeaderWithMeter.test.tsx +++ b/opentrons-ai-client/src/molecules/HeaderWithMeter/__tests__/HeaderWithMeter.test.tsx @@ -1,8 +1,18 @@ import { renderWithProviders } from '../../../__testing-utils__' import { i18n } from '../../../i18n' import { HeaderWithMeter } from '../index' -import { describe, expect, it } from 'vitest' -import { screen, render as rtlRender } from '@testing-library/react' +import { describe, expect, it, vi } from 'vitest' +import { + screen, + render as rtlRender, + waitFor, + fireEvent, +} from '@testing-library/react' +import { ExitConfirmModal } from '../../ExitConfirmModal' + +vi.mock('react-router-dom', () => ({ + useNavigate: vi.fn(), +})) const render = (): ReturnType => { return renderWithProviders(, { @@ -48,4 +58,29 @@ describe('HeaderWithMeter', () => { rerender() expect(progressBar).toHaveAttribute('value', '0.2') }) + + it('should display the exit button instead of the logout button', () => { + render() + screen.getByText('Exit') + }) + + it('should display the exit confirm modal when exit button is clicked', async () => { + renderWithProviders( + <> + + + , + { + i18nInstance: i18n, + } + ) + + const exitButton = screen.getByText('Exit') + + fireEvent.click(exitButton) + + await waitFor(() => { + screen.getByText('Are you sure you want to exit?') + }) + }) }) diff --git a/opentrons-ai-client/src/molecules/HeaderWithMeter/index.tsx b/opentrons-ai-client/src/molecules/HeaderWithMeter/index.tsx index 24bc1a89805..b59e344ec19 100644 --- a/opentrons-ai-client/src/molecules/HeaderWithMeter/index.tsx +++ b/opentrons-ai-client/src/molecules/HeaderWithMeter/index.tsx @@ -43,7 +43,7 @@ export function HeaderWithMeter({ justifyContent={JUSTIFY_SPACE_BETWEEN} width="100%" > -

    +
    ) diff --git a/opentrons-ai-client/src/organisms/InstrumentsSection/__tests__/InstrumentsSection.test.tsx b/opentrons-ai-client/src/organisms/InstrumentsSection/__tests__/InstrumentsSection.test.tsx new file mode 100644 index 00000000000..1d710fbe703 --- /dev/null +++ b/opentrons-ai-client/src/organisms/InstrumentsSection/__tests__/InstrumentsSection.test.tsx @@ -0,0 +1,108 @@ +import { fireEvent, screen, waitFor } from '@testing-library/react' +import { describe, it, expect } from 'vitest' +import { renderWithProviders } from '../../../__testing-utils__' +import { i18n } from '../../../i18n' +import { InstrumentsSection } from '..' +import { FormProvider, useForm } from 'react-hook-form' + +const TestFormProviderComponent = () => { + const methods = useForm({ + defaultValues: {}, + }) + + return ( + + + + ) +} + +const render = (): ReturnType => { + return renderWithProviders(, { + i18nInstance: i18n, + }) +} + +describe('ApplicationSection', () => { + it('should render robot, pipette, flex gripper radios, mounts dropdowns, and confirm button', async () => { + render() + + expect( + screen.getByText('What robot would you like to use?') + ).toBeInTheDocument() + expect( + screen.getByText('What pipettes would you like to use?') + ).toBeInTheDocument() + await waitFor(() => { + expect(screen.getByText('Left mount')).toBeInTheDocument() + }) + expect(screen.getByText('Right mount')).toBeInTheDocument() + expect( + screen.getByText('Do you want to use the Flex Gripper?') + ).toBeInTheDocument() + expect(screen.getByText('Confirm')).toBeInTheDocument() + }) + + it('should not render left and right mount dropdowns if 96-Channel 1000µL pipette radio is selected', () => { + render() + + const pipettesRadioButton = screen.getByLabelText( + '96-Channel 1000µL pipette' + ) + fireEvent.click(pipettesRadioButton) + + expect(screen.queryByText('Left mount')).not.toBeInTheDocument() + expect(screen.queryByText('Right mount')).not.toBeInTheDocument() + }) + + it('should render only left and right mount dropdowns if Opentrons OT-2 is selected', () => { + render() + + const ot2Radio = screen.getByLabelText('Opentrons OT-2') + fireEvent.click(ot2Radio) + + expect( + screen.getByText('What pipettes would you like to use?') + ).toBeInTheDocument() + expect(screen.getByText('Left mount')).toBeInTheDocument() + expect(screen.getByText('Right mount')).toBeInTheDocument() + + expect(screen.queryByText('Two pipettes')).not.toBeInTheDocument() + expect( + screen.queryByText('96-Channel 1000µL pipette') + ).not.toBeInTheDocument() + expect( + screen.queryByText('Do you want to use the Flex Gripper') + ).not.toBeInTheDocument() + }) + + it('should enable confirm button when all fields are filled', async () => { + render() + + const confirmButton = screen.getByRole('button') + await waitFor(() => { + expect(confirmButton).not.toBeEnabled() + }) + + const leftMount = screen.getAllByText('Choose pipette')[0] + fireEvent.click(leftMount) + fireEvent.click(screen.getByText('Flex 1-Channel 50 μL')) + + const rightMount = screen.getByText('Choose pipette') + fireEvent.click(rightMount) + fireEvent.click(screen.getByText('Flex 8-Channel 50 μL')) + + await waitFor(() => { + expect(confirmButton).toBeEnabled() + }) + }) + + it('should disable confirm button when all fields are not filled', async () => { + render() + + const confirmButton = screen.getByRole('button') + await waitFor(() => { + expect(confirmButton).not.toBeEnabled() + }) + }) +}) diff --git a/opentrons-ai-client/src/organisms/InstrumentsSection/index.tsx b/opentrons-ai-client/src/organisms/InstrumentsSection/index.tsx new file mode 100644 index 00000000000..a0af6d54138 --- /dev/null +++ b/opentrons-ai-client/src/organisms/InstrumentsSection/index.tsx @@ -0,0 +1,213 @@ +import { + COLORS, + DIRECTION_COLUMN, + DISPLAY_FLEX, + Flex, + JUSTIFY_FLEX_END, + LargeButton, + SPACING, + StyledText, +} from '@opentrons/components' +import { useFormContext } from 'react-hook-form' +import { useTranslation } from 'react-i18next' +import styled from 'styled-components' +import { useAtom } from 'jotai' +import { createProtocolAtom } from '../../resources/atoms' +import { INSTRUMENTS_STEP } from '../ProtocolSectionsContainer' +import { ControlledDropdownMenu } from '../../atoms/ControlledDropdownMenu' +import { ControlledRadioButtonGroup } from '../../molecules/ControlledRadioButtonGroup' +import { useMemo } from 'react' +import { + getAllPipetteNames, + getPipetteSpecsV2, + OT2_PIPETTES, + OT2_ROBOT_TYPE, + OT3_PIPETTES, +} from '@opentrons/shared-data' + +export const ROBOT_FIELD_NAME = 'instruments.robot' +export const PIPETTES_FIELD_NAME = 'instruments.pipettes' +export const FLEX_GRIPPER_FIELD_NAME = 'instruments.flexGripper' +export const LEFT_PIPETTE_FIELD_NAME = 'instruments.leftPipette' +export const RIGHT_PIPETTE_FIELD_NAME = 'instruments.rightPipette' +export const FLEX_GRIPPER = 'flex_gripper' +export const NO_FLEX_GRIPPER = 'no_flex_gripper' +export const OPENTRONS_FLEX = 'opentrons_flex' +export const OPENTRONS_OT2 = 'opentrons_ot2' +export const _96_CHANNEL_1000UL_PIPETTE = '96_channel_1000ul_pipette' +export const TWO_PIPETTES = 'two_pipettes' + +export function InstrumentsSection(): JSX.Element | null { + const { t } = useTranslation('create_protocol') + const { + formState: { isValid }, + watch, + } = useFormContext() + const [{ currentStep }, setCreateProtocolAtom] = useAtom(createProtocolAtom) + const robotType = watch(ROBOT_FIELD_NAME) + const isOtherPipettesSelected = watch(PIPETTES_FIELD_NAME) === TWO_PIPETTES + const isOpentronsOT2Selected = robotType === OPENTRONS_OT2 + + const robotRadioButtons = [ + { + id: OPENTRONS_FLEX, + buttonLabel: t('opentrons_flex_label'), + buttonValue: OPENTRONS_FLEX, + }, + { + id: OPENTRONS_OT2, + buttonLabel: t('opentrons_ot2_label'), + buttonValue: OPENTRONS_OT2, + }, + ] + + const pipetteRadioButtons = [ + { + id: TWO_PIPETTES, + buttonLabel: t('two_pipettes_label'), + buttonValue: TWO_PIPETTES, + }, + { + id: _96_CHANNEL_1000UL_PIPETTE, + buttonLabel: t('96_channel_1000ul_pipette_label'), + buttonValue: _96_CHANNEL_1000UL_PIPETTE, + }, + ] + + const flexGripperRadionButtons = [ + { + id: FLEX_GRIPPER, + buttonLabel: t('flex_gripper_yes_label'), + buttonValue: FLEX_GRIPPER, + }, + { + id: NO_FLEX_GRIPPER, + buttonLabel: t('flex_gripper_no_label'), + buttonValue: NO_FLEX_GRIPPER, + }, + ] + + const pipetteOptions = useMemo(() => { + const allPipetteOptions = getAllPipetteNames('maxVolume', 'channels') + .filter(name => + (robotType === OT2_ROBOT_TYPE ? OT2_PIPETTES : OT3_PIPETTES).includes( + name + ) + ) + .map(name => ({ + value: name, + name: getPipetteSpecsV2(name)?.displayName ?? '', + })) + return allPipetteOptions.filter(o => o.value !== 'p1000_96') + }, [robotType]) + + function handleConfirmButtonClick(): void { + const step = + currentStep > INSTRUMENTS_STEP ? currentStep : INSTRUMENTS_STEP + 1 + + setCreateProtocolAtom({ + currentStep: step, + focusStep: step, + }) + } + + return ( + + + + + {!isOpentronsOT2Selected && ( + + )} + + {(isOtherPipettesSelected || isOpentronsOT2Selected) && ( + + {isOpentronsOT2Selected && ( + + {t('instruments_pipettes_title')} + + )} + + + + )} + + + {!isOpentronsOT2Selected && ( + + )} + + + + + + ) +} + +const ButtonContainer = styled.div` + display: ${DISPLAY_FLEX}; + justify-content: ${JUSTIFY_FLEX_END}; +` + +const PipettesDropdown = styled.div<{ isOpentronsOT2Selected?: boolean }>` + display: flex; + flex-direction: column; + gap: ${props => + props.isOpentronsOT2Selected ?? false + ? SPACING.spacing16 + : SPACING.spacing8}; +` + +const PipettesSection = styled.div<{ isOpentronsOT2Selected?: boolean }>` + display: flex; + flex-direction: column; + gap: ${props => + props.isOpentronsOT2Selected ?? false + ? SPACING.spacing16 + : SPACING.spacing8}; +` diff --git a/opentrons-ai-client/src/organisms/ProtocolSectionsContainer/index.tsx b/opentrons-ai-client/src/organisms/ProtocolSectionsContainer/index.tsx index 49314c1a143..bd54a4201ad 100644 --- a/opentrons-ai-client/src/organisms/ProtocolSectionsContainer/index.tsx +++ b/opentrons-ai-client/src/organisms/ProtocolSectionsContainer/index.tsx @@ -6,6 +6,7 @@ import { ApplicationSection } from '../../organisms/ApplicationSection' import { createProtocolAtom } from '../../resources/atoms' import { useAtom } from 'jotai' import { useFormContext } from 'react-hook-form' +import { InstrumentsSection } from '../InstrumentsSection' export const APPLICATION_STEP = 0 export const INSTRUMENTS_STEP = 1 @@ -46,7 +47,7 @@ export function ProtocolSectionsContainer(): JSX.Element | null { { stepNumber: INSTRUMENTS_STEP, title: 'instruments_title', - Component: () => Content, + Component: () => , }, { stepNumber: MODULES_STEP, @@ -73,7 +74,7 @@ export function ProtocolSectionsContainer(): JSX.Element | null { }} isCompleted={displayCheckmark(stepNumber)} > - + {focusStep === stepNumber && } ))} diff --git a/opentrons-ai-client/src/pages/CreateProtocol/__tests__/CreateProtocol.test.tsx b/opentrons-ai-client/src/pages/CreateProtocol/__tests__/CreateProtocol.test.tsx index 871bab07a7b..d71130d6f1a 100644 --- a/opentrons-ai-client/src/pages/CreateProtocol/__tests__/CreateProtocol.test.tsx +++ b/opentrons-ai-client/src/pages/CreateProtocol/__tests__/CreateProtocol.test.tsx @@ -4,7 +4,10 @@ import { renderWithProviders } from '../../../__testing-utils__' import { i18n } from '../../../i18n' import { CreateProtocol } from '..' import { Provider } from 'jotai' -import { fillApplicationSectionAndClickConfirm } from '../../../resources/utils/createProtocolTestUtils' +import { + fillApplicationSectionAndClickConfirm, + fillInstrumentsSectionAndClickConfirm, +} from '../../../resources/utils/createProtocolTestUtils' const render = (): ReturnType => { return renderWithProviders( @@ -38,7 +41,7 @@ describe('CreateProtocol', () => { const previewItems = screen.getAllByTestId('Tag_default') - expect(previewItems).toHaveLength(2) + expect(previewItems).toHaveLength(4) expect(previewItems[0]).toHaveTextContent('Basic aliquoting') expect(previewItems[1]).toHaveTextContent('Test description') }) @@ -81,4 +84,39 @@ describe('CreateProtocol', () => { expect(screen.getByTestId('accordion-ot-check')).toBeInTheDocument() }) + + it('should display the Prompt preview correctly for Instruments section', async () => { + render() + + await fillApplicationSectionAndClickConfirm() + await fillInstrumentsSectionAndClickConfirm() + + const previewItems = screen.getAllByTestId('Tag_default') + + expect(previewItems).toHaveLength(6) + expect(previewItems[0]).toHaveTextContent('Basic aliquoting') + expect(previewItems[1]).toHaveTextContent('Test description') + expect(previewItems[2]).toHaveTextContent('Opentrons Flex') + expect(previewItems[3]).toHaveTextContent('Flex 1-Channel 50 μL') + expect(previewItems[4]).toHaveTextContent('Flex 8-Channel 50 μL') + }) + + it('should open the Modules section when the Instruments section is completed', async () => { + render() + + expect(screen.getByRole('button', { name: 'Application' })).toHaveAttribute( + 'aria-expanded', + 'true' + ) + + await fillApplicationSectionAndClickConfirm() + await fillInstrumentsSectionAndClickConfirm() + + await waitFor(() => { + expect(screen.getByRole('button', { name: 'Modules' })).toHaveAttribute( + 'aria-expanded', + 'true' + ) + }) + }) }) diff --git a/opentrons-ai-client/src/pages/CreateProtocol/index.tsx b/opentrons-ai-client/src/pages/CreateProtocol/index.tsx index 346e43c879a..22b3cbcc338 100644 --- a/opentrons-ai-client/src/pages/CreateProtocol/index.tsx +++ b/opentrons-ai-client/src/pages/CreateProtocol/index.tsx @@ -11,14 +11,21 @@ import { useForm, FormProvider } from 'react-hook-form' import { createProtocolAtom, headerWithMeterAtom } from '../../resources/atoms' import { useAtom } from 'jotai' import { ProtocolSectionsContainer } from '../../organisms/ProtocolSectionsContainer' -import { OTHER } from '../../organisms/ApplicationSection' +import { generatePromptPreviewData } from '../../resources/utils/createProtocolUtils' -interface CreateProtocolFormData { +export interface CreateProtocolFormData { application: { scientificApplication: string otherApplication?: string description: string } + instruments: { + robot: string + pipettes: string + leftPipette: string + rightPipette: string + flexGripper: string + } } const TOTAL_STEPS = 5 @@ -35,6 +42,7 @@ export function CreateProtocol(): JSX.Element | null { otherApplication: '', description: '', }, + instruments: {}, }, }) @@ -49,36 +57,6 @@ export function CreateProtocol(): JSX.Element | null { }) }, [currentStep]) - function generatePromptPreviewApplicationItems(): string[] { - const { - application: { scientificApplication, otherApplication, description }, - } = methods.watch() - - const scientificOrOtherApplication = - scientificApplication === OTHER - ? otherApplication - : scientificApplication !== '' - ? t(scientificApplication) - : '' - - return [ - scientificOrOtherApplication !== '' && scientificOrOtherApplication, - description !== '' && description, - ].filter(Boolean) - } - - function generatePromptPreviewData(): Array<{ - title: string - items: string[] - }> { - return [ - { - title: t('application_title'), - items: generatePromptPreviewApplicationItems(), - }, - ] - } - return ( diff --git a/opentrons-ai-client/src/pages/Landing/index.tsx b/opentrons-ai-client/src/pages/Landing/index.tsx index cda92f7052b..e2cb76452ca 100644 --- a/opentrons-ai-client/src/pages/Landing/index.tsx +++ b/opentrons-ai-client/src/pages/Landing/index.tsx @@ -16,12 +16,20 @@ import { useTranslation } from 'react-i18next' import { useIsMobile } from '../../resources/hooks/useIsMobile' import { useNavigate } from 'react-router-dom' import { useTrackEvent } from '../../resources/hooks/useTrackEvent' +import { useAtom } from 'jotai' +import { headerWithMeterAtom } from '../../resources/atoms' +import { useEffect } from 'react' export function Landing(): JSX.Element | null { const navigate = useNavigate() const { t } = useTranslation('protocol_generator') const isMobile = useIsMobile() const trackEvent = useTrackEvent() + const [, setHeaderWithMeterAtom] = useAtom(headerWithMeterAtom) + + useEffect(() => { + setHeaderWithMeterAtom({ displayHeaderWithMeter: false, progress: 0.0 }) + }, [setHeaderWithMeterAtom]) function handleCreateNewProtocol(): void { trackEvent({ name: 'create-new-protocol', properties: {} }) @@ -49,6 +57,7 @@ export function Landing(): JSX.Element | null { justifyContent={JUSTIFY_CENTER} width="100%" maxWidth="548px" + minHeight="600px" gridGap={SPACING.spacing16} textAlign={TEXT_ALIGN_CENTER} > diff --git a/opentrons-ai-client/src/resources/atoms.ts b/opentrons-ai-client/src/resources/atoms.ts index 3ea530c65f6..229e9fbe739 100644 --- a/opentrons-ai-client/src/resources/atoms.ts +++ b/opentrons-ai-client/src/resources/atoms.ts @@ -29,3 +29,5 @@ export const createProtocolAtom = atom({ currentStep: 0, focusStep: 0, }) + +export const displayExitConfirmModalAtom = atom(false) diff --git a/opentrons-ai-client/src/resources/utils/createProtocolTestUtils.tsx b/opentrons-ai-client/src/resources/utils/createProtocolTestUtils.tsx index 8a24224394e..cef5ac3ee84 100644 --- a/opentrons-ai-client/src/resources/utils/createProtocolTestUtils.tsx +++ b/opentrons-ai-client/src/resources/utils/createProtocolTestUtils.tsx @@ -17,3 +17,19 @@ export async function fillApplicationSectionAndClickConfirm(): Promise { }) fireEvent.click(confirmButton) } + +export async function fillInstrumentsSectionAndClickConfirm(): Promise { + const leftMount = screen.getAllByText('Choose pipette')[0] + fireEvent.click(leftMount) + fireEvent.click(screen.getByText('Flex 1-Channel 50 μL')) + + const rightMount = screen.getAllByText('Choose pipette')[0] + fireEvent.click(rightMount) + fireEvent.click(screen.getByText('Flex 8-Channel 50 μL')) + + const confirmButton = screen.getByText('Confirm') + await waitFor(() => { + expect(confirmButton).toBeEnabled() + }) + fireEvent.click(confirmButton) +} diff --git a/opentrons-ai-client/src/resources/utils/createProtocolUtils.tsx b/opentrons-ai-client/src/resources/utils/createProtocolUtils.tsx new file mode 100644 index 00000000000..bb29912ae80 --- /dev/null +++ b/opentrons-ai-client/src/resources/utils/createProtocolUtils.tsx @@ -0,0 +1,79 @@ +import { getPipetteSpecsV2 } from '@opentrons/shared-data' +import type { PipetteName } from '@opentrons/shared-data' +import { OTHER } from '../../organisms/ApplicationSection' +import { + TWO_PIPETTES, + OPENTRONS_OT2, + OPENTRONS_FLEX, + FLEX_GRIPPER, +} from '../../organisms/InstrumentsSection' +import type { UseFormWatch } from 'react-hook-form' +import type { CreateProtocolFormData } from '../../pages/CreateProtocol' + +export function generatePromptPreviewApplicationItems( + watch: UseFormWatch, + t: any +): string[] { + const { + application: { scientificApplication, otherApplication, description }, + } = watch() + + const scientificOrOtherApplication = + scientificApplication === OTHER + ? otherApplication + : scientificApplication !== '' + ? t(scientificApplication) + : '' + + return [ + scientificOrOtherApplication !== '' && scientificOrOtherApplication, + description !== '' && description, + ].filter(Boolean) +} + +export function generatePromptPreviewInstrumentItems( + watch: UseFormWatch, + t: any +): string[] { + const { + instruments: { robot, pipettes, leftPipette, rightPipette, flexGripper }, + } = watch() + + const items = [] + + robot !== '' && items.push(t(robot)) + + if (pipettes === TWO_PIPETTES || robot === OPENTRONS_OT2) { + leftPipette !== '' && + items.push(getPipetteSpecsV2(leftPipette as PipetteName)?.displayName) + rightPipette !== '' && + items.push(getPipetteSpecsV2(rightPipette as PipetteName)?.displayName) + } else { + items.push(pipettes !== '' && t(pipettes)) + } + + if (robot === OPENTRONS_FLEX && flexGripper === FLEX_GRIPPER) { + items.push(t(flexGripper)) + } + + return items.filter(Boolean) +} + +export function generatePromptPreviewData( + watch: UseFormWatch, + t: any +): Array<{ + title: string + items: string[] +}> { + return [ + { + title: t('application_title'), + items: generatePromptPreviewApplicationItems(watch, t), + }, + { + title: t('instruments_title'), + items: generatePromptPreviewInstrumentItems(watch, t), + }, + ] +} From 01377a8bdc5a08a00857cc9e688a460501d61ed1 Mon Sep 17 00:00:00 2001 From: Jethary Alcid <66035149+jerader@users.noreply.github.com> Date: Mon, 4 Nov 2024 13:46:34 -0500 Subject: [PATCH 54/81] fix(protocol-designer): filter out plate reader with ff in deck setup (#16677) closes RQA-3456 --- .../pages/Designer/DeckSetup/__tests__/utils.test.ts | 4 ++-- .../src/pages/Designer/DeckSetup/utils.ts | 12 +++++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/protocol-designer/src/pages/Designer/DeckSetup/__tests__/utils.test.ts b/protocol-designer/src/pages/Designer/DeckSetup/__tests__/utils.test.ts index d990339c58b..50325ad7197 100644 --- a/protocol-designer/src/pages/Designer/DeckSetup/__tests__/utils.test.ts +++ b/protocol-designer/src/pages/Designer/DeckSetup/__tests__/utils.test.ts @@ -44,7 +44,7 @@ describe('getModuleModelsBySlot', () => { ]) }) it('renders all flex modules for B1', () => { - expect(getModuleModelsBySlot(false, FLEX_ROBOT_TYPE, 'B1')).toEqual( + expect(getModuleModelsBySlot(true, FLEX_ROBOT_TYPE, 'B1')).toEqual( FLEX_MODULE_MODELS ) }) @@ -52,7 +52,7 @@ describe('getModuleModelsBySlot', () => { const noTC = FLEX_MODULE_MODELS.filter( model => model !== THERMOCYCLER_MODULE_V2 ) - expect(getModuleModelsBySlot(false, FLEX_ROBOT_TYPE, 'C1')).toEqual(noTC) + expect(getModuleModelsBySlot(true, FLEX_ROBOT_TYPE, 'C1')).toEqual(noTC) }) }) diff --git a/protocol-designer/src/pages/Designer/DeckSetup/utils.ts b/protocol-designer/src/pages/Designer/DeckSetup/utils.ts index 8109b8ca50e..51a661eeed1 100644 --- a/protocol-designer/src/pages/Designer/DeckSetup/utils.ts +++ b/protocol-designer/src/pages/Designer/DeckSetup/utils.ts @@ -1,5 +1,6 @@ import some from 'lodash/some' import { + ABSORBANCE_READER_V1, FLEX_ROBOT_TYPE, FLEX_STAGING_AREA_SLOT_ADDRESSABLE_AREAS, HEATERSHAKER_MODULE_TYPE, @@ -55,20 +56,21 @@ export function getModuleModelsBySlot( ): ModuleModel[] { const FLEX_MIDDLE_SLOTS = ['B2', 'C2', 'A2', 'D2'] const OT2_MIDDLE_SLOTS = ['2', '5', '8', '11'] + const FILTERED_MODULES = enableAbsorbanceReader + ? FLEX_MODULE_MODELS + : FLEX_MODULE_MODELS.filter(model => model !== ABSORBANCE_READER_V1) - let moduleModels: ModuleModel[] = enableAbsorbanceReader - ? FLEX_MODULE_MODELS.filter(model => model !== 'absorbanceReaderV1') - : FLEX_MODULE_MODELS + let moduleModels: ModuleModel[] = FILTERED_MODULES switch (robotType) { case FLEX_ROBOT_TYPE: { if (slot !== 'B1' && !FLEX_MIDDLE_SLOTS.includes(slot)) { - moduleModels = FLEX_MODULE_MODELS.filter( + moduleModels = FILTERED_MODULES.filter( model => model !== THERMOCYCLER_MODULE_V2 ) } if (FLEX_MIDDLE_SLOTS.includes(slot)) { - moduleModels = FLEX_MODULE_MODELS.filter( + moduleModels = FILTERED_MODULES.filter( model => model === MAGNETIC_BLOCK_V1 ) } From ded3b900470370629af472e0d77352450bd12d93 Mon Sep 17 00:00:00 2001 From: Nick Diehl <47604184+ncdiehl11@users.noreply.github.com> Date: Mon, 4 Nov 2024 14:42:10 -0500 Subject: [PATCH 55/81] feat(protocol-designer): create migration for PD 8.2.0 (#16679) This PR creates the initial migration from PD 8.1.0 -> 8.2.0. Specifically, I create the 8.2.0 migration file and wire it up in the migration index file. The scope of this initial migration pass is to update the handling of time fields for pause and heater shaker step forms. At import, we consolidate the individual time unit fields for these forms into a single time field. I also update all downstream utilities, types, defaults, and tests that were affected. Closes AUTH-675 Closes AUTH-760 Closes AUTH-859 Closes AUTH-871 Closes AUTH-1000 --- protocol-designer/src/form-types.ts | 7 +- .../src/load-file/migration/8_2_0.ts | 158 ++++++++++++++++++ .../src/load-file/migration/index.ts | 3 + .../test/createPresavedStepForm.test.ts | 3 - .../src/steplist/formLevel/errors.ts | 8 +- .../formLevel/getDefaultsForStepType.ts | 7 - .../stepFormToArgs/heaterShakerFormToArgs.ts | 7 +- .../stepFormToArgs/pauseFormToArgs.ts | 8 +- .../test/heaterShakerFormToArgs.test.ts | 6 +- .../test/pauseFormToArgs.test.ts | 6 +- .../test/getDefaultsForStepType.test.ts | 5 - .../src/steplist/utils/getTimeFromForm.ts | 27 +-- 12 files changed, 176 insertions(+), 69 deletions(-) create mode 100644 protocol-designer/src/load-file/migration/8_2_0.ts diff --git a/protocol-designer/src/form-types.ts b/protocol-designer/src/form-types.ts index 58da6b5676b..1a9962ae582 100644 --- a/protocol-designer/src/form-types.ts +++ b/protocol-designer/src/form-types.ts @@ -187,9 +187,6 @@ export type PauseForm = AnnotationFields & { | typeof PAUSE_UNTIL_RESUME | typeof PAUSE_UNTIL_TIME | typeof PAUSE_UNTIL_TEMP - pauseHour?: string - pauseMinute?: string - pauseSecond?: string pauseMessage?: string pauseTemperature?: string pauseTime?: string @@ -364,9 +361,7 @@ export interface HydratedTemperatureFormData { } export interface HydratedHeaterShakerFormData { heaterShakerSetTimer: 'true' | 'false' | null - heaterShakerTimerMinutes: string | null - heaterShakerTimerSeconds: string | null - heaterShakerTimer?: string | null + heaterShakerTimer: string | null id: string latchOpen: boolean moduleId: string diff --git a/protocol-designer/src/load-file/migration/8_2_0.ts b/protocol-designer/src/load-file/migration/8_2_0.ts new file mode 100644 index 00000000000..30be478de23 --- /dev/null +++ b/protocol-designer/src/load-file/migration/8_2_0.ts @@ -0,0 +1,158 @@ +import { OT2_ROBOT_TYPE } from '@opentrons/shared-data' +import { PAUSE_UNTIL_TIME } from '../../constants' + +import type { ProtocolFile } from '@opentrons/shared-data' +import type { PauseForm } from '../../form-types' +import type { DesignerApplicationData } from './utils/getLoadLiquidCommands' + +const getTimeFromIndividualUnits = ( + seconds: any, + minutes: any, + hours?: any +): string => { + const hoursString = hours !== undefined ? `${hours ?? 0}:` : '' + return `${hoursString}${minutes ?? 0}:${seconds ?? 0}` +} + +export const migrateFile = ( + appData: ProtocolFile +): ProtocolFile => { + const { designerApplication } = appData + + if (designerApplication == null || designerApplication?.data == null) { + throw Error('The designerApplication key in your file is corrupt.') + } + + const savedStepForms = designerApplication.data + ?.savedStepForms as DesignerApplicationData['savedStepForms'] + + const savedStepsWithConsolidatedTimeField = Object.values( + savedStepForms + ).reduce((acc, form) => { + if (form.stepType === 'pause') { + const { + id, + pauseHour, + pauseMinute, + pauseSecond, + pauseTime, + pauseAction, + } = form + const pauseFormIndividualTimeUnitsRemoved = Object.keys( + form as PauseForm + ).reduce( + (accInner, key) => + !['pauseSecond', 'pauseMinute', 'pauseHour'].includes(key) + ? { ...accInner, [key]: form[key] } + : accInner, + { pauseTime } + ) + + if (pauseAction !== PAUSE_UNTIL_TIME) { + return { + ...acc, + [id]: { ...pauseFormIndividualTimeUnitsRemoved, pauseTime: null }, + } + } + + return pauseTime != null + ? { ...acc, [id]: pauseFormIndividualTimeUnitsRemoved } + : { + ...acc, + [id]: { + ...pauseFormIndividualTimeUnitsRemoved, + pauseTime: getTimeFromIndividualUnits( + pauseSecond, + pauseMinute, + pauseHour + ), + }, + } + } else if (form.stepType === 'heaterShaker') { + const { + id, + heaterShakerTimerMinutes, + heaterShakerTimerSeconds, + heaterShakerTimer, + heaterShakerSetTimer, + } = form + + const heaterShakerFormIndividualTimeUnitsRemoved = Object.keys( + form as Object + ).reduce( + (accInner, key) => + !['heaterShakerTimerMinutes', 'heaterShakerTimerSeconds'].includes( + key + ) + ? { ...accInner, [key]: form[key] } + : accInner, + { heaterShakerTimer } + ) + if (!heaterShakerSetTimer) { + return { + ...acc, + [id]: { + ...heaterShakerFormIndividualTimeUnitsRemoved, + heaterShakerTimer: null, + }, + } + } + + return heaterShakerTimer != null + ? { ...acc, [id]: heaterShakerFormIndividualTimeUnitsRemoved } + : { + ...acc, + [id]: { + ...heaterShakerFormIndividualTimeUnitsRemoved, + heaterShakerTimer: getTimeFromIndividualUnits( + heaterShakerTimerSeconds, + heaterShakerTimerMinutes + ), + }, + } + } + return acc + }, {}) + + const updatedInitialStep = Object.values(savedStepForms).reduce( + (acc, form) => { + const { id, moduleLocationUpdate } = form + if ( + id === '__INITIAL_DECK_SETUP_STEP__' && + appData.robot.model === OT2_ROBOT_TYPE + ) { + const moduleLocationUpdateThermocyclerOT2Slot = Object.keys( + moduleLocationUpdate as Record + ).reduce((acc, key) => { + return moduleLocationUpdate[key] === 'span7_8_10_11' + ? { ...acc, [key]: '7' } + : { ...acc, [key]: moduleLocationUpdate[key] } + }, {}) + return { + ...acc, + [id]: { + ...form, + moduleLocationUpdate: moduleLocationUpdateThermocyclerOT2Slot, + }, + } + } + return acc + }, + {} + ) + + return { + ...appData, + designerApplication: { + ...designerApplication, + data: { + ...designerApplication.data, + savedStepForms: { + ...designerApplication.data.savedStepForms, + ...savedStepsWithConsolidatedTimeField, + ...updatedInitialStep, + }, + }, + }, + } +} diff --git a/protocol-designer/src/load-file/migration/index.ts b/protocol-designer/src/load-file/migration/index.ts index 531e6fc4dd9..1ef3f346153 100644 --- a/protocol-designer/src/load-file/migration/index.ts +++ b/protocol-designer/src/load-file/migration/index.ts @@ -11,6 +11,7 @@ import { migrateFile as migrateFileSix } from './6_0_0' import { migrateFile as migrateFileSeven } from './7_0_0' import { migrateFile as migrateFileEight } from './8_0_0' import { migrateFile as migrateFileEightOne } from './8_1_0' +import { migrateFile as migrateFileEightTwo } from './8_2_0' import type { PDProtocolFile } from '../../file-types' export const OLDEST_MIGRATEABLE_VERSION = '1.0.0' @@ -51,6 +52,8 @@ const allMigrationsByVersion: MigrationsByVersion = { '8.0.0': migrateFileEight, // @ts-expect-error '8.1.0': migrateFileEightOne, + // @ts-expect-error + '8.2.0': migrateFileEightTwo, } export const migration = ( file: any diff --git a/protocol-designer/src/step-forms/test/createPresavedStepForm.test.ts b/protocol-designer/src/step-forms/test/createPresavedStepForm.test.ts index c308f594d66..728a9a6fbcc 100644 --- a/protocol-designer/src/step-forms/test/createPresavedStepForm.test.ts +++ b/protocol-designer/src/step-forms/test/createPresavedStepForm.test.ts @@ -124,10 +124,7 @@ describe('createPresavedStepForm', () => { stepType: 'pause', moduleId: hasTempModule ? 'someTemperatureModuleId' : null, pauseAction: null, - pauseHour: null, pauseMessage: '', - pauseMinute: null, - pauseSecond: null, pauseTime: null, pauseTemperature: null, stepDetails: '', diff --git a/protocol-designer/src/steplist/formLevel/errors.ts b/protocol-designer/src/steplist/formLevel/errors.ts index 95a2fdd2a3d..5a2d71c1ff6 100644 --- a/protocol-designer/src/steplist/formLevel/errors.ts +++ b/protocol-designer/src/steplist/formLevel/errors.ts @@ -265,13 +265,7 @@ export const pauseForTimeOrUntilTold = ( const { pauseAction, moduleId, pauseTemperature } = fields if (pauseAction === PAUSE_UNTIL_TIME) { - const { hours, minutes, seconds } = getTimeFromForm( - fields, - 'pauseTime', - 'pauseSeconds', - 'pauseMinutes', - 'pauseSeconds' - ) + const { hours, minutes, seconds } = getTimeFromForm(fields, 'pauseTime') // user selected pause for amount of time const totalSeconds = hours * 3600 + minutes * 60 + seconds return totalSeconds <= 0 ? TIME_PARAM_REQUIRED : null diff --git a/protocol-designer/src/steplist/formLevel/getDefaultsForStepType.ts b/protocol-designer/src/steplist/formLevel/getDefaultsForStepType.ts index 40b35b3ccad..6d56e7dfe1c 100644 --- a/protocol-designer/src/steplist/formLevel/getDefaultsForStepType.ts +++ b/protocol-designer/src/steplist/formLevel/getDefaultsForStepType.ts @@ -120,11 +120,7 @@ export function getDefaultsForStepType( return { moduleId: null, pauseAction: null, - // TODO: (nd: 10/23/2024) remove individual time unit fields - pauseHour: null, pauseMessage: '', - pauseMinute: null, - pauseSecond: null, pauseTemperature: null, pauseTime: null, } @@ -152,9 +148,6 @@ export function getDefaultsForStepType( case 'heaterShaker': return { heaterShakerSetTimer: null, - // TODO: (nd: 10/23/2024) remove individual time unit fields - heaterShakerTimerMinutes: null, - heaterShakerTimerSeconds: null, heaterShakerTimer: null, latchOpen: false, moduleId: null, diff --git a/protocol-designer/src/steplist/formLevel/stepFormToArgs/heaterShakerFormToArgs.ts b/protocol-designer/src/steplist/formLevel/stepFormToArgs/heaterShakerFormToArgs.ts index eda1e073fb2..b232389708f 100644 --- a/protocol-designer/src/steplist/formLevel/stepFormToArgs/heaterShakerFormToArgs.ts +++ b/protocol-designer/src/steplist/formLevel/stepFormToArgs/heaterShakerFormToArgs.ts @@ -23,12 +23,7 @@ export const heaterShakerFormToArgs = ( setShake ? !Number.isNaN(targetSpeed) : true, 'heaterShakerFormToArgs expected targeShake to be a number when setShake is true' ) - const { minutes, seconds } = getTimeFromForm( - formData, - 'heaterShakerTimer', - 'heaterShakerTimerSeconds', - 'heaterShakerTimerMinutes' - ) + const { minutes, seconds } = getTimeFromForm(formData, 'heaterShakerTimer') const isNullTime = minutes === 0 && seconds === 0 diff --git a/protocol-designer/src/steplist/formLevel/stepFormToArgs/pauseFormToArgs.ts b/protocol-designer/src/steplist/formLevel/stepFormToArgs/pauseFormToArgs.ts index 88de52bacec..1621e8d0aa2 100644 --- a/protocol-designer/src/steplist/formLevel/stepFormToArgs/pauseFormToArgs.ts +++ b/protocol-designer/src/steplist/formLevel/stepFormToArgs/pauseFormToArgs.ts @@ -13,13 +13,7 @@ import type { export const pauseFormToArgs = ( formData: FormData ): PauseArgs | WaitForTemperatureArgs | null => { - const { hours, minutes, seconds } = getTimeFromForm( - formData, - 'pauseTime', - 'pauseSecond', - 'pauseMinute', - 'pauseHour' - ) + const { hours, minutes, seconds } = getTimeFromForm(formData, 'pauseTime') const totalSeconds = (hours ?? 0) * 3600 + minutes * 60 + seconds const temperature = parseFloat(formData.pauseTemperature as string) const message = formData.pauseMessage ?? '' diff --git a/protocol-designer/src/steplist/formLevel/stepFormToArgs/test/heaterShakerFormToArgs.test.ts b/protocol-designer/src/steplist/formLevel/stepFormToArgs/test/heaterShakerFormToArgs.test.ts index 65a0b1f27ad..4329e6ca4f6 100644 --- a/protocol-designer/src/steplist/formLevel/stepFormToArgs/test/heaterShakerFormToArgs.test.ts +++ b/protocol-designer/src/steplist/formLevel/stepFormToArgs/test/heaterShakerFormToArgs.test.ts @@ -15,8 +15,7 @@ describe('heaterShakerFormToArgs', () => { latchOpen: false, targetHeaterShakerTemperature: '40', targetSpeed: '400', - heaterShakerTimerMinutes: '1', - heaterShakerTimerSeconds: '10', + heaterShakerTimer: '1:10', } const expected = { @@ -42,8 +41,7 @@ describe('heaterShakerFormToArgs', () => { latchOpen: false, targetHeaterShakerTemperature: '40', targetSpeed: null, - heaterShakerTimerMinutes: null, - heaterShakerTimerSeconds: null, + heaterShakerTimer: null, } const expected = { diff --git a/protocol-designer/src/steplist/formLevel/stepFormToArgs/test/pauseFormToArgs.test.ts b/protocol-designer/src/steplist/formLevel/stepFormToArgs/test/pauseFormToArgs.test.ts index 83a3b51d555..ab466604a82 100644 --- a/protocol-designer/src/steplist/formLevel/stepFormToArgs/test/pauseFormToArgs.test.ts +++ b/protocol-designer/src/steplist/formLevel/stepFormToArgs/test/pauseFormToArgs.test.ts @@ -16,6 +16,7 @@ describe('pauseFormToArgs', () => { pauseTemperature: '20', pauseMessage: 'pause message', moduleId: 'some_id', + pauseTime: null, } const expected = { commandCreatorFnName: 'waitForTemperature', @@ -55,10 +56,7 @@ describe('pauseFormToArgs', () => { pauseAction: PAUSE_UNTIL_TIME, description: 'some description', pauseMessage: 'some message', - pauseHour: 1, - pauseMinute: 20, - pauseSecond: 5, - pauseTime: null, + pauseTime: '1:20:5', } const expected = { commandCreatorFnName: 'delay', diff --git a/protocol-designer/src/steplist/formLevel/test/getDefaultsForStepType.test.ts b/protocol-designer/src/steplist/formLevel/test/getDefaultsForStepType.test.ts index ba0897607ac..34e8580d850 100644 --- a/protocol-designer/src/steplist/formLevel/test/getDefaultsForStepType.test.ts +++ b/protocol-designer/src/steplist/formLevel/test/getDefaultsForStepType.test.ts @@ -115,9 +115,6 @@ describe('getDefaultsForStepType', () => { it('should get the correct defaults', () => { expect(getDefaultsForStepType('pause')).toEqual({ pauseAction: null, - pauseHour: null, - pauseMinute: null, - pauseSecond: null, pauseTime: null, pauseMessage: '', moduleId: null, @@ -162,8 +159,6 @@ describe('getDefaultsForStepType', () => { targetSpeed: null, latchOpen: false, heaterShakerSetTimer: null, - heaterShakerTimerMinutes: null, - heaterShakerTimerSeconds: null, heaterShakerTimer: null, }) }) diff --git a/protocol-designer/src/steplist/utils/getTimeFromForm.ts b/protocol-designer/src/steplist/utils/getTimeFromForm.ts index ff35bdaeb09..48771039045 100644 --- a/protocol-designer/src/steplist/utils/getTimeFromForm.ts +++ b/protocol-designer/src/steplist/utils/getTimeFromForm.ts @@ -11,28 +11,15 @@ interface TimeData { export const getTimeFromForm = ( formData: FormData | HydratedFormData, - timeField: string, - secondsField: string, - minutesField: string, - hoursField?: string + timeField: string ): TimeData => { - let hoursFromForm - let minutesFromForm - let secondsFromForm - - // importing results in stringified "null" value - if (formData[timeField] != null && formData[timeField] !== 'null') { - const timeSplit = formData[timeField].split(TIME_DELIMITER) - ;[hoursFromForm, minutesFromForm, secondsFromForm] = - timeSplit.length === 3 ? timeSplit : [0, ...timeSplit] - } else { - // TODO (nd 09/23/2024): remove individual time units after redesign FF is removed - ;[hoursFromForm, minutesFromForm, secondsFromForm] = [ - hoursField != null ? formData[hoursField] : null, - formData[minutesField], - formData[secondsField], - ] + if (formData[timeField] == null) { + return { hours: 0, minutes: 0, seconds: 0 } } + const timeSplit = formData[timeField].split(TIME_DELIMITER) + const [hoursFromForm, minutesFromForm, secondsFromForm] = + timeSplit.length === 3 ? timeSplit : [0, ...timeSplit] + const hours = isNaN(parseFloat(hoursFromForm as string)) ? 0 : parseFloat(hoursFromForm as string) From 320065576dd8ca68c581cc80050f1ab1fd0c5065 Mon Sep 17 00:00:00 2001 From: Seth Foster Date: Tue, 5 Nov 2024 09:48:15 -0500 Subject: [PATCH 56/81] feat(api,app,shared-data): Track air gaps (#16662) We now are trying to track the amount of liquid in the wells of the labware on the deck. To do this, we're tracking how much liquid we aspirate from wells and dispense into wells. Unfortunately, sometimes users want to aspirate air and then dispense it into wells (well, they usually don't want to dispense it _into_ the well, but they want to dispense it). Until now, we'd treat any volume of air that got dispensed as a volume of liquid, and add it to the liquid tracked in the well. This is wrong. There's a couple things we need to do to fix this, and this PR does them. It also does a couple other things to support that effort. It's big, but well-separated into commits, and that's a decent way to do it. - a6a0856823a0dfa49182a1e28f1df3fcc2fae02c adds a utility class that can track the pipette contents and the relative ordering of air and liquid slugs within the pipette. It does this so that you can say "Hey I'm going to dispense x ul, how much of that is liquid?" and get a solid answer. - c19b205d29f6c8c9434bd1e3e0496b5aed68654a integrates that with existing commands and state stores, in the process switching volume state tracking to `StateUpdate` - 7d81a3c0ae5be131826c62144df5a257b9fd86cc adds `airGapInPlace`, a new command that works exactly like aspirate except that it doesn't take volume out of a well, and it adds air to the pipette internal volume tracking so that a subsequent dispense won't add liquid to the target well - 3f4d07197c17c79528c50998c11a693031fcd710 makes the python protocol API use that for `air_gap` calls above a certain API version There's also some supporting commits to add the new API version (since this is going into edge) and a command text for the new command. This is a pretty in depth thing and will need at least some testing, but it is covered by pretty in-depth automated testing and I eagerly await some failing analysis snapshots. ## reviewing - can i get away with not changing the pipette state store tests to just be about state updates? please? - does the fluid stack thing seem overwrought, underwrought, wroughten to the core? - am I missing something? ## testing - [x] inspect engine state that uses air gaps on api version 2.21. it should still work - [x] inspect engine state that uses air gaps on api version 2.22. it should work in terms of physical actions - [x] Inspect the volume trakcing and make sure the air isn't counted as liquid Closes EXEC-792 [@SyntaxColoring edit: also EXEC-754 incidentally, yay] --------- Co-authored-by: TamarZanzouri Co-authored-by: Max Marrone --- .../protocol_api/core/engine/instrument.py | 13 + .../opentrons/protocol_api/core/instrument.py | 8 + .../core/legacy/legacy_instrument_core.py | 3 + .../legacy_instrument_core.py | 3 + .../protocol_api/instrument_context.py | 14 +- .../protocol_engine/commands/__init__.py | 14 + .../commands/air_gap_in_place.py | 160 +++++++++ .../protocol_engine/commands/aspirate.py | 14 +- .../commands/aspirate_in_place.py | 8 +- .../protocol_engine/commands/blow_out.py | 3 + .../commands/blow_out_in_place.py | 9 +- .../commands/command_unions.py | 13 + .../protocol_engine/commands/dispense.py | 9 +- .../commands/dispense_in_place.py | 9 +- .../protocol_engine/commands/drop_tip.py | 2 + .../commands/drop_tip_in_place.py | 3 +- .../protocol_engine/commands/load_pipette.py | 1 + .../protocol_engine/commands/pick_up_tip.py | 3 + .../commands/prepare_to_aspirate.py | 7 +- .../unsafe/unsafe_blow_out_in_place.py | 5 +- .../unsafe/unsafe_drop_tip_in_place.py | 1 + .../protocol_engine/state/fluid_stack.py | 138 ++++++++ .../protocol_engine/state/pipettes.py | 136 ++++---- .../protocol_engine/state/update_types.py | 69 +++- api/src/opentrons/protocol_engine/types.py | 15 + .../protocols/api_support/definitions.py | 2 +- .../protocol_api/test_instrument_context.py | 67 +++- .../commands/test_air_gap_in_place.py | 284 ++++++++++++++++ .../protocol_engine/commands/test_aspirate.py | 19 +- .../commands/test_aspirate_in_place.py | 24 +- .../protocol_engine/commands/test_blow_out.py | 18 +- .../commands/test_blow_out_in_place.py | 18 +- .../protocol_engine/commands/test_dispense.py | 14 +- .../commands/test_dispense_in_place.py | 73 +++-- .../protocol_engine/commands/test_drop_tip.py | 11 +- .../commands/test_drop_tip_in_place.py | 14 +- .../commands/test_load_pipette.py | 3 + .../commands/test_pick_up_tip.py | 11 +- .../commands/test_prepare_to_aspirate.py | 17 +- .../unsafe/test_unsafe_blow_out_in_place.py | 10 +- .../unsafe/test_unsafe_drop_tip_in_place.py | 6 +- .../protocol_engine/state/test_fluid_stack.py | 219 +++++++++++++ .../state/test_pipette_store.py | 309 +++++++++++++++--- .../state/test_pipette_view.py | 25 +- .../en/protocol_command_text.json | 1 + .../hooks/useCommandTextString/index.ts | 1 + .../commandText/getPipettingCommandText.ts | 4 + shared-data/command/schemas/10.json | 71 +++- shared-data/command/types/pipetting.ts | 18 + 49 files changed, 1717 insertions(+), 182 deletions(-) create mode 100644 api/src/opentrons/protocol_engine/commands/air_gap_in_place.py create mode 100644 api/src/opentrons/protocol_engine/state/fluid_stack.py create mode 100644 api/tests/opentrons/protocol_engine/commands/test_air_gap_in_place.py create mode 100644 api/tests/opentrons/protocol_engine/state/test_fluid_stack.py diff --git a/api/src/opentrons/protocol_api/core/engine/instrument.py b/api/src/opentrons/protocol_api/core/engine/instrument.py index 825d45bfded..dc174988069 100644 --- a/api/src/opentrons/protocol_api/core/engine/instrument.py +++ b/api/src/opentrons/protocol_api/core/engine/instrument.py @@ -104,6 +104,19 @@ def set_default_speed(self, speed: float) -> None: pipette_id=self._pipette_id, speed=speed ) + def air_gap_in_place(self, volume: float, flow_rate: float) -> None: + """Aspirate a given volume of air from the current location of the pipette. + + Args: + volume: The volume of air to aspirate, in microliters. + folw_rate: The flow rate of air into the pipette, in microliters/s + """ + self._engine_client.execute_command( + cmd.AirGapInPlaceParams( + pipetteId=self._pipette_id, volume=volume, flowRate=flow_rate + ) + ) + def aspirate( self, location: Location, diff --git a/api/src/opentrons/protocol_api/core/instrument.py b/api/src/opentrons/protocol_api/core/instrument.py index 7d1816e1044..f88633a7a6d 100644 --- a/api/src/opentrons/protocol_api/core/instrument.py +++ b/api/src/opentrons/protocol_api/core/instrument.py @@ -24,6 +24,14 @@ def get_default_speed(self) -> float: def set_default_speed(self, speed: float) -> None: ... + @abstractmethod + def air_gap_in_place(self, volume: float, flow_rate: float) -> None: + """Aspirate a given volume of air from the current location of the pipette. + Args: + volume: The volume of air to aspirate, in microliters. + flow_rate: The flow rate of air into the pipette, in microliters. + """ + @abstractmethod def aspirate( self, diff --git a/api/src/opentrons/protocol_api/core/legacy/legacy_instrument_core.py b/api/src/opentrons/protocol_api/core/legacy/legacy_instrument_core.py index ed1e0d607c9..c112fc32abc 100644 --- a/api/src/opentrons/protocol_api/core/legacy/legacy_instrument_core.py +++ b/api/src/opentrons/protocol_api/core/legacy/legacy_instrument_core.py @@ -72,6 +72,9 @@ def set_default_speed(self, speed: float) -> None: """Sets the speed at which the robot's gantry moves.""" self._default_speed = speed + def air_gap_in_place(self, volume: float, flow_rate: float) -> None: + assert False, "Air gap tracking only available in API version 2.22 and later" + def aspirate( self, location: types.Location, diff --git a/api/src/opentrons/protocol_api/core/legacy_simulator/legacy_instrument_core.py b/api/src/opentrons/protocol_api/core/legacy_simulator/legacy_instrument_core.py index 55bde6c0a75..f02d1e66fd1 100644 --- a/api/src/opentrons/protocol_api/core/legacy_simulator/legacy_instrument_core.py +++ b/api/src/opentrons/protocol_api/core/legacy_simulator/legacy_instrument_core.py @@ -83,6 +83,9 @@ def get_default_speed(self) -> float: def set_default_speed(self, speed: float) -> None: self._default_speed = speed + def air_gap_in_place(self, volume: float, flow_rate: float) -> None: + assert False, "Air gap tracking only available in API version 2.22 and later" + def aspirate( self, location: types.Location, diff --git a/api/src/opentrons/protocol_api/instrument_context.py b/api/src/opentrons/protocol_api/instrument_context.py index 880626b53c9..93c485f8087 100644 --- a/api/src/opentrons/protocol_api/instrument_context.py +++ b/api/src/opentrons/protocol_api/instrument_context.py @@ -60,6 +60,8 @@ """The version after which offsets for deck configured trash containers and changes to alternating tip drop behavior were introduced.""" _PARTIAL_NOZZLE_CONFIGURATION_SINGLE_ROW_PARTIAL_COLUMN_ADDED_IN = APIVersion(2, 20) """The version after which partial nozzle configurations of single, row, and partial column layouts became available.""" +_AIR_GAP_TRACKING_ADDED_IN = APIVersion(2, 22) +"""The version after which air gaps should be implemented with a separate call instead of an aspirate for better liquid volume tracking.""" class InstrumentContext(publisher.CommandPublisher): @@ -753,7 +755,12 @@ def air_gap( ``pipette.air_gap(height=2)``. If you call ``air_gap`` with a single, unnamed argument, it will always be interpreted as a volume. + .. note:: + Before API version 2.22, this function was implemented as an aspirate, and + dispensing into a well would add the air gap volume to the liquid tracked in + the well. At or above API version 2.22, air gap volume is not counted as liquid + when dispensing into a well. """ if not self._core.has_tip(): raise UnexpectedTipRemovalError("air_gap", self.name, self.mount) @@ -765,7 +772,12 @@ def air_gap( raise RuntimeError("No previous Well cached to perform air gap") target = loc.labware.as_well().top(height) self.move_to(target, publish=False) - self.aspirate(volume) + if self.api_version >= _AIR_GAP_TRACKING_ADDED_IN: + c_vol = self._core.get_available_volume() if volume is None else volume + flow_rate = self._core.get_aspirate_flow_rate() + self._core.air_gap_in_place(c_vol, flow_rate) + else: + self.aspirate(volume) return self @publisher.publish(command=cmds.return_tip) diff --git a/api/src/opentrons/protocol_engine/commands/__init__.py b/api/src/opentrons/protocol_engine/commands/__init__.py index 649bb4b6507..69a3d0c12c1 100644 --- a/api/src/opentrons/protocol_engine/commands/__init__.py +++ b/api/src/opentrons/protocol_engine/commands/__init__.py @@ -41,6 +41,14 @@ CommandDefinedErrorData, ) +from .air_gap_in_place import ( + AirGapInPlace, + AirGapInPlaceParams, + AirGapInPlaceCreate, + AirGapInPlaceResult, + AirGapInPlaceCommandType, +) + from .aspirate import ( Aspirate, AspirateParams, @@ -355,6 +363,12 @@ "hash_protocol_command_params", # command schema generation "generate_command_schema", + # air gap command models + "AirGapInPlace", + "AirGapInPlaceCreate", + "AirGapInPlaceParams", + "AirGapInPlaceResult", + "AirGapInPlaceCommandType", # aspirate command models "Aspirate", "AspirateCreate", diff --git a/api/src/opentrons/protocol_engine/commands/air_gap_in_place.py b/api/src/opentrons/protocol_engine/commands/air_gap_in_place.py new file mode 100644 index 00000000000..461a446f3e4 --- /dev/null +++ b/api/src/opentrons/protocol_engine/commands/air_gap_in_place.py @@ -0,0 +1,160 @@ +"""AirGap in place command request, result, and implementation models.""" + +from __future__ import annotations +from typing import TYPE_CHECKING, Optional, Type, Union +from typing_extensions import Literal + +from opentrons_shared_data.errors.exceptions import PipetteOverpressureError + +from opentrons.hardware_control import HardwareControlAPI + +from .pipetting_common import ( + PipetteIdMixin, + AspirateVolumeMixin, + FlowRateMixin, + BaseLiquidHandlingResult, + OverpressureError, +) +from .command import ( + AbstractCommandImpl, + BaseCommand, + BaseCommandCreate, + SuccessData, + DefinedErrorData, +) +from ..errors.error_occurrence import ErrorOccurrence +from ..errors.exceptions import PipetteNotReadyToAspirateError +from ..state.update_types import StateUpdate +from ..types import AspiratedFluid, FluidKind + +if TYPE_CHECKING: + from ..execution import PipettingHandler, GantryMover + from ..resources import ModelUtils + from ..state.state import StateView + from ..notes import CommandNoteAdder + +AirGapInPlaceCommandType = Literal["airGapInPlace"] + + +class AirGapInPlaceParams(PipetteIdMixin, AspirateVolumeMixin, FlowRateMixin): + """Payload required to air gap in place.""" + + pass + + +class AirGapInPlaceResult(BaseLiquidHandlingResult): + """Result data from the execution of a AirGapInPlace command.""" + + pass + + +_ExecuteReturn = Union[ + SuccessData[AirGapInPlaceResult], + DefinedErrorData[OverpressureError], +] + + +class AirGapInPlaceImplementation( + AbstractCommandImpl[AirGapInPlaceParams, _ExecuteReturn] +): + """AirGapInPlace command implementation.""" + + def __init__( + self, + pipetting: PipettingHandler, + hardware_api: HardwareControlAPI, + state_view: StateView, + command_note_adder: CommandNoteAdder, + model_utils: ModelUtils, + gantry_mover: GantryMover, + **kwargs: object, + ) -> None: + self._pipetting = pipetting + self._state_view = state_view + self._hardware_api = hardware_api + self._command_note_adder = command_note_adder + self._model_utils = model_utils + self._gantry_mover = gantry_mover + + async def execute(self, params: AirGapInPlaceParams) -> _ExecuteReturn: + """Air gap without moving the pipette. + + Raises: + TipNotAttachedError: if no tip is attached to the pipette. + PipetteNotReadyToAirGapError: pipette plunger is not ready. + """ + ready_to_aspirate = self._pipetting.get_is_ready_to_aspirate( + pipette_id=params.pipetteId, + ) + + if not ready_to_aspirate: + raise PipetteNotReadyToAspirateError( + "Pipette cannot air gap in place because of a previous blow out." + " The first aspirate following a blow-out must be from a specific well" + " so the plunger can be reset in a known safe position." + ) + + state_update = StateUpdate() + + try: + current_position = await self._gantry_mover.get_position(params.pipetteId) + volume = await self._pipetting.aspirate_in_place( + pipette_id=params.pipetteId, + volume=params.volume, + flow_rate=params.flowRate, + command_note_adder=self._command_note_adder, + ) + except PipetteOverpressureError as e: + return DefinedErrorData( + public=OverpressureError( + id=self._model_utils.generate_id(), + createdAt=self._model_utils.get_timestamp(), + wrappedErrors=[ + ErrorOccurrence.from_failed( + id=self._model_utils.generate_id(), + createdAt=self._model_utils.get_timestamp(), + error=e, + ) + ], + errorInfo=( + { + "retryLocation": ( + current_position.x, + current_position.y, + current_position.z, + ) + } + ), + ), + state_update=state_update, + ) + else: + state_update.set_fluid_aspirated( + pipette_id=params.pipetteId, + fluid=AspiratedFluid(kind=FluidKind.AIR, volume=volume), + ) + return SuccessData( + public=AirGapInPlaceResult(volume=volume), + state_update=state_update, + ) + + +class AirGapInPlace( + BaseCommand[AirGapInPlaceParams, AirGapInPlaceResult, OverpressureError] +): + """AirGapInPlace command model.""" + + commandType: AirGapInPlaceCommandType = "airGapInPlace" + params: AirGapInPlaceParams + result: Optional[AirGapInPlaceResult] + + _ImplementationCls: Type[AirGapInPlaceImplementation] = AirGapInPlaceImplementation + + +class AirGapInPlaceCreate(BaseCommandCreate[AirGapInPlaceParams]): + """AirGapInPlace command request model.""" + + commandType: AirGapInPlaceCommandType = "airGapInPlace" + params: AirGapInPlaceParams + + _CommandCls: Type[AirGapInPlace] = AirGapInPlace diff --git a/api/src/opentrons/protocol_engine/commands/aspirate.py b/api/src/opentrons/protocol_engine/commands/aspirate.py index 00d57a93e9a..b5541c79792 100644 --- a/api/src/opentrons/protocol_engine/commands/aspirate.py +++ b/api/src/opentrons/protocol_engine/commands/aspirate.py @@ -25,7 +25,14 @@ from opentrons.hardware_control import HardwareControlAPI from ..state.update_types import StateUpdate, CLEAR -from ..types import WellLocation, WellOrigin, CurrentWell, DeckPoint +from ..types import ( + WellLocation, + WellOrigin, + CurrentWell, + DeckPoint, + AspiratedFluid, + FluidKind, +) if TYPE_CHECKING: from ..execution import MovementHandler, PipettingHandler @@ -141,6 +148,7 @@ async def execute(self, params: AspirateParams) -> _ExecuteReturn: well_name=well_name, volume_added=CLEAR, ) + state_update.set_fluid_unknown(pipette_id=params.pipetteId) return DefinedErrorData( public=OverpressureError( id=self._model_utils.generate_id(), @@ -162,6 +170,10 @@ async def execute(self, params: AspirateParams) -> _ExecuteReturn: well_name=well_name, volume_added=-volume_aspirated, ) + state_update.set_fluid_aspirated( + pipette_id=params.pipetteId, + fluid=AspiratedFluid(kind=FluidKind.LIQUID, volume=volume_aspirated), + ) return SuccessData( public=AspirateResult( volume=volume_aspirated, 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 4c7ab2cc01c..f25b6c24bbb 100644 --- a/api/src/opentrons/protocol_engine/commands/aspirate_in_place.py +++ b/api/src/opentrons/protocol_engine/commands/aspirate_in_place.py @@ -25,7 +25,7 @@ from ..errors.error_occurrence import ErrorOccurrence from ..errors.exceptions import PipetteNotReadyToAspirateError from ..state.update_types import StateUpdate, CLEAR -from ..types import CurrentWell +from ..types import CurrentWell, AspiratedFluid, FluidKind if TYPE_CHECKING: from ..execution import PipettingHandler, GantryMover @@ -115,6 +115,7 @@ async def execute(self, params: AspirateInPlaceParams) -> _ExecuteReturn: well_name=current_location.well_name, volume_added=CLEAR, ) + state_update.set_fluid_unknown(pipette_id=params.pipetteId) return DefinedErrorData( public=OverpressureError( id=self._model_utils.generate_id(), @@ -139,6 +140,10 @@ async def execute(self, params: AspirateInPlaceParams) -> _ExecuteReturn: state_update=state_update, ) else: + state_update.set_fluid_aspirated( + pipette_id=params.pipetteId, + fluid=AspiratedFluid(kind=FluidKind.LIQUID, volume=volume), + ) if ( isinstance(current_location, CurrentWell) and current_location.pipette_id == params.pipetteId @@ -148,6 +153,7 @@ async def execute(self, params: AspirateInPlaceParams) -> _ExecuteReturn: well_name=current_location.well_name, volume_added=-volume, ) + return SuccessData( public=AspirateInPlaceResult(volume=volume), state_update=state_update, diff --git a/api/src/opentrons/protocol_engine/commands/blow_out.py b/api/src/opentrons/protocol_engine/commands/blow_out.py index e13378b5541..c450fa894ed 100644 --- a/api/src/opentrons/protocol_engine/commands/blow_out.py +++ b/api/src/opentrons/protocol_engine/commands/blow_out.py @@ -93,6 +93,7 @@ async def execute(self, params: BlowOutParams) -> _ExecuteReturn: pipette_id=params.pipetteId, flow_rate=params.flowRate ) except PipetteOverpressureError as e: + state_update.set_fluid_unknown(pipette_id=params.pipetteId) return DefinedErrorData( public=OverpressureError( id=self._model_utils.generate_id(), @@ -112,8 +113,10 @@ async def execute(self, params: BlowOutParams) -> _ExecuteReturn: ) }, ), + state_update=state_update, ) else: + state_update.set_fluid_empty(pipette_id=params.pipetteId) return SuccessData( public=BlowOutResult(position=deck_point), state_update=state_update, diff --git a/api/src/opentrons/protocol_engine/commands/blow_out_in_place.py b/api/src/opentrons/protocol_engine/commands/blow_out_in_place.py index 0b9aaec77b2..04a38b8915c 100644 --- a/api/src/opentrons/protocol_engine/commands/blow_out_in_place.py +++ b/api/src/opentrons/protocol_engine/commands/blow_out_in_place.py @@ -19,6 +19,7 @@ SuccessData, ) from ..errors.error_occurrence import ErrorOccurrence +from ..state import update_types from opentrons.hardware_control import HardwareControlAPI @@ -72,12 +73,14 @@ def __init__( async def execute(self, params: BlowOutInPlaceParams) -> _ExecuteReturn: """Blow-out without moving the pipette.""" + state_update = update_types.StateUpdate() try: current_position = await self._gantry_mover.get_position(params.pipetteId) await self._pipetting.blow_out_in_place( pipette_id=params.pipetteId, flow_rate=params.flowRate ) except PipetteOverpressureError as e: + state_update.set_fluid_unknown(pipette_id=params.pipetteId) return DefinedErrorData( public=OverpressureError( id=self._model_utils.generate_id(), @@ -97,11 +100,11 @@ async def execute(self, params: BlowOutInPlaceParams) -> _ExecuteReturn: ) }, ), + state_update=state_update, ) else: - return SuccessData( - public=BlowOutInPlaceResult(), - ) + state_update.set_fluid_empty(pipette_id=params.pipetteId) + return SuccessData(public=BlowOutInPlaceResult(), state_update=state_update) class BlowOutInPlace( diff --git a/api/src/opentrons/protocol_engine/commands/command_unions.py b/api/src/opentrons/protocol_engine/commands/command_unions.py index 0e0a4cf3112..c59c538ddd3 100644 --- a/api/src/opentrons/protocol_engine/commands/command_unions.py +++ b/api/src/opentrons/protocol_engine/commands/command_unions.py @@ -31,6 +31,14 @@ SetRailLightsResult, ) +from .air_gap_in_place import ( + AirGapInPlace, + AirGapInPlaceParams, + AirGapInPlaceCreate, + AirGapInPlaceResult, + AirGapInPlaceCommandType, +) + from .aspirate import ( Aspirate, AspirateParams, @@ -320,6 +328,7 @@ Command = Annotated[ Union[ + AirGapInPlace, Aspirate, AspirateInPlace, Comment, @@ -398,6 +407,7 @@ ] CommandParams = Union[ + AirGapInPlaceParams, AspirateParams, AspirateInPlaceParams, CommentParams, @@ -474,6 +484,7 @@ ] CommandType = Union[ + AirGapInPlaceCommandType, AspirateCommandType, AspirateInPlaceCommandType, CommentCommandType, @@ -551,6 +562,7 @@ CommandCreate = Annotated[ Union[ + AirGapInPlaceCreate, AspirateCreate, AspirateInPlaceCreate, CommentCreate, @@ -629,6 +641,7 @@ ] CommandResult = Union[ + AirGapInPlaceResult, AspirateResult, AspirateInPlaceResult, CommentResult, diff --git a/api/src/opentrons/protocol_engine/commands/dispense.py b/api/src/opentrons/protocol_engine/commands/dispense.py index a7fee20c762..603fa7396a7 100644 --- a/api/src/opentrons/protocol_engine/commands/dispense.py +++ b/api/src/opentrons/protocol_engine/commands/dispense.py @@ -112,6 +112,7 @@ async def execute(self, params: DispenseParams) -> _ExecuteReturn: well_name=well_name, volume_added=CLEAR, ) + state_update.set_fluid_unknown(pipette_id=params.pipetteId) return DefinedErrorData( public=OverpressureError( id=self._model_utils.generate_id(), @@ -128,11 +129,17 @@ async def execute(self, params: DispenseParams) -> _ExecuteReturn: state_update=state_update, ) else: + volume_added = ( + self._state_view.pipettes.get_liquid_dispensed_by_ejecting_volume( + pipette_id=params.pipetteId, volume=volume + ) + ) state_update.set_liquid_operated( labware_id=labware_id, well_name=well_name, - volume_added=volume, + volume_added=volume_added if volume_added is not None else CLEAR, ) + state_update.set_fluid_ejected(pipette_id=params.pipetteId, volume=volume) return SuccessData( public=DispenseResult(volume=volume, position=deck_point), state_update=state_update, 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 7df9471b038..ee7cae42dc1 100644 --- a/api/src/opentrons/protocol_engine/commands/dispense_in_place.py +++ b/api/src/opentrons/protocol_engine/commands/dispense_in_place.py @@ -94,6 +94,7 @@ async def execute(self, params: DispenseInPlaceParams) -> _ExecuteReturn: well_name=current_location.well_name, volume_added=CLEAR, ) + state_update.set_fluid_unknown(pipette_id=params.pipetteId) return DefinedErrorData( public=OverpressureError( id=self._model_utils.generate_id(), @@ -118,14 +119,20 @@ async def execute(self, params: DispenseInPlaceParams) -> _ExecuteReturn: state_update=state_update, ) else: + state_update.set_fluid_ejected(pipette_id=params.pipetteId, volume=volume) if ( isinstance(current_location, CurrentWell) and current_location.pipette_id == params.pipetteId ): + volume_added = ( + self._state_view.pipettes.get_liquid_dispensed_by_ejecting_volume( + pipette_id=params.pipetteId, volume=volume + ) + ) state_update.set_liquid_operated( labware_id=current_location.labware_id, well_name=current_location.well_name, - volume_added=volume, + volume_added=volume_added if volume_added is not None else CLEAR, ) return SuccessData( public=DispenseInPlaceResult(volume=volume), diff --git a/api/src/opentrons/protocol_engine/commands/drop_tip.py b/api/src/opentrons/protocol_engine/commands/drop_tip.py index 81a34a5ad39..ad0954c5a32 100644 --- a/api/src/opentrons/protocol_engine/commands/drop_tip.py +++ b/api/src/opentrons/protocol_engine/commands/drop_tip.py @@ -150,12 +150,14 @@ async def execute(self, params: DropTipParams) -> _ExecuteReturn: state_update_if_false_positive.update_pipette_tip_state( pipette_id=params.pipetteId, tip_geometry=None ) + state_update.set_fluid_unknown(pipette_id=pipette_id) return DefinedErrorData( public=error, state_update=state_update, state_update_if_false_positive=state_update_if_false_positive, ) else: + state_update.set_fluid_unknown(pipette_id=pipette_id) state_update.update_pipette_tip_state( pipette_id=params.pipetteId, tip_geometry=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 aa40384ac6a..0f98b32ff58 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 @@ -65,7 +65,6 @@ def __init__( async def execute(self, params: DropTipInPlaceParams) -> _ExecuteReturn: """Drop a tip using the requested pipette.""" state_update = update_types.StateUpdate() - try: await self._tip_handler.drop_tip( pipette_id=params.pipetteId, home_after=params.homeAfter @@ -75,6 +74,7 @@ async def execute(self, params: DropTipInPlaceParams) -> _ExecuteReturn: state_update_if_false_positive.update_pipette_tip_state( pipette_id=params.pipetteId, tip_geometry=None ) + state_update.set_fluid_unknown(pipette_id=params.pipetteId) error = TipPhysicallyAttachedError( id=self._model_utils.generate_id(), createdAt=self._model_utils.get_timestamp(), @@ -92,6 +92,7 @@ async def execute(self, params: DropTipInPlaceParams) -> _ExecuteReturn: state_update_if_false_positive=state_update_if_false_positive, ) else: + state_update.set_fluid_unknown(pipette_id=params.pipetteId) state_update.update_pipette_tip_state( pipette_id=params.pipetteId, tip_geometry=None ) diff --git a/api/src/opentrons/protocol_engine/commands/load_pipette.py b/api/src/opentrons/protocol_engine/commands/load_pipette.py index 7d09bf33028..6d8d74b4fa2 100644 --- a/api/src/opentrons/protocol_engine/commands/load_pipette.py +++ b/api/src/opentrons/protocol_engine/commands/load_pipette.py @@ -127,6 +127,7 @@ async def execute( serial_number=loaded_pipette.serial_number, config=loaded_pipette.static_config, ) + state_update.set_fluid_unknown(pipette_id=loaded_pipette.pipette_id) return SuccessData( public=LoadPipetteResult(pipetteId=loaded_pipette.pipette_id), 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 898929566fe..86967c6502f 100644 --- a/api/src/opentrons/protocol_engine/commands/pick_up_tip.py +++ b/api/src/opentrons/protocol_engine/commands/pick_up_tip.py @@ -146,9 +146,11 @@ async def execute( pipette_id=pipette_id, tip_geometry=e.tip_geometry, ) + state_update_if_false_positive.set_fluid_empty(pipette_id=pipette_id) state_update.mark_tips_as_used( pipette_id=pipette_id, labware_id=labware_id, well_name=well_name ) + state_update.set_fluid_unknown(pipette_id=pipette_id) return DefinedErrorData( public=TipPhysicallyMissingError( id=self._model_utils.generate_id(), @@ -172,6 +174,7 @@ async def execute( state_update.mark_tips_as_used( pipette_id=pipette_id, labware_id=labware_id, well_name=well_name ) + state_update.set_fluid_empty(pipette_id=pipette_id) return SuccessData( public=PickUpTipResult( tipVolume=tip_geometry.volume, diff --git a/api/src/opentrons/protocol_engine/commands/prepare_to_aspirate.py b/api/src/opentrons/protocol_engine/commands/prepare_to_aspirate.py index 01012be1d7f..f5525b3c90e 100644 --- a/api/src/opentrons/protocol_engine/commands/prepare_to_aspirate.py +++ b/api/src/opentrons/protocol_engine/commands/prepare_to_aspirate.py @@ -18,6 +18,7 @@ SuccessData, ) from ..errors.error_occurrence import ErrorOccurrence +from ..state import update_types if TYPE_CHECKING: from ..execution import PipettingHandler, GantryMover @@ -64,11 +65,13 @@ def __init__( async def execute(self, params: PrepareToAspirateParams) -> _ExecuteReturn: """Prepare the pipette to aspirate.""" current_position = await self._gantry_mover.get_position(params.pipetteId) + state_update = update_types.StateUpdate() try: await self._pipetting_handler.prepare_for_aspirate( pipette_id=params.pipetteId, ) except PipetteOverpressureError as e: + state_update.set_fluid_unknown(pipette_id=params.pipetteId) return DefinedErrorData( public=OverpressureError( id=self._model_utils.generate_id(), @@ -90,10 +93,12 @@ async def execute(self, params: PrepareToAspirateParams) -> _ExecuteReturn: } ), ), + state_update=state_update, ) else: + state_update.set_fluid_empty(pipette_id=params.pipetteId) return SuccessData( - public=PrepareToAspirateResult(), + public=PrepareToAspirateResult(), state_update=state_update ) diff --git a/api/src/opentrons/protocol_engine/commands/unsafe/unsafe_blow_out_in_place.py b/api/src/opentrons/protocol_engine/commands/unsafe/unsafe_blow_out_in_place.py index 4738b7c9b97..4c767625782 100644 --- a/api/src/opentrons/protocol_engine/commands/unsafe/unsafe_blow_out_in_place.py +++ b/api/src/opentrons/protocol_engine/commands/unsafe/unsafe_blow_out_in_place.py @@ -10,6 +10,7 @@ from ..pipetting_common import PipetteIdMixin, FlowRateMixin from ...resources import ensure_ot3_hardware from ...errors.error_occurrence import ErrorOccurrence +from ...state import update_types from opentrons.hardware_control import HardwareControlAPI from opentrons.hardware_control.types import Axis @@ -66,9 +67,11 @@ async def execute( await self._pipetting.blow_out_in_place( pipette_id=params.pipetteId, flow_rate=params.flowRate ) + state_update = update_types.StateUpdate() + state_update.set_fluid_empty(pipette_id=params.pipetteId) return SuccessData( - public=UnsafeBlowOutInPlaceResult(), + public=UnsafeBlowOutInPlaceResult(), state_update=state_update ) 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 ff749711cfb..5aa4e292f63 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 @@ -77,6 +77,7 @@ async def execute( state_update.update_pipette_tip_state( pipette_id=params.pipetteId, tip_geometry=None ) + state_update.set_fluid_unknown(pipette_id=params.pipetteId) return SuccessData( public=UnsafeDropTipInPlaceResult(), state_update=state_update diff --git a/api/src/opentrons/protocol_engine/state/fluid_stack.py b/api/src/opentrons/protocol_engine/state/fluid_stack.py new file mode 100644 index 00000000000..95465e531b2 --- /dev/null +++ b/api/src/opentrons/protocol_engine/state/fluid_stack.py @@ -0,0 +1,138 @@ +"""Implements fluid stack tracking for pipettes. + +Inside a pipette's tip, there can be a mix of kinds of fluids - here, "fluid" means "liquid" (i.e. a protocol-relevant +working liquid that is aspirated or dispensed from wells) or "air" (i.e. because there was an air gap). Since sometimes +you want air gaps in different places - physically-below liquid to prevent dripping, physically-above liquid to provide +extra room to push the plunger - we need to support some notion of at least phsyical ordinal position of air and liquid, +and we do so as a logical stack because that's physically relevant. +""" +from logging import getLogger +from numpy import isclose +from ..types import AspiratedFluid, FluidKind + +_LOG = getLogger(__name__) + + +class FluidStack: + """A FluidStack data structure is a list of AspiratedFluids, with stack-style (last-in-first-out) ordering. + + The front of the list is the physical-top of the liquid stack (logical-bottom of the stack data structure) + and the back of the list is the physical-bottom of the liquid stack (logical-top of the stack data structure). + The state is internal and the interaction surface is the methods. This is a mutating API. + """ + + _FluidStack = list[AspiratedFluid] + + _fluid_stack: _FluidStack + + def __init__(self, _fluid_stack: _FluidStack | None = None) -> None: + """Build a FluidStack. + + The argument is provided for testing and shouldn't be generally used. + """ + self._fluid_stack = _fluid_stack or [] + + def add_fluid(self, new: AspiratedFluid) -> None: + """Add fluid to a stack. + + If the new fluid is of a different kind than what's on the physical-bottom of the stack, add a new record. + If the new fluid is of the same kind as what's on the physical-bottom of the stack, add the new volume to + the same record. + """ + if len(self._fluid_stack) == 0 or self._fluid_stack[-1].kind != new.kind: + # this is a new kind of fluid, append the record + self._fluid_stack.append(new) + else: + # this is more of the same kind of fluid, add the volumes + old_fluid = self._fluid_stack.pop(-1) + self._fluid_stack.append( + AspiratedFluid(kind=new.kind, volume=old_fluid.volume + new.volume) + ) + + def _alter_fluid_records( + self, remove: int, new_last: AspiratedFluid | None + ) -> None: + if remove >= len(self._fluid_stack) or len(self._fluid_stack) == 0: + self._fluid_stack = [] + return + if remove != 0: + removed = self._fluid_stack[:-remove] + else: + removed = self._fluid_stack + if new_last: + removed[-1] = new_last + self._fluid_stack = removed + + def remove_fluid(self, volume: float) -> None: + """Remove a specific amount of fluid from the physical-bottom of the stack. + + This will consume records that are wholly included in the provided volume and alter the remaining + final records (if any) to decrement the amount of volume removed from it. + + This function is designed to be used inside pipette store action handlers, which are generally not + exception-safe, and therefore swallows and logs errors. + """ + self._fluid_stack_iterator = reversed(self._fluid_stack) + removed_elements: list[AspiratedFluid] = [] + while volume > 0: + try: + last_stack_element = next(self._fluid_stack_iterator) + except StopIteration: + _LOG.error( + f"Attempting to remove more fluid than present, {volume}uL left over" + ) + self._alter_fluid_records(len(removed_elements), None) + return + if last_stack_element.volume < volume: + removed_elements.append(last_stack_element) + volume -= last_stack_element.volume + elif isclose(last_stack_element.volume, volume): + self._alter_fluid_records(len(removed_elements) + 1, None) + return + else: + self._alter_fluid_records( + len(removed_elements), + AspiratedFluid( + kind=last_stack_element.kind, + volume=last_stack_element.volume - volume, + ), + ) + return + + _LOG.error(f"Failed to handle removing {volume}uL from {self._fluid_stack}") + + def aspirated_volume(self, kind: FluidKind | None = None) -> float: + """Measure the total amount of fluid (optionally filtered by kind) in the stack.""" + volume = 0.0 + for el in self._fluid_stack: + if kind is not None and el.kind != kind: + continue + volume += el.volume + return volume + + def liquid_part_of_dispense_volume(self, volume: float) -> float: + """Get the amount of liquid in the specified volume starting at the physical-bottom of the stack.""" + liquid_volume = 0.0 + for el in reversed(self._fluid_stack): + if el.kind == FluidKind.LIQUID: + liquid_volume += min(volume, el.volume) + volume -= min(el.volume, volume) + if isclose(volume, 0.0): + return liquid_volume + return liquid_volume + + def __eq__(self, other: object) -> bool: + """Equality.""" + if isinstance(other, type(self)): + return other._fluid_stack == self._fluid_stack + return False + + def __repr__(self) -> str: + """String representation of a fluid stack.""" + if self._fluid_stack: + stringified_stack = ( + f'(top) {", ".join([str(item) for item in self._fluid_stack])} (bottom)' + ) + else: + stringified_stack = "empty" + return f"<{self.__class__.__name__}: {stringified_stack}>" diff --git a/api/src/opentrons/protocol_engine/state/pipettes.py b/api/src/opentrons/protocol_engine/state/pipettes.py index bb90e067ec6..8277204a4be 100644 --- a/api/src/opentrons/protocol_engine/state/pipettes.py +++ b/api/src/opentrons/protocol_engine/state/pipettes.py @@ -2,15 +2,17 @@ from __future__ import annotations import dataclasses +from logging import getLogger from typing import ( Dict, List, Mapping, Optional, Tuple, - Union, ) +from typing_extensions import assert_never + 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 @@ -21,8 +23,7 @@ ) from opentrons.types import MountType, Mount as HwMount, Point -from . import update_types -from .. import commands +from . import update_types, fluid_stack from .. import errors from ..types import ( LoadedPipette, @@ -36,13 +37,13 @@ ) from ..actions import ( Action, - FailCommandAction, SetPipetteMovementSpeedAction, - SucceedCommandAction, get_state_updates, ) from ._abstract_store import HasState, HandlesActions +LOG = getLogger(__name__) + @dataclasses.dataclass(frozen=True) class HardwarePipette: @@ -108,7 +109,7 @@ class PipetteState: # attributes are populated at the appropriate times. Refactor to a # single dict-of-many-things instead of many dicts-of-single-things. pipettes_by_id: Dict[str, LoadedPipette] - aspirated_volume_by_id: Dict[str, Optional[float]] + pipette_contents_by_id: Dict[str, Optional[fluid_stack.FluidStack]] current_location: Optional[CurrentPipetteLocation] current_deck_point: CurrentDeckPoint attached_tip_by_id: Dict[str, Optional[TipGeometry]] @@ -128,7 +129,7 @@ def __init__(self) -> None: """Initialize a PipetteStore and its state.""" self._state = PipetteState( pipettes_by_id={}, - aspirated_volume_by_id={}, + pipette_contents_by_id={}, attached_tip_by_id={}, current_location=None, current_deck_point=CurrentDeckPoint(mount=None, deck_point=None), @@ -147,11 +148,9 @@ def handle_action(self, action: Action) -> None: self._update_pipette_config(state_update) self._update_pipette_nozzle_map(state_update) self._update_tip_state(state_update) + self._update_volumes(state_update) - if isinstance(action, (SucceedCommandAction, FailCommandAction)): - self._update_volumes(action) - - elif isinstance(action, SetPipetteMovementSpeedAction): + if isinstance(action, SetPipetteMovementSpeedAction): self._state.movement_speed_by_id[action.pipette_id] = action.speed def _set_load_pipette(self, state_update: update_types.StateUpdate) -> None: @@ -166,7 +165,6 @@ def _set_load_pipette(self, state_update: update_types.StateUpdate) -> None: self._state.liquid_presence_detection_by_id[pipette_id] = ( 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 self._state.attached_tip_by_id[pipette_id] = None @@ -177,7 +175,6 @@ def _update_tip_state(self, state_update: update_types.StateUpdate) -> None: attached_tip = 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: @@ -204,7 +201,6 @@ def _update_tip_state(self, state_update: update_types.StateUpdate) -> None: else: pipette_id = 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) @@ -308,51 +304,40 @@ def _update_pipette_nozzle_map( state_update.pipette_nozzle_map.pipette_id ] = state_update.pipette_nozzle_map.nozzle_map - def _update_volumes( - self, action: Union[SucceedCommandAction, FailCommandAction] + def _update_volumes(self, state_update: update_types.StateUpdate) -> None: + if state_update.pipette_aspirated_fluid == update_types.NO_CHANGE: + return + if state_update.pipette_aspirated_fluid.type == "aspirated": + self._update_aspirated(state_update.pipette_aspirated_fluid) + elif state_update.pipette_aspirated_fluid.type == "ejected": + self._update_ejected(state_update.pipette_aspirated_fluid) + elif state_update.pipette_aspirated_fluid.type == "empty": + self._update_empty(state_update.pipette_aspirated_fluid) + elif state_update.pipette_aspirated_fluid.type == "unknown": + self._update_unknown(state_update.pipette_aspirated_fluid) + else: + assert_never(state_update.pipette_aspirated_fluid.type) + + def _update_aspirated( + self, update: update_types.PipetteAspiratedFluidUpdate ) -> None: - # todo(mm, 2024-10-10): Port these isinstance checks to StateUpdate. - # https://opentrons.atlassian.net/browse/EXEC-754 + self._fluid_stack_log_if_empty(update.pipette_id).add_fluid(update.fluid) - if isinstance(action, SucceedCommandAction) and isinstance( - action.command.result, - (commands.AspirateResult, commands.AspirateInPlaceResult), - ): - pipette_id = action.command.params.pipetteId - previous_volume = self._state.aspirated_volume_by_id[pipette_id] or 0 - # PipetteHandler will have clamped action.command.result.volume for us, so - # next_volume should always be in bounds. - next_volume = previous_volume + action.command.result.volume + def _update_ejected(self, update: update_types.PipetteEjectedFluidUpdate) -> None: + self._fluid_stack_log_if_empty(update.pipette_id).remove_fluid(update.volume) - self._state.aspirated_volume_by_id[pipette_id] = next_volume + def _update_empty(self, update: update_types.PipetteEmptyFluidUpdate) -> None: + self._state.pipette_contents_by_id[update.pipette_id] = fluid_stack.FluidStack() - elif isinstance(action, SucceedCommandAction) and isinstance( - action.command.result, - (commands.DispenseResult, commands.DispenseInPlaceResult), - ): - pipette_id = action.command.params.pipetteId - previous_volume = self._state.aspirated_volume_by_id[pipette_id] or 0 - # PipetteHandler will have clamped action.command.result.volume for us, so - # next_volume should always be in bounds. - next_volume = previous_volume - action.command.result.volume - self._state.aspirated_volume_by_id[pipette_id] = next_volume - - elif isinstance(action, SucceedCommandAction) and isinstance( - action.command.result, - ( - commands.BlowOutResult, - commands.BlowOutInPlaceResult, - commands.unsafe.UnsafeBlowOutInPlaceResult, - ), - ): - pipette_id = action.command.params.pipetteId - self._state.aspirated_volume_by_id[pipette_id] = None + def _update_unknown(self, update: update_types.PipetteUnknownFluidUpdate) -> None: + self._state.pipette_contents_by_id[update.pipette_id] = None - elif isinstance(action, SucceedCommandAction) and isinstance( - action.command.result, commands.PrepareToAspirateResult - ): - pipette_id = action.command.params.pipetteId - self._state.aspirated_volume_by_id[pipette_id] = 0 + def _fluid_stack_log_if_empty(self, pipette_id: str) -> fluid_stack.FluidStack: + stack = self._state.pipette_contents_by_id[pipette_id] + if stack is None: + LOG.error("Pipette state tried to alter an unknown-contents pipette") + return fluid_stack.FluidStack() + return stack class PipetteView(HasState[PipetteState]): @@ -457,6 +442,10 @@ def get_all_attached_tips(self) -> List[Tuple[str, TipGeometry]]: def get_aspirated_volume(self, pipette_id: str) -> Optional[float]: """Get the currently aspirated volume of a pipette by ID. + This is the volume currently displaced by the plunger relative to its bottom position, + regardless of whether that volume likely contains liquid or air. This makes it the right + function to call to know how much more volume the plunger may displace. + Returns: The volume the pipette has aspirated. None, after blow-out and the plunger is in an unsafe position. @@ -468,13 +457,50 @@ def get_aspirated_volume(self, pipette_id: str) -> Optional[float]: self.validate_tip_state(pipette_id, True) try: - return self._state.aspirated_volume_by_id[pipette_id] + stack = self._state.pipette_contents_by_id[pipette_id] + if stack is None: + return None + return stack.aspirated_volume() except KeyError as e: raise errors.PipetteNotLoadedError( f"Pipette {pipette_id} not found; unable to get current volume." ) from e + def get_liquid_dispensed_by_ejecting_volume( + self, pipette_id: str, volume: float + ) -> Optional[float]: + """Get the amount of liquid (not air) that will be dispensed if the pipette ejects a specified volume. + + For instance, if the pipette contains, in vertical order, + 10 ul air + 80 ul liquid + 5 ul air + + then dispensing 10ul would result in 5ul of liquid; dispensing 85 ul would result in 80ul liquid; dispensing + 95ul would result in 80ul liquid. + + Returns: + The volume of liquid that would be dispensed by the requested volume. + None, after blow-out or when the plunger is in an unsafe position. + + Raises: + PipetteNotLoadedError: pipette ID does not exist. + TipnotAttachedError: No tip is attached to the pipette. + """ + self.validate_tip_state(pipette_id, True) + + try: + stack = self._state.pipette_contents_by_id[pipette_id] + if stack is None: + return None + return stack.liquid_part_of_dispense_volume(volume) + + except KeyError as e: + raise errors.PipetteNotLoadedError( + f"Pipette {pipette_id} not found; unable to get current liquid volume." + ) from e + def get_working_volume(self, pipette_id: str) -> float: """Get the working maximum volume of a pipette by ID. diff --git a/api/src/opentrons/protocol_engine/state/update_types.py b/api/src/opentrons/protocol_engine/state/update_types.py index 181d8820723..4487a503173 100644 --- a/api/src/opentrons/protocol_engine/state/update_types.py +++ b/api/src/opentrons/protocol_engine/state/update_types.py @@ -8,7 +8,12 @@ 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.protocol_engine.types import ( + DeckPoint, + LabwareLocation, + TipGeometry, + AspiratedFluid, +) from opentrons.types import MountType from opentrons_shared_data.labware.labware_definition import LabwareDefinition from opentrons_shared_data.pipette.types import PipetteNameType @@ -205,6 +210,40 @@ class LiquidOperatedUpdate: volume_added: float | ClearType +@dataclasses.dataclass +class PipetteAspiratedFluidUpdate: + """Represents the pipette aspirating something. Might be air or liquid from a well.""" + + pipette_id: str + fluid: AspiratedFluid + type: typing.Literal["aspirated"] = "aspirated" + + +@dataclasses.dataclass +class PipetteEjectedFluidUpdate: + """Represents the pipette pushing something out. Might be air or liquid.""" + + pipette_id: str + volume: float + type: typing.Literal["ejected"] = "ejected" + + +@dataclasses.dataclass +class PipetteUnknownFluidUpdate: + """Represents the amount of fluid in the pipette becoming unknown.""" + + pipette_id: str + type: typing.Literal["unknown"] = "unknown" + + +@dataclasses.dataclass +class PipetteEmptyFluidUpdate: + """Sets the pipette to be valid and empty.""" + + pipette_id: str + type: typing.Literal["empty"] = "empty" + + @dataclasses.dataclass class StateUpdate: """Represents an update to perform on engine state.""" @@ -219,6 +258,10 @@ class StateUpdate: pipette_tip_state: PipetteTipStateUpdate | NoChangeType = NO_CHANGE + pipette_aspirated_fluid: PipetteAspiratedFluidUpdate | PipetteEjectedFluidUpdate | PipetteUnknownFluidUpdate | PipetteEmptyFluidUpdate | NoChangeType = ( + NO_CHANGE + ) + labware_location: LabwareLocationUpdate | NoChangeType = NO_CHANGE loaded_labware: LoadedLabwareUpdate | NoChangeType = NO_CHANGE @@ -406,3 +449,27 @@ def set_liquid_operated( well_name=well_name, volume_added=volume_added, ) + + def set_fluid_aspirated(self, pipette_id: str, fluid: AspiratedFluid) -> None: + """Update record of fluid held inside a pipette. See `PipetteAspiratedFluidUpdate`.""" + self.pipette_aspirated_fluid = PipetteAspiratedFluidUpdate( + type="aspirated", pipette_id=pipette_id, fluid=fluid + ) + + def set_fluid_ejected(self, pipette_id: str, volume: float) -> None: + """Update record of fluid held inside a pipette. See `PipetteEjectedFluidUpdate`.""" + self.pipette_aspirated_fluid = PipetteEjectedFluidUpdate( + type="ejected", pipette_id=pipette_id, volume=volume + ) + + def set_fluid_unknown(self, pipette_id: str) -> None: + """Update record of fluid held inside a pipette. See `PipetteUnknownFluidUpdate`.""" + self.pipette_aspirated_fluid = PipetteUnknownFluidUpdate( + type="unknown", pipette_id=pipette_id + ) + + def set_fluid_empty(self, pipette_id: str) -> None: + """Update record fo fluid held inside a pipette. See `PipetteEmptyFluidUpdate`.""" + self.pipette_aspirated_fluid = PipetteEmptyFluidUpdate( + type="empty", pipette_id=pipette_id + ) diff --git a/api/src/opentrons/protocol_engine/types.py b/api/src/opentrons/protocol_engine/types.py index ea3a57945b2..780b02d2129 100644 --- a/api/src/opentrons/protocol_engine/types.py +++ b/api/src/opentrons/protocol_engine/types.py @@ -423,6 +423,21 @@ class TipGeometry: volume: float +class FluidKind(str, Enum): + """A kind of fluid that can be inside a pipette.""" + + LIQUID = "LIQUID" + AIR = "AIR" + + +@dataclass(frozen=True) +class AspiratedFluid: + """Fluid inside a pipette.""" + + kind: FluidKind + volume: float + + class MovementAxis(str, Enum): """Axis on which to issue a relative movement.""" diff --git a/api/src/opentrons/protocols/api_support/definitions.py b/api/src/opentrons/protocols/api_support/definitions.py index ad692e03828..e2f6aee1a2a 100644 --- a/api/src/opentrons/protocols/api_support/definitions.py +++ b/api/src/opentrons/protocols/api_support/definitions.py @@ -1,6 +1,6 @@ from .types import APIVersion -MAX_SUPPORTED_VERSION = APIVersion(2, 21) +MAX_SUPPORTED_VERSION = APIVersion(2, 22) """The maximum supported protocol API version in this release.""" MIN_SUPPORTED_VERSION = APIVersion(2, 0) diff --git a/api/tests/opentrons/protocol_api/test_instrument_context.py b/api/tests/opentrons/protocol_api/test_instrument_context.py index 069330036ec..27d2f6ebb33 100644 --- a/api/tests/opentrons/protocol_api/test_instrument_context.py +++ b/api/tests/opentrons/protocol_api/test_instrument_context.py @@ -62,6 +62,7 @@ from opentrons_shared_data.errors.exceptions import ( CommandPreconditionViolated, ) +from . import versions_at_or_above, versions_between @pytest.fixture(autouse=True) @@ -1542,7 +1543,12 @@ def test_96_tip_config_invalid( assert subject._96_tip_config_valid() is True -@pytest.mark.parametrize("api_version", [APIVersion(2, 21)]) +@pytest.mark.parametrize( + "api_version", + versions_between( + low_exclusive_bound=APIVersion(2, 13), high_inclusive_bound=APIVersion(2, 21) + ), +) def test_mix_no_lpd( decoy: Decoy, mock_instrument_core: InstrumentCore, @@ -1593,7 +1599,7 @@ def test_mix_no_lpd( @pytest.mark.ot3_only -@pytest.mark.parametrize("api_version", [APIVersion(2, 21)]) +@pytest.mark.parametrize("api_version", versions_at_or_above(APIVersion(2, 21))) def test_mix_with_lpd( decoy: Decoy, mock_instrument_core: InstrumentCore, @@ -1641,3 +1647,60 @@ def test_mix_with_lpd( ignore_extra_args=True, times=1, ) + + +@pytest.mark.parametrize( + "api_version", + versions_between( + low_exclusive_bound=APIVersion(2, 13), high_inclusive_bound=APIVersion(2, 21) + ), +) +def test_air_gap_uses_aspirate( + decoy: Decoy, + mock_instrument_core: InstrumentCore, + mock_protocol_core: ProtocolCore, + subject: InstrumentContext, + monkeypatch: pytest.MonkeyPatch, +) -> None: + """It should use its own aspirate function to aspirate air.""" + mock_well = decoy.mock(cls=Well) + top_location = Location(point=Point(9, 9, 14), labware=mock_well) + last_location = Location(point=Point(9, 9, 9), labware=mock_well) + mock_aspirate = decoy.mock(func=subject.aspirate) + mock_move_to = decoy.mock(func=subject.move_to) + monkeypatch.setattr(subject, "aspirate", mock_aspirate) + monkeypatch.setattr(subject, "move_to", mock_move_to) + + decoy.when(mock_instrument_core.has_tip()).then_return(True) + decoy.when(mock_protocol_core.get_last_location()).then_return(last_location) + decoy.when(mock_well.top(z=5.0)).then_return(top_location) + subject.air_gap(volume=10, height=5) + + decoy.verify(mock_move_to(top_location, publish=False)) + decoy.verify(mock_aspirate(10)) + + +@pytest.mark.parametrize("api_version", versions_at_or_above(APIVersion(2, 22))) +def test_air_gap_uses_air_gap( + decoy: Decoy, + mock_instrument_core: InstrumentCore, + mock_protocol_core: ProtocolCore, + subject: InstrumentContext, + monkeypatch: pytest.MonkeyPatch, +) -> None: + """It should use its own aspirate function to aspirate air.""" + mock_well = decoy.mock(cls=Well) + top_location = Location(point=Point(9, 9, 14), labware=mock_well) + last_location = Location(point=Point(9, 9, 9), labware=mock_well) + mock_move_to = decoy.mock(func=subject.move_to) + monkeypatch.setattr(subject, "move_to", mock_move_to) + + decoy.when(mock_instrument_core.has_tip()).then_return(True) + decoy.when(mock_protocol_core.get_last_location()).then_return(last_location) + decoy.when(mock_well.top(z=5.0)).then_return(top_location) + decoy.when(mock_instrument_core.get_aspirate_flow_rate()).then_return(11) + + subject.air_gap(volume=10, height=5) + + decoy.verify(mock_move_to(top_location, publish=False)) + decoy.verify(mock_instrument_core.air_gap_in_place(10, 11)) diff --git a/api/tests/opentrons/protocol_engine/commands/test_air_gap_in_place.py b/api/tests/opentrons/protocol_engine/commands/test_air_gap_in_place.py new file mode 100644 index 00000000000..5d66a845dcc --- /dev/null +++ b/api/tests/opentrons/protocol_engine/commands/test_air_gap_in_place.py @@ -0,0 +1,284 @@ +"""Test aspirate-in-place commands.""" +from datetime import datetime + +import pytest +from decoy import Decoy, matchers + +from opentrons_shared_data.errors.exceptions import PipetteOverpressureError + +from opentrons.types import Point +from opentrons.hardware_control import API as HardwareAPI + +from opentrons.protocol_engine.execution import PipettingHandler, GantryMover +from opentrons.protocol_engine.commands.air_gap_in_place import ( + AirGapInPlaceParams, + AirGapInPlaceResult, + AirGapInPlaceImplementation, +) +from opentrons.protocol_engine.commands.command import SuccessData, DefinedErrorData +from opentrons.protocol_engine.errors.exceptions import PipetteNotReadyToAspirateError +from opentrons.protocol_engine.notes import CommandNoteAdder +from opentrons.protocol_engine.resources import ModelUtils +from opentrons.protocol_engine.state.state import StateStore +from opentrons.protocol_engine.commands.pipetting_common import OverpressureError +from opentrons.protocol_engine.types import ( + CurrentWell, + CurrentPipetteLocation, + CurrentAddressableArea, + AspiratedFluid, + FluidKind, +) +from opentrons.protocol_engine.state import update_types + + +@pytest.fixture +def hardware_api(decoy: Decoy) -> HardwareAPI: + """Get a mock in the shape of a HardwareAPI.""" + return decoy.mock(cls=HardwareAPI) + + +@pytest.fixture +def state_store(decoy: Decoy) -> StateStore: + """Get a mock in the shape of a StateStore.""" + return decoy.mock(cls=StateStore) + + +@pytest.fixture +def pipetting(decoy: Decoy) -> PipettingHandler: + """Get a mock in the shape of a PipettingHandler.""" + return decoy.mock(cls=PipettingHandler) + + +@pytest.fixture +def subject( + pipetting: PipettingHandler, + state_store: StateStore, + hardware_api: HardwareAPI, + mock_command_note_adder: CommandNoteAdder, + model_utils: ModelUtils, + gantry_mover: GantryMover, +) -> AirGapInPlaceImplementation: + """Get the impelementation subject.""" + return AirGapInPlaceImplementation( + pipetting=pipetting, + hardware_api=hardware_api, + state_view=state_store, + command_note_adder=mock_command_note_adder, + model_utils=model_utils, + gantry_mover=gantry_mover, + ) + + +@pytest.mark.parametrize( + "location,stateupdateLabware,stateupdateWell", + [ + ( + CurrentWell( + pipette_id="pipette-id-abc", + labware_id="labware-id-1", + well_name="well-name-1", + ), + "labware-id-1", + "well-name-1", + ), + (None, None, None), + (CurrentAddressableArea("pipette-id-abc", "addressable-area-1"), None, None), + ], +) +async def test_air_gap_in_place_implementation( + decoy: Decoy, + pipetting: PipettingHandler, + state_store: StateStore, + hardware_api: HardwareAPI, + mock_command_note_adder: CommandNoteAdder, + subject: AirGapInPlaceImplementation, + location: CurrentPipetteLocation | None, + stateupdateLabware: str, + stateupdateWell: str, +) -> None: + """It should aspirate in place.""" + data = AirGapInPlaceParams( + pipetteId="pipette-id-abc", + volume=123, + flowRate=1.234, + ) + + decoy.when( + pipetting.get_is_ready_to_aspirate( + pipette_id="pipette-id-abc", + ) + ).then_return(True) + + decoy.when( + await pipetting.aspirate_in_place( + pipette_id="pipette-id-abc", + volume=123, + flow_rate=1.234, + command_note_adder=mock_command_note_adder, + ) + ).then_return(123) + + decoy.when(state_store.pipettes.get_current_location()).then_return(location) + + result = await subject.execute(params=data) + + if isinstance(location, CurrentWell): + assert result == SuccessData( + public=AirGapInPlaceResult(volume=123), + state_update=update_types.StateUpdate( + pipette_aspirated_fluid=update_types.PipetteAspiratedFluidUpdate( + pipette_id="pipette-id-abc", + fluid=AspiratedFluid(kind=FluidKind.AIR, volume=123), + ) + ), + ) + else: + assert result == SuccessData( + public=AirGapInPlaceResult(volume=123), + state_update=update_types.StateUpdate( + pipette_aspirated_fluid=update_types.PipetteAspiratedFluidUpdate( + pipette_id="pipette-id-abc", + fluid=AspiratedFluid(kind=FluidKind.AIR, volume=123), + ) + ), + ) + + +async def test_handle_air_gap_in_place_request_not_ready_to_aspirate( + decoy: Decoy, + pipetting: PipettingHandler, + state_store: StateStore, + hardware_api: HardwareAPI, + subject: AirGapInPlaceImplementation, +) -> None: + """Should raise an exception for not ready to aspirate.""" + data = AirGapInPlaceParams( + pipetteId="pipette-id-abc", + volume=123, + flowRate=1.234, + ) + + decoy.when( + pipetting.get_is_ready_to_aspirate( + pipette_id="pipette-id-abc", + ) + ).then_return(False) + + with pytest.raises( + PipetteNotReadyToAspirateError, + match="Pipette cannot air gap in place because of a previous blow out." + " The first aspirate following a blow-out must be from a specific well" + " so the plunger can be reset in a known safe position.", + ): + await subject.execute(params=data) + + +async def test_aspirate_raises_volume_error( + decoy: Decoy, + pipetting: PipettingHandler, + subject: AirGapInPlaceImplementation, + mock_command_note_adder: CommandNoteAdder, +) -> None: + """Should raise an assertion error for volume larger than working volume.""" + data = AirGapInPlaceParams( + pipetteId="abc", + volume=50, + flowRate=1.23, + ) + + decoy.when(pipetting.get_is_ready_to_aspirate(pipette_id="abc")).then_return(True) + + decoy.when( + await pipetting.aspirate_in_place( + pipette_id="abc", + volume=50, + flow_rate=1.23, + command_note_adder=mock_command_note_adder, + ) + ).then_raise(AssertionError("blah blah")) + + with pytest.raises(AssertionError): + await subject.execute(data) + + +@pytest.mark.parametrize( + "location,stateupdateLabware,stateupdateWell", + [ + ( + CurrentWell( + pipette_id="pipette-id", + labware_id="labware-id-1", + well_name="well-name-1", + ), + "labware-id-1", + "well-name-1", + ), + (None, None, None), + (CurrentAddressableArea("pipette-id", "addressable-area-1"), None, None), + ], +) +async def test_overpressure_error( + decoy: Decoy, + gantry_mover: GantryMover, + pipetting: PipettingHandler, + subject: AirGapInPlaceImplementation, + model_utils: ModelUtils, + mock_command_note_adder: CommandNoteAdder, + state_store: StateStore, + location: CurrentPipetteLocation | None, + stateupdateLabware: str, + stateupdateWell: str, +) -> None: + """It should return an overpressure error if the hardware API indicates that.""" + pipette_id = "pipette-id" + + position = Point(x=1, y=2, z=3) + + error_id = "error-id" + error_timestamp = datetime(year=2020, month=1, day=2) + + data = AirGapInPlaceParams( + pipetteId=pipette_id, + volume=50, + flowRate=1.23, + ) + + decoy.when(pipetting.get_is_ready_to_aspirate(pipette_id=pipette_id)).then_return( + True + ) + + decoy.when( + await pipetting.aspirate_in_place( + pipette_id=pipette_id, + volume=50, + flow_rate=1.23, + command_note_adder=mock_command_note_adder, + ), + ).then_raise(PipetteOverpressureError()) + + decoy.when(model_utils.generate_id()).then_return(error_id) + decoy.when(model_utils.get_timestamp()).then_return(error_timestamp) + decoy.when(await gantry_mover.get_position(pipette_id)).then_return(position) + decoy.when(state_store.pipettes.get_current_location()).then_return(location) + + result = await subject.execute(data) + + if isinstance(location, CurrentWell): + assert result == DefinedErrorData( + public=OverpressureError.construct( + id=error_id, + createdAt=error_timestamp, + wrappedErrors=[matchers.Anything()], + errorInfo={"retryLocation": (position.x, position.y, position.z)}, + ), + state_update=update_types.StateUpdate(), + ) + else: + assert result == DefinedErrorData( + public=OverpressureError.construct( + id=error_id, + createdAt=error_timestamp, + wrappedErrors=[matchers.Anything()], + errorInfo={"retryLocation": (position.x, position.y, position.z)}, + ), + ) diff --git a/api/tests/opentrons/protocol_engine/commands/test_aspirate.py b/api/tests/opentrons/protocol_engine/commands/test_aspirate.py index 102114b1cc8..55950d51934 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_aspirate.py +++ b/api/tests/opentrons/protocol_engine/commands/test_aspirate.py @@ -29,7 +29,12 @@ PipettingHandler, ) from opentrons.protocol_engine.resources.model_utils import ModelUtils -from opentrons.protocol_engine.types import CurrentWell, LoadedPipette +from opentrons.protocol_engine.types import ( + CurrentWell, + LoadedPipette, + AspiratedFluid, + FluidKind, +) from opentrons.hardware_control import HardwareControlAPI from opentrons.protocol_engine.notes import CommandNoteAdder @@ -114,6 +119,9 @@ async def test_aspirate_implementation_no_prep( well_name="A3", volume_added=-50, ), + pipette_aspirated_fluid=update_types.PipetteAspiratedFluidUpdate( + pipette_id="abc", fluid=AspiratedFluid(kind=FluidKind.LIQUID, volume=50) + ), ), ) @@ -187,6 +195,9 @@ async def test_aspirate_implementation_with_prep( well_name="A3", volume_added=-50, ), + pipette_aspirated_fluid=update_types.PipetteAspiratedFluidUpdate( + pipette_id="abc", fluid=AspiratedFluid(kind=FluidKind.LIQUID, volume=50) + ), ), ) @@ -327,6 +338,9 @@ async def test_overpressure_error( well_name=well_name, volume_added=update_types.CLEAR, ), + pipette_aspirated_fluid=update_types.PipetteUnknownFluidUpdate( + pipette_id=pipette_id + ), ), ) @@ -392,5 +406,8 @@ async def test_aspirate_implementation_meniscus( well_name="A3", volume_added=-50, ), + pipette_aspirated_fluid=update_types.PipetteAspiratedFluidUpdate( + pipette_id="abc", fluid=AspiratedFluid(kind=FluidKind.LIQUID, volume=50) + ), ), ) diff --git a/api/tests/opentrons/protocol_engine/commands/test_aspirate_in_place.py b/api/tests/opentrons/protocol_engine/commands/test_aspirate_in_place.py index 85d8f4fab84..034c7f51ede 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_aspirate_in_place.py +++ b/api/tests/opentrons/protocol_engine/commands/test_aspirate_in_place.py @@ -25,6 +25,8 @@ CurrentWell, CurrentPipetteLocation, CurrentAddressableArea, + AspiratedFluid, + FluidKind, ) from opentrons.protocol_engine.state import update_types @@ -128,12 +130,22 @@ async def test_aspirate_in_place_implementation( labware_id=stateupdateLabware, well_name=stateupdateWell, volume_added=-123, - ) + ), + pipette_aspirated_fluid=update_types.PipetteAspiratedFluidUpdate( + pipette_id="pipette-id-abc", + fluid=AspiratedFluid(kind=FluidKind.LIQUID, volume=123), + ), ), ) else: assert result == SuccessData( public=AspirateInPlaceResult(volume=123), + state_update=update_types.StateUpdate( + pipette_aspirated_fluid=update_types.PipetteAspiratedFluidUpdate( + pipette_id="pipette-id-abc", + fluid=AspiratedFluid(kind=FluidKind.LIQUID, volume=123), + ) + ), ) @@ -269,7 +281,10 @@ async def test_overpressure_error( labware_id=stateupdateLabware, well_name=stateupdateWell, volume_added=update_types.CLEAR, - ) + ), + pipette_aspirated_fluid=update_types.PipetteUnknownFluidUpdate( + pipette_id="pipette-id" + ), ), ) else: @@ -280,4 +295,9 @@ async def test_overpressure_error( wrappedErrors=[matchers.Anything()], errorInfo={"retryLocation": (position.x, position.y, position.z)}, ), + state_update=update_types.StateUpdate( + pipette_aspirated_fluid=update_types.PipetteUnknownFluidUpdate( + pipette_id="pipette-id" + ) + ), ) diff --git a/api/tests/opentrons/protocol_engine/commands/test_blow_out.py b/api/tests/opentrons/protocol_engine/commands/test_blow_out.py index 3e9aa6d82b8..d053aac0f0d 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_blow_out.py +++ b/api/tests/opentrons/protocol_engine/commands/test_blow_out.py @@ -84,7 +84,10 @@ async def test_blow_out_implementation( well_name="C6", ), new_deck_point=DeckPoint(x=1, y=2, z=3), - ) + ), + pipette_aspirated_fluid=update_types.PipetteEmptyFluidUpdate( + pipette_id="pipette-id" + ), ), ) @@ -145,4 +148,17 @@ async def test_overpressure_error( wrappedErrors=[matchers.Anything()], errorInfo={"retryLocation": (1, 2, 3)}, ), + state_update=update_types.StateUpdate( + pipette_location=update_types.PipetteLocationUpdate( + pipette_id="pipette-id", + new_location=update_types.Well( + labware_id="labware-id", + well_name="C6", + ), + new_deck_point=DeckPoint(x=1, y=2, z=3), + ), + pipette_aspirated_fluid=update_types.PipetteUnknownFluidUpdate( + pipette_id="pipette-id" + ), + ), ) diff --git a/api/tests/opentrons/protocol_engine/commands/test_blow_out_in_place.py b/api/tests/opentrons/protocol_engine/commands/test_blow_out_in_place.py index 49eced0670b..bc4ab782f64 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_blow_out_in_place.py +++ b/api/tests/opentrons/protocol_engine/commands/test_blow_out_in_place.py @@ -1,11 +1,14 @@ """Test blow-out-in-place commands.""" from datetime import datetime + +import pytest from decoy import Decoy, matchers from opentrons.protocol_engine.commands.pipetting_common import OverpressureError from opentrons.protocol_engine.execution.gantry_mover import GantryMover from opentrons.protocol_engine.resources.model_utils import ModelUtils from opentrons.protocol_engine.state.state import StateView +from opentrons.protocol_engine.state import update_types from opentrons.protocol_engine.commands.blow_out_in_place import ( BlowOutInPlaceParams, BlowOutInPlaceResult, @@ -18,7 +21,6 @@ from opentrons.hardware_control import HardwareControlAPI from opentrons.types import Point from opentrons_shared_data.errors.exceptions import PipetteOverpressureError -import pytest @pytest.fixture @@ -52,7 +54,14 @@ async def test_blow_out_in_place_implementation( result = await subject.execute(data) - assert result == SuccessData(public=BlowOutInPlaceResult()) + assert result == SuccessData( + public=BlowOutInPlaceResult(), + state_update=update_types.StateUpdate( + pipette_aspirated_fluid=update_types.PipetteEmptyFluidUpdate( + pipette_id="pipette-id" + ) + ), + ) decoy.verify( await pipetting.blow_out_in_place(pipette_id="pipette-id", flow_rate=1.234) @@ -100,4 +109,9 @@ async def test_overpressure_error( wrappedErrors=[matchers.Anything()], errorInfo={"retryLocation": (position.x, position.y, position.z)}, ), + state_update=update_types.StateUpdate( + pipette_aspirated_fluid=update_types.PipetteUnknownFluidUpdate( + pipette_id="pipette-id" + ) + ), ) diff --git a/api/tests/opentrons/protocol_engine/commands/test_dispense.py b/api/tests/opentrons/protocol_engine/commands/test_dispense.py index a996e6915e8..a51b2cc7b84 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_dispense.py +++ b/api/tests/opentrons/protocol_engine/commands/test_dispense.py @@ -48,6 +48,7 @@ async def test_dispense_implementation( movement: MovementHandler, pipetting: PipettingHandler, subject: DispenseImplementation, + state_view: StateView, ) -> None: """It should move to the target location and then dispense.""" well_location = LiquidHandlingWellLocation( @@ -77,6 +78,11 @@ async def test_dispense_implementation( pipette_id="pipette-id-abc123", volume=50, flow_rate=1.23, push_out=None ) ).then_return(42) + decoy.when( + state_view.pipettes.get_liquid_dispensed_by_ejecting_volume( + pipette_id="pipette-id-abc123", volume=42 + ) + ).then_return(34) result = await subject.execute(data) @@ -94,7 +100,10 @@ async def test_dispense_implementation( liquid_operated=update_types.LiquidOperatedUpdate( labware_id="labware-id-abc123", well_name="A3", - volume_added=42, + volume_added=34, + ), + pipette_aspirated_fluid=update_types.PipetteEjectedFluidUpdate( + pipette_id="pipette-id-abc123", volume=42 ), ), ) @@ -170,5 +179,8 @@ async def test_overpressure_error( well_name="well-name", volume_added=update_types.CLEAR, ), + pipette_aspirated_fluid=update_types.PipetteUnknownFluidUpdate( + pipette_id="pipette-id" + ), ), ) diff --git a/api/tests/opentrons/protocol_engine/commands/test_dispense_in_place.py b/api/tests/opentrons/protocol_engine/commands/test_dispense_in_place.py index 5e432bef80a..bcfdba0ed57 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_dispense_in_place.py +++ b/api/tests/opentrons/protocol_engine/commands/test_dispense_in_place.py @@ -17,7 +17,7 @@ ) from opentrons.protocol_engine.commands.pipetting_common import OverpressureError from opentrons.protocol_engine.resources import ModelUtils -from opentrons.protocol_engine.state.state import StateStore +from opentrons.protocol_engine.state.state import StateView from opentrons.protocol_engine.types import ( CurrentWell, CurrentPipetteLocation, @@ -27,9 +27,19 @@ @pytest.fixture -def state_store(decoy: Decoy) -> StateStore: - """Get a mock in the shape of a StateStore.""" - return decoy.mock(cls=StateStore) +def subject( + pipetting: PipettingHandler, + state_view: StateView, + gantry_mover: GantryMover, + model_utils: ModelUtils, +) -> DispenseInPlaceImplementation: + """Build a command implementation.""" + return DispenseInPlaceImplementation( + pipetting=pipetting, + state_view=state_view, + gantry_mover=gantry_mover, + model_utils=model_utils, + ) @pytest.mark.parametrize( @@ -51,21 +61,13 @@ def state_store(decoy: Decoy) -> StateStore: async def test_dispense_in_place_implementation( decoy: Decoy, pipetting: PipettingHandler, - state_store: StateStore, - gantry_mover: GantryMover, - model_utils: ModelUtils, + state_view: StateView, + subject: DispenseInPlaceImplementation, location: CurrentPipetteLocation | None, stateupdateLabware: str, stateupdateWell: str, ) -> None: """It should dispense in place.""" - subject = DispenseInPlaceImplementation( - pipetting=pipetting, - state_view=state_store, - gantry_mover=gantry_mover, - model_utils=model_utils, - ) - data = DispenseInPlaceParams( pipetteId="pipette-id-abc", volume=123, @@ -78,7 +80,12 @@ async def test_dispense_in_place_implementation( ) ).then_return(42) - decoy.when(state_store.pipettes.get_current_location()).then_return(location) + decoy.when(state_view.pipettes.get_current_location()).then_return(location) + decoy.when( + state_view.pipettes.get_liquid_dispensed_by_ejecting_volume( + pipette_id="pipette-id-abc", volume=42 + ) + ).then_return(34) result = await subject.execute(data) @@ -86,16 +93,24 @@ async def test_dispense_in_place_implementation( assert result == SuccessData( public=DispenseInPlaceResult(volume=42), state_update=update_types.StateUpdate( + pipette_aspirated_fluid=update_types.PipetteEjectedFluidUpdate( + pipette_id="pipette-id-abc", volume=42 + ), liquid_operated=update_types.LiquidOperatedUpdate( labware_id=stateupdateLabware, well_name=stateupdateWell, - volume_added=42, - ) + volume_added=34, + ), ), ) else: assert result == SuccessData( public=DispenseInPlaceResult(volume=42), + state_update=update_types.StateUpdate( + pipette_aspirated_fluid=update_types.PipetteEjectedFluidUpdate( + pipette_id="pipette-id-abc", volume=42 + ) + ), ) @@ -119,20 +134,14 @@ async def test_overpressure_error( decoy: Decoy, gantry_mover: GantryMover, pipetting: PipettingHandler, - state_store: StateStore, + state_view: StateView, model_utils: ModelUtils, + subject: DispenseInPlaceImplementation, location: CurrentPipetteLocation | None, stateupdateLabware: str, stateupdateWell: str, ) -> None: """It should return an overpressure error if the hardware API indicates that.""" - subject = DispenseInPlaceImplementation( - pipetting=pipetting, - state_view=state_store, - gantry_mover=gantry_mover, - model_utils=model_utils, - ) - pipette_id = "pipette-id" position = Point(x=1, y=2, z=3) @@ -159,7 +168,7 @@ async def test_overpressure_error( decoy.when(model_utils.generate_id()).then_return(error_id) decoy.when(model_utils.get_timestamp()).then_return(error_timestamp) decoy.when(await gantry_mover.get_position(pipette_id)).then_return(position) - decoy.when(state_store.pipettes.get_current_location()).then_return(location) + decoy.when(state_view.pipettes.get_current_location()).then_return(location) result = await subject.execute(data) @@ -176,7 +185,10 @@ async def test_overpressure_error( labware_id=stateupdateLabware, well_name=stateupdateWell, volume_added=update_types.CLEAR, - ) + ), + pipette_aspirated_fluid=update_types.PipetteUnknownFluidUpdate( + pipette_id="pipette-id" + ), ), ) else: @@ -186,5 +198,10 @@ async def test_overpressure_error( createdAt=error_timestamp, wrappedErrors=[matchers.Anything()], errorInfo={"retryLocation": (position.x, position.y, position.z)}, - ) + ), + state_update=update_types.StateUpdate( + pipette_aspirated_fluid=update_types.PipetteUnknownFluidUpdate( + pipette_id="pipette-id" + ) + ), ) 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 1d113c999c3..9217a4a4287 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_drop_tip.py +++ b/api/tests/opentrons/protocol_engine/commands/test_drop_tip.py @@ -141,6 +141,9 @@ async def test_drop_tip_implementation( pipette_tip_state=update_types.PipetteTipStateUpdate( pipette_id="abc", tip_geometry=None ), + pipette_aspirated_fluid=update_types.PipetteUnknownFluidUpdate( + pipette_id="abc" + ), ), ) @@ -218,6 +221,9 @@ async def test_drop_tip_with_alternating_locations( pipette_tip_state=update_types.PipetteTipStateUpdate( pipette_id="abc", tip_geometry=None ), + pipette_aspirated_fluid=update_types.PipetteUnknownFluidUpdate( + pipette_id="abc" + ), ), ) @@ -291,11 +297,14 @@ async def test_tip_attached_error( ), new_deck_point=DeckPoint(x=111, y=222, z=333), ), + pipette_aspirated_fluid=update_types.PipetteUnknownFluidUpdate( + pipette_id="abc" + ), ), state_update_if_false_positive=update_types.StateUpdate( 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 292aa532879..9ea78e7dadd 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 @@ -19,6 +19,7 @@ from opentrons.protocol_engine.state.update_types import ( PipetteTipStateUpdate, StateUpdate, + PipetteUnknownFluidUpdate, ) @@ -50,7 +51,10 @@ async def test_success( assert result == SuccessData( public=DropTipInPlaceResult(), state_update=StateUpdate( - pipette_tip_state=PipetteTipStateUpdate(pipette_id="abc", tip_geometry=None) + pipette_tip_state=PipetteTipStateUpdate( + pipette_id="abc", tip_geometry=None + ), + pipette_aspirated_fluid=PipetteUnknownFluidUpdate(pipette_id="abc"), ), ) @@ -89,8 +93,12 @@ async def test_tip_attached_error( createdAt=datetime(year=1, month=2, day=3), wrappedErrors=[matchers.Anything()], ), - state_update=StateUpdate(), + state_update=StateUpdate( + pipette_aspirated_fluid=PipetteUnknownFluidUpdate(pipette_id="abc") + ), state_update_if_false_positive=StateUpdate( - pipette_tip_state=PipetteTipStateUpdate(pipette_id="abc", tip_geometry=None) + pipette_tip_state=PipetteTipStateUpdate( + pipette_id="abc", tip_geometry=None + ), ), ) 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 44a9db61863..a42bbc4e4d9 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_load_pipette.py +++ b/api/tests/opentrons/protocol_engine/commands/test_load_pipette.py @@ -3,6 +3,7 @@ LoadPipetteUpdate, PipetteConfigUpdate, StateUpdate, + PipetteUnknownFluidUpdate, ) import pytest from decoy import Decoy @@ -101,6 +102,7 @@ async def test_load_pipette_implementation( serial_number="some-serial-number", config=config_data, ), + pipette_aspirated_fluid=PipetteUnknownFluidUpdate(pipette_id="some id"), ), ) @@ -166,6 +168,7 @@ async def test_load_pipette_implementation_96_channel( serial_number="some id", config=config_data, ), + pipette_aspirated_fluid=PipetteUnknownFluidUpdate(pipette_id="pipette-id"), ), ) 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 00a3bc1c8a8..5fb97a2f78f 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 @@ -97,6 +97,9 @@ async def test_success( tips_used=update_types.TipsUsedUpdate( pipette_id="pipette-id", labware_id="labware-id", well_name="A3" ), + pipette_aspirated_fluid=update_types.PipetteEmptyFluidUpdate( + pipette_id="pipette-id" + ), ), ) @@ -163,10 +166,16 @@ async def test_tip_physically_missing_error( tips_used=update_types.TipsUsedUpdate( pipette_id="pipette-id", labware_id="labware-id", well_name="well-name" ), + pipette_aspirated_fluid=update_types.PipetteUnknownFluidUpdate( + pipette_id="pipette-id" + ), ), state_update_if_false_positive=update_types.StateUpdate( pipette_tip_state=update_types.PipetteTipStateUpdate( pipette_id="pipette-id", tip_geometry=sentinel.tip_geometry - ) + ), + pipette_aspirated_fluid=update_types.PipetteEmptyFluidUpdate( + pipette_id="pipette-id" + ), ), ) diff --git a/api/tests/opentrons/protocol_engine/commands/test_prepare_to_aspirate.py b/api/tests/opentrons/protocol_engine/commands/test_prepare_to_aspirate.py index bb4f8c5f4d9..2de35e38332 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_prepare_to_aspirate.py +++ b/api/tests/opentrons/protocol_engine/commands/test_prepare_to_aspirate.py @@ -17,6 +17,7 @@ from opentrons.protocol_engine.execution.gantry_mover import GantryMover from opentrons.protocol_engine.resources.model_utils import ModelUtils from opentrons.protocol_engine.commands.pipetting_common import OverpressureError +from opentrons.protocol_engine.state import update_types from opentrons_shared_data.errors.exceptions import PipetteOverpressureError @@ -32,7 +33,7 @@ def subject( ) -async def test_prepare_to_aspirate_implmenetation( +async def test_prepare_to_aspirate_implementation( decoy: Decoy, subject: PrepareToAspirateImplementation, pipetting: PipettingHandler ) -> None: """A PrepareToAspirate command should have an executing implementation.""" @@ -43,7 +44,14 @@ async def test_prepare_to_aspirate_implmenetation( ) result = await subject.execute(data) - assert result == SuccessData(public=PrepareToAspirateResult()) + assert result == SuccessData( + public=PrepareToAspirateResult(), + state_update=update_types.StateUpdate( + pipette_aspirated_fluid=update_types.PipetteEmptyFluidUpdate( + pipette_id="some id" + ) + ), + ) async def test_overpressure_error( @@ -84,4 +92,9 @@ async def test_overpressure_error( wrappedErrors=[matchers.Anything()], errorInfo={"retryLocation": (position.x, position.y, position.z)}, ), + state_update=update_types.StateUpdate( + pipette_aspirated_fluid=update_types.PipetteUnknownFluidUpdate( + pipette_id="pipette-id" + ) + ), ) diff --git a/api/tests/opentrons/protocol_engine/commands/unsafe/test_unsafe_blow_out_in_place.py b/api/tests/opentrons/protocol_engine/commands/unsafe/test_unsafe_blow_out_in_place.py index aec5df2620d..88ad9a8ecf8 100644 --- a/api/tests/opentrons/protocol_engine/commands/unsafe/test_unsafe_blow_out_in_place.py +++ b/api/tests/opentrons/protocol_engine/commands/unsafe/test_unsafe_blow_out_in_place.py @@ -3,6 +3,7 @@ from opentrons.types import MountType from opentrons.protocol_engine.state.state import StateView +from opentrons.protocol_engine.state import update_types from opentrons.protocol_engine.commands.unsafe.unsafe_blow_out_in_place import ( UnsafeBlowOutInPlaceParams, UnsafeBlowOutInPlaceResult, @@ -41,7 +42,14 @@ async def test_blow_out_in_place_implementation( result = await subject.execute(data) - assert result == SuccessData(public=UnsafeBlowOutInPlaceResult()) + assert result == SuccessData( + public=UnsafeBlowOutInPlaceResult(), + state_update=update_types.StateUpdate( + pipette_aspirated_fluid=update_types.PipetteEmptyFluidUpdate( + pipette_id="pipette-id" + ) + ), + ) decoy.verify( await ot3_hardware_api.update_axis_position_estimations([Axis.P_L]), 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 fb23d96d987..e7c684554c8 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,6 +1,7 @@ """Test unsafe drop tip in place commands.""" from opentrons.protocol_engine.state.update_types import ( PipetteTipStateUpdate, + PipetteUnknownFluidUpdate, StateUpdate, ) import pytest @@ -51,7 +52,10 @@ async def test_drop_tip_implementation( assert result == SuccessData( public=UnsafeDropTipInPlaceResult(), state_update=StateUpdate( - pipette_tip_state=PipetteTipStateUpdate(pipette_id="abc", tip_geometry=None) + pipette_tip_state=PipetteTipStateUpdate( + pipette_id="abc", tip_geometry=None + ), + pipette_aspirated_fluid=PipetteUnknownFluidUpdate(pipette_id="abc"), ), ) diff --git a/api/tests/opentrons/protocol_engine/state/test_fluid_stack.py b/api/tests/opentrons/protocol_engine/state/test_fluid_stack.py new file mode 100644 index 00000000000..e958b92036d --- /dev/null +++ b/api/tests/opentrons/protocol_engine/state/test_fluid_stack.py @@ -0,0 +1,219 @@ +"""Test pipette internal fluid tracking.""" +import pytest + +from opentrons.protocol_engine.state.fluid_stack import FluidStack +from opentrons.protocol_engine.types import AspiratedFluid, FluidKind + + +@pytest.mark.parametrize( + "fluids,resulting_stack", + [ + ( + [ + AspiratedFluid(FluidKind.LIQUID, 10), + AspiratedFluid(FluidKind.LIQUID, 10), + ], + [AspiratedFluid(FluidKind.LIQUID, 20)], + ), + ( + [AspiratedFluid(FluidKind.AIR, 10), AspiratedFluid(FluidKind.LIQUID, 20)], + [AspiratedFluid(FluidKind.AIR, 10), AspiratedFluid(FluidKind.LIQUID, 20)], + ), + ( + [ + AspiratedFluid(FluidKind.AIR, 10), + AspiratedFluid(FluidKind.LIQUID, 20), + AspiratedFluid(FluidKind.LIQUID, 10), + AspiratedFluid(FluidKind.AIR, 20), + ], + [ + AspiratedFluid(FluidKind.AIR, 10), + AspiratedFluid(FluidKind.LIQUID, 30), + AspiratedFluid(FluidKind.AIR, 20), + ], + ), + ], +) +def test_add_fluid( + fluids: list[AspiratedFluid], resulting_stack: list[AspiratedFluid] +) -> None: + """It should add fluids.""" + stack = FluidStack() + for fluid in fluids: + stack.add_fluid(fluid) + assert stack._fluid_stack == resulting_stack + + +@pytest.mark.parametrize( + "starting_fluids,remove_volume,resulting_stack", + [ + ([], 1, []), + ([], 0, []), + ( + [AspiratedFluid(FluidKind.LIQUID, 10)], + 0, + [AspiratedFluid(FluidKind.LIQUID, 10)], + ), + ( + [AspiratedFluid(FluidKind.LIQUID, 10)], + 5, + [AspiratedFluid(FluidKind.LIQUID, 5)], + ), + ([AspiratedFluid(FluidKind.LIQUID, 10)], 11, []), + ( + [AspiratedFluid(FluidKind.LIQUID, 10), AspiratedFluid(FluidKind.AIR, 10)], + 11, + [AspiratedFluid(FluidKind.LIQUID, 9)], + ), + ( + [AspiratedFluid(FluidKind.LIQUID, 10), AspiratedFluid(FluidKind.AIR, 10)], + 20, + [], + ), + ( + [ + AspiratedFluid(FluidKind.LIQUID, 10), + AspiratedFluid(FluidKind.AIR, 10), + AspiratedFluid(FluidKind.LIQUID, 10), + ], + 28, + [AspiratedFluid(FluidKind.LIQUID, 2)], + ), + ], +) +def test_remove_fluid( + starting_fluids: list[AspiratedFluid], + remove_volume: float, + resulting_stack: list[AspiratedFluid], +) -> None: + """It should remove fluids.""" + stack = FluidStack(_fluid_stack=[f for f in starting_fluids]) + stack.remove_fluid(remove_volume) + assert stack._fluid_stack == resulting_stack + + +@pytest.mark.parametrize( + "starting_fluids,filter,result", + [ + ([], None, 0), + ([], FluidKind.LIQUID, 0), + ([], FluidKind.AIR, 0), + ([AspiratedFluid(FluidKind.LIQUID, 10)], None, 10), + ([AspiratedFluid(FluidKind.LIQUID, 10)], FluidKind.LIQUID, 10), + ([AspiratedFluid(FluidKind.LIQUID, 10)], FluidKind.AIR, 0), + ( + [AspiratedFluid(FluidKind.LIQUID, 10), AspiratedFluid(FluidKind.AIR, 10)], + None, + 20, + ), + ( + [AspiratedFluid(FluidKind.LIQUID, 10), AspiratedFluid(FluidKind.AIR, 10)], + FluidKind.LIQUID, + 10, + ), + ( + [AspiratedFluid(FluidKind.LIQUID, 10), AspiratedFluid(FluidKind.AIR, 10)], + FluidKind.AIR, + 10, + ), + ], +) +def test_aspirated_volume( + starting_fluids: list[AspiratedFluid], filter: FluidKind | None, result: float +) -> None: + """It should represent aspirated volume with filtering.""" + stack = FluidStack(_fluid_stack=starting_fluids) + assert stack.aspirated_volume(kind=filter) == result + + +@pytest.mark.parametrize( + "starting_fluids,dispense_volume,result", + [ + ([], 0, 0), + ([], 1, 0), + ([AspiratedFluid(FluidKind.AIR, 10)], 10, 0), + ([AspiratedFluid(FluidKind.AIR, 10)], 0, 0), + ([AspiratedFluid(FluidKind.LIQUID, 10)], 10, 10), + ([AspiratedFluid(FluidKind.LIQUID, 10)], 0, 0), + ( + [ + AspiratedFluid(FluidKind.AIR, 10), + AspiratedFluid(FluidKind.LIQUID, 10), + ], + 10, + 10, + ), + ( + [ + AspiratedFluid(FluidKind.AIR, 10), + AspiratedFluid(FluidKind.LIQUID, 10), + ], + 20, + 10, + ), + ( + [ + AspiratedFluid(FluidKind.AIR, 10), + AspiratedFluid(FluidKind.LIQUID, 10), + ], + 30, + 10, + ), + ( + [ + AspiratedFluid(FluidKind.AIR, 10), + AspiratedFluid(FluidKind.LIQUID, 10), + ], + 5, + 5, + ), + ( + [ + AspiratedFluid(FluidKind.LIQUID, 10), + AspiratedFluid(FluidKind.AIR, 10), + ], + 5, + 0, + ), + ( + [ + AspiratedFluid(FluidKind.LIQUID, 10), + AspiratedFluid(FluidKind.AIR, 10), + ], + 10, + 0, + ), + ( + [ + AspiratedFluid(FluidKind.LIQUID, 10), + AspiratedFluid(FluidKind.AIR, 10), + ], + 11, + 1, + ), + ( + [ + AspiratedFluid(FluidKind.LIQUID, 10), + AspiratedFluid(FluidKind.AIR, 10), + ], + 20, + 10, + ), + ( + [ + AspiratedFluid(FluidKind.LIQUID, 10), + AspiratedFluid(FluidKind.AIR, 10), + ], + 30, + 10, + ), + ], +) +def test_liquid_part_of_dispense_volume( + starting_fluids: list[AspiratedFluid], + dispense_volume: float, + result: float, +) -> None: + """It should predict resulting liquid from a dispense.""" + stack = FluidStack(_fluid_stack=starting_fluids) + assert stack.liquid_part_of_dispense_volume(dispense_volume) == result 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 c8eab566abe..31b1a7f3a2c 100644 --- a/api/tests/opentrons/protocol_engine/state/test_pipette_store.py +++ b/api/tests/opentrons/protocol_engine/state/test_pipette_store.py @@ -14,6 +14,8 @@ FlowRates, CurrentWell, TipGeometry, + AspiratedFluid, + FluidKind, ) from opentrons.protocol_engine.actions import ( SetPipetteMovementSpeedAction, @@ -30,6 +32,7 @@ from opentrons.protocol_engine.resources.pipette_data_provider import ( LoadedStaticPipetteData, ) +from opentrons.protocol_engine.state.fluid_stack import FluidStack from .command_fixtures import ( create_load_pipette_command, @@ -62,7 +65,7 @@ def test_sets_initial_state(subject: PipetteStore) -> None: assert result == PipetteState( pipettes_by_id={}, - aspirated_volume_by_id={}, + pipette_contents_by_id={}, current_location=None, current_deck_point=CurrentDeckPoint(mount=None, deck_point=None), attached_tip_by_id={}, @@ -223,12 +226,15 @@ def test_handles_load_pipette( config=config, serial_number="pipette-serial", ) + contents_update = update_types.PipetteUnknownFluidUpdate(pipette_id="pipette-id") subject.handle_action( SucceedCommandAction( command=dummy_command, state_update=update_types.StateUpdate( - loaded_pipette=load_pipette_update, pipette_config=config_update + loaded_pipette=load_pipette_update, + pipette_config=config_update, + pipette_aspirated_fluid=contents_update, ), ) ) @@ -240,7 +246,7 @@ def test_handles_load_pipette( pipetteName=PipetteNameType.P300_SINGLE, mount=MountType.LEFT, ) - assert result.aspirated_volume_by_id["pipette-id"] is None + assert result.pipette_contents_by_id["pipette-id"] is None assert result.movement_speed_by_id["pipette-id"] is None assert result.attached_tip_by_id["pipette-id"] is None @@ -270,7 +276,10 @@ def test_handles_pick_up_and_drop_tip(subject: PipetteStore) -> None: pipette_name=PipetteNameType.P300_SINGLE, mount=MountType.LEFT, liquid_presence_detection=None, - ) + ), + pipette_aspirated_fluid=update_types.PipetteUnknownFluidUpdate( + pipette_id="abc" + ), ), ) ) @@ -282,14 +291,17 @@ def test_handles_pick_up_and_drop_tip(subject: PipetteStore) -> None: pipette_tip_state=update_types.PipetteTipStateUpdate( pipette_id="abc", tip_geometry=TipGeometry(volume=42, length=101, diameter=8.0), - ) + ), + pipette_aspirated_fluid=update_types.PipetteEmptyFluidUpdate( + pipette_id="abc" + ), ), ) ) assert subject.state.attached_tip_by_id["abc"] == TipGeometry( volume=42, length=101, diameter=8.0 ) - assert subject.state.aspirated_volume_by_id["abc"] == 0 + assert subject.state.pipette_contents_by_id["abc"] == FluidStack() subject.handle_action( SucceedCommandAction( @@ -297,12 +309,15 @@ def test_handles_pick_up_and_drop_tip(subject: PipetteStore) -> None: state_update=update_types.StateUpdate( pipette_tip_state=update_types.PipetteTipStateUpdate( pipette_id="abc", tip_geometry=None - ) + ), + pipette_aspirated_fluid=update_types.PipetteUnknownFluidUpdate( + pipette_id="abc" + ), ), ) ) assert subject.state.attached_tip_by_id["abc"] is None - assert subject.state.aspirated_volume_by_id["abc"] is None + assert subject.state.pipette_contents_by_id["abc"] is None def test_handles_drop_tip_in_place(subject: PipetteStore) -> None: @@ -330,7 +345,10 @@ def test_handles_drop_tip_in_place(subject: PipetteStore) -> None: pipette_name=PipetteNameType.P300_SINGLE, mount=MountType.LEFT, liquid_presence_detection=None, - ) + ), + pipette_aspirated_fluid=update_types.PipetteUnknownFluidUpdate( + pipette_id="xyz" + ), ), ) ) @@ -341,14 +359,17 @@ def test_handles_drop_tip_in_place(subject: PipetteStore) -> None: pipette_tip_state=update_types.PipetteTipStateUpdate( pipette_id="xyz", tip_geometry=TipGeometry(volume=42, length=101, diameter=8.0), - ) + ), + pipette_aspirated_fluid=update_types.PipetteEmptyFluidUpdate( + pipette_id="xyz" + ), ), ) ) assert subject.state.attached_tip_by_id["xyz"] == TipGeometry( volume=42, length=101, diameter=8.0 ) - assert subject.state.aspirated_volume_by_id["xyz"] == 0 + assert subject.state.pipette_contents_by_id["xyz"] == FluidStack() subject.handle_action( SucceedCommandAction( @@ -356,12 +377,15 @@ def test_handles_drop_tip_in_place(subject: PipetteStore) -> None: state_update=update_types.StateUpdate( pipette_tip_state=update_types.PipetteTipStateUpdate( pipette_id="xyz", tip_geometry=None - ) + ), + pipette_aspirated_fluid=update_types.PipetteUnknownFluidUpdate( + pipette_id="xyz" + ), ), ) ) assert subject.state.attached_tip_by_id["xyz"] is None - assert subject.state.aspirated_volume_by_id["xyz"] is None + assert subject.state.pipette_contents_by_id["xyz"] is None def test_handles_unsafe_drop_tip_in_place(subject: PipetteStore) -> None: @@ -389,7 +413,10 @@ def test_handles_unsafe_drop_tip_in_place(subject: PipetteStore) -> None: pipette_name=PipetteNameType.P300_SINGLE, mount=MountType.LEFT, liquid_presence_detection=None, - ) + ), + pipette_aspirated_fluid=update_types.PipetteUnknownFluidUpdate( + pipette_id="xyz" + ), ), ) ) @@ -400,14 +427,17 @@ def test_handles_unsafe_drop_tip_in_place(subject: PipetteStore) -> None: pipette_tip_state=update_types.PipetteTipStateUpdate( pipette_id="xyz", tip_geometry=TipGeometry(volume=42, length=101, diameter=8.0), - ) + ), + pipette_aspirated_fluid=update_types.PipetteEmptyFluidUpdate( + pipette_id="xyz" + ), ), ) ) assert subject.state.attached_tip_by_id["xyz"] == TipGeometry( volume=42, length=101, diameter=8.0 ) - assert subject.state.aspirated_volume_by_id["xyz"] == 0 + assert subject.state.pipette_contents_by_id["xyz"] == FluidStack() subject.handle_action( SucceedCommandAction( @@ -415,25 +445,46 @@ def test_handles_unsafe_drop_tip_in_place(subject: PipetteStore) -> None: state_update=update_types.StateUpdate( pipette_tip_state=update_types.PipetteTipStateUpdate( pipette_id="xyz", tip_geometry=None - ) + ), + pipette_aspirated_fluid=update_types.PipetteUnknownFluidUpdate( + pipette_id="xyz" + ), ), ) ) assert subject.state.attached_tip_by_id["xyz"] is None - assert subject.state.aspirated_volume_by_id["xyz"] is None + assert subject.state.pipette_contents_by_id["xyz"] is None @pytest.mark.parametrize( - "aspirate_command", + "aspirate_command,aspirate_update", [ - create_aspirate_command(pipette_id="pipette-id", volume=42, flow_rate=1.23), - create_aspirate_in_place_command( - pipette_id="pipette-id", volume=42, flow_rate=1.23 + ( + create_aspirate_command(pipette_id="pipette-id", volume=42, flow_rate=1.23), + update_types.StateUpdate( + pipette_aspirated_fluid=update_types.PipetteAspiratedFluidUpdate( + pipette_id="pipette-id", + fluid=AspiratedFluid(kind=FluidKind.LIQUID, volume=42), + ) + ), + ), + ( + create_aspirate_in_place_command( + pipette_id="pipette-id", volume=42, flow_rate=1.23 + ), + update_types.StateUpdate( + pipette_aspirated_fluid=update_types.PipetteAspiratedFluidUpdate( + pipette_id="pipette-id", + fluid=AspiratedFluid(kind=FluidKind.LIQUID, volume=42), + ) + ), ), ], ) def test_aspirate_adds_volume( - subject: PipetteStore, aspirate_command: cmd.Command + subject: PipetteStore, + aspirate_command: cmd.Command, + aspirate_update: update_types.StateUpdate, ) -> None: """It should add volume to pipette after an aspirate.""" load_command = create_load_pipette_command( @@ -441,6 +492,9 @@ def test_aspirate_adds_volume( pipette_name=PipetteNameType.P300_SINGLE, mount=MountType.LEFT, ) + pick_up_tip_command = create_pick_up_tip_command( + pipette_id="pipette-id", tip_volume=42, tip_length=101, tip_diameter=8.0 + ) subject.handle_action( SucceedCommandAction( @@ -451,32 +505,76 @@ def test_aspirate_adds_volume( pipette_name=PipetteNameType.P300_SINGLE, mount=MountType.LEFT, liquid_presence_detection=None, - ) + ), + pipette_aspirated_fluid=update_types.PipetteUnknownFluidUpdate( + pipette_id="pipette-id" + ), ), ) ) - subject.handle_action(SucceedCommandAction(command=aspirate_command)) + subject.handle_action( + SucceedCommandAction( + 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), + ), + pipette_aspirated_fluid=update_types.PipetteEmptyFluidUpdate( + pipette_id="pipette-id" + ), + ), + ) + ) + subject.handle_action( + SucceedCommandAction( + command=aspirate_command, + state_update=aspirate_update, + ) + ) - assert subject.state.aspirated_volume_by_id["pipette-id"] == 42 + assert subject.state.pipette_contents_by_id["pipette-id"] == FluidStack( + _fluid_stack=[AspiratedFluid(kind=FluidKind.LIQUID, volume=42)] + ) - subject.handle_action(SucceedCommandAction(command=aspirate_command)) + subject.handle_action( + SucceedCommandAction(command=aspirate_command, state_update=aspirate_update) + ) - assert subject.state.aspirated_volume_by_id["pipette-id"] == 84 + assert subject.state.pipette_contents_by_id["pipette-id"] == FluidStack( + _fluid_stack=[AspiratedFluid(kind=FluidKind.LIQUID, volume=84)] + ) @pytest.mark.parametrize( - "dispense_command", + "dispense_command,dispense_update", [ - create_dispense_command(pipette_id="pipette-id", volume=21, flow_rate=1.23), - create_dispense_in_place_command( - pipette_id="pipette-id", - volume=21, - flow_rate=1.23, + ( + create_dispense_command(pipette_id="pipette-id", volume=21, flow_rate=1.23), + update_types.StateUpdate( + pipette_aspirated_fluid=update_types.PipetteEjectedFluidUpdate( + pipette_id="pipette-id", volume=21 + ) + ), + ), + ( + create_dispense_in_place_command( + pipette_id="pipette-id", + volume=21, + flow_rate=1.23, + ), + update_types.StateUpdate( + pipette_aspirated_fluid=update_types.PipetteEjectedFluidUpdate( + pipette_id="pipette-id", volume=21 + ) + ), ), ], ) def test_dispense_subtracts_volume( - subject: PipetteStore, dispense_command: cmd.Command + subject: PipetteStore, + dispense_command: cmd.Command, + dispense_update: update_types.StateUpdate, ) -> None: """It should subtract volume from pipette after a dispense.""" load_command = create_load_pipette_command( @@ -484,6 +582,10 @@ def test_dispense_subtracts_volume( pipette_name=PipetteNameType.P300_SINGLE, mount=MountType.LEFT, ) + pick_up_tip_command = create_pick_up_tip_command( + pipette_id="pipette-id", tip_volume=47, tip_length=101, tip_diameter=8.0 + ) + aspirate_command = create_aspirate_command( pipette_id="pipette-id", volume=42, @@ -499,18 +601,51 @@ def test_dispense_subtracts_volume( pipette_name=PipetteNameType.P300_SINGLE, mount=MountType.LEFT, liquid_presence_detection=None, + ), + pipette_aspirated_fluid=update_types.PipetteUnknownFluidUpdate( + pipette_id="pipette-id" + ), + ), + ) + ) + subject.handle_action( + SucceedCommandAction( + command=pick_up_tip_command, + state_update=update_types.StateUpdate( + pipette_tip_state=update_types.PipetteTipStateUpdate( + pipette_id="pipette-id", + tip_geometry=TipGeometry(volume=47, length=101, diameter=8.0), + ), + pipette_aspirated_fluid=update_types.PipetteEmptyFluidUpdate( + pipette_id="pipette-id" + ), + ), + ) + ) + subject.handle_action( + SucceedCommandAction( + command=aspirate_command, + state_update=update_types.StateUpdate( + pipette_aspirated_fluid=update_types.PipetteAspiratedFluidUpdate( + pipette_id="pipette-id", + fluid=AspiratedFluid(kind=FluidKind.LIQUID, volume=42), ) ), ) ) - subject.handle_action(SucceedCommandAction(command=aspirate_command)) - subject.handle_action(SucceedCommandAction(command=dispense_command)) + subject.handle_action( + SucceedCommandAction(command=dispense_command, state_update=dispense_update) + ) - assert subject.state.aspirated_volume_by_id["pipette-id"] == 21 + assert subject.state.pipette_contents_by_id["pipette-id"] == FluidStack( + _fluid_stack=[AspiratedFluid(kind=FluidKind.LIQUID, volume=21)] + ) - subject.handle_action(SucceedCommandAction(command=dispense_command)) + subject.handle_action( + SucceedCommandAction(command=dispense_command, state_update=dispense_update) + ) - assert subject.state.aspirated_volume_by_id["pipette-id"] == 0 + assert subject.state.pipette_contents_by_id["pipette-id"] == FluidStack() @pytest.mark.parametrize( @@ -530,6 +665,10 @@ def test_blow_out_clears_volume( pipette_name=PipetteNameType.P300_SINGLE, mount=MountType.LEFT, ) + pick_up_tip_command = create_pick_up_tip_command( + pipette_id="pipette-id", tip_volume=47, tip_length=101, tip_diameter=8.0 + ) + aspirate_command = create_aspirate_command( pipette_id="pipette-id", volume=42, @@ -549,10 +688,43 @@ def test_blow_out_clears_volume( ), ) ) - subject.handle_action(SucceedCommandAction(command=aspirate_command)) - subject.handle_action(SucceedCommandAction(command=blow_out_command)) + subject.handle_action( + SucceedCommandAction( + command=pick_up_tip_command, + state_update=update_types.StateUpdate( + pipette_tip_state=update_types.PipetteTipStateUpdate( + pipette_id="pipette-id", + tip_geometry=TipGeometry(volume=47, length=101, diameter=8.0), + ), + pipette_aspirated_fluid=update_types.PipetteEmptyFluidUpdate( + pipette_id="pipette-id" + ), + ), + ) + ) + subject.handle_action( + SucceedCommandAction( + command=aspirate_command, + state_update=update_types.StateUpdate( + pipette_aspirated_fluid=update_types.PipetteAspiratedFluidUpdate( + pipette_id="pipette-id", + fluid=AspiratedFluid(kind=FluidKind.LIQUID, volume=42), + ) + ), + ) + ) + subject.handle_action( + SucceedCommandAction( + command=blow_out_command, + state_update=update_types.StateUpdate( + pipette_aspirated_fluid=update_types.PipetteUnknownFluidUpdate( + pipette_id="pipette-id" + ) + ), + ) + ) - assert subject.state.aspirated_volume_by_id["pipette-id"] is None + assert subject.state.pipette_contents_by_id["pipette-id"] is None def test_set_movement_speed(subject: PipetteStore) -> None: @@ -645,14 +817,30 @@ def test_add_pipette_config( @pytest.mark.parametrize( - "previous", + "previous_cmd,previous_state", [ - create_blow_out_command(pipette_id="pipette-id", flow_rate=1.0), - create_dispense_command(pipette_id="pipette-id", volume=10, flow_rate=1.0), + ( + create_blow_out_command(pipette_id="pipette-id", flow_rate=1.0), + update_types.StateUpdate( + pipette_aspirated_fluid=update_types.PipetteUnknownFluidUpdate( + pipette_id="pipette-id" + ) + ), + ), + ( + create_dispense_command(pipette_id="pipette-id", volume=10, flow_rate=1.0), + update_types.StateUpdate( + pipette_aspirated_fluid=update_types.PipetteEjectedFluidUpdate( + pipette_id="pipette-id", volume=10 + ) + ), + ), ], ) def test_prepare_to_aspirate_marks_pipette_ready( - subject: PipetteStore, previous: cmd.Command + subject: PipetteStore, + previous_cmd: cmd.Command, + previous_state: update_types.StateUpdate, ) -> None: """It should mark a pipette as ready to aspirate.""" load_pipette_command = create_load_pipette_command( @@ -672,7 +860,10 @@ def test_prepare_to_aspirate_marks_pipette_ready( pipette_name=PipetteNameType.P50_MULTI_FLEX, mount=MountType.LEFT, liquid_presence_detection=None, - ) + ), + pipette_aspirated_fluid=update_types.PipetteUnknownFluidUpdate( + pipette_id="pipette-id" + ), ), ) ) @@ -683,19 +874,29 @@ def test_prepare_to_aspirate_marks_pipette_ready( pipette_tip_state=update_types.PipetteTipStateUpdate( pipette_id="pipette-id", tip_geometry=TipGeometry(volume=42, length=101, diameter=8.0), - ) + ), + pipette_aspirated_fluid=update_types.PipetteEmptyFluidUpdate( + pipette_id="xyz" + ), ), ) ) subject.handle_action( - SucceedCommandAction( - command=previous, - ) + SucceedCommandAction(command=previous_cmd, state_update=previous_state) ) prepare_to_aspirate_command = create_prepare_to_aspirate_command( pipette_id="pipette-id" ) - subject.handle_action(SucceedCommandAction(command=prepare_to_aspirate_command)) - assert subject.state.aspirated_volume_by_id["pipette-id"] == 0.0 + subject.handle_action( + SucceedCommandAction( + command=prepare_to_aspirate_command, + state_update=update_types.StateUpdate( + pipette_aspirated_fluid=update_types.PipetteEmptyFluidUpdate( + pipette_id="pipette-id" + ) + ), + ) + ) + assert subject.state.pipette_contents_by_id["pipette-id"] == FluidStack() 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 3b4d04bd967..60bb528ba85 100644 --- a/api/tests/opentrons/protocol_engine/state/test_pipette_view.py +++ b/api/tests/opentrons/protocol_engine/state/test_pipette_view.py @@ -1,8 +1,10 @@ """Tests for pipette state accessors in the protocol_engine state store.""" from collections import OrderedDict +from typing import cast, Dict, List, Optional, Tuple, NamedTuple import pytest -from typing import cast, Dict, List, Optional, Tuple, NamedTuple +from decoy import Decoy + from opentrons_shared_data.pipette.types import PipetteNameType from opentrons_shared_data.pipette import pipette_definition @@ -30,6 +32,7 @@ BoundingNozzlesOffsets, PipetteBoundingBoxOffsets, ) +from opentrons.protocol_engine.state import fluid_stack from opentrons.hardware_control.nozzle_manager import NozzleMap, NozzleConfigurationType from opentrons.protocol_engine.errors import TipNotAttachedError, PipetteNotLoadedError @@ -56,7 +59,6 @@ def get_pipette_view( pipettes_by_id: Optional[Dict[str, LoadedPipette]] = None, - aspirated_volume_by_id: Optional[Dict[str, Optional[float]]] = None, current_well: Optional[CurrentPipetteLocation] = None, current_deck_point: CurrentDeckPoint = CurrentDeckPoint( mount=None, deck_point=None @@ -67,11 +69,14 @@ def get_pipette_view( flow_rates_by_id: Optional[Dict[str, FlowRates]] = None, nozzle_layout_by_id: Optional[Dict[str, NozzleMap]] = None, liquid_presence_detection_by_id: Optional[Dict[str, bool]] = None, + pipette_contents_by_id: Optional[ + Dict[str, Optional[fluid_stack.FluidStack]] + ] = None, ) -> PipetteView: """Get a pipette view test subject with the specified state.""" state = PipetteState( pipettes_by_id=pipettes_by_id or {}, - aspirated_volume_by_id=aspirated_volume_by_id or {}, + pipette_contents_by_id=pipette_contents_by_id or {}, current_location=current_well, current_deck_point=current_deck_point, attached_tip_by_id=attached_tip_by_id or {}, @@ -234,11 +239,12 @@ def test_get_hardware_pipette_raises_with_name_mismatch() -> None: ) -def test_get_aspirated_volume() -> None: +def test_get_aspirated_volume(decoy: Decoy) -> None: """It should get the aspirate volume for a pipette.""" + stack = decoy.mock(cls=fluid_stack.FluidStack) subject = get_pipette_view( - aspirated_volume_by_id={ - "pipette-id": 42, + pipette_contents_by_id={ + "pipette-id": stack, "pipette-id-none": None, "pipette-id-no-tip": None, }, @@ -248,6 +254,7 @@ def test_get_aspirated_volume() -> None: "pipette-id-no-tip": None, }, ) + decoy.when(stack.aspirated_volume()).then_return(42) assert subject.get_aspirated_volume("pipette-id") == 42 assert subject.get_aspirated_volume("pipette-id-none") is None @@ -326,9 +333,11 @@ def test_get_pipette_working_volume_raises_if_tip_volume_is_none( def test_get_pipette_available_volume( - supported_tip_fixture: pipette_definition.SupportedTipsDefinition, + supported_tip_fixture: pipette_definition.SupportedTipsDefinition, decoy: Decoy ) -> None: """It should get the available volume for a pipette.""" + stack = decoy.mock(cls=fluid_stack.FluidStack) + decoy.when(stack.aspirated_volume()).then_return(58) subject = get_pipette_view( attached_tip_by_id={ "pipette-id": TipGeometry( @@ -337,7 +346,7 @@ def test_get_pipette_available_volume( volume=100, ), }, - aspirated_volume_by_id={"pipette-id": 58}, + pipette_contents_by_id={"pipette-id": stack}, static_config_by_id={ "pipette-id": StaticPipetteConfig( min_volume=1, diff --git a/app/src/assets/localization/en/protocol_command_text.json b/app/src/assets/localization/en/protocol_command_text.json index 6dbee9af16f..c2ee88bcd5a 100644 --- a/app/src/assets/localization/en/protocol_command_text.json +++ b/app/src/assets/localization/en/protocol_command_text.json @@ -5,6 +5,7 @@ "absorbance_reader_read": "Reading plate in Absorbance Reader", "adapter_in_mod_in_slot": "{{adapter}} on {{module}} in {{slot}}", "adapter_in_slot": "{{adapter}} in {{slot}}", + "air_gap_in_place": "Air gapping {{volume}} µL", "aspirate": "Aspirating {{volume}} µL from well {{well_name}} of {{labware}} in {{labware_location}} at {{flow_rate}} µL/sec", "aspirate_in_place": "Aspirating {{volume}} µL in place at {{flow_rate}} µL/sec ", "blowout": "Blowing out at well {{well_name}} of {{labware}} in {{labware_location}} at {{flow_rate}} µL/sec", diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/index.ts b/app/src/local-resources/commands/hooks/useCommandTextString/index.ts index 0eb04ee588e..3b77c607052 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/index.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/index.ts @@ -90,6 +90,7 @@ export function useCommandTextString( case 'dropTip': case 'dropTipInPlace': case 'pickUpTip': + case 'airGapInPlace': return { kind: 'generic', commandText: utils.getPipettingCommandText(fullParams), diff --git a/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getPipettingCommandText.ts b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getPipettingCommandText.ts index 6ef1369691e..2a0d87762b2 100644 --- a/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getPipettingCommandText.ts +++ b/app/src/local-resources/commands/hooks/useCommandTextString/utils/commandText/getPipettingCommandText.ts @@ -209,6 +209,10 @@ export const getPipettingCommandText = ({ const { flowRate, volume } = command.params return t('aspirate_in_place', { volume, flow_rate: flowRate }) } + case 'airGapInPlace': { + const { volume } = command.params + return t('air_gap_in_place', { volume }) + } default: { console.warn( 'PipettingCommandText encountered a command with an unrecognized commandType: ', diff --git a/shared-data/command/schemas/10.json b/shared-data/command/schemas/10.json index 93bc2387d63..b87d0dcf0fd 100644 --- a/shared-data/command/schemas/10.json +++ b/shared-data/command/schemas/10.json @@ -4,6 +4,7 @@ "discriminator": { "propertyName": "commandType", "mapping": { + "airGapInPlace": "#/definitions/AirGapInPlaceCreate", "aspirate": "#/definitions/AspirateCreate", "aspirateInPlace": "#/definitions/AspirateInPlaceCreate", "comment": "#/definitions/CommentCreate", @@ -81,6 +82,9 @@ } }, "oneOf": [ + { + "$ref": "#/definitions/AirGapInPlaceCreate" + }, { "$ref": "#/definitions/AspirateCreate" }, @@ -302,6 +306,67 @@ } ], "definitions": { + "AirGapInPlaceParams": { + "title": "AirGapInPlaceParams", + "description": "Payload required to air gap in place.", + "type": "object", + "properties": { + "flowRate": { + "title": "Flowrate", + "description": "Speed in \u00b5L/s configured for the pipette", + "exclusiveMinimum": 0, + "type": "number" + }, + "volume": { + "title": "Volume", + "description": "The amount of liquid to aspirate, in \u00b5L. Must not be greater than the remaining available amount, which depends on the pipette (see `loadPipette`), its configuration (see `configureForVolume`), the tip (see `pickUpTip`), and the amount you've aspirated so far. There is some tolerance for floating point rounding errors.", + "minimum": 0, + "type": "number" + }, + "pipetteId": { + "title": "Pipetteid", + "description": "Identifier of pipette to use for liquid handling.", + "type": "string" + } + }, + "required": ["flowRate", "volume", "pipetteId"] + }, + "CommandIntent": { + "title": "CommandIntent", + "description": "Run intent for a given command.\n\nProps:\n PROTOCOL: the command is part of the protocol run itself.\n SETUP: the command is part of the setup phase of a run.", + "enum": ["protocol", "setup", "fixit"], + "type": "string" + }, + "AirGapInPlaceCreate": { + "title": "AirGapInPlaceCreate", + "description": "AirGapInPlace command request model.", + "type": "object", + "properties": { + "commandType": { + "title": "Commandtype", + "default": "airGapInPlace", + "enum": ["airGapInPlace"], + "type": "string" + }, + "params": { + "$ref": "#/definitions/AirGapInPlaceParams" + }, + "intent": { + "description": "The reason the command was added. If not specified or `protocol`, the command will be treated as part of the protocol run itself, and added to the end of the existing command queue.\n\nIf `setup`, the command will be treated as part of run setup. A setup command may only be enqueued if the run has not started.\n\nUse setup commands for activities like pre-run calibration checks and module setup, like pre-heating.", + "allOf": [ + { + "$ref": "#/definitions/CommandIntent" + } + ] + }, + "key": { + "title": "Key", + "description": "A key value, unique in this run, that can be used to track the same logical command across multiple runs of the same protocol. If a value is not provided, one will be generated.", + "type": "string" + } + }, + "required": ["params"] + }, "WellOrigin": { "title": "WellOrigin", "description": "Origin of WellLocation offset.\n\nProps:\n TOP: the top-center of the well\n BOTTOM: the bottom-center of the well\n CENTER: the middle-center of the well\n MENISCUS: the meniscus-center of the well", @@ -406,12 +471,6 @@ }, "required": ["labwareId", "wellName", "flowRate", "volume", "pipetteId"] }, - "CommandIntent": { - "title": "CommandIntent", - "description": "Run intent for a given command.\n\nProps:\n PROTOCOL: the command is part of the protocol run itself.\n SETUP: the command is part of the setup phase of a run.", - "enum": ["protocol", "setup", "fixit"], - "type": "string" - }, "AspirateCreate": { "title": "AspirateCreate", "description": "Create aspirate command request model.", diff --git a/shared-data/command/types/pipetting.ts b/shared-data/command/types/pipetting.ts index 1ce5ad601cb..d609af1854b 100644 --- a/shared-data/command/types/pipetting.ts +++ b/shared-data/command/types/pipetting.ts @@ -20,6 +20,7 @@ export type PipettingRunTimeCommand = | VerifyTipPresenceRunTimeCommand | LiquidProbeRunTimeCommand | TryLiquidProbeRunTimeCommand + | AirGapInPlaceRunTimeCommand export type PipettingCreateCommand = | AspirateCreateCommand @@ -39,6 +40,7 @@ export type PipettingCreateCommand = | VerifyTipPresenceCreateCommand | LiquidProbeCreateCommand | TryLiquidProbeCreateCommand + | AirGapInPlaceCreateCommand export interface ConfigureForVolumeCreateCommand extends CommonCommandCreateInfo { @@ -55,6 +57,22 @@ export interface ConfigureForVolumeRunTimeCommand ConfigureForVolumeCreateCommand { result?: BasicLiquidHandlingResult } + +export type AirGapInPlaceParams = FlowRateParams & + PipetteIdentityParams & + VolumeParams + +export interface AirGapInPlaceCreateCommand extends CommonCommandCreateInfo { + commandType: 'airGapInPlace' + params: AirGapInPlaceParams +} + +export interface AirGapInPlaceRunTimeCommand + extends CommonCommandRunTimeInfo, + AirGapInPlaceCreateCommand { + result?: BasicLiquidHandlingResult +} + export interface AspirateCreateCommand extends CommonCommandCreateInfo { commandType: 'aspirate' params: AspDispAirgapParams From 2a1470f460cf107392ec7626d19dd93ce7ca8302 Mon Sep 17 00:00:00 2001 From: syao1226 <146495172+syao1226@users.noreply.github.com> Date: Tue, 5 Nov 2024 10:22:23 -0500 Subject: [PATCH 57/81] fix(protocol-designer): fixes thermocycler content type (#16675) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix RQA-3430 # Overview I noticed that the `RadioButton` component’s `onChange` prop was preventing `propsForFields.thermocyclerFormType` from updating from 'null' to 'thermocyclerState' when `contentType` was initially set to 'thermocyclerState' already. To address this, I updated the default `thermocyclerFormType` to 'thermocyclerState' and make step 1 as the default page when edit instead of step 2. ## Test Plan and Hands on Testing ## Changelog ## Review requests ## Risk assessment --------- Co-authored-by: shiyaochen --- .../Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx | 8 +------- .../StepForm/StepTools/ThermocyclerTools/index.tsx | 3 +-- .../src/step-forms/test/createPresavedStepForm.test.ts | 2 +- .../src/steplist/formLevel/getDefaultsForStepType.ts | 2 +- .../formLevel/test/getDefaultsForStepType.test.ts | 2 +- 5 files changed, 5 insertions(+), 12 deletions(-) diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx index a14be039d93..fd76bb10ca0 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx @@ -100,13 +100,7 @@ export function StepFormToolbox(props: StepFormToolboxProps): JSX.Element { getFormLevelErrorsForUnsavedForm ) const timeline = useSelector(getRobotStateTimeline) - const [toolboxStep, setToolboxStep] = useState( - // progress to step 2 if thermocycler form is populated - formData.thermocyclerFormType === 'thermocyclerProfile' || - formData.thermocyclerFormType === 'thermocyclerState' - ? 1 - : 0 - ) + const [toolboxStep, setToolboxStep] = useState(0) const [ showFormErrorsAndWarnings, setShowFormErrorsAndWarnings, diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/ThermocyclerTools/index.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/ThermocyclerTools/index.tsx index a35e977aa46..b34f937dac2 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/ThermocyclerTools/index.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/ThermocyclerTools/index.tsx @@ -30,8 +30,7 @@ export function ThermocyclerTools(props: StepFormProps): JSX.Element { const { t } = useTranslation('form') const [contentType, setContentType] = useState( - (formData.thermocyclerFormType as ThermocyclerContentType) ?? - 'thermocyclerState' + formData.thermocyclerFormType as ThermocyclerContentType ) if (toolboxStep === 0) { diff --git a/protocol-designer/src/step-forms/test/createPresavedStepForm.test.ts b/protocol-designer/src/step-forms/test/createPresavedStepForm.test.ts index 728a9a6fbcc..9a78b49d0ed 100644 --- a/protocol-designer/src/step-forms/test/createPresavedStepForm.test.ts +++ b/protocol-designer/src/step-forms/test/createPresavedStepForm.test.ts @@ -392,7 +392,7 @@ describe('createPresavedStepForm', () => { stepDetails: '', stepName: 'thermocycler', stepType: 'thermocycler', - thermocyclerFormType: null, + thermocyclerFormType: 'thermocyclerState', }) }) }) diff --git a/protocol-designer/src/steplist/formLevel/getDefaultsForStepType.ts b/protocol-designer/src/steplist/formLevel/getDefaultsForStepType.ts index 6d56e7dfe1c..3fa3f71be12 100644 --- a/protocol-designer/src/steplist/formLevel/getDefaultsForStepType.ts +++ b/protocol-designer/src/steplist/formLevel/getDefaultsForStepType.ts @@ -173,7 +173,7 @@ export function getDefaultsForStepType( profileItemsById: {}, profileTargetLidTemp: null, profileVolume: null, - thermocyclerFormType: null, + thermocyclerFormType: 'thermocyclerState', } default: diff --git a/protocol-designer/src/steplist/formLevel/test/getDefaultsForStepType.test.ts b/protocol-designer/src/steplist/formLevel/test/getDefaultsForStepType.test.ts index 34e8580d850..a7d87f09c0d 100644 --- a/protocol-designer/src/steplist/formLevel/test/getDefaultsForStepType.test.ts +++ b/protocol-designer/src/steplist/formLevel/test/getDefaultsForStepType.test.ts @@ -166,7 +166,7 @@ describe('getDefaultsForStepType', () => { describe('thermocycler step', () => { it('should get the correct defaults', () => { expect(getDefaultsForStepType('thermocycler')).toEqual({ - thermocyclerFormType: null, + thermocyclerFormType: 'thermocyclerState', moduleId: null, blockIsActive: false, blockTargetTemp: null, From ddbf5dd3190e58a3ad1d805ca1f87ca805e4f902 Mon Sep 17 00:00:00 2001 From: Jethary Alcid <66035149+jerader@users.noreply.github.com> Date: Tue, 5 Nov 2024 11:14:24 -0500 Subject: [PATCH 58/81] fix(protocol-designer): add slot clips to deck map views (#16688) closes RQA-3404 RQA-3348 --- .../src/pages/Designer/DeckSetup/DeckSetupContainer.tsx | 4 ++++ .../src/pages/ProtocolOverview/DeckThumbnail.tsx | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupContainer.tsx b/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupContainer.tsx index b06cbfd535a..00511d96c4d 100644 --- a/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupContainer.tsx +++ b/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupContainer.tsx @@ -67,6 +67,7 @@ const OT2_STANDARD_DECK_VIEW_LAYER_BLOCK_LIST: string[] = [ 'fixedTrash', ] export const lightFill = COLORS.grey35 +const darkFill = COLORS.grey60 export function DeckSetupContainer(props: DeckSetupTabType): JSX.Element { const { tab } = props @@ -213,6 +214,7 @@ export function DeckSetupContainer(props: DeckSetupTabType): JSX.Element { key={addressableArea.id} cutoutId={cutoutId} deckDefinition={deckDef} + slotClipColor={darkFill} showExpansion={cutoutId === 'cutoutA1'} fixtureBaseColor={lightFill} /> @@ -228,6 +230,7 @@ export function DeckSetupContainer(props: DeckSetupTabType): JSX.Element { key={fixture.id} cutoutId={fixture.location as StagingAreaLocation} deckDefinition={deckDef} + slotClipColor={darkFill} fixtureBaseColor={lightFill} /> ) @@ -284,6 +287,7 @@ export function DeckSetupContainer(props: DeckSetupTabType): JSX.Element { fixture.location as typeof WASTE_CHUTE_CUTOUT } deckDefinition={deckDef} + slotClipColor={darkFill} fixtureBaseColor={lightFill} /> ) diff --git a/protocol-designer/src/pages/ProtocolOverview/DeckThumbnail.tsx b/protocol-designer/src/pages/ProtocolOverview/DeckThumbnail.tsx index 6420d45557a..250feb06df2 100644 --- a/protocol-designer/src/pages/ProtocolOverview/DeckThumbnail.tsx +++ b/protocol-designer/src/pages/ProtocolOverview/DeckThumbnail.tsx @@ -48,6 +48,7 @@ const OT2_STANDARD_DECK_VIEW_LAYER_BLOCK_LIST: string[] = [ ] const lightFill = COLORS.grey35 +const darkFill = COLORS.grey60 interface DeckThumbnailProps { hoverSlot: DeckSlotId | null @@ -140,6 +141,7 @@ export function DeckThumbnail(props: DeckThumbnailProps): JSX.Element { deckDefinition={deckDef} showExpansion={cutoutId === 'cutoutA1'} fixtureBaseColor={lightFill} + slotClipColor={darkFill} /> ) : null })} @@ -149,6 +151,7 @@ export function DeckThumbnail(props: DeckThumbnailProps): JSX.Element { cutoutId={fixture.location as StagingAreaLocation} deckDefinition={deckDef} fixtureBaseColor={lightFill} + slotClipColor={darkFill} /> ))} {trash != null @@ -185,6 +188,7 @@ export function DeckThumbnail(props: DeckThumbnailProps): JSX.Element { cutoutId={fixture.location as typeof WASTE_CHUTE_CUTOUT} deckDefinition={deckDef} fixtureBaseColor={lightFill} + slotClipColor={darkFill} /> ))} From 49e144f75d19e96fc5fc892d80c7bfd0c8b9554d Mon Sep 17 00:00:00 2001 From: koji Date: Tue, 5 Nov 2024 12:38:21 -0500 Subject: [PATCH 59/81] fix(protocol-designer): Fix flex deck view position in overview (#16680) * fix(protocol-designer): Fix flex deck view position in overview --- .../RobotCoordinateSpaceWithRef.tsx | 10 +++++----- .../pages/Designer/DeckSetup/DeckSetupContainer.tsx | 1 + 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/components/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpaceWithRef.tsx b/components/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpaceWithRef.tsx index 530ed004532..a777299fb1c 100644 --- a/components/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpaceWithRef.tsx +++ b/components/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpaceWithRef.tsx @@ -35,18 +35,18 @@ export function RobotCoordinateSpaceWithRef( {} ) + const PADDING = deckDef.otId === 'ot2_standard' ? 5 : 10 if (deckDef.otId === 'ot2_standard') { - const PADDING = 5 wholeDeckViewBox = `${viewBoxOriginX - PADDING} ${ viewBoxOriginY + PADDING * 5 } ${deckXDimension + PADDING * 2} ${deckYDimension - PADDING * 10}` } else { - const PADDING = 20 - wholeDeckViewBox = `${viewBoxOriginX - PADDING} ${ - viewBoxOriginY + PADDING - } ${deckXDimension + PADDING * 2} ${deckYDimension + PADDING * 2}` + wholeDeckViewBox = `${viewBoxOriginX + PADDING * 2} ${ + viewBoxOriginY - PADDING + } ${deckXDimension + PADDING * 4} ${deckYDimension + PADDING * 3}` } } + return ( Date: Tue, 5 Nov 2024 12:39:03 -0500 Subject: [PATCH 60/81] fix(protocol-designer): fix the display when dropdown menu option is only one (#16640) * fix(protocol-designer): fix the display when dropdown menu option is only one --- components/src/atoms/InputField/index.tsx | 13 +++- .../src/molecules/DropdownMenu/index.tsx | 6 +- .../src/assets/localization/en/form.json | 6 +- .../localization/en/protocol_steps.json | 5 ++ .../src/assets/localization/en/shared.json | 1 + .../__tests__/DropTipField.test.tsx | 2 +- .../molecules/DropdownStepFormField/index.tsx | 61 +++++++++++++------ .../StepForm/PipetteFields/LabwareField.tsx | 3 +- .../StepForm/PipetteFields/PipetteField.tsx | 2 +- .../StepForm/PipetteFields/TiprackField.tsx | 44 ++++++++++--- .../StepForm/PipetteFields/VolumeField.tsx | 2 +- .../PipetteFields/WellSelectionField.tsx | 13 +++- .../StepForm/StepFormToolbox.tsx | 8 +-- .../src/commandCreators/atomic/dispense.ts | 2 +- 14 files changed, 127 insertions(+), 41 deletions(-) diff --git a/components/src/atoms/InputField/index.tsx b/components/src/atoms/InputField/index.tsx index 57667e6cca9..c6d8eff68ea 100644 --- a/components/src/atoms/InputField/index.tsx +++ b/components/src/atoms/InputField/index.tsx @@ -2,7 +2,12 @@ import * as React from 'react' import styled, { css } from 'styled-components' import { Flex } from '../../primitives' -import { ALIGN_CENTER, DIRECTION_COLUMN, TEXT_ALIGN_RIGHT } from '../../styles' +import { + ALIGN_CENTER, + DIRECTION_COLUMN, + DIRECTION_ROW, + TEXT_ALIGN_RIGHT, +} from '../../styles' import { BORDERS, COLORS } from '../../helix-design-system' import { Icon } from '../../icons' import { RESPONSIVENESS, SPACING, TYPOGRAPHY } from '../../ui-style-constants' @@ -249,7 +254,11 @@ export const InputField = React.forwardRef( > {title != null ? ( - + {title !== null ? ( - + Pausing until{{module}}reaches", "untilTime": "Pausing for" }, + "pipette": "Pipette", "protocol_steps": "Protocol steps", "protocol_timeline": "Protocol timeline", "rename": "Rename", @@ -124,10 +127,12 @@ } }, "time": "Time", + "tiprack": "Tiprack", "tip_position": "{{prefix}} tip position", "touch_tip_position": "Touch tip position from top", "valid_range": "Valid range between {{min}} - {{max}} {{unit}}", "view_details": "View details", + "volume_per_well": "Volume per well", "well_name": "Well {{wellName}}", "well_order_title": "{{prefix}} well order", "well_position": "Well position (x,y,z): " diff --git a/protocol-designer/src/assets/localization/en/shared.json b/protocol-designer/src/assets/localization/en/shared.json index dafebf2b62d..64a5cdffdcc 100644 --- a/protocol-designer/src/assets/localization/en/shared.json +++ b/protocol-designer/src/assets/localization/en/shared.json @@ -104,6 +104,7 @@ "ot2": "Opentrons OT-2", "overwrite_labware": "Overwrite labware", "overwrite": "Click Overwrite to replace the existing labware with the new labware.", + "part": "Part {{current}} / {{max}}", "pipette": "Pipette", "pd_version": "Protocol designer version", "primary_order": "Primary order", diff --git a/protocol-designer/src/components/StepEditForm/fields/DropTipField/__tests__/DropTipField.test.tsx b/protocol-designer/src/components/StepEditForm/fields/DropTipField/__tests__/DropTipField.test.tsx index 8c5426bdaae..195096f0c07 100644 --- a/protocol-designer/src/components/StepEditForm/fields/DropTipField/__tests__/DropTipField.test.tsx +++ b/protocol-designer/src/components/StepEditForm/fields/DropTipField/__tests__/DropTipField.test.tsx @@ -55,7 +55,7 @@ describe('DropTipField', () => { }) it('renders the label and dropdown field with trash bin selected as default', () => { render(props) - screen.getByText('drop tip location') + screen.getByText('Tip drop location') screen.getByRole('combobox', { name: '' }) screen.getByRole('option', { name: 'Trash Bin' }) screen.getByRole('option', { name: 'mock tip' }) diff --git a/protocol-designer/src/molecules/DropdownStepFormField/index.tsx b/protocol-designer/src/molecules/DropdownStepFormField/index.tsx index 6cd81c742c4..869d272ddde 100644 --- a/protocol-designer/src/molecules/DropdownStepFormField/index.tsx +++ b/protocol-designer/src/molecules/DropdownStepFormField/index.tsx @@ -1,5 +1,13 @@ import { useTranslation } from 'react-i18next' -import { DropdownMenu, Flex, SPACING } from '@opentrons/components' +import { + COLORS, + DIRECTION_COLUMN, + DropdownMenu, + Flex, + ListItem, + SPACING, + StyledText, +} from '@opentrons/components' import type { Options } from '@opentrons/components' import type { FieldProps } from '../../pages/Designer/ProtocolSteps/StepForm/types' @@ -30,22 +38,41 @@ export function DropdownStepFormField( return ( - { - updateValue(value) - }} - /> + {options.length > 1 ? ( + { + updateValue(value) + }} + /> + ) : ( + + + {title} + + + + + {options[0].name} + + + + + )} ) } diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/LabwareField.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/LabwareField.tsx index f0c6df3544d..f4c18fd695e 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/LabwareField.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/LabwareField.tsx @@ -17,12 +17,13 @@ export function LabwareField(props: FieldProps): JSX.Element { ? [...options, ...disposalOptions] : [...options] + console.log('name', name) return ( ) } diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/PipetteField.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/PipetteField.tsx index 50eb6b59997..1f9053b0478 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/PipetteField.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/PipetteField.tsx @@ -13,7 +13,7 @@ export const PipetteField = (props: FieldProps): JSX.Element => { {...props} options={pipetteOptions} value={value ? String(value) : null} - title={t('select_pipette')} + title={t('pipette')} /> ) } diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/TiprackField.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/TiprackField.tsx index 9f9cca5157e..df9d5ad4fd0 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/TiprackField.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/TiprackField.tsx @@ -1,6 +1,14 @@ import { useEffect } from 'react' import { useTranslation } from 'react-i18next' import { useSelector } from 'react-redux' +import { + COLORS, + DIRECTION_COLUMN, + Flex, + ListItem, + SPACING, + StyledText, +} from '@opentrons/components' import { getPipetteEntities } from '../../../../../step-forms/selectors' import { getTiprackOptions } from '../../../../../ui/labware/selectors' import { DropdownStepFormField } from '../../../../../molecules' @@ -29,12 +37,34 @@ export function TiprackField(props: TiprackFieldProps): JSX.Element { }, [defaultTiprackUris, value, updateValue]) const hasMissingTiprack = defaultTiprackUris.length > tiprackOptions.length return ( - + <> + {tiprackOptions.length > 1 ? ( + + ) : ( + + + {t('tiprack')} + + + + + {tiprackOptions[0].name} + + + + + )} + ) } diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/VolumeField.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/VolumeField.tsx index 2059a81b389..5f0658ef949 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/VolumeField.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/VolumeField.tsx @@ -8,7 +8,7 @@ export function VolumeField(props: FieldProps): JSX.Element { return ( diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/WellSelectionField.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/WellSelectionField.tsx index 57125f7b8a1..f12f3e0dd02 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/WellSelectionField.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/WellSelectionField.tsx @@ -1,7 +1,9 @@ import { createPortal } from 'react-dom' import { useDispatch, useSelector } from 'react-redux' import { useTranslation } from 'react-i18next' + import { + ALIGN_CENTER, COLORS, DIRECTION_COLUMN, Flex, @@ -13,6 +15,7 @@ import { useHoverTooltip, } from '@opentrons/components' import { COLUMN } from '@opentrons/shared-data' + import { actions as stepsActions, getSelectedStepId, @@ -22,6 +25,7 @@ import { selectors as stepFormSelectors } from '../../../../../step-forms' import { SelectWellsModal } from '../../../../../organisms' import { getMainPagePortalEl } from '../../../../../components/portals/MainPageModalPortal' import { getNozzleType } from '../utils' + import type { FieldProps } from '../types' export type WellSelectionFieldProps = FieldProps & { @@ -94,8 +98,13 @@ export const WellSelectionField = ( const [targetProps, tooltipProps] = useHoverTooltip() return ( <> - - + + {i18n.format(label, 'capitalize')} diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx index fd76bb10ca0..cee9fdadb4f 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx @@ -10,11 +10,11 @@ import { Icon, POSITION_RELATIVE, PrimaryButton, - SPACING, SecondaryButton, + SPACING, StyledText, - TYPOGRAPHY, Toolbox, + TYPOGRAPHY, } from '@opentrons/components' import { stepIconsByType } from '../../../../form-types' import { FormAlerts } from '../../../../organisms' @@ -153,7 +153,7 @@ export function StepFormToolbox(props: StepFormToolboxProps): JSX.Element { 'capitalize' ), t, - }) as string + }) ) } else { setShowFormErrorsAndWarnings(true) @@ -175,7 +175,7 @@ export function StepFormToolbox(props: StepFormToolboxProps): JSX.Element { subHeader={ isMultiStepToolbox ? ( - {t('shared:step', { current: toolboxStep + 1, max: 2 })} + {t('shared:part', { current: toolboxStep + 1, max: 2 })} ) : null } diff --git a/step-generation/src/commandCreators/atomic/dispense.ts b/step-generation/src/commandCreators/atomic/dispense.ts index c06e0035f7b..c009ce34403 100644 --- a/step-generation/src/commandCreators/atomic/dispense.ts +++ b/step-generation/src/commandCreators/atomic/dispense.ts @@ -221,7 +221,7 @@ export const dispense: CommandCreator = ( }, flowRate, // pushOut will always be undefined in step-generation for now - // since there is no easy way to allow users to select a volume for it in PD + // since there is no easy way to allow users to for it in PD }, ...(isAirGap && { meta: { isAirGap } }), }, From 86f654748f5235b5a0c7a5c34956ad41b9e3c813 Mon Sep 17 00:00:00 2001 From: Jethary Alcid <66035149+jerader@users.noreply.github.com> Date: Tue, 5 Nov 2024 12:59:27 -0500 Subject: [PATCH 61/81] fix(protocol-designer): flow rate field to auto-populate default value (#16687) closes RQA-3508 --- .../ProtocolSteps/StepForm/PipetteFields/FlowRateField.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/FlowRateField.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/FlowRateField.tsx index e853a76ddaf..db28d285a0d 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/FlowRateField.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/FlowRateField.tsx @@ -59,7 +59,8 @@ export function FlowRateField(props: FlowRateFieldProps): JSX.Element { let errorMessage: string | null = null if ( (!isPristine && passThruProps.value !== undefined && flowRateNum === 0) || - outOfBounds + outOfBounds || + (isPristine && flowRateNum === 0) ) { errorMessage = i18n.format( t('step_edit_form.field.flow_rate.error_out_of_bounds', { @@ -71,10 +72,10 @@ export function FlowRateField(props: FlowRateFieldProps): JSX.Element { } useEffect(() => { - if (isPristine && errorMessage != null) { + if (isPristine && passThruProps.value == null) { passThruProps.updateValue(defaultFlowRate) } - }, []) + }, [isPristine, passThruProps]) return ( Date: Tue, 5 Nov 2024 14:50:16 -0500 Subject: [PATCH 62/81] feat(robot-server): separate can logs from other serial logs (#16686) --- api/src/opentrons/util/logging_config.py | 2 +- robot-server/robot_server/health/router.py | 1 + robot-server/robot_server/service/legacy/models/logs.py | 1 + robot-server/robot_server/service/legacy/routers/logs.py | 1 + robot-server/tests/integration/fixtures.py | 1 + 5 files changed, 5 insertions(+), 1 deletion(-) diff --git a/api/src/opentrons/util/logging_config.py b/api/src/opentrons/util/logging_config.py index 6520bb912f6..f9a59799d9d 100644 --- a/api/src/opentrons/util/logging_config.py +++ b/api/src/opentrons/util/logging_config.py @@ -36,7 +36,7 @@ def _host_config(level_value: int) -> Dict[str, Any]: "class": "logging.handlers.RotatingFileHandler", "formatter": "basic", "filename": serial_log_filename, - "maxBytes": 5000000, + "maxBytes": 1000000, "level": logging.DEBUG, "backupCount": 3, }, diff --git a/robot-server/robot_server/health/router.py b/robot-server/robot_server/health/router.py index 86a78255cd7..a4ca84bd2c1 100644 --- a/robot-server/robot_server/health/router.py +++ b/robot-server/robot_server/health/router.py @@ -30,6 +30,7 @@ ] FLEX_LOG_PATHS = [ "/logs/serial.log", + "/logs/can_bus.log", "/logs/api.log", "/logs/server.log", "/logs/update_server.log", diff --git a/robot-server/robot_server/service/legacy/models/logs.py b/robot-server/robot_server/service/legacy/models/logs.py index 5a501fdd2ff..36ce947e2e3 100644 --- a/robot-server/robot_server/service/legacy/models/logs.py +++ b/robot-server/robot_server/service/legacy/models/logs.py @@ -6,6 +6,7 @@ class LogIdentifier(str, Enum): api = "api.log" serial = "serial.log" + can = "can_bus.log" server = "server.log" api_server = "combined_api_server.log" update_server = "update_server.log" diff --git a/robot-server/robot_server/service/legacy/routers/logs.py b/robot-server/robot_server/service/legacy/routers/logs.py index 69b92d5263c..b3f57f0d281 100644 --- a/robot-server/robot_server/service/legacy/routers/logs.py +++ b/robot-server/robot_server/service/legacy/routers/logs.py @@ -14,6 +14,7 @@ LogIdentifier.api_server: "opentrons-robot-server", LogIdentifier.update_server: "opentrons-update-server", LogIdentifier.touchscreen: "opentrons-robot-app", + LogIdentifier.can: "opentrons-api-serial-can", } diff --git a/robot-server/tests/integration/fixtures.py b/robot-server/tests/integration/fixtures.py index 910eb9256dd..58362d59652 100644 --- a/robot-server/tests/integration/fixtures.py +++ b/robot-server/tests/integration/fixtures.py @@ -50,6 +50,7 @@ def check_ot3_health_response(response: Response) -> None: "board_revision": "UNKNOWN", "logs": [ "/logs/serial.log", + "/logs/can_bus.log", "/logs/api.log", "/logs/server.log", "/logs/update_server.log", From 597364654d628325d6aee143c29975ca89ba98eb Mon Sep 17 00:00:00 2001 From: Seth Foster Date: Tue, 5 Nov 2024 14:51:17 -0500 Subject: [PATCH 63/81] feat(api): add load-empty-liquid (#16676) We have a loadLiquid command and associated python protocol API method, which allow users to specify that a well contains a given amount of a given (predefined) liquid. This was all that we needed for a while because we didn't really do anything with that information except display the starting deck state based on it. Now that we track liquid, however, this isn't enough, because we also need a way for users to specify that a well is known to be empty. To that end, introduce a special EMPTY sentinel value for liquid ID and restrict loadLiquid commands that use it to setting a 0 volume. I think we probably should have a better API for setting multiple wells but that's not this PR. Closes EXEC-801 ## reviews - seem like a valid thing to do? Didn't make sense to have a whole different command ## testing - make sure empty liquids get loaded ## notes - [x] will rebase this PR to edge once the current target is merged --------- Co-authored-by: Ed Cormany --- .../protocol_api/core/engine/well.py | 21 ++++++++++- .../core/legacy/legacy_well_core.py | 4 +++ api/src/opentrons/protocol_api/core/well.py | 4 +++ api/src/opentrons/protocol_api/labware.py | 8 +++++ .../protocol_engine/commands/load_liquid.py | 14 ++++++-- .../protocol_engine/errors/__init__.py | 2 ++ .../protocol_engine/errors/exceptions.py | 13 +++++++ .../protocol_engine/protocol_engine.py | 7 ++-- .../protocol_engine/state/liquids.py | 18 ++++++++-- api/src/opentrons/protocol_engine/types.py | 4 +++ api/tests/opentrons/protocol_api/test_well.py | 9 +++++ .../commands/test_load_liquid.py | 35 +++++++++++++++++++ .../protocol_engine/state/test_liquid_view.py | 21 ++++++++++- .../protocol_engine/test_protocol_engine.py | 15 ++++---- shared-data/command/schemas/10.json | 14 ++++++-- 15 files changed, 167 insertions(+), 22 deletions(-) diff --git a/api/src/opentrons/protocol_api/core/engine/well.py b/api/src/opentrons/protocol_api/core/engine/well.py index 6743a8a39c5..dba1dc6c840 100644 --- a/api/src/opentrons/protocol_api/core/engine/well.py +++ b/api/src/opentrons/protocol_api/core/engine/well.py @@ -130,7 +130,10 @@ def load_liquid( liquid: Liquid, volume: float, ) -> None: - """Load liquid into a well.""" + """Load liquid into a well. + + If the well is known to be empty, use ``load_empty()`` instead of calling this with a 0.0 volume. + """ self._engine_client.execute_command( cmd.LoadLiquidParams( labwareId=self._labware_id, @@ -139,6 +142,22 @@ def load_liquid( ) ) + def load_empty( + self, + ) -> None: + """Inform the system that a well is known to be empty. + + This should be done early in the protocol, at the same time as a load_liquid command might + be used. + """ + self._engine_client.execute_command( + cmd.LoadLiquidParams( + labwareId=self._labware_id, + liquidId="EMPTY", + volumeByWell={self._name: 0.0}, + ) + ) + def from_center_cartesian(self, x: float, y: float, z: float) -> Point: """Gets point in deck coordinates based on percentage of the radius of each axis.""" well_size = self._engine_client.state.labware.get_well_size( diff --git a/api/src/opentrons/protocol_api/core/legacy/legacy_well_core.py b/api/src/opentrons/protocol_api/core/legacy/legacy_well_core.py index a88dd2eee80..891f0f1b681 100644 --- a/api/src/opentrons/protocol_api/core/legacy/legacy_well_core.py +++ b/api/src/opentrons/protocol_api/core/legacy/legacy_well_core.py @@ -114,6 +114,10 @@ def load_liquid( """Load liquid into a well.""" raise APIVersionError(api_element="Loading a liquid") + def load_empty(self) -> None: + """Mark a well as empty.""" + assert False, "load_empty only supported on engine core" + def from_center_cartesian(self, x: float, y: float, z: float) -> Point: """Gets point in deck coordinates based on percentage of the radius of each axis.""" return self._geometry.from_center_cartesian(x, y, z) diff --git a/api/src/opentrons/protocol_api/core/well.py b/api/src/opentrons/protocol_api/core/well.py index bd58963a59c..24489bb04e7 100644 --- a/api/src/opentrons/protocol_api/core/well.py +++ b/api/src/opentrons/protocol_api/core/well.py @@ -79,6 +79,10 @@ def load_liquid( ) -> None: """Load liquid into a well.""" + @abstractmethod + def load_empty(self) -> None: + """Mark a well as containing no liquid.""" + @abstractmethod def from_center_cartesian(self, x: float, y: float, z: float) -> Point: """Gets point in deck coordinates based on percentage of the radius of each axis.""" diff --git a/api/src/opentrons/protocol_api/labware.py b/api/src/opentrons/protocol_api/labware.py index 0e8a17d07d3..825cc19668a 100644 --- a/api/src/opentrons/protocol_api/labware.py +++ b/api/src/opentrons/protocol_api/labware.py @@ -280,12 +280,20 @@ def load_liquid(self, liquid: Liquid, volume: float) -> None: :param Liquid liquid: The liquid to load into the well. :param float volume: The volume of liquid to load, in µL. + + .. note:: + In API version 2.22 and later, use :py:meth:`~.Well.load_empty()` to mark a well as empty at the beginning of a protocol, rather than using this method with ``volume=0``. """ self._core.load_liquid( liquid=liquid, volume=volume, ) + @requires_version(2, 22) + def load_empty(self) -> None: + """Mark a well as empty.""" + self._core.load_empty() + def _from_center_cartesian(self, x: float, y: float, z: float) -> Point: """ Private version of from_center_cartesian. Present only for backward diff --git a/api/src/opentrons/protocol_engine/commands/load_liquid.py b/api/src/opentrons/protocol_engine/commands/load_liquid.py index 5dd4737410e..f6aa037fa01 100644 --- a/api/src/opentrons/protocol_engine/commands/load_liquid.py +++ b/api/src/opentrons/protocol_engine/commands/load_liquid.py @@ -5,6 +5,8 @@ from typing_extensions import Literal from opentrons.protocol_engine.state.update_types import StateUpdate +from opentrons.protocol_engine.types import LiquidId +from opentrons.protocol_engine.errors import InvalidLiquidError from .command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData from ..errors.error_occurrence import ErrorOccurrence @@ -19,9 +21,9 @@ class LoadLiquidParams(BaseModel): """Payload required to load a liquid into a well.""" - liquidId: str = Field( + liquidId: LiquidId = Field( ..., - description="Unique identifier of the liquid to load.", + description="Unique identifier of the liquid to load. If this is the sentinel value EMPTY, all values of volumeByWell must be 0.", ) labwareId: str = Field( ..., @@ -29,7 +31,7 @@ class LoadLiquidParams(BaseModel): ) volumeByWell: Dict[str, float] = Field( ..., - description="Volume of liquid, in µL, loaded into each well by name, in this labware.", + description="Volume of liquid, in µL, loaded into each well by name, in this labware. If the liquid id is the sentinel value EMPTY, all volumes must be 0.", ) @@ -57,6 +59,12 @@ async def execute(self, params: LoadLiquidParams) -> SuccessData[LoadLiquidResul self._state_view.labware.validate_liquid_allowed_in_labware( labware_id=params.labwareId, wells=params.volumeByWell ) + if params.liquidId == "EMPTY": + for well_name, volume in params.volumeByWell.items(): + if volume != 0.0: + raise InvalidLiquidError( + 'loadLiquid commands that specify the special liquid "EMPTY" must set volume to be 0.0, but the volume for {well_name} is {volume}' + ) state_update = StateUpdate() state_update.set_liquid_loaded( diff --git a/api/src/opentrons/protocol_engine/errors/__init__.py b/api/src/opentrons/protocol_engine/errors/__init__.py index b25dfdb2d0e..e9f1acddeed 100644 --- a/api/src/opentrons/protocol_engine/errors/__init__.py +++ b/api/src/opentrons/protocol_engine/errors/__init__.py @@ -77,6 +77,7 @@ OperationLocationNotInWellError, InvalidDispenseVolumeError, StorageLimitReachedError, + InvalidLiquidError, ) from .error_occurrence import ErrorOccurrence, ProtocolCommandFailedError @@ -137,6 +138,7 @@ "InvalidTargetSpeedError", "InvalidBlockVolumeError", "InvalidHoldTimeError", + "InvalidLiquidError", "CannotPerformModuleAction", "ResumeFromRecoveryNotAllowedError", "PauseNotAllowedError", diff --git a/api/src/opentrons/protocol_engine/errors/exceptions.py b/api/src/opentrons/protocol_engine/errors/exceptions.py index 12f45f4936d..36b0d2ccbef 100644 --- a/api/src/opentrons/protocol_engine/errors/exceptions.py +++ b/api/src/opentrons/protocol_engine/errors/exceptions.py @@ -244,6 +244,19 @@ def __init__( super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping) +class InvalidLiquidError(ProtocolEngineError): + """Raised when attempting to add a liquid with an invalid property.""" + + def __init__( + self, + message: Optional[str] = None, + details: Optional[Dict[str, Any]] = None, + wrapping: Optional[Sequence[EnumeratedError]] = None, + ) -> None: + """Build an InvalidLiquidError.""" + super().__init__(ErrorCodes.INVALID_PROTOCOL_DATA, message, details, wrapping) + + class LabwareDefinitionDoesNotExistError(ProtocolEngineError): """Raised when referencing a labware definition that does not exist.""" diff --git a/api/src/opentrons/protocol_engine/protocol_engine.py b/api/src/opentrons/protocol_engine/protocol_engine.py index ced32b20cc3..574c3d076f9 100644 --- a/api/src/opentrons/protocol_engine/protocol_engine.py +++ b/api/src/opentrons/protocol_engine/protocol_engine.py @@ -566,9 +566,12 @@ def add_liquid( description=(description or ""), displayColor=color, ) + validated_liquid = self._state_store.liquid.validate_liquid_allowed( + liquid=liquid + ) - self._action_dispatcher.dispatch(AddLiquidAction(liquid=liquid)) - return liquid + self._action_dispatcher.dispatch(AddLiquidAction(liquid=validated_liquid)) + return validated_liquid def add_addressable_area(self, addressable_area_name: str) -> None: """Add an addressable area to state.""" diff --git a/api/src/opentrons/protocol_engine/state/liquids.py b/api/src/opentrons/protocol_engine/state/liquids.py index 9394e4261b1..775223c6a60 100644 --- a/api/src/opentrons/protocol_engine/state/liquids.py +++ b/api/src/opentrons/protocol_engine/state/liquids.py @@ -1,11 +1,11 @@ """Basic liquid data state and store.""" from dataclasses import dataclass from typing import Dict, List -from opentrons.protocol_engine.types import Liquid +from opentrons.protocol_engine.types import Liquid, LiquidId from ._abstract_store import HasState, HandlesActions from ..actions import Action, AddLiquidAction -from ..errors import LiquidDoesNotExistError +from ..errors import LiquidDoesNotExistError, InvalidLiquidError @dataclass @@ -51,11 +51,23 @@ def get_all(self) -> List[Liquid]: """Get all protocol liquids.""" return list(self._state.liquids_by_id.values()) - def validate_liquid_id(self, liquid_id: str) -> str: + def validate_liquid_id(self, liquid_id: LiquidId) -> LiquidId: """Check if liquid_id exists in liquids.""" + is_empty = liquid_id == "EMPTY" + if is_empty: + return liquid_id has_liquid = liquid_id in self._state.liquids_by_id if not has_liquid: raise LiquidDoesNotExistError( f"Supplied liquidId: {liquid_id} does not exist in the loaded liquids." ) return liquid_id + + def validate_liquid_allowed(self, liquid: Liquid) -> Liquid: + """Validate that a liquid is legal to load.""" + is_empty = liquid.id == "EMPTY" + if is_empty: + raise InvalidLiquidError( + message='Protocols may not define a liquid with the special id "EMPTY".' + ) + return liquid diff --git a/api/src/opentrons/protocol_engine/types.py b/api/src/opentrons/protocol_engine/types.py index 780b02d2129..5aa4c8c26e9 100644 --- a/api/src/opentrons/protocol_engine/types.py +++ b/api/src/opentrons/protocol_engine/types.py @@ -828,6 +828,10 @@ def _color_is_a_valid_hex(cls, v: str) -> str: return v +EmptyLiquidId = Literal["EMPTY"] +LiquidId = str | EmptyLiquidId + + class Liquid(BaseModel): """Payload required to create a liquid.""" diff --git a/api/tests/opentrons/protocol_api/test_well.py b/api/tests/opentrons/protocol_api/test_well.py index ef1eed84c62..b4817567dde 100644 --- a/api/tests/opentrons/protocol_api/test_well.py +++ b/api/tests/opentrons/protocol_api/test_well.py @@ -8,6 +8,8 @@ from opentrons.protocol_api._liquid import Liquid from opentrons.types import Point, Location +from . import versions_at_or_above + @pytest.fixture def mock_well_core(decoy: Decoy) -> WellCore: @@ -140,6 +142,13 @@ def test_load_liquid(decoy: Decoy, mock_well_core: WellCore, subject: Well) -> N ) +@pytest.mark.parametrize("api_version", versions_at_or_above(APIVersion(2, 22))) +def test_load_empty(decoy: Decoy, mock_well_core: WellCore, subject: Well) -> None: + """It should mark a location as empty.""" + subject.load_empty() + decoy.verify(mock_well_core.load_empty(), times=1) + + def test_diameter(decoy: Decoy, mock_well_core: WellCore, subject: Well) -> None: """It should get the diameter from the core.""" decoy.when(mock_well_core.diameter).then_return(12.3) diff --git a/api/tests/opentrons/protocol_engine/commands/test_load_liquid.py b/api/tests/opentrons/protocol_engine/commands/test_load_liquid.py index dbc584ae2a3..6bd61061f3c 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_load_liquid.py +++ b/api/tests/opentrons/protocol_engine/commands/test_load_liquid.py @@ -9,6 +9,7 @@ LoadLiquidImplementation, LoadLiquidParams, ) +from opentrons.protocol_engine.errors import InvalidLiquidError from opentrons.protocol_engine.state.state import StateView from opentrons.protocol_engine.resources.model_utils import ModelUtils from opentrons.protocol_engine.state import update_types @@ -64,3 +65,37 @@ async def test_load_liquid_implementation( "labware-id", {"A1": 30.0, "B2": 100.0} ) ) + + +async def test_load_empty_liquid_requires_zero_volume( + decoy: Decoy, + subject: LoadLiquidImplementation, + mock_state_view: StateView, + model_utils: ModelUtils, +) -> None: + """Test that loadLiquid requires empty liquids to have 0 volume.""" + data = LoadLiquidParams( + labwareId="labware-id", liquidId="EMPTY", volumeByWell={"A1": 1.0} + ) + timestamp = datetime(year=2020, month=1, day=2) + decoy.when(model_utils.get_timestamp()).then_return(timestamp) + + with pytest.raises(InvalidLiquidError): + await subject.execute(data) + + decoy.verify(mock_state_view.liquid.validate_liquid_id("EMPTY")) + + data2 = LoadLiquidParams( + labwareId="labware-id", liquidId="EMPTY", volumeByWell={"A1": 0.0} + ) + result = await subject.execute(data2) + assert result == SuccessData( + public=LoadLiquidResult(), + state_update=update_types.StateUpdate( + liquid_loaded=update_types.LiquidLoadedUpdate( + labware_id="labware-id", + volumes=data2.volumeByWell, + last_loaded=timestamp, + ) + ), + ) diff --git a/api/tests/opentrons/protocol_engine/state/test_liquid_view.py b/api/tests/opentrons/protocol_engine/state/test_liquid_view.py index f3424932b0e..db1e6f274a1 100644 --- a/api/tests/opentrons/protocol_engine/state/test_liquid_view.py +++ b/api/tests/opentrons/protocol_engine/state/test_liquid_view.py @@ -3,7 +3,7 @@ from opentrons.protocol_engine.state.liquids import LiquidState, LiquidView from opentrons.protocol_engine import Liquid -from opentrons.protocol_engine.errors import LiquidDoesNotExistError +from opentrons.protocol_engine.errors import LiquidDoesNotExistError, InvalidLiquidError @pytest.fixture @@ -33,3 +33,22 @@ def test_has_liquid(subject: LiquidView) -> None: with pytest.raises(LiquidDoesNotExistError): subject.validate_liquid_id("no-id") + + +def test_validate_liquid_prevents_empty(subject: LiquidView) -> None: + """It should not allow loading a liquid with the special id EMPTY.""" + with pytest.raises(InvalidLiquidError): + subject.validate_liquid_allowed( + Liquid(id="EMPTY", displayName="empty", description="nothing") + ) + + +def test_validate_liquid_allows_non_empty(subject: LiquidView) -> None: + """It should allow a valid liquid.""" + valid_liquid = Liquid( + id="some-id", + displayName="some-display-name", + description="some-description", + displayColor=None, + ) + assert subject.validate_liquid_allowed(valid_liquid) == valid_liquid diff --git a/api/tests/opentrons/protocol_engine/test_protocol_engine.py b/api/tests/opentrons/protocol_engine/test_protocol_engine.py index ac83e987153..bc581114ab2 100644 --- a/api/tests/opentrons/protocol_engine/test_protocol_engine.py +++ b/api/tests/opentrons/protocol_engine/test_protocol_engine.py @@ -1133,21 +1133,18 @@ def test_add_liquid( decoy: Decoy, action_dispatcher: ActionDispatcher, subject: ProtocolEngine, + state_store: StateStore, ) -> None: """It should dispatch an AddLiquidAction action.""" + liquid_obj = Liquid(id="water-id", displayName="water", description="water desc") + decoy.when( + state_store.liquid.validate_liquid_allowed(liquid=liquid_obj) + ).then_return(liquid_obj) subject.add_liquid( id="water-id", name="water", description="water desc", color=None ) - decoy.verify( - action_dispatcher.dispatch( - AddLiquidAction( - liquid=Liquid( - id="water-id", displayName="water", description="water desc" - ) - ) - ) - ) + decoy.verify(action_dispatcher.dispatch(AddLiquidAction(liquid=liquid_obj))) async def test_use_attached_temp_and_mag_modules( diff --git a/shared-data/command/schemas/10.json b/shared-data/command/schemas/10.json index b87d0dcf0fd..61521073fac 100644 --- a/shared-data/command/schemas/10.json +++ b/shared-data/command/schemas/10.json @@ -1621,8 +1621,16 @@ "properties": { "liquidId": { "title": "Liquidid", - "description": "Unique identifier of the liquid to load.", - "type": "string" + "description": "Unique identifier of the liquid to load. If this is the sentinel value EMPTY, all values of volumeByWell must be 0.", + "anyOf": [ + { + "type": "string" + }, + { + "enum": ["EMPTY"], + "type": "string" + } + ] }, "labwareId": { "title": "Labwareid", @@ -1631,7 +1639,7 @@ }, "volumeByWell": { "title": "Volumebywell", - "description": "Volume of liquid, in \u00b5L, loaded into each well by name, in this labware.", + "description": "Volume of liquid, in \u00b5L, loaded into each well by name, in this labware. If the liquid id is the sentinel value EMPTY, all volumes must be 0.", "type": "object", "additionalProperties": { "type": "number" From 804ef145094eace8f31518bd8f2b57343b294944 Mon Sep 17 00:00:00 2001 From: David Chau <46395074+ddcc4@users.noreply.github.com> Date: Tue, 5 Nov 2024 16:00:49 -0500 Subject: [PATCH 64/81] Small refactor to use ByTipTypeSetting/TransferProperties as the classes to encapsulate liquid class properties in PAPI/PE. (#16689) # Overview Followup to AUTH-835 / AUTH-837. We want a nice class to bundle together `AspirateProperties`/`SingleDispenseProperties`/`MultiDispenseProperties` plus any potential future liquid class properties. For Pydantic, we already have the the `ByTipTypeSetting` model that encapsulates all the liquid class properties, so let's use that. The upcoming `loadLiquidClass()` implementation will take a `ByTipTypeSetting` as part of its parameter. For the Python dataclass, we already have `TransferProperties`, so we'll continue to use that for the Python API. This is a small refactoring change that: - Moves `TransferProperties` to live with its friends in _liquid_properties.py, which contains the definitions of the other liquid class property classes. - Implements a `build_transfer_properties()` to turn a Pydantic `ByTipTypeSetting` into a dataclass `TransferProperties`, in the same way the other `build_*` functions turn the Pydantic object into its corresponding dataclass object. ## Test Plan and Hands on Testing I ran `make test` to run all the tests under `api/`. ## Review requests This is my first time making a change to our code! Please let me know if I'm missing anything. ## Risk assessment My understanding is that liquid classes is not finished and not in production at all, so any impact should be limited to our internal dev and testing. --- api/src/opentrons/protocol_api/_liquid.py | 40 ++----------------- .../protocol_api/_liquid_properties.py | 37 +++++++++++++++++ 2 files changed, 40 insertions(+), 37 deletions(-) diff --git a/api/src/opentrons/protocol_api/_liquid.py b/api/src/opentrons/protocol_api/_liquid.py index 0cb104099eb..12c9a140ce3 100644 --- a/api/src/opentrons/protocol_api/_liquid.py +++ b/api/src/opentrons/protocol_api/_liquid.py @@ -8,12 +8,8 @@ ) from ._liquid_properties import ( - AspirateProperties, - SingleDispenseProperties, - MultiDispenseProperties, - build_aspirate_properties, - build_single_dispense_properties, - build_multi_dispense_properties, + TransferProperties, + build_transfer_properties, ) @@ -35,30 +31,6 @@ class Liquid: display_color: Optional[str] -# TODO (spp, 2024-10-17): create PAPI-equivalent types for all the properties -# and have validation on value updates with user-facing error messages -@dataclass -class TransferProperties: - _aspirate: AspirateProperties - _dispense: SingleDispenseProperties - _multi_dispense: Optional[MultiDispenseProperties] - - @property - def aspirate(self) -> AspirateProperties: - """Aspirate properties.""" - return self._aspirate - - @property - def dispense(self) -> SingleDispenseProperties: - """Single dispense properties.""" - return self._dispense - - @property - def multi_dispense(self) -> Optional[MultiDispenseProperties]: - """Multi dispense properties.""" - return self._multi_dispense - - @dataclass class LiquidClass: """A data class that contains properties of a specific class of liquids.""" @@ -75,13 +47,7 @@ def create(cls, liquid_class_definition: LiquidClassSchemaV1) -> "LiquidClass": for by_pipette in liquid_class_definition.byPipette: tip_settings: Dict[str, TransferProperties] = {} for tip_type in by_pipette.byTipType: - tip_settings[tip_type.tiprack] = TransferProperties( - _aspirate=build_aspirate_properties(tip_type.aspirate), - _dispense=build_single_dispense_properties(tip_type.singleDispense), - _multi_dispense=build_multi_dispense_properties( - tip_type.multiDispense - ), - ) + tip_settings[tip_type.tiprack] = build_transfer_properties(tip_type) by_pipette_settings[by_pipette.pipetteModel] = tip_settings return cls( diff --git a/api/src/opentrons/protocol_api/_liquid_properties.py b/api/src/opentrons/protocol_api/_liquid_properties.py index f0dd0adfe92..8bd7aa6cfd8 100644 --- a/api/src/opentrons/protocol_api/_liquid_properties.py +++ b/api/src/opentrons/protocol_api/_liquid_properties.py @@ -9,6 +9,7 @@ TouchTipProperties as SharedDataTouchTipProperties, MixProperties as SharedDataMixProperties, BlowoutProperties as SharedDataBlowoutProperties, + ByTipTypeSetting as SharedByTipTypeSetting, Submerge as SharedDataSubmerge, RetractAspirate as SharedDataRetractAspirate, RetractDispense as SharedDataRetractDispense, @@ -361,6 +362,30 @@ def disposal_by_volume(self) -> LiquidHandlingPropertyByVolume: return self._disposal_by_volume +# TODO (spp, 2024-10-17): create PAPI-equivalent types for all the properties +# and have validation on value updates with user-facing error messages +@dataclass +class TransferProperties: + _aspirate: AspirateProperties + _dispense: SingleDispenseProperties + _multi_dispense: Optional[MultiDispenseProperties] + + @property + def aspirate(self) -> AspirateProperties: + """Aspirate properties.""" + return self._aspirate + + @property + def dispense(self) -> SingleDispenseProperties: + """Single dispense properties.""" + return self._dispense + + @property + def multi_dispense(self) -> Optional[MultiDispenseProperties]: + """Multi dispense properties.""" + return self._multi_dispense + + def _build_delay_properties( delay_properties: SharedDataDelayProperties, ) -> DelayProperties: @@ -501,3 +526,15 @@ def build_multi_dispense_properties( _disposal_by_volume=multi_dispense_properties.disposalByVolume, _delay=_build_delay_properties(multi_dispense_properties.delay), ) + + +def build_transfer_properties( + by_tip_type_setting: SharedByTipTypeSetting, +) -> TransferProperties: + return TransferProperties( + _aspirate=build_aspirate_properties(by_tip_type_setting.aspirate), + _dispense=build_single_dispense_properties(by_tip_type_setting.singleDispense), + _multi_dispense=build_multi_dispense_properties( + by_tip_type_setting.multiDispense + ), + ) From d0af9a1181141cf28d0869394c9cce9ed9c61b30 Mon Sep 17 00:00:00 2001 From: Anthony Ngumah <68346382+AnthonyNASC20@users.noreply.github.com> Date: Tue, 5 Nov 2024 16:35:21 -0500 Subject: [PATCH 65/81] feat (abr-testing): simulate protocols with csv parameter (#16685) # Overview Enabled support for simulating protocols with csv parameters --- .../data_collection/abr_calibration_logs.py | 1 + .../data_collection/read_robot_logs.py | 15 ++- .../protocol_simulation/abr_sim_check.py | 8 +- .../protocol_simulation/simulation_metrics.py | 103 +++++++++++++----- 4 files changed, 90 insertions(+), 37 deletions(-) diff --git a/abr-testing/abr_testing/data_collection/abr_calibration_logs.py b/abr-testing/abr_testing/data_collection/abr_calibration_logs.py index 8e00114747a..75b73b8f16b 100644 --- a/abr-testing/abr_testing/data_collection/abr_calibration_logs.py +++ b/abr-testing/abr_testing/data_collection/abr_calibration_logs.py @@ -363,3 +363,4 @@ def run( folder_name = args.folder_name[0] google_sheet_name = args.google_sheet_name[0] email = args.email[0] + run(storage_directory, folder_name, google_sheet_name, email) 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 d740518c7ac..9fd9f0e7d71 100644 --- a/abr-testing/abr_testing/data_collection/read_robot_logs.py +++ b/abr-testing/abr_testing/data_collection/read_robot_logs.py @@ -110,6 +110,7 @@ def identify_labware_ids( file_results: Dict[str, Any], labware_name: Optional[str] ) -> List[str]: """Determine what type of labware is being picked up.""" + list_of_labware_ids: List[str] = [] if labware_name: labwares = file_results.get("labware", "") list_of_labware_ids = [] @@ -341,8 +342,9 @@ def hs_commands(file_results: Dict[str, Any]) -> Dict[str, float]: ) if temp_time is not None and deactivate_time is None: # If heater shaker module is not deactivated, protocol completedAt time stamp used. + default = commandData[len(commandData) - 1].get("completedAt") protocol_end = datetime.strptime( - file_results.get("completedAt", ""), "%Y-%m-%dT%H:%M:%S.%f%z" + file_results.get("completedAt", default), "%Y-%m-%dT%H:%M:%S.%f%z" ) temp_duration = (protocol_end - temp_time).total_seconds() hs_temps[hs_temp] = hs_temps.get(hs_temp, 0.0) + temp_duration @@ -389,8 +391,9 @@ def temperature_module_commands(file_results: Dict[str, Any]) -> Dict[str, Any]: tm_temps[tm_temp] = tm_temps.get(tm_temp, 0.0) + temp_duration if temp_time is not None and deactivate_time is None: # If temperature module is not deactivated, protocol completedAt time stamp used. + default = commandData[len(commandData) - 1].get("completedAt") protocol_end = datetime.strptime( - file_results.get("completedAt", ""), "%Y-%m-%dT%H:%M:%S.%f%z" + file_results.get("completedAt", default), "%Y-%m-%dT%H:%M:%S.%f%z" ) temp_duration = (protocol_end - temp_time).total_seconds() tm_temps[tm_temp] = tm_temps.get(tm_temp, 0.0) + temp_duration @@ -473,15 +476,17 @@ def thermocycler_commands(file_results: Dict[str, Any]) -> Dict[str, float]: block_temps[block_temp] = block_temps.get(block_temp, 0.0) + block_time if block_on_time is not None and block_off_time is None: # If thermocycler block not deactivated protocol completedAt time stamp used + default = commandData[len(commandData) - 1].get("completedAt") protocol_end = datetime.strptime( - file_results.get("completedAt", ""), "%Y-%m-%dT%H:%M:%S.%f%z" + file_results.get("completedAt", default), "%Y-%m-%dT%H:%M:%S.%f%z" ) temp_duration = (protocol_end - block_on_time).total_seconds() - block_temps[block_temp] = block_temps.get(block_temp, 0.0) + temp_duration + if lid_on_time is not None and lid_off_time is None: # If thermocycler lid not deactivated protocol completedAt time stamp used + default = commandData[len(commandData) - 1].get("completedAt") protocol_end = datetime.strptime( - file_results.get("completedAt", ""), "%Y-%m-%dT%H:%M:%S.%f%z" + file_results.get("completedAt", default), "%Y-%m-%dT%H:%M:%S.%f%z" ) temp_duration = (protocol_end - lid_on_time).total_seconds() lid_temps[lid_temp] = block_temps.get(lid_temp, 0.0) + temp_duration diff --git a/abr-testing/abr_testing/protocol_simulation/abr_sim_check.py b/abr-testing/abr_testing/protocol_simulation/abr_sim_check.py index 513860baa9b..23575165eff 100644 --- a/abr-testing/abr_testing/protocol_simulation/abr_sim_check.py +++ b/abr-testing/abr_testing/protocol_simulation/abr_sim_check.py @@ -5,9 +5,9 @@ from pathlib import Path -def run(file_to_simulate: str) -> None: +def run(file_to_simulate: Path) -> None: """Simulate protocol and raise errors.""" - protocol_name = Path(file_to_simulate).stem + protocol_name = file_to_simulate.stem try: simulation_metrics.main(file_to_simulate, False) except Exception: @@ -29,6 +29,6 @@ def run(file_to_simulate: str) -> None: if file.endswith(".py"): # If it's a Python file if file in exclude: continue - file_path = os.path.join(root, file) - print(f"Simulating protocol: {file_path}") + file_path = Path(os.path.join(root, file)) + print(f"Simulating protocol: {file_path.stem}") run(file_path) diff --git a/abr-testing/abr_testing/protocol_simulation/simulation_metrics.py b/abr-testing/abr_testing/protocol_simulation/simulation_metrics.py index 418c1e1aacd..9d21109f37e 100644 --- a/abr-testing/abr_testing/protocol_simulation/simulation_metrics.py +++ b/abr-testing/abr_testing/protocol_simulation/simulation_metrics.py @@ -241,6 +241,7 @@ def parse_results_volume( "Right Pipette Total Aspirates", "Right Pipette Total Dispenses", "Gripper Pick Ups", + "Gripper Pick Ups of opentrons_tough_pcr_auto_sealing_lid", "Total Liquid Probes", "Average Liquid Probe Time (sec)", ] @@ -302,6 +303,7 @@ def parse_results_volume( total_time_row.append(str(end_time - start_time)) for metric in metrics: + print(f"Dictionary: {metric}\n\n") for cmd in metric.keys(): values_row.append(str(metric[cmd])) return ( @@ -320,15 +322,16 @@ def parse_results_volume( def main( - protocol_file_path_name: str, + protocol_file_path: Path, save: bool, storage_directory: str = os.curdir, google_sheet_name: str = "", + parameters: List[str] = [], ) -> None: """Main module control.""" sys.exit = mock_exit # Replace sys.exit with the mock function # Read file path from arguments - protocol_file_path = Path(protocol_file_path_name) + # protocol_file_path = Path(protocol_file_path_name) protocol_name = protocol_file_path.stem print("Simulating", protocol_name) file_date = datetime.now() @@ -344,26 +347,58 @@ def main( ) json_file_output = open(json_file_path, "wb+") # log_output_file = f"{protocol_name}_log" - 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, - ) + if parameters: + print(f"Parameter: {parameters[0]}\n") + csv_params = {} + csv_params["parameters_csv"] = parameters[0] + rtp_json = json.dumps(csv_params) + ctx.invoke( + analyze, + files=[protocol_file_path], + rtp_files=rtp_json, + json_output=json_file_output, + human_json_output=None, + log_output=error_output, + log_level="ERROR", + check=False, + ) + + else: + 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, + ) json_file_output.close() else: - ctx.invoke( - analyze, - files=[protocol_file_path], - json_output=None, - human_json_output=None, - log_output=error_output, - log_level="ERROR", - check=True, - ) + if parameters: + csv_params = {} + csv_params["parameters_csv"] = parameters[0] + rtp_json = json.dumps(csv_params) + ctx.invoke( + analyze, + files=[protocol_file_path], + rtp_files=rtp_json, + json_output=None, + human_json_output=None, + log_output=error_output, + log_level="ERROR", + check=True, + ) + else: + ctx.invoke( + analyze, + files=[protocol_file_path], + json_output=None, + human_json_output=None, + log_output=error_output, + log_level="ERROR", + check=True, + ) except SystemExit as e: print(f"SystemExit caught with code: {e}") @@ -395,6 +430,7 @@ def main( credentials_path, google_sheet_name, 0 ) google_sheet.write_to_row([]) + for row in parse_results_volume( json_file_path, protocol_name, @@ -428,13 +464,15 @@ def main( "protocol_file_path", metavar="PROTOCOL_FILE_PATH", type=str, - nargs=1, + nargs="*", help="Path to protocol file", ) args = parser.parse_args() storage_directory = args.storage_directory[0] sheet_name = args.sheet_name[0] protocol_file_path: str = args.protocol_file_path[0] + parameters: List[str] = args.protocol_file_path[1:] + print(parameters) SETUP = True while SETUP: print( @@ -445,7 +483,7 @@ def main( choice = "" while not choice: choice = input( - "Remove air_gap commands to ensure accurate results? (Y/N): " + "Remove air_gap commands to ensure accurate results: (continue)? (Y/N): " ) if choice.upper() == "Y": SETUP = False @@ -462,11 +500,20 @@ def main( # Change api level if CLEAN_PROTOCOL: set_api_level(protocol_file_path) - main( - protocol_file_path, - True, - storage_directory, - sheet_name, - ) + if parameters: + main( + Path(protocol_file_path), + True, + storage_directory, + sheet_name, + parameters=parameters, + ) + else: + main( + protocol_file_path=Path(protocol_file_path), + save=True, + storage_directory=storage_directory, + google_sheet_name=sheet_name, + ) else: sys.exit(0) From b41e8257970c6ccb30f7baae143b9720b97c324b Mon Sep 17 00:00:00 2001 From: Jethary Alcid <66035149+jerader@users.noreply.github.com> Date: Wed, 6 Nov 2024 10:02:26 -0500 Subject: [PATCH 66/81] feat(protocol-designer): comment tools move over from old code (#16678) closes AUTH-814 --- .../StepForm/StepTools/CommentTools/index.tsx | 51 ++++++++++++++++++- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/CommentTools/index.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/CommentTools/index.tsx index 72688f43146..a6956cd342d 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/CommentTools/index.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/CommentTools/index.tsx @@ -1,3 +1,50 @@ -export function CommentTools(): JSX.Element { - return
    TODO: wire this up
    +import { useTranslation } from 'react-i18next' +import styled from 'styled-components' +import { + BORDERS, + COLORS, + DIRECTION_COLUMN, + Flex, + SPACING, + StyledText, + TYPOGRAPHY, +} from '@opentrons/components' +import type { ChangeEvent } from 'react' +import type { StepFormProps } from '../../types' + +export function CommentTools(props: StepFormProps): JSX.Element { + const { t, i18n } = useTranslation('form') + const { propsForFields } = props + + return ( + + + {i18n.format(t('step_edit_form.field.comment.label'), 'capitalize')} + + ) => { + propsForFields.message.updateValue(e.currentTarget.value) + }} + /> + + ) } + +// TODO: use TextArea component when we make it +const StyledTextArea = styled.textarea` + width: 100%; + height: 7rem; + box-sizing: border-box; + border: 1px solid ${COLORS.grey50}; + border-radius: ${BORDERS.borderRadius4}; + padding: ${SPACING.spacing8}; + font-size: ${TYPOGRAPHY.fontSizeH4}; + line-height: ${TYPOGRAPHY.lineHeight16}; + font-weight: ${TYPOGRAPHY.fontWeightRegular}; + resize: none; +` From f66ffb9a1fa0875d217d22de9607db2aa2b53861 Mon Sep 17 00:00:00 2001 From: Jethary Alcid <66035149+jerader@users.noreply.github.com> Date: Wed, 6 Nov 2024 10:31:06 -0500 Subject: [PATCH 67/81] =?UTF-8?q?feat(protocol-designer):=20deleting=20sta?= =?UTF-8?q?ging=20area=20also=20deletes=204th=20colum=E2=80=A6=20(#16701)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …n labware closes RQA-3522 RQA-3467 --- .../localization/en/create_new_protocol.json | 2 + .../ConfirmDeleteStagingAreaModal.test.tsx | 36 +++++++++ .../ConfirmDeleteStagingAreaModal/index.tsx | 58 +++++++++++++++ protocol-designer/src/organisms/index.ts | 1 + .../Designer/DeckSetup/DeckSetupContainer.tsx | 2 +- .../Designer/DeckSetup/DeckSetupDetails.tsx | 43 ++++++----- .../Designer/DeckSetup/DeckSetupTools.tsx | 44 ++++++++++- .../Designer/DeckSetup/FixtureRender.tsx | 51 +++++++++---- .../DeckSetup/SelectedHoveredItems.tsx | 2 +- .../Designer/DeckSetup/SlotOverflowMenu.tsx | 74 +++++++++++++++---- .../src/pages/Designer/DeckSetup/utils.ts | 27 ++++++- .../pages/Designer/__tests__/utils.test.ts | 12 ++- protocol-designer/src/pages/Designer/utils.ts | 27 ++++++- 13 files changed, 329 insertions(+), 50 deletions(-) create mode 100644 protocol-designer/src/organisms/ConfirmDeleteStagingAreaModal/__tests__/ConfirmDeleteStagingAreaModal.test.tsx create mode 100644 protocol-designer/src/organisms/ConfirmDeleteStagingAreaModal/index.tsx diff --git a/protocol-designer/src/assets/localization/en/create_new_protocol.json b/protocol-designer/src/assets/localization/en/create_new_protocol.json index 1b9d1f72898..622464e6547 100644 --- a/protocol-designer/src/assets/localization/en/create_new_protocol.json +++ b/protocol-designer/src/assets/localization/en/create_new_protocol.json @@ -32,6 +32,8 @@ "show_default_tips": "Show default tips", "show_tips": "Show incompatible tips", "slots_limit_reached": "Slots limit reached", + "staging_area_has_labware": "This staging area slot has labware", + "staging_area_will_delete_labware": "The staging area slot that you are about to delete has labware placed on it. If you make these changes to your protocol starting deck, the labware will be deleted as well.", "stagingArea": "Staging area", "swap_pipettes": "Swap pipettes", "tell_us": "Tell us about your protocol", diff --git a/protocol-designer/src/organisms/ConfirmDeleteStagingAreaModal/__tests__/ConfirmDeleteStagingAreaModal.test.tsx b/protocol-designer/src/organisms/ConfirmDeleteStagingAreaModal/__tests__/ConfirmDeleteStagingAreaModal.test.tsx new file mode 100644 index 00000000000..9f6e2991e73 --- /dev/null +++ b/protocol-designer/src/organisms/ConfirmDeleteStagingAreaModal/__tests__/ConfirmDeleteStagingAreaModal.test.tsx @@ -0,0 +1,36 @@ +import { fireEvent, screen } from '@testing-library/react' +import { describe, it, beforeEach, vi, expect } from 'vitest' +import { renderWithProviders } from '../../../__testing-utils__' +import { i18n } from '../../../assets/localization' +import { ConfirmDeleteStagingAreaModal } from '..' +import type { ComponentProps } from 'react' + +const render = ( + props: ComponentProps +) => { + return renderWithProviders(, { + i18nInstance: i18n, + })[0] +} + +describe('ConfirmDeleteStagingAreaModal', () => { + let props: ComponentProps + + beforeEach(() => { + props = { + onClose: vi.fn(), + onConfirm: vi.fn(), + } + }) + it('renders the text and buttons work as expected', () => { + render(props) + screen.getByText('This staging area slot has labware') + screen.getByText( + 'The staging area slot that you are about to delete has labware placed on it. If you make these changes to your protocol starting deck, the labware will be deleted as well.' + ) + fireEvent.click(screen.getByText('Cancel')) + expect(props.onClose).toHaveBeenCalled() + fireEvent.click(screen.getByText('Continue')) + expect(props.onConfirm).toHaveBeenCalled() + }) +}) diff --git a/protocol-designer/src/organisms/ConfirmDeleteStagingAreaModal/index.tsx b/protocol-designer/src/organisms/ConfirmDeleteStagingAreaModal/index.tsx new file mode 100644 index 00000000000..c2d0c81f0ea --- /dev/null +++ b/protocol-designer/src/organisms/ConfirmDeleteStagingAreaModal/index.tsx @@ -0,0 +1,58 @@ +import { useTranslation } from 'react-i18next' +import { createPortal } from 'react-dom' +import { + Flex, + JUSTIFY_END, + Modal, + PrimaryButton, + SecondaryButton, + SPACING, + StyledText, +} from '@opentrons/components' +import { getTopPortalEl } from '../../components/portals/TopPortal' +import { HandleEnter } from '../../atoms/HandleEnter' + +interface ConfirmDeleteStagingAreaModalProps { + onClose: () => void + onConfirm: () => void +} +export function ConfirmDeleteStagingAreaModal( + props: ConfirmDeleteStagingAreaModalProps +): JSX.Element { + const { onClose, onConfirm } = props + const { t, i18n } = useTranslation(['create_new_protocol', 'shared']) + + return createPortal( + + + { + onClose() + }} + > + {t('shared:cancel')} + + + {i18n.format(t('shared:continue'), 'capitalize')} + + + } + > + + {t('staging_area_will_delete_labware')} + + + , + getTopPortalEl() + ) +} diff --git a/protocol-designer/src/organisms/index.ts b/protocol-designer/src/organisms/index.ts index 3d6fee9b662..08e1745bccf 100644 --- a/protocol-designer/src/organisms/index.ts +++ b/protocol-designer/src/organisms/index.ts @@ -2,6 +2,7 @@ export * from './Alerts' export * from './AnnouncementModal' export * from './AssignLiquidsModal' export * from './BlockingHintModal' +export * from './ConfirmDeleteStagingAreaModal' export * from './DefineLiquidsModal' export * from './EditInstrumentsModal' export * from './EditNickNameModal' diff --git a/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupContainer.tsx b/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupContainer.tsx index ff914a0ff37..2e45768cf4d 100644 --- a/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupContainer.tsx +++ b/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupContainer.tsx @@ -67,7 +67,7 @@ const OT2_STANDARD_DECK_VIEW_LAYER_BLOCK_LIST: string[] = [ 'fixedTrash', ] export const lightFill = COLORS.grey35 -const darkFill = COLORS.grey60 +export const darkFill = COLORS.grey60 export function DeckSetupContainer(props: DeckSetupTabType): JSX.Element { const { tab } = props diff --git a/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupDetails.tsx b/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupDetails.tsx index 0b23fa3315e..ed6150223c0 100644 --- a/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupDetails.tsx +++ b/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupDetails.tsx @@ -1,5 +1,5 @@ -import * as React from 'react' import values from 'lodash/values' +import { Fragment, useEffect, useState } from 'react' import { useDispatch, useSelector } from 'react-redux' import { Module } from '@opentrons/components' @@ -28,7 +28,9 @@ import { DeckItemHover } from './DeckItemHover' import { SlotOverflowMenu } from './SlotOverflowMenu' import { HoveredItems } from './HoveredItems' import { SelectedHoveredItems } from './SelectedHoveredItems' +import { getAdjacentLabware } from './utils' +import type { ComponentProps, Dispatch, SetStateAction } from 'react' import type { ModuleTemporalProperties } from '@opentrons/step-generation' import type { AddressableArea, @@ -55,7 +57,7 @@ interface DeckSetupDetailsProps extends DeckSetupTabType { hoveredFixture: Fixture | null hoveredLabware: string | null hoveredModule: ModuleModel | null - setHover: React.Dispatch> + setHover: Dispatch> showGen1MultichannelCollisionWarnings: boolean stagingAreaCutoutIds: CutoutId[] selectedZoomInSlot?: DeckSlotId @@ -83,9 +85,7 @@ export function DeckSetupDetails(props: DeckSetupDetailsProps): JSX.Element { ) const selectedSlotInfo = useSelector(selectors.getZoomedInSlotInfo) const { selectedSlot } = selectedSlotInfo - const [menuListId, setShowMenuListForId] = React.useState( - null - ) + const [menuListId, setShowMenuListForId] = useState(null) const dispatch = useDispatch() const { @@ -100,7 +100,7 @@ export function DeckSetupDetails(props: DeckSetupDetailsProps): JSX.Element { deckDef, }) // initiate the slot's info - React.useEffect(() => { + useEffect(() => { dispatch( editSlotInfo({ createdNestedLabwareForSlot, @@ -132,6 +132,15 @@ export function DeckSetupDetails(props: DeckSetupDetailsProps): JSX.Element { ? getSlotsWithCollisions(deckDef, allModules) : [] + const adjacentLabware = + preSelectedFixture != null && selectedSlot.cutout != null + ? getAdjacentLabware( + preSelectedFixture, + selectedSlot.cutout, + activeDeckSetup.labware + ) + : null + return ( <> {/* all modules */} @@ -146,7 +155,7 @@ export function DeckSetupDetails(props: DeckSetupDetailsProps): JSX.Element { const moduleDef = getModuleDef2(moduleOnDeck.model) const getModuleInnerProps = ( moduleState: ModuleTemporalProperties['moduleState'] - ): React.ComponentProps['innerProps'] => { + ): ComponentProps['innerProps'] => { if (moduleState.type === THERMOCYCLER_MODULE_TYPE) { let lidMotorState = 'unknown' if (tab === 'startingDeck' || moduleState.lidOpen) { @@ -186,7 +195,7 @@ export function DeckSetupDetails(props: DeckSetupDetailsProps): JSX.Element { zDimension: labwareLoadedOnModule?.def.dimensions.zDimension ?? 0, } return moduleOnDeck.slot !== selectedSlot.slot ? ( - + ) : null} - + ) : null })} @@ -276,7 +285,7 @@ export function DeckSetupDetails(props: DeckSetupDetailsProps): JSX.Element { }) .map(addressableArea => { return ( - + - + ) })} {/* all labware on deck NOT those in modules */} @@ -299,10 +308,10 @@ export function DeckSetupDetails(props: DeckSetupDetailsProps): JSX.Element { if ( labware.slot === 'offDeck' || allModules.some(m => m.id === labware.slot) || - allLabware.some(lab => lab.id === labware.slot) + allLabware.some(lab => lab.id === labware.slot) || + labware.id === adjacentLabware?.id ) return null - const slotPosition = getPositionFromSlotId(labware.slot, deckDef) const slotBoundingBox = getAddressableAreaFromSlotId( labware.slot, @@ -313,7 +322,7 @@ export function DeckSetupDetails(props: DeckSetupDetailsProps): JSX.Element { return null } return labware.slot !== selectedSlot.slot ? ( - + - + ) : null })} @@ -376,7 +385,7 @@ export function DeckSetupDetails(props: DeckSetupDetailsProps): JSX.Element { ? slotForOnTheDeck : allModules.find(module => module.id === slotForOnTheDeck)?.slot return ( - + - + ) })} diff --git a/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupTools.tsx b/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupTools.tsx index 6c000ad0428..e73ab455dc7 100644 --- a/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupTools.tsx +++ b/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupTools.tsx @@ -20,6 +20,7 @@ import { MAGNETIC_MODULE_TYPE, MAGNETIC_MODULE_V1, MAGNETIC_MODULE_V2, + MODULE_MODELS, OT2_ROBOT_TYPE, } from '@opentrons/shared-data' @@ -46,6 +47,7 @@ import { selectors } from '../../../labware-ingred/selectors' import { useKitchen } from '../../../organisms/Kitchen/hooks' import { getDismissedHints } from '../../../tutorial/selectors' import { createContainerAboveModule } from '../../../step-forms/actions/thunks' +import { ConfirmDeleteStagingAreaModal } from '../../../organisms' import { FIXTURES, MOAM_MODELS } from './constants' import { getSlotInformation } from '../utils' import { getModuleModelsBySlot, getDeckErrors } from './utils' @@ -71,6 +73,9 @@ export function DeckSetupTools(props: DeckSetupToolsProps): JSX.Element | null { const { makeSnackbar } = useKitchen() const selectedSlotInfo = useSelector(selectors.getZoomedInSlotInfo) const robotType = useSelector(getRobotType) + const [showDeleteLabwareModal, setShowDeleteLabwareModal] = useState< + ModuleModel | 'clear' | null + >(null) const isDismissedModuleHint = useSelector(getDismissedHints).includes( 'change_magnet_module_model' ) @@ -154,6 +159,7 @@ export function DeckSetupTools(props: DeckSetupToolsProps): JSX.Element | null { createdModuleForSlot, createdLabwareForSlot, createFixtureForSlots, + matchingLabwareFor4thColumn, } = getSlotInformation({ deckSetup, slot }) let fixtures: Fixture[] = [] @@ -218,6 +224,10 @@ export function DeckSetupTools(props: DeckSetupToolsProps): JSX.Element | null { if (createdNestedLabwareForSlot != null) { dispatch(deleteContainer({ labwareId: createdNestedLabwareForSlot.id })) } + // clear labware on staging area 4th column slot + if (matchingLabwareFor4thColumn != null) { + dispatch(deleteContainer({ labwareId: matchingLabwareFor4thColumn.id })) + } } handleResetToolbox() setSelectedHardware(null) @@ -278,6 +288,26 @@ export function DeckSetupTools(props: DeckSetupToolsProps): JSX.Element | null { } return ( <> + {showDeleteLabwareModal != null ? ( + { + setShowDeleteLabwareModal(null) + }} + onConfirm={() => { + if (showDeleteLabwareModal === 'clear') { + handleClear() + handleResetToolbox() + } else if (MODULE_MODELS.includes(showDeleteLabwareModal)) { + setSelectedHardware(showDeleteLabwareModal) + dispatch(selectFixture({ fixture: null })) + dispatch(selectModule({ moduleModel: showDeleteLabwareModal })) + dispatch(selectLabware({ labwareDefUri: null })) + dispatch(selectNestedLabware({ nestedLabwareDefUri: null })) + } + setShowDeleteLabwareModal(null) + }} + /> + ) : null} {changeModuleWarning} } onCloseClick={() => { - handleClear() - handleResetToolbox() + if (matchingLabwareFor4thColumn != null) { + setShowDeleteLabwareModal('clear') + } else { + handleClear() + handleResetToolbox() + } }} onConfirmClick={() => { handleConfirm() @@ -407,6 +441,12 @@ export function DeckSetupTools(props: DeckSetupToolsProps): JSX.Element | null { !isDismissedModuleHint ) { displayModuleWarning(true) + } else if ( + selectedFixture === 'stagingArea' || + (selectedFixture === 'wasteChuteAndStagingArea' && + matchingLabwareFor4thColumn != null) + ) { + setShowDeleteLabwareModal(model) } else { setSelectedHardware(model) dispatch(selectFixture({ fixture: null })) diff --git a/protocol-designer/src/pages/Designer/DeckSetup/FixtureRender.tsx b/protocol-designer/src/pages/Designer/DeckSetup/FixtureRender.tsx index 92803de701f..cf4d1129486 100644 --- a/protocol-designer/src/pages/Designer/DeckSetup/FixtureRender.tsx +++ b/protocol-designer/src/pages/Designer/DeckSetup/FixtureRender.tsx @@ -1,4 +1,5 @@ import { Fragment } from 'react' +import { useSelector } from 'react-redux' import { COLORS, FlexTrash, @@ -7,7 +8,11 @@ import { WasteChuteFixture, WasteChuteStagingAreaFixture, } from '@opentrons/components' -import { lightFill } from './DeckSetupContainer' +import { getPositionFromSlotId } from '@opentrons/shared-data' +import { getInitialDeckSetup } from '../../../step-forms/selectors' +import { LabwareOnDeck as LabwareOnDeckComponent } from '../../../components/DeckSetup/LabwareOnDeck' +import { lightFill, darkFill } from './DeckSetupContainer' +import { getAdjacentLabware } from './utils' import type { TrashCutoutId, StagingAreaLocation } from '@opentrons/components' import type { CutoutId, @@ -25,16 +30,34 @@ interface FixtureRenderProps { } export const FixtureRender = (props: FixtureRenderProps): JSX.Element => { const { fixture, cutout, deckDef, robotType } = props + const deckSetup = useSelector(getInitialDeckSetup) + const { labware } = deckSetup + const adjacentLabware = getAdjacentLabware(fixture, cutout, labware) + + const renderLabwareOnDeck = (): JSX.Element | null => { + if (!adjacentLabware) return null + const slotPosition = getPositionFromSlotId(adjacentLabware.slot, deckDef) + return ( + + ) + } switch (fixture) { case 'stagingArea': { return ( - + + + {renderLabwareOnDeck()} + ) } case 'trashBin': { @@ -67,12 +90,14 @@ export const FixtureRender = (props: FixtureRenderProps): JSX.Element => { } case 'wasteChuteAndStagingArea': { return ( - + + + {renderLabwareOnDeck()} + ) } } diff --git a/protocol-designer/src/pages/Designer/DeckSetup/SelectedHoveredItems.tsx b/protocol-designer/src/pages/Designer/DeckSetup/SelectedHoveredItems.tsx index 258f5fe07d6..71f07b973e3 100644 --- a/protocol-designer/src/pages/Designer/DeckSetup/SelectedHoveredItems.tsx +++ b/protocol-designer/src/pages/Designer/DeckSetup/SelectedHoveredItems.tsx @@ -1,5 +1,4 @@ import { useSelector } from 'react-redux' -import { FixtureRender } from './FixtureRender' import { LabwareRender, Module } from '@opentrons/components' import { getModuleDef2, @@ -10,6 +9,7 @@ import { getOnlyLatestDefs } from '../../../labware-defs' import { getCustomLabwareDefsByURI } from '../../../labware-defs/selectors' import { ModuleLabel } from './ModuleLabel' import { LabwareLabel } from '../LabwareLabel' +import { FixtureRender } from './FixtureRender' import type { CoordinateTuple, DeckDefinition, diff --git a/protocol-designer/src/pages/Designer/DeckSetup/SlotOverflowMenu.tsx b/protocol-designer/src/pages/Designer/DeckSetup/SlotOverflowMenu.tsx index 974a6b96552..b29d3b90dfa 100644 --- a/protocol-designer/src/pages/Designer/DeckSetup/SlotOverflowMenu.tsx +++ b/protocol-designer/src/pages/Designer/DeckSetup/SlotOverflowMenu.tsx @@ -1,5 +1,5 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' +import { useState } from 'react' import styled from 'styled-components' import { useDispatch, useSelector } from 'react-redux' import { useNavigate } from 'react-router-dom' @@ -20,15 +20,25 @@ import { import { getDeckSetupForActiveItem } from '../../../top-selectors/labware-locations' import { deleteModule } from '../../../step-forms/actions' -import { EditNickNameModal } from '../../../organisms' +import { + ConfirmDeleteStagingAreaModal, + EditNickNameModal, +} from '../../../organisms' import { deleteDeckFixture } from '../../../step-forms/actions/additionalItems' import { deleteContainer, duplicateLabware, openIngredientSelector, } from '../../../labware-ingred/actions' +import { getStagingAreaAddressableAreas } from '../../../utils' import { selectors as labwareIngredSelectors } from '../../../labware-ingred/selectors' -import type { CoordinateTuple, DeckSlotId } from '@opentrons/shared-data' +import type { MouseEvent, SetStateAction } from 'react' +import type { + CoordinateTuple, + CutoutId, + DeckSlotId, +} from '@opentrons/shared-data' +import type { LabwareOnDeck } from '../../../step-forms' import type { ThunkDispatch } from '../../../types' const ROBOT_BOTTOM_HALF_SLOTS = [ @@ -55,7 +65,7 @@ const TOP_SLOT_Y_POSITION_2_BUTTONS = 35 interface SlotOverflowMenuProps { // can be off-deck id or deck slot location: DeckSlotId | string - setShowMenuList: (value: React.SetStateAction) => void + setShowMenuList: (value: SetStateAction) => void addEquipment: (slotId: string) => void menuListSlotPosition?: CoordinateTuple } @@ -71,14 +81,14 @@ export function SlotOverflowMenu( const { t } = useTranslation('starting_deck_state') const navigate = useNavigate() const dispatch = useDispatch>() - const [showNickNameModal, setShowNickNameModal] = React.useState( + const [showDeleteLabwareModal, setShowDeleteLabwareModal] = useState( false ) + const [showNickNameModal, setShowNickNameModal] = useState(false) const overflowWrapperRef = useOnClickOutside({ onClickOutside: () => { - if (!showNickNameModal) { - setShowMenuList(false) - } + if (showNickNameModal || showDeleteLabwareModal) return + setShowMenuList(false) }, }) const deckSetup = useSelector(getDeckSetupForActiveItem) @@ -111,6 +121,20 @@ export function SlotOverflowMenu( const fixturesOnSlot = Object.values(additionalEquipmentOnDeck).filter( ae => ae.location?.split('cutout')[1] === location ) + const stagingAreaCutout = fixturesOnSlot.find( + fixture => fixture.name === 'stagingArea' + )?.location + + let matchingLabware: LabwareOnDeck | null = null + if (stagingAreaCutout != null) { + const stagingAreaAddressableAreaName = getStagingAreaAddressableAreas([ + stagingAreaCutout, + ] as CutoutId[]) + matchingLabware = + Object.values(deckSetupLabware).find( + lw => lw.slot === stagingAreaAddressableAreaName[0] + ) ?? null + } const hasNoItems = moduleOnSlot == null && labwareOnSlot == null && fixturesOnSlot.length === 0 @@ -132,7 +156,12 @@ export function SlotOverflowMenu( if (nestedLabwareOnSlot != null) { dispatch(deleteContainer({ labwareId: nestedLabwareOnSlot.id })) } + // clear labware on staging area 4th column slot + if (matchingLabware != null) { + dispatch(deleteContainer({ labwareId: matchingLabware.id })) + } } + const showDuplicateBtn = (labwareOnSlot != null && !isLabwareAnAdapter && @@ -179,6 +208,19 @@ export function SlotOverflowMenu( }} /> ) : null} + {showDeleteLabwareModal ? ( + { + setShowDeleteLabwareModal(false) + setShowMenuList(false) + }} + onConfirm={() => { + handleClear() + setShowDeleteLabwareModal(false) + setShowMenuList(false) + }} + /> + ) : null} { + onClick={(e: MouseEvent) => { e.preventDefault() e.stopPropagation() }} @@ -206,7 +248,7 @@ export function SlotOverflowMenu( {showEditAndLiquidsBtns ? ( <> { + onClick={(e: MouseEvent) => { setShowNickNameModal(true) e.preventDefault() e.stopPropagation() @@ -254,9 +296,15 @@ export function SlotOverflowMenu( ) : null} { - handleClear() - setShowMenuList(false) + onClick={(e: MouseEvent) => { + if (matchingLabware != null) { + setShowDeleteLabwareModal(true) + e.preventDefault() + e.stopPropagation() + } else { + handleClear() + setShowMenuList(false) + } }} > diff --git a/protocol-designer/src/pages/Designer/DeckSetup/utils.ts b/protocol-designer/src/pages/Designer/DeckSetup/utils.ts index 51a661eeed1..b231da91072 100644 --- a/protocol-designer/src/pages/Designer/DeckSetup/utils.ts +++ b/protocol-designer/src/pages/Designer/DeckSetup/utils.ts @@ -13,6 +13,7 @@ import { } from '@opentrons/shared-data' import { getOnlyLatestDefs } from '../../../labware-defs' +import { getStagingAreaAddressableAreas } from '../../../utils' import { FLEX_MODULE_MODELS, OT2_MODULE_MODELS, @@ -29,7 +30,12 @@ import type { ModuleModel, RobotType, } from '@opentrons/shared-data' -import type { InitialDeckSetup } from '../../../step-forms' +import type { + AllTemporalPropertiesForTimelineFrame, + InitialDeckSetup, + LabwareOnDeck, +} from '../../../step-forms' +import type { Fixture } from './constants' const OT2_TC_SLOTS = ['7', '8', '10', '11'] const FLEX_TC_SLOTS = ['A1', 'B1'] @@ -255,3 +261,22 @@ export function animateZoom(props: AnimateZoomProps): void { } requestAnimationFrame(animate) } + +export const getAdjacentLabware = ( + fixture: Fixture, + cutout: CutoutId, + labware: AllTemporalPropertiesForTimelineFrame['labware'] +): LabwareOnDeck | null => { + let adjacentLabware: LabwareOnDeck | null = null + if (fixture === 'stagingArea' || fixture === 'wasteChuteAndStagingArea') { + const stagingAreaAddressableAreaName = getStagingAreaAddressableAreas([ + cutout, + ]) + + adjacentLabware = + Object.values(labware).find( + lw => lw.slot === stagingAreaAddressableAreaName[0] + ) ?? null + } + return adjacentLabware +} diff --git a/protocol-designer/src/pages/Designer/__tests__/utils.test.ts b/protocol-designer/src/pages/Designer/__tests__/utils.test.ts index b1faa3f0d67..6be91d71b2a 100644 --- a/protocol-designer/src/pages/Designer/__tests__/utils.test.ts +++ b/protocol-designer/src/pages/Designer/__tests__/utils.test.ts @@ -117,6 +117,7 @@ describe('getSlotInformation', () => { expect( getSlotInformation({ deckSetup: mockOt2DeckSetup, slot: '1' }) ).toEqual({ + matchingLabwareFor4thColumn: null, createdModuleForSlot: mockHS, createdLabwareForSlot: mockLabOnDeck1, createdNestedLabwareForSlot: mockLabOnDeck2, @@ -128,6 +129,7 @@ describe('getSlotInformation', () => { expect( getSlotInformation({ deckSetup: mockOt2DeckSetup, slot: '2' }) ).toEqual({ + matchingLabwareFor4thColumn: null, createdLabwareForSlot: mockLabOnDeck3, createFixtureForSlots: [], slotPosition: null, @@ -142,12 +144,17 @@ describe('getSlotInformation', () => { } expect( getSlotInformation({ deckSetup: mockDeckSetup, slot: 'A1' }) - ).toEqual({ slotPosition: null, createFixtureForSlots: [] }) + ).toEqual({ + matchingLabwareFor4thColumn: null, + slotPosition: null, + createFixtureForSlots: [], + }) }) it('renders a trashbin for a Flex on slot A3', () => { expect( getSlotInformation({ deckSetup: mockFlex2DeckSetup, slot: 'A3' }) ).toEqual({ + matchingLabwareFor4thColumn: null, slotPosition: null, createFixtureForSlots: [mockTrash], preSelectedFixture: 'trashBin', @@ -157,6 +164,7 @@ describe('getSlotInformation', () => { expect( getSlotInformation({ deckSetup: mockFlex2DeckSetup, slot: 'D1' }) ).toEqual({ + matchingLabwareFor4thColumn: null, slotPosition: null, createdModuleForSlot: mockHSFlex, createdLabwareForSlot: mockLabOnDeck1, @@ -168,6 +176,7 @@ describe('getSlotInformation', () => { expect( getSlotInformation({ deckSetup: mockFlex2DeckSetup, slot: 'D3' }) ).toEqual({ + matchingLabwareFor4thColumn: mockLabOnStagingArea, slotPosition: null, createFixtureForSlots: [mockWasteChute, mockStagingArea], preSelectedFixture: 'wasteChuteAndStagingArea', @@ -177,6 +186,7 @@ describe('getSlotInformation', () => { expect( getSlotInformation({ deckSetup: mockFlex2DeckSetup, slot: 'D4' }) ).toEqual({ + matchingLabwareFor4thColumn: null, slotPosition: null, createdLabwareForSlot: mockLabOnStagingArea, createFixtureForSlots: [mockWasteChute, mockStagingArea], diff --git a/protocol-designer/src/pages/Designer/utils.ts b/protocol-designer/src/pages/Designer/utils.ts index c940e12c8d5..3110f9d519d 100644 --- a/protocol-designer/src/pages/Designer/utils.ts +++ b/protocol-designer/src/pages/Designer/utils.ts @@ -1,9 +1,14 @@ import { getPositionFromSlotId } from '@opentrons/shared-data' +import { getStagingAreaAddressableAreas } from '../../utils' import type { AdditionalEquipmentName, DeckSlot, } from '@opentrons/step-generation' -import type { CoordinateTuple, DeckDefinition } from '@opentrons/shared-data' +import type { + CoordinateTuple, + CutoutId, + DeckDefinition, +} from '@opentrons/shared-data' import type { AllTemporalPropertiesForTimelineFrame, LabwareOnDeck, @@ -18,6 +23,7 @@ interface AdditionalEquipment { } interface SlotInformation { + matchingLabwareFor4thColumn: LabwareOnDeck | null slotPosition: CoordinateTuple | null createdModuleForSlot?: ModuleOnDeck createdLabwareForSlot?: LabwareOnDeck @@ -66,6 +72,24 @@ export const getSlotInformation = ( } ) + const fixturesOnSlot = Object.values(additionalEquipmentOnDeck).filter( + ae => ae.location?.split('cutout')[1] === slot + ) + const stagingAreaCutout = fixturesOnSlot.find( + fixture => fixture.name === 'stagingArea' + )?.location + + let matchingLabware: LabwareOnDeck | null = null + if (stagingAreaCutout != null) { + const stagingAreaAddressableAreaName = getStagingAreaAddressableAreas([ + stagingAreaCutout, + ] as CutoutId[]) + matchingLabware = + Object.values(deckSetupLabware).find( + lw => lw.slot === stagingAreaAddressableAreaName[0] + ) ?? null + } + const preSelectedFixture = createFixtureForSlots != null && createFixtureForSlots.length === 2 ? ('wasteChuteAndStagingArea' as Fixture) @@ -78,5 +102,6 @@ export const getSlotInformation = ( createFixtureForSlots, preSelectedFixture, slotPosition: slotPosition, + matchingLabwareFor4thColumn: matchingLabware, } } From 06cde70e048b5927a1dbb595d0e334a8f607b67b Mon Sep 17 00:00:00 2001 From: connected-znaim <60662281+connected-znaim@users.noreply.github.com> Date: Wed, 6 Nov 2024 11:43:08 -0500 Subject: [PATCH 68/81] feat(opentrons-ai-client): Created an update protocol page (#16569) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …ol page basic layout # Overview Added a new page that allows us to upload an existing protocol for modification. It has error states for file size is zero and when uploading a non-python file. Drop down options are: const updateOptions: DropdownOption[] = [ { name: 'Adapt Python protocol from OT-2 to Flex', value: 'adapt_python_protocol', }, { name: 'Change labware', value: 'change_labware' }, { name: 'Change pipettes', value: 'change_pipettes' }, { name: 'Other', value: 'other' }, ] START STATE: image EMPTY FILE: image NON-PYTHON FILE: image ALL FIELDS FILLED OUT: image ## Test Plan and Hands on Testing Tested non python files and empty python files. Made sure the prompt text is correctly modified to include the fields filled out. ## Changelog ## Review requests ## Risk assessment --------- Co-authored-by: FELIPE BELGINE --- opentrons-ai-client/src/OpentronsAIRoutes.tsx | 10 +- .../localization/en/protocol_generator.json | 13 + .../src/molecules/ChatDisplay/index.tsx | 2 + .../src/molecules/FileUpload/index.tsx | 74 +++++ .../src/molecules/InputPrompt/index.tsx | 14 +- .../src/molecules/UploadInput/index.tsx | 168 ++++++++++ .../__tests__/MainContentContainer.test.tsx | 1 - .../organisms/MainContentContainer/index.tsx | 12 +- .../__tests__/UpdateProtocol.test.tsx | 125 ++++++++ .../src/organisms/UpdateProtocol/index.tsx | 287 ++++++++++++++++++ opentrons-ai-client/src/pages/Chat/index.tsx | 38 +++ opentrons-ai-client/src/resources/atoms.ts | 3 + 12 files changed, 732 insertions(+), 15 deletions(-) create mode 100644 opentrons-ai-client/src/molecules/FileUpload/index.tsx create mode 100644 opentrons-ai-client/src/molecules/UploadInput/index.tsx create mode 100644 opentrons-ai-client/src/organisms/UpdateProtocol/__tests__/UpdateProtocol.test.tsx create mode 100644 opentrons-ai-client/src/organisms/UpdateProtocol/index.tsx create mode 100644 opentrons-ai-client/src/pages/Chat/index.tsx diff --git a/opentrons-ai-client/src/OpentronsAIRoutes.tsx b/opentrons-ai-client/src/OpentronsAIRoutes.tsx index b790b262ebe..32d09f351cf 100644 --- a/opentrons-ai-client/src/OpentronsAIRoutes.tsx +++ b/opentrons-ai-client/src/OpentronsAIRoutes.tsx @@ -1,10 +1,18 @@ import { Route, Navigate, Routes } from 'react-router-dom' import { Landing } from './pages/Landing' +import { UpdateProtocol } from './organisms/UpdateProtocol' import type { RouteProps } from './resources/types' +import { Chat } from './pages/Chat' import { CreateProtocol } from './pages/CreateProtocol' const opentronsAIRoutes: RouteProps[] = [ + { + Component: Chat, + name: 'Chat', + navLinkTo: '/chat', + path: '/chat', + }, { Component: CreateProtocol, name: 'Create A New Protocol', @@ -12,7 +20,7 @@ const opentronsAIRoutes: RouteProps[] = [ path: '/new-protocol', }, { - Component: Landing, + Component: UpdateProtocol, name: 'Update An Existing Protocol', navLinkTo: '/update-protocol', path: '/update-protocol', diff --git a/opentrons-ai-client/src/assets/localization/en/protocol_generator.json b/opentrons-ai-client/src/assets/localization/en/protocol_generator.json index 0f38061ff47..e3e23b4f0d3 100644 --- a/opentrons-ai-client/src/assets/localization/en/protocol_generator.json +++ b/opentrons-ai-client/src/assets/localization/en/protocol_generator.json @@ -5,8 +5,11 @@ "commands": "Commands: List the protocol's steps, specifying quantities in microliters (uL) and giving exact source and destination locations.", "copyright": "Copyright © 2024 Opentrons", "copy_code": "Copy code", + "choose_file": "Choose file", "disclaimer": "OpentronsAI can make mistakes. Review your protocol before running it on an Opentrons robot.", + "drag_and_drop": "Drag and drop or browse your files", "example": "For example prompts, click the buttons in the left panel.", + "file_length_error": "The length of the file contents is 0. Please upload a file with content.", "exit": "Exit", "exit_confirmation_title": "Are you sure you want to exit?", "exit_confirmation_body": "Exiting now will discard your progress.", @@ -26,6 +29,10 @@ "login": "Login", "logout": "Logout", "make_sure_your_prompt": "Write a prompt in a natural language for OpentronsAI to generate a protocol using the Opentrons Python Protocol API v2. The better the prompt, the better the quality of the protocol produced by OpentronsAI.", + "modify_intro": "Modify the following Python code using the Opentrons Python Protocol API v2. Ensure that the new labware and pipettes are compatible with the Flex robot. Ensure that you perform the correct Type of Update use the Details of Changes.\n\n", + "modify_python_code": "Original Python Code:\n", + "modify_type_of_update": "Type of update:\n- ", + "modify_details_of_change": "Details of Changes:\n- ", "modules_and_adapters": "Modules and adapters: Specify the modules and labware adapters required by your protocol.", "notes": "A few important things to note:", "opentrons": "Opentrons", @@ -35,6 +42,9 @@ "pcr": "PCR", "pipettes": "Pipettes: Specify your pipettes, including the volume, number of channels, and whether they’re mounted on the left or right.", "privacy_policy": "By continuing, you agree to the Opentrons Privacy Policy and End user license agreement", + "protocol_file": "Protocol file", + "provide_details_of_changes": "Provide details of changes you want to make", + "python_file_type_error": "Python file type required", "reagent_transfer_flex": "Reagent Transfer (Flex)", "reagent_transfer": "Reagent Transfer", "reload_page": "To start over and create a new protocol, simply reload the page.", @@ -44,8 +54,11 @@ "side_panel_body": "Write a prompt in natural language to generate a Reagent Transfer or a PCR protocol for the OT-2 or Opentrons Flex using the Opentrons Python Protocol API.", "side_panel_header": "Use natural language to generate protocols with OpentronsAI powered by OpenAI", "simulate_description": "Once OpentronsAI has written your protocol, type `simulate` in the prompt box to try it out.", + "submit_prompt": "Submit prompt", "try_example_prompts": "Stuck? Try these example prompts to get started.", + "type_of_update": "Type of update", "type_your_prompt": "Type your prompt...", + "update_existing_protocol": "Update an existing protocol", "well_allocations": "Well allocations: Describe where liquids should go in labware.", "what_if_you": "What if you don’t provide all of those pieces of information? OpentronsAI asks you to provide it!", "what_typeof_protocol": "What type of protocol do you need?", diff --git a/opentrons-ai-client/src/molecules/ChatDisplay/index.tsx b/opentrons-ai-client/src/molecules/ChatDisplay/index.tsx index 4eaa840dbcb..dd39d415acc 100644 --- a/opentrons-ai-client/src/molecules/ChatDisplay/index.tsx +++ b/opentrons-ai-client/src/molecules/ChatDisplay/index.tsx @@ -18,6 +18,7 @@ import { SPACING, LegacyStyledText, TYPOGRAPHY, + OVERFLOW_AUTO, } from '@opentrons/components' import type { ChatData } from '../../resources/types' @@ -63,6 +64,7 @@ export function ChatDisplay({ chat, chatId }: ChatDisplayProps): JSX.Element { data-testid={`ChatDisplay_from_${isUser ? 'user' : 'backend'}`} borderRadius={BORDERS.borderRadius12} width="100%" + overflowY={OVERFLOW_AUTO} flexDirection={DIRECTION_COLUMN} gridGap={SPACING.spacing16} position={POSITION_RELATIVE} diff --git a/opentrons-ai-client/src/molecules/FileUpload/index.tsx b/opentrons-ai-client/src/molecules/FileUpload/index.tsx new file mode 100644 index 00000000000..551c3d0bd05 --- /dev/null +++ b/opentrons-ai-client/src/molecules/FileUpload/index.tsx @@ -0,0 +1,74 @@ +import { css } from 'styled-components' + +import { + ALIGN_CENTER, + BORDERS, + Btn, + COLORS, + DIRECTION_COLUMN, + Flex, + Icon, + JUSTIFY_SPACE_BETWEEN, + SPACING, + LegacyStyledText, + truncateString, +} from '@opentrons/components' + +const FILE_UPLOAD_STYLE = css` + +&:hover > svg { + background: ${COLORS.black90}${COLORS.opacity20HexCode}; +} +&:active > svg { + background: ${COLORS.black90}${COLORS.opacity20HexCode}}; +} +` + +const FILE_UPLOAD_FOCUS_VISIBLE = css` + &:focus-visible { + border-radius: ${BORDERS.borderRadius4}; + box-shadow: 0 0 0 ${SPACING.spacing2} ${COLORS.blue50}; + } +` + +interface FileUploadProps { + file: File + fileError: string | null + handleClick: () => unknown +} + +export function FileUpload({ + file, + fileError, + handleClick, +}: FileUploadProps): JSX.Element { + return ( + + + + + {truncateString(file.name, 34, 19)} + + + + + {fileError != null ? ( + + {fileError} + + ) : null} + + ) +} diff --git a/opentrons-ai-client/src/molecules/InputPrompt/index.tsx b/opentrons-ai-client/src/molecules/InputPrompt/index.tsx index d4c4cdf5f8d..70ee01560f4 100644 --- a/opentrons-ai-client/src/molecules/InputPrompt/index.tsx +++ b/opentrons-ai-client/src/molecules/InputPrompt/index.tsx @@ -15,7 +15,12 @@ import { TYPOGRAPHY, } from '@opentrons/components' import { SendButton } from '../../atoms/SendButton' -import { chatDataAtom, chatHistoryAtom, tokenAtom } from '../../resources/atoms' +import { + chatDataAtom, + chatHistoryAtom, + chatPromptAtom, + tokenAtom, +} from '../../resources/atoms' import { useApiCall } from '../../resources/hooks' import { calcTextAreaHeight } from '../../resources/utils/utils' import { @@ -29,7 +34,8 @@ import type { ChatData } from '../../resources/types' export function InputPrompt(): JSX.Element { const { t } = useTranslation('protocol_generator') - const { register, watch, reset } = useFormContext() + const { register, watch, reset, setValue } = useFormContext() + const [chatPromptAtomValue] = useAtom(chatPromptAtom) const [, setChatData] = useAtom(chatDataAtom) const [chatHistory, setChatHistory] = useAtom(chatHistoryAtom) const [token] = useAtom(tokenAtom) @@ -37,6 +43,10 @@ export function InputPrompt(): JSX.Element { const userPrompt = watch('userPrompt') ?? '' const { data, isLoading, callApi } = useApiCall() + useEffect(() => { + setValue('userPrompt', chatPromptAtomValue) + }, [chatPromptAtomValue, setValue]) + const handleClick = async (): Promise => { const userInput: ChatData = { role: 'user', diff --git a/opentrons-ai-client/src/molecules/UploadInput/index.tsx b/opentrons-ai-client/src/molecules/UploadInput/index.tsx new file mode 100644 index 00000000000..77dc5a2616d --- /dev/null +++ b/opentrons-ai-client/src/molecules/UploadInput/index.tsx @@ -0,0 +1,168 @@ +import * as React from 'react' +import styled, { css } from 'styled-components' +import { useTranslation } from 'react-i18next' +import { + ALIGN_CENTER, + BORDERS, + COLORS, + CURSOR_POINTER, + DIRECTION_COLUMN, + DISPLAY_FLEX, + Flex, + Icon, + JUSTIFY_CENTER, + LegacyStyledText, + POSITION_FIXED, + PrimaryButton, + SPACING, + TYPOGRAPHY, +} from '@opentrons/components' + +const StyledLabel = styled.label` + display: ${DISPLAY_FLEX}; + cursor: ${CURSOR_POINTER}; + flex-direction: ${DIRECTION_COLUMN}; + align-items: ${ALIGN_CENTER}; + width: 100%; + padding: ${SPACING.spacing32}; + border: 2px dashed ${COLORS.grey30}; + border-radius: ${BORDERS.borderRadius4}; + text-align: ${TYPOGRAPHY.textAlignCenter}; + background-color: ${COLORS.white}; + + &:hover { + border: 2px dashed ${COLORS.blue50}; + } +` +const DRAG_OVER_STYLES = css` + border: 2px dashed ${COLORS.blue50}; +` + +const StyledInput = styled.input` + position: ${POSITION_FIXED}; + clip: rect(1px 1px 1px 1px); +` + +export interface UploadInputProps { + /** Callback function that is called when a file is uploaded. */ + onUpload: (file: File) => unknown + /** Optional callback function that is called when the upload button is clicked. */ + onClick?: () => void + /** Optional text for the upload button. If undefined, the button displays Upload */ + uploadButtonText?: string + /** Optional text or JSX element that is displayed above the upload button. */ + uploadText?: string | JSX.Element + /** Optional text or JSX element that is displayed in the drag and drop area. */ + dragAndDropText?: string | JSX.Element +} + +export function UploadInput(props: UploadInputProps): JSX.Element | null { + const { + dragAndDropText, + onClick, + onUpload, + uploadButtonText, + uploadText, + } = props + const { t } = useTranslation('protocol_info') + + const fileInput = React.useRef(null) + const [isFileOverDropZone, setIsFileOverDropZone] = React.useState( + false + ) + const [isHover, setIsHover] = React.useState(false) + const handleDrop: React.DragEventHandler = e => { + e.preventDefault() + e.stopPropagation() + Array.from(e.dataTransfer.files).forEach(f => onUpload(f)) + setIsFileOverDropZone(false) + } + const handleDragEnter: React.DragEventHandler = e => { + e.preventDefault() + e.stopPropagation() + } + const handleDragLeave: React.DragEventHandler = e => { + e.preventDefault() + e.stopPropagation() + setIsFileOverDropZone(false) + setIsHover(false) + } + const handleDragOver: React.DragEventHandler = e => { + e.preventDefault() + e.stopPropagation() + setIsFileOverDropZone(true) + setIsHover(true) + } + + const handleClick: React.MouseEventHandler = _event => { + onClick != null ? onClick() : fileInput.current?.click() + } + + const onChange: React.ChangeEventHandler = event => { + ;[...(event.target.files ?? [])].forEach(f => onUpload(f)) + if ('value' in event.currentTarget) event.currentTarget.value = '' + } + + return ( + + {uploadText != null ? ( + <> + {typeof uploadText === 'string' ? ( + + {uploadText} + + ) : ( + <>{uploadText} + )} + + ) : null} + + {uploadButtonText ?? t('upload')} + + + { + setIsHover(true) + }} + onMouseLeave={() => { + setIsHover(false) + }} + css={isFileOverDropZone ? DRAG_OVER_STYLES : undefined} + > + + {dragAndDropText} + + + + ) +} diff --git a/opentrons-ai-client/src/organisms/MainContentContainer/__tests__/MainContentContainer.test.tsx b/opentrons-ai-client/src/organisms/MainContentContainer/__tests__/MainContentContainer.test.tsx index 4598eddc49e..d3014a5895b 100644 --- a/opentrons-ai-client/src/organisms/MainContentContainer/__tests__/MainContentContainer.test.tsx +++ b/opentrons-ai-client/src/organisms/MainContentContainer/__tests__/MainContentContainer.test.tsx @@ -25,7 +25,6 @@ describe('MainContentContainer', () => { it('should render prompt guide and text', () => { render() - screen.getByText('OpentronsAI') screen.getByText('mock PromptGuide') screen.getByText('mock ChatFooter') }) diff --git a/opentrons-ai-client/src/organisms/MainContentContainer/index.tsx b/opentrons-ai-client/src/organisms/MainContentContainer/index.tsx index b5b495a691e..cc2ad54bc39 100644 --- a/opentrons-ai-client/src/organisms/MainContentContainer/index.tsx +++ b/opentrons-ai-client/src/organisms/MainContentContainer/index.tsx @@ -1,15 +1,12 @@ import { useRef, useEffect } from 'react' -import { useTranslation } from 'react-i18next' import styled from 'styled-components' import { useAtom } from 'jotai' import { - COLORS, DIRECTION_COLUMN, Flex, OVERFLOW_AUTO, SPACING, - LegacyStyledText, } from '@opentrons/components' import { PromptGuide } from '../../molecules/PromptGuide' import { ChatDisplay } from '../../molecules/ChatDisplay' @@ -17,7 +14,6 @@ import { ChatFooter } from '../../molecules/ChatFooter' import { chatDataAtom } from '../../resources/atoms' export function MainContentContainer(): JSX.Element { - const { t } = useTranslation('protocol_generator') const [chatData] = useAtom(chatDataAtom) const scrollRef = useRef(null) @@ -32,14 +28,11 @@ export function MainContentContainer(): JSX.Element { return ( - {/* Prompt Guide remain as a reference for users. */} - {t('opentronsai')} @@ -74,6 +65,5 @@ export function MainContentContainer(): JSX.Element { const ChatDataContainer = styled(Flex)` flex-direction: ${DIRECTION_COLUMN}; - grid-gap: ${SPACING.spacing40}; width: 100%; ` diff --git a/opentrons-ai-client/src/organisms/UpdateProtocol/__tests__/UpdateProtocol.test.tsx b/opentrons-ai-client/src/organisms/UpdateProtocol/__tests__/UpdateProtocol.test.tsx new file mode 100644 index 00000000000..04c3ad3b167 --- /dev/null +++ b/opentrons-ai-client/src/organisms/UpdateProtocol/__tests__/UpdateProtocol.test.tsx @@ -0,0 +1,125 @@ +import { fireEvent, screen, waitFor } from '@testing-library/react' +import { describe, it, vi, beforeEach, expect } from 'vitest' +import { renderWithProviders } from '../../../__testing-utils__' +import type { NavigateFunction } from 'react-router-dom' + +import { UpdateProtocol } from '../index' +import { i18n } from '../../../i18n' + +// global.Blob = BlobPolyfill as any +global.Blob = require('node:buffer').Blob + +const mockNavigate = vi.fn() +const mockUseTrackEvent = vi.fn() +const mockUseChatData = vi.fn() + +vi.mock('../../../resources/hooks/useTrackEvent', () => ({ + useTrackEvent: () => mockUseTrackEvent, +})) + +File.prototype.text = vi.fn().mockResolvedValue('test file content') + +vi.mock('../../../resources/chatDataAtom', () => ({ + chatDataAtom: () => mockUseChatData, +})) + +vi.mock('react-router-dom', async importOriginal => { + const reactRouterDom = await importOriginal() + return { + ...reactRouterDom, + useNavigate: () => mockNavigate, + } +}) + +const render = () => { + return renderWithProviders(, { + i18nInstance: i18n, + }) +} + +describe('Update Protocol', () => { + beforeEach(() => { + vi.clearAllMocks() + }) + + it('should render', () => { + render() + expect(screen.getByText('Update an existing protocol')).toBeInTheDocument() + expect(screen.getByText('Choose file')).toBeInTheDocument() + expect(screen.getByText('Protocol file')).toBeInTheDocument() + expect(screen.getByText('Choose file')).toBeInTheDocument() + expect(screen.getByText('Type of update')).toBeInTheDocument() + expect(screen.getByText('Select an option')).toBeInTheDocument() + expect( + screen.getByText('Provide details of changes you want to make') + ).toBeInTheDocument() + }) + + it('should update the file value when the file is uploaded', async () => { + render() + + const blobParts: BlobPart[] = [ + 'x = 1\n', + 'x = 2\n', + 'x = 3\n', + 'x = 4\n', + 'print("x is 1.")\n', + ] + + const file = new File(blobParts, 'test-file.py', { type: 'text/python' }) + + fireEvent.drop(screen.getByTestId('file_drop_zone'), { + dataTransfer: { + files: [file], + }, + }) + + await waitFor(() => { + expect(screen.getByText('test-file.py')).toBeInTheDocument() + }) + }) + + it('should not proceed when you click the submit prompt when the progress percentage is not 1.0', () => { + render() + expect(mockNavigate).not.toHaveBeenCalled() + }) + + it.skip('should call navigate to the chat page when the submit prompt button is clicked when progress is 1.0', async () => { + render() + + // upload file + const blobParts: BlobPart[] = [ + 'x = 1\n', + 'x = 2\n', + 'x = 3\n', + 'x = 4\n', + 'print("x is 1.")\n', + ] + const file = new File(blobParts, 'test-file.py', { type: 'text/python' }) + fireEvent.drop(screen.getByTestId('file_drop_zone'), { + dataTransfer: { + files: [file], + }, + }) + + // input description + const describeInput = screen.getByRole('textbox') + fireEvent.change(describeInput, { target: { value: 'Test description' } }) + + expect(screen.getByDisplayValue('Test description')).toBeInTheDocument() + + // select update type + const applicationDropdown = screen.getByText('Select an option') + fireEvent.click(applicationDropdown) + + const basicOtherOption = screen.getByText('Other') + fireEvent.click(basicOtherOption) + + const submitPromptButton = screen.getByText('Submit prompt') + await waitFor(() => { + expect(submitPromptButton).toBeEnabled() + submitPromptButton.click() + }) + expect(mockNavigate).toHaveBeenCalledWith('/chat') + }) +}) diff --git a/opentrons-ai-client/src/organisms/UpdateProtocol/index.tsx b/opentrons-ai-client/src/organisms/UpdateProtocol/index.tsx new file mode 100644 index 00000000000..f0f8f4c7e12 --- /dev/null +++ b/opentrons-ai-client/src/organisms/UpdateProtocol/index.tsx @@ -0,0 +1,287 @@ +import styled from 'styled-components' +import { + COLORS, + DIRECTION_COLUMN, + DIRECTION_ROW, + Flex, + InputField, + JUSTIFY_CENTER, + JUSTIFY_END, + LargeButton, + StyledText, + Link as LinkComponent, + DropdownMenu, +} from '@opentrons/components' +import type { DropdownOption } from '@opentrons/components' +import { UploadInput } from '../../molecules/UploadInput' +import { useEffect, useState } from 'react' +import type { ChangeEvent } from 'react' +import { Trans, useTranslation } from 'react-i18next' +import { FileUpload } from '../../molecules/FileUpload' +import { useNavigate } from 'react-router-dom' +import { chatPromptAtom, headerWithMeterAtom } from '../../resources/atoms' +import { CSSTransition } from 'react-transition-group' +import { useAtom } from 'jotai' + +const updateOptions: DropdownOption[] = [ + { + name: 'Adapt Python protocol from OT-2 to Flex', + value: 'adapt_python_protocol', + }, + { name: 'Change labware', value: 'change_labware' }, + { name: 'Change pipettes', value: 'change_pipettes' }, + { name: 'Other', value: 'other' }, +] + +const FadeWrapper = styled.div` + &.fade-enter { + opacity: 0; + } + &.fade-enter-active { + opacity: 1; + transition: opacity 1000ms; + } + &.fade-exit { + height: 100%; + opacity: 1; + } + &.fade-exit-active { + opacity: 0; + height: 0%; + transition: opacity 1000ms; + } +` + +const Container = styled(Flex)` + width: 100%; + flex-direction: ${DIRECTION_COLUMN}; + align-items: ${JUSTIFY_CENTER}; +` + +const Spacer = styled(Flex)` + height: 16px; +` + +const ContentBox = styled(Flex)` + background-color: white; + border-radius: 16px; + flex-direction: ${DIRECTION_COLUMN}; + justify-content: ${JUSTIFY_CENTER}; + padding: 32px 24px; + width: 60%; +` + +const HeadingText = styled(StyledText).attrs({ + desktopStyle: 'headingSmallBold', +})`` + +const BodyText = styled(StyledText).attrs({ + color: COLORS.grey60, + desktopStyle: 'bodyDefaultRegular', + paddingBottom: '8px', + paddingTop: '16px', +})`` + +const isValidProtocolFileName = (protocolFileName: string): boolean => { + return protocolFileName.endsWith('.py') +} + +export function UpdateProtocol(): JSX.Element { + const navigate = useNavigate() + const { t }: { t: (key: string) => string } = useTranslation( + 'protocol_generator' + ) + const [, setChatPrompt] = useAtom(chatPromptAtom) + const [headerState, setHeaderWithMeterAtom] = useAtom(headerWithMeterAtom) + const [updateType, setUpdateType] = useState(null) + const [detailsValue, setDetailsValue] = useState('') + const [fileValue, setFile] = useState(null) + const [pythonText, setPythonTextValue] = useState('') + const [errorText, setErrorText] = useState(null) + + useEffect(() => { + let progress = 0.0 + if (updateType !== null) { + progress += 0.33 + } + + if (detailsValue !== '') { + progress += 0.33 + } + + if (pythonText !== '' && fileValue !== null && errorText === null) { + progress += 0.34 + } + + setHeaderWithMeterAtom({ + displayHeaderWithMeter: true, + progress, + }) + }, [ + updateType, + detailsValue, + pythonText, + errorText, + fileValue, + setHeaderWithMeterAtom, + ]) + + const handleInputChange = (event: ChangeEvent): void => { + setDetailsValue(event.target.value) + } + + const handleFileUpload = async ( + file: File & { name: string } + ): Promise => { + if (isValidProtocolFileName(file.name)) { + const text = await file.text().catch(error => { + console.error('Error reading file:', error) + setErrorText(t('python_file_read_error')) + }) + + if (typeof text === 'string' && text !== '') { + setErrorText(null) + console.log('File read successfully:\n', text) + setPythonTextValue(text) + } else { + setErrorText(t('file_length_error')) + } + + setFile(file) + } else { + setErrorText(t('python_file_type_error')) + setFile(file) + } + } + + function processDataAndNavigateToChat(): void { + const introText = t('modify_intro') + const originalCodeText = + t('modify_python_code') + `\`\`\`python\n` + pythonText + `\n\`\`\`\n\n` + const updateTypeText = + t('modify_type_of_update') + updateType?.value + `\n\n` + const detailsText = t('modify_details_of_change') + detailsValue + '\n' + + const chatPrompt = `${introText}${originalCodeText}${updateTypeText}${detailsText}` + + console.log(chatPrompt) + + setChatPrompt(chatData => chatPrompt) + navigate('/chat') + } + + return ( + + + + {t('update_existing_protocol')} + {t('protocol_file')} + + + + {fileValue !== null ? ( + + + + ) : null} + + + + + + + + ), + }} + /> + + } + onUpload={async function (file: File) { + try { + await handleFileUpload(file) + } catch (error) { + // todo perhaps make this a toast? + console.error('Error uploading file:', error) + } + }} + /> + + + + + + { + const selectedOption = updateOptions.find(v => v.value === value) + if (selectedOption != null) { + setUpdateType(selectedOption) + } + }} + /> + + {t('provide_details_of_changes')} + + + + + + + ) +} diff --git a/opentrons-ai-client/src/pages/Chat/index.tsx b/opentrons-ai-client/src/pages/Chat/index.tsx new file mode 100644 index 00000000000..6d9492038b8 --- /dev/null +++ b/opentrons-ai-client/src/pages/Chat/index.tsx @@ -0,0 +1,38 @@ +import { useForm, FormProvider } from 'react-hook-form' +import { + DIRECTION_COLUMN, + DIRECTION_ROW, + Flex, + JUSTIFY_CENTER, + POSITION_RELATIVE, +} from '@opentrons/components' + +import { MainContentContainer } from '../../organisms/MainContentContainer' + +export interface InputType { + userPrompt: string +} + +export function Chat(): JSX.Element | null { + const methods = useForm({ + defaultValues: { + userPrompt: '', + }, + }) + + return ( + + + + {/* */} + + + + + ) +} diff --git a/opentrons-ai-client/src/resources/atoms.ts b/opentrons-ai-client/src/resources/atoms.ts index 229e9fbe739..b92f3e848f5 100644 --- a/opentrons-ai-client/src/resources/atoms.ts +++ b/opentrons-ai-client/src/resources/atoms.ts @@ -11,6 +11,9 @@ import type { /** ChatDataAtom is for chat data (user prompt and response from OpenAI API) */ export const chatDataAtom = atom([]) +/** ChatPromptAtom is for the prefilled userprompt when landing on the chat page */ +export const chatPromptAtom = atom('') + export const chatHistoryAtom = atom([]) export const tokenAtom = atom(null) From a065ef4069206c60734a21f24d6e5fbf27d8463c Mon Sep 17 00:00:00 2001 From: Jethary Alcid <66035149+jerader@users.noreply.github.com> Date: Wed, 6 Nov 2024 12:54:38 -0500 Subject: [PATCH 69/81] fix(protocol-designer): single item dropdown update the value automatically (#16704) --- .../molecules/DropdownStepFormField/index.tsx | 9 +++- .../StepForm/PipetteFields/LabwareField.tsx | 1 - .../StepTools/HeaterShakerTools/index.tsx | 37 +++------------- .../StepTools/TemperatureTools/index.tsx | 43 ++++--------------- 4 files changed, 21 insertions(+), 69 deletions(-) diff --git a/protocol-designer/src/molecules/DropdownStepFormField/index.tsx b/protocol-designer/src/molecules/DropdownStepFormField/index.tsx index 869d272ddde..39da4a74ca9 100644 --- a/protocol-designer/src/molecules/DropdownStepFormField/index.tsx +++ b/protocol-designer/src/molecules/DropdownStepFormField/index.tsx @@ -1,4 +1,5 @@ import { useTranslation } from 'react-i18next' +import { useEffect } from 'react' import { COLORS, DIRECTION_COLUMN, @@ -36,9 +37,15 @@ export function DropdownStepFormField( const { t } = useTranslation('tooltip') const availableOptionId = options.find(opt => opt.value === value) + useEffect(() => { + if (options.length === 1) { + updateValue(options[0].value) + } + }, []) + return ( - {options.length > 1 ? ( + {options.length > 1 || options.length === 0 ? ( { - if (moduleLabwareOptions.length === 1) { - propsForFields.moduleId.updateValue(moduleLabwareOptions[0].value) - } - }, []) - const mappedErrorsToField = getFormErrorsMappedToField(visibleFormErrors) return ( - {moduleLabwareOptions.length > 1 ? ( - - ) : ( - - - {t('protocol_steps:module')} - - - - - {moduleLabwareOptions[0].name} - - - - - )} + { - if (moduleLabwareOptions.length === 1) { - propsForFields.moduleId.updateValue(moduleLabwareOptions[0].value) - } - }, []) - return ( - {moduleLabwareOptions.length > 1 ? ( - - ) : ( - - - {t('protocol_steps:module')} - - - - - {moduleLabwareOptions[0].name} - - - - - )} + {temperatureModuleIds != null ? temperatureModuleIds.map(id => @@ -73,7 +46,7 @@ export function TemperatureTools(props: StepFormProps): JSX.Element { ) => { + onChange={(e: ChangeEvent) => { propsForFields.setTemperature.updateValue( e.currentTarget.value ) @@ -96,7 +69,7 @@ export function TemperatureTools(props: StepFormProps): JSX.Element { ) => { + onChange={(e: ChangeEvent) => { propsForFields.setTemperature.updateValue( e.currentTarget.value ) From ac0035155b884e4f51b1f559d006d2ddcafb4fe6 Mon Sep 17 00:00:00 2001 From: fbelginetw <167361860+fbelginetw@users.noreply.github.com> Date: Wed, 6 Nov 2024 14:08:52 -0500 Subject: [PATCH 70/81] Opentrons ai client modules (#16673) # Overview This PR adds the Modules section to the create protocol flow. ![image](https://github.com/user-attachments/assets/38c69931-0de2-44d7-892a-b1c75ceb5133) ## Test Plan and Hands on Testing - On the landing page click Create a new protocol button, you will be redirected to the new page - fill up the required information in the Application and Instruments sections and click Confirm - You now can add a module and an adapter (modules are not required) - The Prompt Preview component is updated with the data entered. ## Changelog - Add Modules section to create protocol flow ## Review requests - Verify new section. ## Risk assessment - low --- .../modules/MagneticBlock_GEN1_HERO.png | Bin 0 -> 145604 bytes .../heater_shaker_module_transparent.png | Bin 0 -> 15967 bytes .../assets/images/modules/heatershaker.png | Bin 0 -> 11421 bytes .../src/assets/images/modules/mag_block.png | Bin 0 -> 711514 bytes .../assets/images/modules/magdeck_gen1.png | Bin 0 -> 6024 bytes .../assets/images/modules/magdeck_gen2.png | Bin 0 -> 6097 bytes .../modules/magdeck_tempdeck_combined.png | Bin 0 -> 32741 bytes .../module_pipette_collision_warning.png | Bin 0 -> 1972 bytes .../modules/temp_deck_gen_2_transparent.png | Bin 0 -> 13118 bytes .../assets/images/modules/tempdeck_gen1.png | Bin 0 -> 6297 bytes .../assets/images/modules/tempdeck_gen2.png | Bin 0 -> 9796 bytes .../assets/images/modules/thermocycler.png | Bin 0 -> 4232 bytes .../images/modules/thermocycler_gen2.png | Bin 0 -> 322172 bytes .../localization/en/create_protocol.json | 7 + ...ontrolledEmptySelectorButtonGroup.test.tsx | 74 ++++++++ .../index.tsx | 40 ++++ .../src/molecules/ModelDiagram/index.tsx | 80 ++++++++ .../__tests__/ModuleListItemGroup.test.tsx | 93 ++++++++++ .../molecules/ModuleListItemGroup/index.tsx | 173 ++++++++++++++++++ .../src/molecules/PromptPreview/index.tsx | 3 +- .../__tests__/ModulesSection.test.tsx | 96 ++++++++++ .../src/organisms/ModulesSection/index.tsx | 102 +++++++++++ .../ProtocolSectionsContainer/index.tsx | 5 +- .../__tests__/CreateProtocol.test.tsx | 16 ++ .../src/pages/CreateProtocol/index.tsx | 19 +- .../utils/createProtocolTestUtils.tsx | 23 +++ .../resources/utils/createProtocolUtils.tsx | 21 +++ 27 files changed, 748 insertions(+), 4 deletions(-) create mode 100644 opentrons-ai-client/src/assets/images/modules/MagneticBlock_GEN1_HERO.png create mode 100644 opentrons-ai-client/src/assets/images/modules/heater_shaker_module_transparent.png create mode 100644 opentrons-ai-client/src/assets/images/modules/heatershaker.png create mode 100644 opentrons-ai-client/src/assets/images/modules/mag_block.png create mode 100644 opentrons-ai-client/src/assets/images/modules/magdeck_gen1.png create mode 100644 opentrons-ai-client/src/assets/images/modules/magdeck_gen2.png create mode 100644 opentrons-ai-client/src/assets/images/modules/magdeck_tempdeck_combined.png create mode 100644 opentrons-ai-client/src/assets/images/modules/module_pipette_collision_warning.png create mode 100644 opentrons-ai-client/src/assets/images/modules/temp_deck_gen_2_transparent.png create mode 100644 opentrons-ai-client/src/assets/images/modules/tempdeck_gen1.png create mode 100644 opentrons-ai-client/src/assets/images/modules/tempdeck_gen2.png create mode 100644 opentrons-ai-client/src/assets/images/modules/thermocycler.png create mode 100644 opentrons-ai-client/src/assets/images/modules/thermocycler_gen2.png create mode 100644 opentrons-ai-client/src/molecules/ControlledEmptySelectorButtonGroup/__tests__/ControlledEmptySelectorButtonGroup.test.tsx create mode 100644 opentrons-ai-client/src/molecules/ControlledEmptySelectorButtonGroup/index.tsx create mode 100644 opentrons-ai-client/src/molecules/ModelDiagram/index.tsx create mode 100644 opentrons-ai-client/src/molecules/ModuleListItemGroup/__tests__/ModuleListItemGroup.test.tsx create mode 100644 opentrons-ai-client/src/molecules/ModuleListItemGroup/index.tsx create mode 100644 opentrons-ai-client/src/organisms/ModulesSection/__tests__/ModulesSection.test.tsx create mode 100644 opentrons-ai-client/src/organisms/ModulesSection/index.tsx diff --git a/opentrons-ai-client/src/assets/images/modules/MagneticBlock_GEN1_HERO.png b/opentrons-ai-client/src/assets/images/modules/MagneticBlock_GEN1_HERO.png new file mode 100644 index 0000000000000000000000000000000000000000..180dd9774987c226a743cee58ddb797889fa00a2 GIT binary patch literal 145604 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

    m$ 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%0DPL|d*7Y6H&0_5C(BA=%UvHtMp8Cv5Jlr$_0 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%0A$XG^or6Uq4AmKS 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 z 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 W@61hdL;vf_Mo^Gd1=mZPhy4#$2Pu01 literal 0 HcmV?d00001 diff --git a/opentrons-ai-client/src/assets/images/modules/heatershaker.png b/opentrons-ai-client/src/assets/images/modules/heatershaker.png new file mode 100644 index 0000000000000000000000000000000000000000..1df848f09e1d206cc2a4ac67cf264413a94e5b57 GIT binary patch literal 11421 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 literal 0 HcmV?d00001 diff --git a/opentrons-ai-client/src/assets/images/modules/mag_block.png b/opentrons-ai-client/src/assets/images/modules/mag_block.png new file mode 100644 index 0000000000000000000000000000000000000000..474f5775dd554ac24aa25415155ba3bdec036c63 GIT binary patch literal 711514 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�GZ6m6*i4!kSXh34!lxa#i%q7=l! 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 z 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 >!yCa<^>XOY=NYLf0(6x617c!iTEo((t; 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�JBT0|RPOOCakw<|4Fjdc6zi_ja5mFq! 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 z zJFENmn2FJwQmrgnmbeE}x9S7w;{)mMzc3fO(b>#?sih%rwja+n$;L8^FY9MeYfCtn z7Hk$Uk2Rg|+S{=&x3kF<-!6?y${lCSS~UtDe@f}y+r47)Id}PfGYzf%lbCpy`0>#2 zSosIFz2REtHAEf+(t)V0#4|UC_183MC4_H%bVoEb3~;M=yXOzt%5_<8=j7)PbzfJAmM+TtHB6&;S+*`==MnjXy$XWce1shMkM^$;kOPqN zSXHPcpq;5gEZ?2v$aVs70jVM$Fg>3Q2vGu$hlj9o$0}9I0-v+af$h%ansb-7Bp9lh zp~gZl1ApEl7EmiQ)s{W-q|C7OG;An~bl)#~3jE}BU}Uce_;w(FgJy?kEW z3x&-Ci@%S+1jg^ndj!IwPGyD-?7=Yzoisdzr1C>#8pb~*feA)rb8tT+t}m_mcBIi6 zh6E&wmniSHMh(k;4lgK>c#n(_zb8)|)znxpr~Hm*v za@Fpy*=I3nm7@goeT7Sj$D@ zyTEPC0x^!XnFz!MkE(KwnCRa_0_)`=rq}OG%)C`=7ScHPqgWP*Va;0BTIQ+~Ci@9` zQYy;&QbTSR+CR9rrnE#Y7u$-QpnIs(h?%{g#LyjQnIU%%EA=jXqMX^TlGXccOz>J& z(B=S}U(DCKa}32*CJux3I~=XB0CplfUIOEeOw%dt$eN!N%0DXwL1LcH3&R$&L~b5W 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%0D~?CuMVo1JYqS=4p*@0zrU+R&Gj^|fKN`>$ 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�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 P#ao{veurxghF|_S=lDL% literal 0 HcmV?d00001 diff --git a/opentrons-ai-client/src/assets/images/modules/magdeck_gen1.png b/opentrons-ai-client/src/assets/images/modules/magdeck_gen1.png new file mode 100644 index 0000000000000000000000000000000000000000..7243441981a2dfe1c3f3bff672478e8ca82ebf5b GIT binary patch literal 6024 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%0D)y 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 XP+8p)GWx*i00000NkvXXu0mjfA)%fs literal 0 HcmV?d00001 diff --git a/opentrons-ai-client/src/assets/images/modules/module_pipette_collision_warning.png b/opentrons-ai-client/src/assets/images/modules/module_pipette_collision_warning.png new file mode 100644 index 0000000000000000000000000000000000000000..788d4b5b9325748beafd403265ce216d051d2fe8 GIT binary patch literal 1972 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 z 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 P00000NkvXXu0mjfYrnXj literal 0 HcmV?d00001 diff --git a/opentrons-ai-client/src/assets/images/modules/tempdeck_gen2.png b/opentrons-ai-client/src/assets/images/modules/tempdeck_gen2.png new file mode 100644 index 0000000000000000000000000000000000000000..aaf5948e2eec8cd756a5c09c37b58814d052f840 GIT binary patch literal 9796 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ģUhPr2s{s!H{bf@<^D0wXZcU2tc{~zTU%I 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�Ushn|H#N6A#=w@%DE;ugeZ@ z#4NT6z4lN+(d(6Tipr$u_5K*bs(LMRL-}>jiaD1GFhQFrqluZ%CnA{$5iDk`c+!I| z%t1AH40QlOjhF3}uwgba@$K8^Z=aV7^-MSu3eh)GXjek70@P_&I@kU2290-Jg7Jm=floE{I2bqm^LC(qYig26G=@N zCbqg@Xv~SK0%~}m4vWO4$JE_$u6Vy2of$Q$ftrJn_IS461L9B>$ z7r_? zZ#t56Q%u~Ck#v{&shch3gzdx-Ri(pvI1{IUcC^%vJ-9gcu6rC^TbmA(5qBPy13&4Oazmcsna+?J{ z;!y(y%Zd(-JHZ=8!J6aY``7Q^zAt*>?sEvv%zRqsf5)lW>NHem7ha+e#3bzJ);tM5 znJC!`TIxm1(|Mw^6?VuBC!}2OnkB%s`3R*R|93n6U2<+!I%o?{LR%(1&<~zk8+2`_ zXK@Gx@iLbaYBh4uY~bHhyY-9m!2j|+{DSSGfBEg@qBG+@g$Tf$#;SiIEL`pjN zP9j+nqt`sXuPEB0dr@#$fk`kbu#hwO-OuSR~_HBHgaQBVExJN@G^3y4z-fPI&+rEfW%Fr zJ(ORvq&KK!@X8GV{^&KV0rRI6eOta%&jL{&sJ~12B&dui|2&pX@zMmUlbsxwjhT!@ zZ-m{fq&F>!zI%@EBcFC=9sX}~lV#Kdhf@s!0x6y4*K+;dFYOquFPL3fKo zBzMwHqY3H{qurdz5z5&fWIZ`qnbQxkrVgMbMmmhB(}=1c>W6@Yc)xezRE8AUJHdWk znjv$(*ujnrov84Miy~rX=ES~*qFgo0iOc<7v}3-I0x$-jK!So=R_d~2B+cYw+j_)4 zZ95LCpgd9vrovW5HkrtmH$|~bCPdJa&k#^eC}dda*#&S#_A;ShgW(uNN*E#Am;yK( zgz`|FDeZkw>}v&)0Dx`fl~C_5(GAt#1rV3526TI8!AYsI0rH6H(|#N6XU*| z5XQ_wyeqL)WKy+GCcb|Ey6ri>m7WDFs^QU0!O#*|cXaB!)E0v%0dCSHyA8>iB+iC5 zHeg-bUN{}l4nwqE^`;W2>q~H{D&g`?Nt~}3CxMA1o5Eah63@?Q;^4tHLLn=SQH4Kh zZP?Wjzk0U&|6g>$O-$S_?-vu*Gx0D+X{k&NTG^UCJNZ%IuULdaN+g>>mBK_sLrOr9 zBmuBU5{X&*M7Mp1D(ryMiJ?&^B8rE$1qX>L5ONhyh>jf}W`Ei7LUW>9ShRX4L^HX1 zj}s`alwXA^z$#9n-~L4f!(|U+b*0(W%Gjou?M_8`Wb=twW1>wvjPD^%G@iDq5)}>g zMNE8slM-LQf6ih;^=bLe=mEpCrOQzfx`|)XX$UtNHAwJw-ByT9hi3*&SlQ_{0K!`f z3V@{oRT^H`f;rvXm20+92(;lOqJof&4JXkMm#VFcm!Zo!g@1=7@<>Mo0#F2V9P;1t zO8##Ol7HO})DJ$H$d-v!Oel1=oK&QC%1?kgkqj6G++qmWW*J+g2^4%lW@c6sW!aI9 zm}gN=&Qqg8PDIOy$*Mal!HT{CI}W(^*q0Nhg2p_hYQ-cqV8xtZIWZ}}YJFD{F{=^t zdNeDVrx{CL4^Af-WV;eEi4$|4l{(W>A`<2{g@7EY?9lZbR7bF$(1AHP`>V6>uWK1D7=QBkX;>-{O=AzvXt} zCMIr|I+@7Ws)sphuS2cWm|EOoQWniRut-QqOxt*(Q#2|*B_|aVbz0~Q>6RnSdLq|~ z@^%Stb5FP1UqCV{|B&(TqlpFnDmqT)bG>X1`pK?Jt;Y`e;og9{ww^s7v zp+HW|9o7UZC~w>ed)aYS?g<*Il}jTnDXMF~7CBJ|X1Aq$)Fw>9u_6R3aw%fs%lAc4 ze7y^}{!=$~C}<^U-_Xj#Q8YG~4KQP+XCO<*n3Uc*mE@#fmc>Yw5-|o8fMw|+;nK^+ zf(LrS7wmM7Zd`>;;sS6IECssaBtFUWTsM0_5CVro`eR46cV=J4?;RzCcPWPO`vgMx zkNkZC`CYz5xQU6|nqxCy{v0DRE=)L`$$G!krzeETBuXXmxJZJT(v%cBGl7QDZO^gA zIvQnLc`+pzlaz^CKun@0M3pE_bHGAT2F0A`hn}3+{H`@F+L9e}RHZkK^he(Pd zid9cgFiBC&6B}jQ#8@%N_GRWxCJH-&s=x|MtfD4Jdq=JCP*|(c+Ib9(gh^XuE5R(U zIlg>ZmBgE#_kS4N2L%}RCDvODTI+I}OQ-}M%l}!RbrUYtAuPU4~ z^^e$bu=#`;-MGvuCQKc-k6Q>7XB|DHQuZ6VcC!*V-_gEK=(#1l`%epy|AWilQyw=l z@u4q&JykXFW${dy0SeOlNx2Zyq-P3URK-*#4SaY}{ghNW)Zs+xkt{a6RqO0Xv`>^U zm6>O3ZRT!P21{-EnSFQKBe_wzvQXMPE+P&W^27v=J-7#^b_LqYye#@tBZ{ zX(@^;l@zs6^wOJ7RPRJfinamHh(n^XraUq;f2@AYxI@PrxPBPOl%oB(C0czG6JM8? z<@ep438&KVDVt@5>Nxa`ov~73f`wOa04JmldwTEnXhH5P94_qg4iY6CDBs{tN4*?* zd;9q(h;CdpE1Rb`VtoDS^Gw2nW=~;GP&p3KSm6&qAI!7UTk6E`owoje_OuV(_t-~5 z8#vfsFyPzY#KcWZY#5V!apE3HvNcJm5gQ7DFbg+!aqnU)!3) zZq|aBZOix2b!|EaH3jM$S2zgIIaA_8YNdfA7?^J9(TqXJ3^V|7PRbFZzY8{jHhS6C zDej-1`^B7037~pSZ;%~4yFu`PkooQt+5e9Z55lhskf5)hbwhw!B(U4v{dGG~KlJ4} zJ0_lfd>zL!fRL=pN%1MmWFB;db`~U)QRu<9A3X74Stb}hlT?asu8EYrnCC*iS z+rjo6+c7iNjk^DcyuD*QK*Qv99RiEGtvOaLv5JZB zcd9kiutR#NDcE(PVS(!m(e>$h;(}Ca@FoqVOLX#6Lnuw8C73@zb~dQl@J_Xm=U4sc zhA_$$>d2xbTBkVZyD%7%J{&)exuOcOnilBv?K{ql&t; zV`Rr6t^6WA<(xiY4l4G%6Lmnb?mM<+$1E_IvuG8)^yU+t;l$B`@@+3trW3P?vAR;a zRvX*cOOA+*cr+)P^+YXvjbk_5F|g=s|ftxkOs#m5kc-C0v#&QcaJSW0=-qh>Vpm~zTJ+~ zk1i(4n&aEsf7@W0kefqsrjt!1Cc`k1G!C?7(n0XnPRVn(@R1;4xk996l8p<1F8~7(?>U}ii1YvAnloj*- z_@#DsbmhdA_mflF*NncgQK|{nJRQlPA__95jmE4POxpJr#hT+wRuf--e*Ja_f*KA5 zH4NUi>xd1-q{2K)Px059Oexwzy~11yTDP)QI&ng4za|`7utcT^l!o@9utqn)a^tf7 z)FYy)zx@PHFW;WClJF2^&G-@?8Y28YF!Fu%Tfan=^1oq(a9lrx_W9nZfC+=3?x4H3 z2tq{!^3jlQt|i7zOnmUmA7#z)boch3_oS_pN%|e99y=mwb3;0z#Kv^6oFkDuDblM}0ycqGfFv{^CfJc1fAB@|O|tXiw6 zc4F=&J3v%)TXw{G$2)PETT*l!OIUPftWhwph*7yGS{WFzWbQS7QC?MyvYF#t#Kg~4 zPkjCI`Oaf=q&7&%K&bQP{=W~pVTBX58?B(rt8s**@lQE#0NW0Qp7Kt#e8E~T z2kJcVu;4RN64zDwYQ0E$HwaDwa--T83;qDp+B(s72=qWDX!wsTA;Q5qL^x!d43_)| zeHnqin0RzS>4)B5p=l2PkK1wju`i)cCfqP4yB(C5jwjyp*`gk-Bou3n34^z%q?aN> zE+iIAO;CEYR7b8SKl6HW9_)w|vCVcJ6otur6YYSUX@AE&@0l^{CGJco%BJH@RcsYt zV>3z=WpSZ$VuoOCN}aF@!1hs?H07}`C$1DaajANuLAEgx6PYKPgMxVeM`58*(T=+0 z7${;QZt=x%M-%JsZ^4)@=#K)9B$^5s!A>WbQoijN6q~})Y%1A%c-7G1$#lcR zm?#hs96E(45)PXqd|<cRdc?j(v7hrN6dmpVl>p+;42T&4fF=CjHUGofea> zAD=q2hNoU`v3e;+p6wXM5 zDAhus9J~xfdc$_<;DSRfHpErDKxVU*!*;FUgLnK&HM)WNyDl?oi)|9oz)5&(<6uli z%$%5V2pusJ#Pxx_!Ng9{+XQr1R!(Hagx$o%Z8DMN#HT5X ziK*A@HJv)`;S=AHOntWYlysF>GGnGk-sc_V=d$o%f+EI&BPSw>iAuzF8AwE$Z=@jw z%D^1^U7}1}bmc^aPLvVF(%EsTzKOYIIhc211|y0KqgY+IipVeb$G06jR?PeB_0p)A zGf#?+u%CQ}Inh|%{*iQ36CWnGPB0Cz0jtW7mAWt&HF3^jVqJ4Ag5rBnBnXG%9k4l6 zjR=6U@El~x448sXfxdwFIIQMGp->|gD%&n}#-j<7O+>8r2tm18q8sP?Lm|*QV_M!H zR-A;iR~|`V=!4zwNRjaC9*EzU%6vEd!GXy^preA&8Eb@QhX_Ejgx+H{MiB=lAXQ@A z#Kg@rktY+M9v3k&88HsPjY_SsgZnK(j#G#RM5DqIC6x!!W)P`$j^lRl58M`CqRkO;@viE~_pocP+EP85b!23a-l#4LDK%tc{DIts-~VXW@2 zhny2v8Wr8VnAUWnxhH1o#bkyPvjL2A5!p#pgCw0*KwC|_g^}Q%Kyiu(cPOsGrFd}( zPH~sw6bM$V5Zv8eio3g0iWMtRoC?yD??1P>OZLp{$$Hm%7LD~1Z(K@bV;f%i$ z0$DN392`7>u7<%3!baZ1?JsSTsYvHi#Gs!3-008Uc_AZ79zFA|Aq{7bEq4nBoAlB8 zq)0StLiBf${|uyE0zeL6q~f5R}}l*h6<23wi?6zMa}R0Zyz-_d6UIfW-P4=+T3+H z4%4Aj>+Y!~vG5mi&zz{&Xeq`8vym(*`Ir!NfrYqj$HcTMGM%LdRQvs8&c3D+t<;2W$2*;JLjl{9eWE|8mp;74M_?Cgd zgCpX(QTw?T&*rxuokhA3JyhrOK58?A-8X0$W6<=|VefjB8Xj@1KF9POz2aue8cvJp zUPOoox;F4bnHJ%c>4YJt0Vb?=rH!7OsmB7H^8fpkQ( z1Y{J^b(ABG4p6V2N0qzjnx#3Uc$7}9MwI-ZU z-sC@_KtQS?DLxX(5*A;%wT;1#*n}1ag(f?JY#vHm<4M@MI7rAFYU@6_C^3);r)ZIw zQs60JS^Twq3Sm8mE7>VFYVhEU9MZ?=7oj?Bxh*G+F@t}?@NWMm!tFC+SyQN2LPb-8 zFxH4qIEpmXfE@7&pUDkdih<1Zrq+0!>AkPoYM}cUDF_knvU|x#8QG2JHh z*U0l6(Hi?&Q5mn2I>+VFi{{?RVjfW6cm*+Ce>QF2>zGF0SVE-Te?qCcEpr+ci+;pf z_Gv$bAW2nP5(Gv>dX!a5v$Plkc(*WD9{^_HJ65tn9VH5vRM?gc31~zBQLh2B%58DS}{$D z54J7X6MKhuL2F{Xt(|H=&oxijD1O2hO!igUsA-vuWU1GB+7eg6S*l_IOIRf56+sUC zE=X|dtQyvEeTzpxotX@pIfq z&WM5wrX#?L9EG$hFp$SNE*!N;TV*q}bbJGqrIj+3`u7LlC>E&;t0we?2^++(cVyiG517CV(@_#Mjl0kmZ=>wmwdh#S@~AG?p*i{PuWi} zcPu?N3qt(0-5W1KcxQYyUmbO@GpfXmoNj$B@x6j|$3F?1r;>xhExeoI zemJPq>GGhhe(h(|LEgEj5}JXInKOh=r=#Lko|`m1Cm^**7IWyyR*Pt=sk%-C5rwu? z_4Jz0aND6nEdi=jI^i$M7Y>pAttw!b6Ntt+@rlq$xsSYg$0ipE&;+<2T0NUi3nE(P z5LK~Ruz@W$l-IYh;zWr9mBGJ?7z*x&^V*WWO=?QvYii24Qla1*0rs|u@v-ekzWT2h zG8m!&Nkj|&&LOT~3nRmy2KzbQCrVI7{`iqK>=7x#B}z|c{)VY|l!58|i+yoSWGx7$ z!3S)&D%1b>*|Uh)lEk5bVO58#PSN~(QPB;eFf}ECIk5!7y?r`-ivYEh{|L*~zZ@2x zQxllxk5(rXbpN;tdmpAT-eJ#CS}3#s^lcvbVdvZAja^S%@M1B3i}mY?;TK?AqUlRFmrP>!T+ww5U z%*k^yYZ_|f_SSf|EbXX?yu>h;DF@sF(69SZaPybnBW@oUeNT^-X5(3?`FlEwR%#R_ zxo$Ram3U?=v6ON$2e5d+ehI=CEuRhqe|sxgGpC6*%BFn_fgE9NzX*cn05_(I@pepK zGf4kN&wB0uDMc7jBB2Fj)vL(Np487CH%2JTqVmlfHvyQj8#V9)cM%zsHY#px2Y87S zUqp3DFYVEkZC`w(E=jaETkDgjeJad(=KA)Gdel_NvcRajn;6I1Y0uhZ2o`ga_*pwt zFl@eo^Yf;tmN)?vu;=xqV_n>+ZR|{NI9s zAo3k)g3-!ZSpn4KsmbUh`O4|oCwHD|V3)5IQ8S~}@T=Ss+Xq@l=>1#V`8ef3s)DQn zwdrIuF$IV0Bu`l5n?ktcuS3WMbNyGW&BcKQIO96+`%xj@w*q&OU;U`CW6dsMzR;Y& z1DvL4hd_MCLb#$+ap<_S5S$E6T`a{?hfXhdsqGfQ$*p1jHVoOFX8S5WTgTv(rYA34 z9*LCYIo^hQNd{P|goE8QvB#NiC8dEMJttFG_bF1|lUR5iq?on<`Sp7mT~+p{%E9Pm zH<$qz1e{DyKcfd-GjOOmB4H_ub64__4Dj3d+>gpgQ^1R_0-C^qWr=~XP}qZO%h;#h zf{x>Cc!xSOAIhz|+OS%N1<+D9E}jj-Qxb3wMWnX!!77h#-Yt9!$l z{9yXGaVnRQ@Ig=7qv^kLX!xn?{M^r<5osu`jn|b%yf{AL?ZGqK3JWNWY@}r@ZDFWt zF%(Hvk6q{Myl)Yu-XC?-_&IGq`$7ORMS|2@PDS^1-xr1vG?|ivGNvdHDTtsNPT24s zIDgd?77R3jex>d7ce z$O8*tGd;|>ykk(g+bZ-5U+a47R2x~IKcZAJ{F`6oEK-;%mi~Z)lQ0UpZWNbhY&>E3 zm5pvw`Ak`62r!=oU6>`1SHDxn{i?8ty}Sr!zbia!YX!8ow{z$IaV`W~m#9 zRbq?T5*37iA|)dpgyz$f2p_SSl)bL)k&4iT`8Vt$UW}gFWI8!syu~!6y5PUH7O4o- z)zl<1rF}sZpJR%w3M^)lW>oth2_oxJ<{>oEkutT4HnuhQNLjBq!*isjpX+< zDFy6ieYaQP;*bqC*jodWzvSZJwMt_q2^@Mo@KYfwfm&mJ&S2A7*fE2E$ZtZ>Db~Nc z%oivU-Z`IeD5GTiM_%wYec^h8$o+0v7o~YRL7}3`q(_WZW@#hd=BkUCgG)*~nX=TDR>% zh=6}E{JEOTmzZBKopxJ`qzjJS->WM-8SR(GU}4ulKbvzD(RmbI=-0f;`9u`I$T?A6 zCZAgoIc0y2a*Jm&u@@h}8E`|B=rW)88}Sx;^%P(iLiDtUpRj|S+_Z|Nzz#;xiC)ym zi!rrJ#!WFmC>n1(0Bc?fgq(TaVKS?fGNTe7Tjh=ghAU9h;#2zMFlA|bp8vb#!&yqO z_%hcE(8rKAMhtne`b(t^G(uy0im`D|9+us5dLC(?s+ztRKk0Hr^J&od=Rw5;AJYsNoOy06)q3&o)aVjRx`Mvv(Yr*ul;oy>qLuA`28~BZ&P%zs_4m% zNMz`GhF%?}+8RPryPGn9%QSs`hd7Jjca;-RLnBahi4&2+iUNwW<&WNTM~{Ra3%aDV z@B56uQtOj0ZbRkV;mkG3t z<#2-8uq8MBJI(=v5Nh9{#+aaZ^IN~8xb<)M5St`^({R=WS(N4m7?nFk!UY;gRb9|} zU5=1_U1-404YlV7aGOW2AXG)~fRYMa_=QijYtI$V64Lh(06#m!p?+&p zFzEN;rv^AH&7kZTObyHhv{_-lV2MktJ|SM&N|bxSB4bD-9Jq zObE{G)H{Y_sEX7!KN*nzI&?7lMYTozUfq+!GBIQ3%{4z}TBK*KTSSYqpGysGy@R(1 zyiGAEj=pN=H|hTfSu_UkgnviGVE)U8 z3jn@{W1UG#oUp4O>B|Uwgis* zGEu+)RJp#VvUmUKmgbVq5wP|(^Ra6}Ic)7JNLtGbRoPJbL<)hRKC61E?u9f1wY&!7 z_ImQTYAQ{F)n}EO0}ePmyg}Wg2=Uaa`)rZx9p#If@M_NTI?gAs{!NOBX|!skUA5Y2 zNo2{7-VYZS=#+eqn3rLT#u&@bz9J0npwvEeNJS>uM`^0 z)0p)VSiky*zy{d@QV0J80knYN=Wip*zkNT4|KkhV&lQ@oD540DXniNsT+$jB{^ldb z^`I#h2bd!KPNL0S4hel~myEqAI5dG4B^L(x%OqP-jsNNZ(}Ni}jEXNZL^nfB*Yb(` z_3sa2YOYZFcS%w~#=`)yVX$-hiJ*^t3n1TPe6gOUp{S4Dq2K~Yv3FRC^)9>w#BXyH zqiA%ryOnB)-$Z{4dk8f4nKlj^=6Hl;KQ>;29Io!Y4(Op( zFEG@od2NnRHhW&`D%>`3!R~3U7r)$rM|gvmnj~~oLgs+sX8eloaPd8Y@!pF3MKR*$ z(C&(YD#7q30pbx_8Usv7AF+C2fZ>h}hJA8t)`OSV6A@1o+XledvyvIrzKqSi5ju zats_liaRB&R?UapUwhj`mVJIzn~g4py*b!Rn-atq%_2`-qmkPLo`rFV!Q*4PbH$4U zC4Uj<3o+9{Rha0kM?PZ359Y2TytwqNWwIk_y3Squ@R=wN(E{4*>p$AhfbW@Di z^LAJ*S`znDCqC2qtG?N5%w+x`$J|D2`nd#O+Ptp&O z5eZKz1wliCznG7-Sc@Vx!UV$lU(tUJm>;A({Cl_iP&y>`p%rnKljx^XvTMjrGj^*N z-aHmZUHSeZFI)>P{jH(kLw|C|K=aNX8cC}iT|fXuPQ>ggjF^5MNg0Nfjg*@E;Xvjc z16!_98)YHqo6S*%`CJtm@s5Wq^XMb3_PLh>A9(QH6oN}Y6vdmFH3ki#9}ePolwaV;>QGB_=k@oFzEZtIEvnIK;Re&RONbaJO+4Hxm%;Tk7KCi#Jy)Y2b1rsH$kGV4vC^!<2hK04#4m5vMsyAX=Ip5(he5c3G+WC14^rWa6wiWnO(m_5kfRZJ!35A$gk34|Ip42qI4zXHo0I+M^Kzz-AEs5r5!1U ze6)x`MP*YA+x5>zpZW-JF0!Xm`MR^R;qqO36%Bk{;s*S8sJcF+c!!eNQLZY?;2j25 zRjUxA`;BfkH1UNy{2a%5?gX}woJgA`RB(&_Bgy*gqjc2k`+3*c{slr7Z&zTvUba@u z7yR#R=X(If*Q-7wh}Ni6gov;rju?2wA>WoT6fGrBSKtSi;7{=-SAIm&)8O1d`~{+8 z%8p~DqE^-r=OJOhVz3omlGVz)hylnoYPTs?7vy-hV!0c~Gk1Ai_^N}AB>vnyn3RJ^ z;*?{>EKD)nGz!Q^5HkMG@o2Z13SSyPp(+){9Xu+OZ!c(Z%W?=&P;;uNs>OZ~=zhLh z6C7i8)=%li-t2wDS}#J=l(lXor#$oS)-1rzfXN?27_2#gk3Xkczs@#@!@A4K4%pJ0 zPe7-A`&Trz;NH+UWQ{Hdf@;FG^EE#8cLMpWZ<-6h&Vo+&uuS|cB32FQsHEyA%2om` zUK+w+JATc&1+fLV+o9l);-HhLGzke_|(;$u^|fOz@iUYpR|Fzt4~*k*)tw z^N`Vw&4b-MIS#w+|0_b)&lZAD*Cvm%J{@wZu#hZC@-N$i{%tbNTf{s50Osf_@K-d+ zxhUtsImt~+VfyU(@euMwZf|@U&0@t_I|IV-{vCVV^Qv^Op!;`ed!uM4){LUs2-ujn zs5?TZ~O}sb3)EZF7k75AbyPag=)gwIKGq3&BI}|Ax1H}y$A~wV#GD>qh`r>?J zJ^O8F)JxXt+fsfTGs3RU-hY~>RE}%u6`tz!q_p}1iBfQ{9J_vTZy=^ij~j*-i7Yi**35Qmr2X=SeB0nf z#T^t@0fKhiV{%x4WTYv;pfBC)2teWuN`u3D;vN&*Z}g(=caS+Dnd-@U(zf!BKC_FQ zldvL>rtSx}zgIv16)e){s$jr+Nt zTM&g~30vW9d5jH!sKje=vA|#>%YhnYkz?TWTY@ys7x~{UG}|R85$HT{4mz5+{&X^W zTRH_2s3sBo8?7iqOtR7!)@;)Ta?GCBE(?eSg*dJd;Ox9$@xDYm?~b<$!_e?&a*n#> zNEYSoBW{@f5S!;kiOD;ARHgrb~VxEIAom`xgLF_OLy&4Kw9?khq`%35{1Go}r z-VPY`DX=ds2#l11!6v3Y-`}ZfdQD3Le&oQvoWt1Y>qr|Dq`$&ah@Wi$XkaaYv*C}r z#jQb#l_aGtu+hHhXR~sfx-^X;R??zcSmGPO2fsi-<@;;Yd-JafF z2Zj#zh9Fl~Pfo?WTZ`RLbB7$Nf*RA7< z2Ghw?qz(OfZ**QG`(LG21MzKzTI>Yiz9cJHqLgd&sbb$#vp|ppLemQS5n2-4&fIOf zE_Pp;r!*M8@C(W~Qnj8Gr6A(J5t_88K+kyL)X5=&uTd(TT5%#`E(}b)X+7vqq2BuQ z%Fx&+NTR*UBT9=_CENo%YNm0guJLp-2|F4zi3S0zm>#H`y);966PY; zO161S7;o#Q>>Ey9fK5mz_o<>Hg49!aw`A5ls=s4R970~%`Q$(_!x=e8^n10N}ml{IGO`NU#tx$>YH9&h*-2+6RJem>D0 zYS*5u^ovx;)PqQ?^Bp)m$9@an@Si*>wUY{w&Dq*?Q(>)&@p959{mLOPXk%^SRGS9)j5 z#P-Vpt6q*J7_3%AC`X8G&oNXL^!|c?wxYx+bTAa3jIB$%L!9Z)#O+KJK)+*7$~+Je z(@pPumv>V9llY$mX$V9YU>S8D&MEjc%iG#5r7cua#JY9)VprzgQ9A?h$*`?MUiE{D zYnbrQ4OC{EZ()m!C&@E-*)kMN{mhKxbWx?RhS7&*4h#F-0)PD%i$C0Xdw-)M0m_a5 zj*7%$(6e@b-k>x~bYYOs>gO1wl45imSL%`d6baL7$(Os7HmYI35M#9Yq8zK_QFMR0 zt+rIeZ>ibR8iEzGxG-#Up3HnyyafBQHWHHAI{eqx)TcoN@(1;@0j}z#5kjI*hHT~^9UM!R9X#Z{@kkGPnbfJO!yw<@?S`e{ z{*;Ht5u$8JmK(877V3%bAjYmkks9&*Q=akI&7A!pEAaaD!{TR9X9I$9v}~i8N(fPz zCSA~wERMuTfSK`uQUPMYLz;tTKDzNFXx@Y(3nv+$KXkSR)c!M|S^Fh4HtZv^G6Au* z_~x*fR({16E&TZ*XOMxvEMpaOgXTvmfh@Wl$D87JJ!H8jqc!iP-}g)aQJzV1BBk1X zVLm!x+M6P+P{=69SgZuIA;276NxX~wV8WSB+GAqzt%=K63l>!NC$H(*U4tI*Jv2!z z%1ANB8IZ>a2M$uFkZ8C{Q@vE(AsTKF?>0ogbdx%B*#%M_WMPZ&E3u3=gr_>!ho zkvz;cWUTg$=o8&MbMn zP%h0{<8a&Vc*d~X=9#r@SYszIkl3vN8Fh=VqBX*IHCh5ED4>w#yMSC6`y?k~Ee*VI zsidwufsf5FTfS8Dqyt~p26JUFu{!QF2`dY4 zb@pis$%F_rXeBKwK1G3M1O_AWcgxF2k|Bq&5(*n>iN(jJpF)`(rYDEyHe6cFptQiu zcp0=yq}0{vO1Z}H8~RF~=t6;;PN|J|_A696i`onh#tQzH!PETQ$Xi9!IhG{Zap8<& z3d(teP4s>ApUoNAFHRVERr`MXoKC{u5Yl^0;gstfsU$&PjQ@Gdk@ex6hz{J*U)P5G$G9VtcL0pt?70y?& zXniKpYdW1gZ3rN9d7UR?w_$Vv4^S3+$CP+_7?X0PpLbwN8E?VKg|cZQtT={71|k9! z$cPBaC7E*p!pa@hv%-lt;LA=$()NVA4YuMjyATaoKT?M{h4s#UcH#Dr`PVdB;~0BB zuXVm4EM@9y;wv8bO-BvC3E`~n78GHD5+gw{=Ed!0rIg+{$4DigP+bmP;CLMmcUhv( zl^X_*KjHbXnj?f2DOEwt4|!cFur5F~amrF8ITLi2ZCMP}KZvw2bZ2!ZS%*!PfiVZQ zalzOjKU^y@1#$~qrWZ#=rv%5)fyOeMu2PL^yqSw-OtF?wPfI@3BcV(}H;kX1%i2TP ztp#SS?n+#dF3VT3GBW-;0@h89oDqu0Pt>t44VjQ?ke$(fiP*??V_DtKZaU`G0d1S5 zorGS3uxm$&4(547NkDiPO@(lQk80EIycdR$uf3s`N({7;poKpPC*fBB{RMkh9_YZ; z95IqZC~}A*M;d+Jh|5owY+AiA;r!*TQQ~RbQpeT}Y%H&a*)U1mq>neGiAdvW)(VE+MK#s1&D# zmlx(ipOY$6ixA7gF^`Zkv+ZoR`LB@#4Jl$x2sUd$i&dTYVR|avZ4(f83rX>>HgS>2 z?Oq?M`hSsNwp^fv(Cuhd)L?EPAKk%awVUzu!RKSY!LG5Ny2VZM zE5uy5LxY{vWzA#v6Z9X^iA50+MdXC6f@I`MSgpF>F#Y(r!!EI-LIO514ISZ1*k_k{ z>hLo(zDGHnro2?SzMaFC{6^-FcMKIFtwNzsk z!VSH@54W#1eP@yCgOq_lU1uOnUtKokFmjP zbrznjY^yj@I;q45Yal)g>MWM{hACcIOm3FVliQ24LdDfoa-JBzMh--8zgvyk+Zt+o zsT=<|yvQ27h7}gIBN3BiA8ip@i)BpTFHkYWg)QLgRuZ0yO>mJ)JI`wCxf=|#E$1Lt zKejFlU##%cmTP9%kSt`!iVqs9cUA~KE0w%Lyl1X5`mog>PfyDYJmJ;x4&0lC)1PXG zw91q_g9i5X7AVtp6`Z4pzkpcDn!bfyFL}Ic$>@Ga&Byei=Zv}7QyT?Mi^}xC-FKI; z7T9F6A@U@DSQa)P+71>W@(74?h?BHse8-c z`loN&>b>0pgAXFwR|pEet_YDGZ!Y{JUMfB-09!}b_xuV><0Nw33V^T=3E)v$KgzzM zNswM(GFYK#P_;5}NL;yG0ksr#qlp>38T-3!K4P{Semvv<*RLpZUj3~m>XDqXC)ojp zb=;Lb60%dehQ2RaKy^PdsOwP2hAaC4bLH*z3U-*;of^H6(28&k0;Cs`FVy-azJanm zr(y}atByUCudcvRObbi#mjCL-g*T1%Z`eYO2uPNTDJL)^WZ3y%t3T`SXQVsfPGiZ@#NK8D2p_W33s5!D-S!36<9O4^B+rfLEea}Hf;qHm zaCn5@c}>?gMudTFAscm;S}`LC5W*X}Htu(17vnpN21$Bn*3b<|ZrqN54KMG4!O44m ziz8cn{Mtn~jG>?jbz(E$l;*EsPELYv$qo^78@QeP3qtDtCDHX`MU>X{jXkHkj5XTz zyW5wIY5)_&Q{XOR+r|clZDaFV&y-tBV{r)8_SXc250?7zDilMK*x8kL)dIs%4X1o_ ze*W}5=lja7#`E>RBxp3E;Un+hOj!H7&3+VC&R4Z*ZA&9|0)UuCB;`uwZIv;WUM+ zk>nxjGq0jd@Oog4H8Cc3G8x(dY{zb>dzKVII8tjN;~CSI>Q(AFv`beVW4G9ERffI8 zuHB54yTtvOW+z`%VI^0>)2|It`t(6OaHD+hW5VBBUufz^le)cbW7WuUS8 zS%Ug%#|=XD9FXs-czSVDNx{>XV1@D+om-=@|1chLs`>u3G34yXt>P@UOnGrOg&Vv;^DX&*`WmI98#Yd|$_)3R|6OLnr*H?O@$hz?N^s|6;75(CbN4^E@r`o?yTHGW$KZ$Bmp5GotfZKg(P@d6{ z_Y$1ZEzB`Y3y}{prw>A(NCq@My+}RGe*EIhU^p1)(Ud*oCd^ZY#ppw}p2qq7FW*ld z1z!2%C-SM{!zlh}B8S$84c|HW$}c~vht+fSq;#c9S&t#@#o=1$MWU4g3Rg-xHFD<+ zy=9Y*N3(Gh68jnz!>})Ax7dZw#BVFv_=m$D>C&I zj)z6m4%y#_`TJ`zXoTzBewL0Xi6EFL+e}#d_pK*{e2##g3rFCwi@9EJ^I*pjD>6u4Q3!;gFEom++dS`pYTUhz`%} zS6Ja7PdWePo2sq`zWs1@3&`e6+gBJ)1(_bJsJY~q&*36=a&Ozy>$m<1<=fsJR&apO zj9Q`9Y{*MC8mFdXqV&Qga{KOsDCKH+VuOWg;WSR<_7U$VJmbDU`1ahhjjYsDYV7MI zuzfg7ib8Ew8&#{UNrk!STw#XrS-OC+QXAf)%4Q*}^rAZA*b|OLT_V}WG?-?PzZ_*e zUiGE1NL^$sK9?-skt9aAEqdsx7y5b>+y3V13axI0ZMZ}UmGDlo~vSmM%#!bxeVP>tGOF!Cqt?$E+oR(n)z$urAkllgKysyNm3_3h-lO0| z0>gs}e3@oOvg9D1+=J)`l?XdrjBsrP0LxyJ8kyKu%v@>ECR_Z}_dAEoK(04>rMc+rgl0JK`%{2)C7bDw+s zPv(FAnF~%^BDO);#4sg!fsIaB)$l2ONWrD5ZhrJv5Ce34726^VQEk~+xc91QZ$-K~ zGPHt4WWlkY&>q>i2UMPFYrspfWC89MM9vr9z_;n3VjgOu;P8gNBE5WV;8Szs#({Ro zLhm=TS5U*n!TOZOas}>HQLni?lO?O(s$El8Y@cke?ymlKma8iA!!RDiJqVaS{-r!r zq9#iGOoY)BE_}j?Naa)zs;T&wHEd(VRvr90CgtvOcOmifet$XI-mlCEK0O_%OZ}$C zNV(QB53|OWPp#&jhi0by_$lk*-FcIZr?iWGA=>9xGF7y&L*DySo2GXtXjC$D{VhAi zU!6=fs?j}S38BN{gk9c%8H?gf*7zr?MSFa~LcHWvoLJw~tEa)HwheD(kz{>6{}n`? z-VN~lq(2UZ^+{#qT%3(r*H=x`NK#9|>&x>LE^C>Ku?7e8w4kg=AeguvyJTe9+Q3re zkF)sogHr@`M!o%ye#7C5XA`)U_v2XS%hES0_NjUM7paw{vz_`Mn8YMYhZp=g`_INyjuI6(Gm^qv$>$HgoZ^}U%#BfRY;z);y+uC6(JF2_lD*AS zYT$}pHV9{YLxcSbH4t#bMFy`8=;KwI6p1T1S(7R$waiyLKMoPe{Ott-71OCW;er$n znyA(!MxBFtoK$IUj40NZkLG0|YmotH=FlGUMGs5pFt{I92GU|_d#Gk&W3faPsO+%A&J;LEkBXlu31vcYKJt^OEp)ZbeK zfBI|TcVW2BBEmcOd#w}F{ZrK1;m80J9$$kpHylmR?1mn;fm=$Q4*!^XC|nZpia0Xg z?WQmcO4(J~{bA+Dr6^?%WWZ#W0d_Fu>PjIDo8$VuESMW*lZjGTo_e}lwQa1Rg%k_? zD+Ahl&672NKaD+r-zFP3zMh~zZF@~Z;_g%@ILO6bcYOT6^AFLcKC?vo?aERBkGw^h zOp4*2)wcvQJ)qITzC=;+lkh^gCKe@o0;F;eZ!!^k>rFbwq0 zy3K@mi%K^^6y6GMSXbl}5amM14fsi3SX!KLpKx(~^C z19-pXis*vM$b^{xzLtoK;0F_Zs-C&lywizQ0-bW&h7T;37IfO6S>+WpMDS55${Nmm zEK>YrA?RL$`s+2Mv8$MV7D1{G5r65W1Lx^~2k3_4u^Ul(141M^uVAWrBxoY;MaoJhT4b8;gn-ImX*!|82%4i{$J~Jy z)k#xbWg@TUSB3S3pd2b-?FWSj@q4BK`llguV#F^n*Z1N%WNsD>s)vS)gRHEmcqL^E zfDWi_+21h2nmA=vM;NHoxog9WaT@Ee7FyKA!fA1Ad`S3Oqcnd%F=zM%7mi2cTQrkWQ&+KhJhW9 ze4MpgJ2eYslrxQOt9lyp$EQYCFx1d{x!|P4IRmu$3fEh(! zyxWPG4bw6QG^^*hgu6Q6^vr-UjRhTflMBB+_V-6ecq=jY=C_GXi{VXYmNhtsiQ6mh z|MKl=HDQ}4;_rF?Vb(k>RmqnHh{t5fLO78MO2;bMmk!rt$3Mdm80<;rk2X?@IbYG%+`_W|mREVjkBpg2TL;-^0?GN18CS5Qy6flPy^z!B+<6+#`LE?tB)!iYYUi z54EoipayaUJ1BCWIZ(Im{LWAktevy4Ofx5vsV1)I^}onrVtXaHYqiMeN(;5Rwg&M2 zETsLAJuF%7_kHJb=dsjFs_)etBKz97NpJm_#od8>?O9@FMMP(OU&KPy!mE>ZV5y6P z&AW`X@{LKnCA25j%@D&`9>DV_`?1 z&kW3F2=-v%EERq%ec{;vL77sqWLI05$4JxK!% zLP;Ksvf^vae$#eS$O@RWYC5K`6y*Z_2sKdD#ygyDkDO8HH))*M9W6WmI8lR{Ub;6PUx)JRjj$dFhz$YO&Uzr z_KqjaVLKIhyDvRf7C5y*MJSH4XkrybRGeAW{!rO;k|iEN%j|97Py}x5ncl;!7s?%E zS$7&1D?j(Dvvw3jc+rqcEy(#-GtKIP7MyBF?y-J4d|_^dsKi_9`WTp{L(Rzit(TaU zw_Jpy>BgcsSBAGnr80{8O(@C!?hwOt59LBa+?Q=>=mVlv=7YZ10S-&XXvoA0StXr9 zieU(gCP_SPD34w=-iTE)8;J53o%)#EIxpeBv)i-(mU{hrhm)~SbMLcIiTi&moi|&C z#V1}`q`hif)FUJ*WR;v$VS3ZKXhKU(KWacnD=>@&zrhC}<*ctZ%GRukYRQk}kb}f? z;JI*) z&RyU1`5FZ*^>1kqeD`*Alc7x#i&^YdjGnJ(ZC&1mRjhv^U#5YS_0NMrWRy#RSGG3K zFLc7WdlLykU1E5cVF3$xZ*tu^;Lv+4DnYz@e+Q-0z+OMp;ZV&%fyU=ffn)KDd7K~RfFKjT8}WDDnya5Zc3 zksQ|wbl?D%4Z3|m0D25eKvR*>oZ>?6chv5W2XgrFt!gX6$p+Tz6<}!Hravr#T7?nG z;Q4w_o{MY$#wiL&tr9yos_cYM3ruCE#KAqQr}b(*=(3))k&R-?;tx$T1r`*Fl8+-Y zhS9UoDB`b;!*ygYe{XmGyXO3Rg?dyCKglXlEho8aoaNrM5cbaBCyj_rN(mK+!i?l( z)c&m_z@Vx!uUo{$S^6j9>a6N9reUV2P603gf5(5c2o9*iT43M>cNM3A-`}tfthH2D=J3a*1)#(!`^B_7Dhj zA02ocbJm&VpQT^Y&L&f z-iVHnrVsNi{D>j}C-;UrlYf|S`=upxl&sbt@pq`YvakYo(v#8j@^kD$k%Aad$o2Fp zYF{U+h5T?`Z^^zG3M}4 zU&6gvW0>6=nhu=Wxlri;km)@<<=DSG?lhC^=;KD@v|lhrjGy4xb10Ol)c0i}!GSlm zNDc+IQ6E6hmAh~L>W@H>@dQLN)n$YBM2_d%! zfR#GXf6M>hr-|WwTIT5vOD9SSVj9^e_U;z0`~5HMn=$OI8y5X(MxB_fM7SSfOYPsO z`FwATUN6F5Fea{?p=JlB=E8NEHnki?)WFPWqb5>@(;&j1p-=X4jY0ZE3xDDrR5ipC zNF?ZtG&BoO{+zqj1u4t)CHN1X3-8X!i=+vkK=bS^1S*>k9tea8z-;ZUbs~9YABUYX z{hk??=ou=t6Z;!3EPBt}8VF`F2TSBKPDT%rhi#&xrs@I_Wwz$+>q=a*gI0!B(M(%U z>U}8pe$kPROkpufF%`Hp)>SMx^JL5(3sfTO$RliaUB5L1C7;d9SvuQ(R z5o7;{JU|Li)lOOEb?}$;FI!Gzl+4LSWaUW_nF3#GLfUi}sz)9oX(|L*XIQ7fQclGF zgo)b-Y1}Il`4u$!Z*1a!H@M(R!1S+rDAdbw;Jz!u@-roZO?bycC@!?FO%kjPnYTNY zZg!|HS_K-t`;B+3-S_S_M{Js24zac@&Br+ZY9z6A{019=g#mk%D3GH3THVGx)|C8I zdND-d|46zDhbX(RNp~zPAgScCba!`mcZYPBh%~#DAhk3swR9t?bW3+Ph=d5JAn3R6 z@B0_-eV%jY%*;8ntZOfO&x^2Bp)!)BLv}W#q=lzI5gz9%2?^Tqpd_(oZgyFMf@c__ z^$aB&qc$Cs*HZ({U!tP88s1uF@W=QWaId-LI9$hCB;d!O?#eX3a3CuHiQ!-&5@;N( zzhE45{`a@}Y*b4W}mdsB{JA!mct#lg2+vPpEin`)-YV@ z@bc{@S z>%0HQ?e~>1Pz2KFspll}5+^LRNW_5Gm_0=aqB>Odx0rjvLe@>yFp~smOiT9#WIP%~PDWQJ3TnThX9b1uCV2kAc>8?k?7vQu zqckR21VPdrXsauz#P!VF)XiE_wq9-M7z1!F`Y(EaJEfnbZ`~+>O1elB%j0JQB$=AS zpDXG*?NrFM#8326k(L_faah&Q@xAX%xr)8lSZu!V6S?+aD(wfT|A%&cj@Y*J164^l zg1oqdQr~tL{gUI{RnD$C>EXxJ@n9M84(7yvCEUpV;E)l7^*btJ3okM?<;`!p;z5~d zmDjEHcg3c;&E#8YSWWtH?rT7hm0L<_G)uHJAz#dU^F`EcINB#DBWw5Jym4e8bt3fV zR34F%T@(}EPOz@GiUd=bgoWQhs4xc_`E9^?znCxR$8cNokA8E)ApP?Pj7=6*d7r_% z%WX7$gAHFA9m^Qu)z4F}yL+ub$Re}1G(y`EImqp7`|89j4!h${4#;74@ar_k_}gf? zDrrT}w~lQuqc9TX^zGoZ z#;=~sWaKZAhtkOn80_HjNCZedcoaqcZ9FJALuO9cOX+!#8p#lJ?tT{>-pl8k{br(5 z+>t})%Xx2etMpq^k0&&XBE`$^jMS=h?bHpi6c&9x#r%NY(y-R%fCBC9udg?`ieVQ$H6a>& zJg@urOad@>>`LIOZPGUm1-9>TCOFWDx!D*cg=KLFt42h`dLZi~!x0;&r~J8RJ#rga z2gW=hCVvS>7-rhTdk=>Vcd%yzNwh*1r^*vW;sL|fV$597jZG-nv&oJ9{p(}98HDFH z5}pLo&9QcmL*cLPveB7dY8N@I9cdR_n*4XW!wadt;bCIh?zv}XFQC*^d_qnm1^3}o zH>n?HOc&{L>Jyoz?<$9N*n8kC`xT^IZRCYSF!Y`hhFWQBl4Ix_(Y4f1HbB>%xBcg`729u@y$QY>wo2@ zO3XO8S{A!_adW*-8?nJtjx1T97slGpIbLC}rx9!x($d@^^r(Zq)7miK7Q;ITuiWwP z0@ov5)|FM`?9g)M;coa9)#!74`&Ya`k_HZz&W>^4nMBfIyhS>dy34aP2|h&o*l;~u z_g?6`-~rJ%-X4%A_-J@?xEBd}Oo17A@r<$d8zmmA;R!jUeU^wAOM`~a;isst7@0v! zu4BFwz((5FkB0(zTK6Qn#xPF<35gC=hN{nuT+%F~Pm>VTBrQ!)q*Gt@qi zW({<%TXLt+skN4rNy`U*=*fRk`iXE+k-OkXcBUfQ1eaOCok1*5h8fQ!MpZ3?dNPQ? zY#_mCEGt>c5yBP-CugszuFFwSJ|-__AWsVGkwRgb@nMrd{%BDe5l@39xGRXZm~f zdhRWM^Q*uJcKZVW_B;Y&O!ph%I5a*&SLU!yyG>Nzot+~Q_$o-4Pn_?4ptbH%q!$5s z@8h?R23QofU4So*q?5JOYr+-cUXV)=Fyk$(f30$0I97WaZB5uFY#{ZGpM9RSv@~yF zNZ*q(aU9g9XtqB3$1=CCwW6XYSztC@rQ_4|()1LQKQ6IDdopW71}+zfXvP*U79zUF zT-WexLT>Ldfm9S8bs|b16`fn}Se8yZBwhxvSsZji^ zN^)?Mgam(;nhFVNAKX}t#h}@*QoVPNZ2Y|WA5Sjz`N@(1=B=#ipIlRkzDRu>1Ibft zo7iv&kj;{9bPMG({UXRuhYXzIJzhspjUlRSpU>Ep&ciUQfECUdhje+hRE;-LN;;fm z9P!$;rOjnSMDO!1U`=|NCbT2*X2!2lUh2g(@)yGM{orkm%VV%YW!%7~@{$5@N!`g{ z>g~v8aBtsSs)PT$Z>Xk@t-`~@{i`4BpoUiH!_b$=T%vB*p=_V;t6%5b&S7OVn+$UY z9kDYh`H+iLp6lxa=7kfjuU->5PR4F#dMTOxjTr4w%SFqKB+;WPU2h<1(gx}mr;Pyo z-8E!>NCe9^af8^7Bw-3k>fVJv6#Y~k7{EcrFf=4z3BR}75T&Phtv zQPS>p96~rY4BJgH?9VVq>_WVF!9BIjDc|aUiH|HgkTRKNIQe`wmLmkYu4?D1fyq0QobcW`cX_Q@zz{S&b}{*oTuoFBKKUb-nER2o}%!w#aj z7ES5VUyt$JeA5f$ecGfE1uFJSil|ok^YVH$xPl4nt2pOC^PmglOm^qt_@>S2N!fo* z-RkXi^y1$;KXTxq1CHl2y7c`U+(T|mpV6IYg*%;F)tW@(VpTz{;`$E;1zNUB;8SVO z#rRwv*CnG7dtCIo*m`Os&Ea(!U*>6HPYFtCIc?4MLs&^m*_8-AXUz?a#)=Np`Tj>w zq0ZA^OUxm|F`z4KPblGAzacagUr9-d+xgA*&APgLaHLkwRV9m8n7w6*QNm9mg%Np+ ziMilwWX>(!K}(M~EX0V^q+pnJP>uOLb@~;iT*g?l=GHZooXWN>mH@j^$n93SLIG@m zp^j7K>ptuKw>_HP8<`z2F(q|JAGZI!_&+RUra2vUV5CV)m0NEKD+}%ujzPKMFVUt# z?2VYIaAiL0cRZ0f)G8;FRx$>9F_=q}C9-5EoqM?Dis^dAZ1xwprFVAo=2(rXrPiR; z89by?1GyHV4FT!IQ}4TgM2xytnugEIv?eH%=LE%{!$bc4>5=~Y=kob>s!g9IyJy}D z-3W6;p5yiABj~)rq54~-(O9T~R&U=b)uU{S!@9p_QtjR2A2Er}sUapD+}`Jn-Q!HS zfHs^4MYTP`)Q21R%>K?d<9OEBDt#QOBED(&p`DL4 z%mv5cPkTYB`1Lnfhg|H{7}msQGyo)A5pKWR+|q!Fc!^L7oJuaRh?t(kbh)*k5r*&< zG{Nl(Bb8&^rg@Dy+Z*{JQn@L9NgG__O_PedqR5jT8f)a&QdKzp=6R&{bh+qZC=cObZN~>>?6BTm!}@^T zx`u&?K`K2L^lE&isW2HTNW7S)vt+3Vt;-BF`zrO`{Z1*;J)>=?ya^}?7Zss0zF&Q~ ze3*V~%_Vj7^U_#sOu=;e*5`_XdNu39Y>~D)T=Ul$iCyhy4Hc2@8WykO-FVWEfHRtB zw6AuXPAQh0Y+7|Is>dCPS*p;&98|Y1dR*!f(t=pUgU4$C?Josajp(Lp@lWROk5ssS zKYU^yFWNycL1#_Nr+Kn(8~?-w$RxpFvr}{R;7e>vAor|#tOC7r;T-3W?`|T!+(b8b z34j+Cid}rn>^bOTJQ&JM)CjY4Su;}HR3ze$_DQ5xEi683i>|Z2kEPYg6OWRd9&Bb` zf)a^~)4%GTVMeq#xTdkjgRK4#Xb=PNj)_j&3(CBtR<3o?*UbK~gFfrr^@0>T7I&lO7IxjP!nTG8-BGz3?YLc?f-kX2NqDtR9V$qomF$3LTRe$=K{ok1oDG zVo<8Ti*8r0>95X2YhlA*WH<7|;1ZGL!?2jSr@~{{A}8B_)kxdnHDe<%HvW}?F1;^Q zW%SSB$6#dHLcZ5U(9_Zkir5xtzZWGNKyv#WJ4=FJX->X0aiBerpZ_=N>s7aYTN5U7 z5xGUccg3v*%IOUZMWuVQA2z*`EYf;6+K``i=GTf%b?0d~)71g5k<^1( zPI5zQf|I146l~Fu-st;8EEq35!ev4a0$k1w^KOM0l5v*+)7-Sr1n z*_c|;pmzOJ7;ZYvN9VrRv z{AoAj@-Q6qeYqWR8*p(Va)h6#q?3s_+Z1*^`0=y$Za9=u`}W`X*o}hlP~=dD#R2uU zYn*JemqWWsz_%(S)4X-Bq@c}w_UH)J^VJViCP|A=p_X@G_US3r%IX*pXyd;7l}-CD zju~h7dU^oHcs&bl@vfhyT$&dAIKIM?o<%Ux;5RXIz_gnVLP9R$Bq*`T?C@Ee!&>CX z8u*9Xi)d~E;xR)uNYeqkZ?jaH{o6c@=%#urV}`jCMa4Ly*NlUR9!wk-}37|6liWAri^!_YLZ|+IB{rHYSSnGE-H1E>&E_ge0IJD$)lp5_a zdxJ13!&MEc_)>#zm0plsJr;$znw_EZYlg0Y+ZoE6)I2gF3Z&gq`r;F|ikxYy{En)p zFc!9!01J$kUxt?^Jxb(cl%H8b=OYq{mB37Y(Y``TY#knyQ_-SdQ}iTlDyKf*1<_M` zaY;XzZ=LH3x!4j2hf?a2L11;*8t7K`4L8~8Tnt-M)*aL=w+u*Qhq?V%GO2a>d8X{d zm-zEF27N~cdcc}8^k`c2+Jt>nNY=*N{$%?KEkgxo64plfgNNCKncJz_l9EDfq;v&2 zi)Xt1c0$@(V7ffKcwK$`UKDmVs*KYH;7&5IZ&oGnuL|i#wnki?nI9ZkL<_LNwe``(*P$H&n5bKIwu~ z<(7E*lXL$obE~)bTA(dsZj0w?+|9@}ii_KlAN6_zU}cT!pxSOzIh=aBQ3ML9V;R}L zUQEH9>DOj<)BLlaJn~Mfq`YY)lKTi;Qt(6nLu}n95oWXfwW5hto>i_g*`ZTkX}MCB zT^326XWXQHCw8&ukS$s=nUF~LjxXgXcHFR^^}A1>&v64Bt>@xGx#>A-*>)l_{Han~ ztAC0CD{JBwXM+FqBt{_2?K@H=--?DG09?c9i6%R+TU2@37_0fPIvJzw9UUl`1Ro`0 z{4C?GJO ze|X~pZ3o0*%TFs=RG*UWUkrpw#1L2|nt=vVQL2if6_@0rV=o%>FJs$Qu_y&ZhP~gw z$GXxu((Vs|^9#iJY$83W0_2PCD7Arf^jzZHV4GTTcIh6$P|e{+`K_OQbzlZ?KNV^s znlkxn_tb9qm+zb3-22+@h8MN8HF*m<>&l?F$C`7{Rtx#RSuW>Zi>0B0&2PQt3IDXX z9O#qR9M^C(e10#j9W79xCEw97htR-h-$#gE4E8BbD0~jZR?hy?$bN9As7s-Q*SW!-xX^fGA$9Z5wn`#_K*>-ZE z6j|eG>dJq(skBsBleV&Yxj7wVM3WMX=#=z_iL24MKd(Z0HI}MLz=gP3kU> zJd?@agPo=9x+lJcqeU5`4~uPlum?(%DwJf%s}itQkVy9nJMEd@trGVVJpBH%$ZHoW z22Q-)_;TFIx0W$@GbYBj?;mP0)vQ0z-TqBfax3qc5AF zxF!wfHw9Xi&tCrv?=b;Aa;46Ug|%N)!GY1Qmd8O>xwXghniPJ1bwGmD@$VY5U`ebv zCb|#6n{kA)A*CUqidXUHO`ftp$jFzD)87s-b5mSj>ULp`PI?MP;uB3Lt8fUPf$OK3 zTU~hze-kWERut`t#EJ$rMatxXGQw=EfoeSpue!W7b|HTiJ&!xxO9jbv!>B7q6;rY{|Ob_lomh z1nhexK_!YJhlJhK4kswMjp~7su=e=2=VBciK^rZLKZM~!q9`=>1I{&qu zn-5)@pdG>(b3fY#1tm5p6D9ykc=dBFIW_U|eZ=H@`%|jlpjfVaxFivG%4Y2qVk2@1 z(hQaK~2ULp9v_wh|{S?Vnj*|b@E#_X#ZPvm{419d*GW1zPpy%GK+ zY60$+WgH}PX4;ktB_=HC8{8VBsyF87Ql#Vgc%2#jV<3Bzg>VKR+MzWTG(=KUZ9-$N ziem!yGM(JDYP;78H0LOgdg?lU_LlU&*PoNGPQ&!8 z2`_u(428~qQ`Xn;@ya$0yHfYur71MQ!UHzN#_cAqH0^Dm7C%Np@RB}}B6a{*lqssy zb(qMk9Q&7G-fG=UPw4na!Evk`>vhPc9CIzraLv!a?}=p*+U#f%#Gd~u&M)R(C9R3R z#W4Dgm7bqwVRc)L-pgDAm5ImY7;>vDQ%};z9SykjW@SBkcwhe5bEPbj#)O&yy%9s# zW~^4N;!|gy>e8fkqoR)-2xgDh*iga9#??iA>C;Ri=wxrBb2JMevPdyszv1m9(sVNN zfv(In(Oax9#2P*rUiQ8W7Ob3B-R|5dc0BW}p`H~uL9z!HwHUq!tT z)Lx#mz3k-)J7bmkBDkane=j4Qi;UGW*7jdlh_q%6hf;DS1+a||RTQ*E;m*c(CGLDR zjJE!hTB)ltJRP_liH_@|U*eAzk5)$)e=CJPvVI|Yejh;Xj zE?4i-WW$83my>CVqkkbesuE-=4tfOq)iZ!Tiwf!p9gy|Sj1@Q~Hm;=!F*y_pb98S$x6Cshp{L5?29g&5$ ztMm13xM*g9fQvI*$x@%qMMHmhoN%cNh46-N<&C0R06}}G1GRKhHh8J-e2((F(1dc7 z8$6#EtS?MQP$J8HV$=K`b})6D@atM8JjB;r1dP$0$Ls_4mEw6-0C4qNpq4)34}H*e zbYhKl℞FT??zRBronHbOXH@Mwk0i9uYd4pXNUC4V6|!) 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

    T0m8bN$eL~ z3Au0_6rRc*7oQXCkhv6J;$WPKpdw04OPm%Wm$(pJ>Q5cBe5yn$!UZpAaTLB2u|57p z5lq$ENzTMlqr-!1ug!irT^PuF4K#)Sui$nX9OCSyFlq5VRXCfjn zpT2y4eba4@x3{GOhd2{0G9;G44??*dO~^862^14;6rF`%lV2Ogl@La=(WS&jNq0$& z9-Y!%iZqhaF&ZUCccXxGN(@Gfk`9T{B@#bWM11#tp8w!^o^#H9uKT*LudMIJG$e~1 z>|Ps;g$X`fs7x;=m?iwi!fJ6(vt*-KQXv${2_m~Z5mMLO{Oo7Z|9#%E(_5YY1^Y$K z-Bcm8um`hbGErj^(4H951W*F!3iZr?ovxpkabb^S_-b}ODGPpG?BF^Pp5wLU!j54_y#23n9HHpuXH%jtL_l23n~GIkF+&JE}BRl?_F>9Zy%mYo)Ofs#Cv<2+0wBN^f~~kMHwVB!G>VeF zSsPL&ZC4HuZR1BJ(lw@( z%6tfT8Cqze#uEVRBa=w34QBod{Kynv_K@MOc5OXb=GLoX02+M#`h^HSHv`1(^VjrG zHKj(PDg4O8%-l<)pqVfpyy5{t-Iu7CYY*c3yU4&Q@$xs`)csh*qT+23mG zSuW(VGfB}AE-sP9Sa<}%?ITXry&zP7cHUbzKLwdZVanmPh0a1in0_iq_5Zy+?zs4T8OrYF>p476 z*|dbO$MXYx)3@8dsrs3NMkt3ISq+qr63%&)*{Q3^1UdzhBs@Pf$W|!r@Rof}8U)WA z^Wh&h?#cv^*#ok3f2ROf6!(K8v92OEaz37QGvEkK_x&?YA^T8+XGqA@;cJ26rDVBx2Fx-W_A3eFDsnh%z{0V4pWXj8RmLWMiU9^ zwhr+(@xQ)^1t2ppGANQAnsAOa`qK6}?rA(;c(;d`u@V;N4K?}^U1u=Qr+xijPTH5y zyYv6fJ80F_=z1%YqkJrtE)q`pF6~%j+&E&lHplGwzu}@DGEfRnO)X0Pgjve8kEDcE z_3xYqI-N2yeHfePAEB_;u%eL^C>l}Etm}LHy-nldTBUrfCQe)7ew{<5^c$R6)yr7f zFJ~SEW^eG}E#r*0jeW(O7$4-91Kpv5A0X3p?GJRA54Rw3)JK40|AlG&@&{gN=C`CN z;?py3h~X1JCC+m%i)z`Ro^qkUDb;HZ4vXWc=Yb0jWVR+x4|!3Uxxchk1ZXvkT?%sr zCE?jUG;DO;)=6+%K|i9uf>+ybJw9@iQ* z%|y>5>a*IV?o3kbwr^C)g}HYc)>_4!o2Z5RO2N9Piu}9*5O*n0g}SP{|L$&XZZ3DL zw_fzs`o%bCkwn`(0*hxcNyha!082OuN|0C$WEhsjJGTG6M4&9?AneQ5> zd2D1_{_LmuGbKpb1tK7llpo={n+lwtiUcS(;x?g!=UFdQju$QZsVOor~XN^v$br@#)# z8a;@Z{5_MvQTv+|XPjYaV7BN;`4iPIvt|ZON%;CP7*85SS*5XN!agQuP?lH(&6;LR z;LQ(zK&|8H{`+;gdx*A+o@N-09Jt>fV7FHO-YWDWVVx=e#ujnA zWkjzaFRhZAc(RJTq7hV_FS<5k+95Sdr4gW=FzTC_kWwAuRq3_D93GzY2X?Jg6 z&V2#rO_bVwv`a?4^`&$h6zwtuT*$!-`ZFfPp$&_Sf;+$rYLlRE@xsmg){6hmHxpZy|H*7Jmg3WgLR2>1e)Q)CDf4SgNb z8sz@6i8RPTm3|B!u-LXAfHX zhN*|GL-9L`)9ZKrkGs;(^ZM?=)cc%g%?_Hnt`S-GI-MP4EZm&F814V0Pw0kvS3&;g zSN#7pzX!B-a(Yr;z*`aP49t%YRl6lC8 zh?;TkHgqxVuP0^XZ@)!-v$grlRyc=PZq{!(&@z`g?dQ@ir3grntA8egzY9MY-6j#m`MCJ?{yfmhY^(FB z-^*wGJkd0kaWG^A|2&XHD zxQ~2#Fqg(*Y#sSZ7lw75mmER0N1-N=1$lXbB}AD1sIeFs_q-zygA9QxiuhDvMaZX_ ziOCEf>q@VVnxi6pD_v*tsO1kI1XA_rpfBx63pV)yo1-^ll%fG6)WRtQgop3mUTexl zCmMAvKDX}?Mv(N0D))(~g}Mn067Gdg?jagt;@gs?zDgEAOTj9 z(x%)!SaP|lVH-{UM}OnWQ^v(Jn9EllMSNXnXP$xz%c-utEC&~fjbA#On zXHT0HVCS&sDnj!vj}sHzJeghaUjM$vQ}5|?%iw2L;D78$xm(c2ay3>c;TYiX!h6Bz8zL4u3!DkJ z49_=${<=EMp`FRn6VttzP!xpQS!t4NCg!Adi6-#S`gRq6*;GM8xLIo_Z^Aay2MVCK zLzLIqZg1I%tEK039>;L#Xvxh2UolE^>N{7)eDb6)e)Nw!;LWX1$h{|4IoTi;LA()3 z`1df_^#Me%MCD#T%nz3iJy-j(%<5x5)+P;WbimO?&&;$XS}eWQOuFNAGnoi? zKSCO8yCIb8QlR0t0LjrRTk`tr?1vlq-Axz6;Ab1iT} zL5OmliTfSk+XNJqe3-H{0jHmzWu>+FwV~r&mi?$o(+3Az3G&TO680sp&ZJ97GOH^+ zZWYrk^U$UgwYIa=_?hfdo3t!Lz4CN`tkY5twP~GBgL$&}5=z&7sSg zRkn^#evgn>kkQ7mbU`7uabWryt}BQGT_;c@@Ze6ii164NERW@)`VQ14A%H zDDX>aRso?eU6fB$PK&beHhfDy8T>IQ6VI3|0T;Pg&D}qot3&}?ihkYLcZ_<_4Lxch z&_=Tezd&wx0d2nADFV_EDT)Acowlv5*eM#Y_r}F#S+n|dQN}8eSDr;Ug2#;BOqe4k z&q~SM9BLHHx*QSwg0_DL`bn$596sdHm~SwCii|REfQNdnTdi( zI#)-S7_zfTgJ`pUB0C6}5~S}4*wKk8R$uYCXIHgl_AwmjDtwry7h@}F^Sn?g@2;q; zur7bUh!AqHwN#4pFzCMJ3U=p zFsZBpZqXCu0nRj{%2_LZBQ&FqQW+0-R59EyrCa$pI34kp$>2k!vuWB)nIe&Nyl4J3 z76dp#hZgZ~e-L)0=G{vB-F~jpxLUKo6Opgqs^##(CySjrP*N+um9Cq36V_byV`=EM z-2xVKp@I9IAqC*eAtY1}*R2;Lqo6V)^;m%&9T*`wxR_j`2FcmUbPyV8e%VJ<-?;Gw z%SB4LHhv_-GI_eZ(0=IV)7e~v7K@cy{kC14pN>1u-$+chnqWyzKh#_!hJcFc zdip3Q8KtJd9THFt*-ub@!zBxhxmuhhzdC?^TT*HFTjACt>gGq?RQBTj7hwxd8<#wO zvC8ZM*Hn+>h&1)!q#j*z**EMSAF2ma3o%)NZ&MB0?LU|ANl9g_ydjv$`$1Dwhw z=HBLkg{oZErNV`*`5Q!P3|A)vUC-hIys3AA_8EIH+k0R^41;PfVE{cnmFOe$Y7rEj z(1z&1oX(CuJ&)KWA$}L~GG+Bc`miedCh}qhx3C=ebOx6+AXYlwn&R-7-!1$ToZt|@ z8UMtQf4}o`5T}K@#JxDyS-?vCfNfPMlzWIpA$ZtSNYKRZ`{{PhwaGwP3Ts z<1;$C`i>%lD6*!1nJ=8>d)_Q3{O^)_0ro&cpMCPRjh!fQXhu6mN9{N{9Q-3j4JlhA zgQB!UTrOQ6rNGzvQfaA&WsAe}gP9AE4ZKP^8}r|5E~I@$r7W}NnLQSi)D}hEd)Rv> zcG9v#W<7rP#PzU{Ac4M0;<9xK^AG%xqM{jmZ|Mz?O5v${9=@$$9_|K6bBa z#ff}c)?+ho%-#*+W0F}Te4h|7Nce#zl2vRd>DSArt#Bk$_mP&DjUgdIZ|!V-&paY( z8|V`Jah8)A<=37*ccr&^G=i>C#6VNCO?S3Q8{MBc%gfiVtDZ%^&kPJE)wE9!e-?H; z$nj}ooo*q>p>ua&2iUUTeL1KPdRT*=9CzmJzhFCJa*Ln8y)VC(^ zOh-m5Odkr4hP$(kl;>Am<(_O9Qh^F5tO(aWk1jY?82I=0Q;UF%S}06$^Yde}5=;oR zQxZiKU-NiF%v+^G2b{77jG6>kdaJh86NE0$?=*@f-i6Q?0Ba_@{G3M!s@rzdAauUD zuRP7fsqw&;T9`QpLpcWQN?(HhIx0VqxZPwsdfY$B132~w#KENRSOVK!D0O3F|CSkT z#thf4&HYfls>FH^UWLC&d&@=q@*VH9_^x#+#n_QJwlHAB!^j5H`C8 zlMrSoQnsZckhm{(tG`)_G8*v{i*G4z40%o##XVrWr0&}E+m6tfBEOYe$7Nu+pBu-C z%`n7Ad+j9*&jmACokbjvPQ7m4g+R>rVKBAS7nDywK)2m1eRo`yzZn)G52MuGeYaP* z%AWFH%lG}LK^CafeYfUNO*Ts%_%Agpg;@Tsdn8(Q@-@5$e85XkDgAXi5OsoAYr@CL zQ8T1JDB%c0OTmwaD0>)73GO&!`NQFdq^~_m9uytyDEzp+rFwlscB9$BFf)5krJT2) zyeJHC{u_Q5$>WWrc6{m&A7*rSlg;VMw6^Rbtiga)dD&@7fHKDss>ybC<-hYOo8@S} z!IfM%&jh8uuL&^8U^uKybTd^A^?;x~q|i*GG)r1Y!RZ*j&^Z-ivgz)ecuU$qyS3dk z`A*)5Ospeqv@fJdX70xw7lKN3v$8TGzQ0wZ%*1L|kIqpDGi&MxflMQ-W$Kt*RAI1x zVsVLu05ke(k$Ald9BADq`k`+`35)|qA370v)O4O_UwQGl_QC%>=kQ;(hxq`x!Wf8p zko^Y<*Ol|Wf53cBkN%d5zroQ=4vL5d7Ghwo<>loKD%}IEkXITBlfScR(}7VR2n%Oz zJmqEwG6^*?#~xn4jX2m~zR`aZH%>;=zu}S=Av>7zPX?zn=qiwZ<4IqB+h!Hm(LB3O zDhV2@-(k?l?5HD!Qp~7k6$@YibG}0p(85o8>ku`4YTF=UcvC znbscI4^_c(lXNm!C=AQg398vot_8bzyPt7RV_j4s1mtJ_H-kkH!fGG&P1-^~Ug+BN z=Znn+h8z&tEpib;4*3}7Sr>7w-!zxI-xNqa5!868?tcBJW#jiTcO~Qn-vJm|Ajz)# z=g&{&kzBY`Fx(~e6Aj}In}fjhX4ZJZ+fR;J2$I76mHNs^>D) z2-q~9J@=t}L*9CVxotNRivKmf|A~EDnTVo+{TUi6<*Yq*uS!KTFMnKe`P{Yc&_WNB zL(vA?IGc&CbhcrZq^4CQP&N3yac0NL={;2_(R&)VytQ(j6SBrANi-n{59{xV%$SUw z-QQ6#f}@)xdEpAR=G&H>{S5*sSFZ%kww-qc=RfGE1${vV5zxV`ytQCY;o}_^~eU$f?j9#znZir*aw7!*jt2Mr3GZA&hgZ6|!$Kb(h{@ zSp^OZ$ZqHzwp@J#Q!13|Hpx;jr`y5~Z@xDn{6@2El-e6^`e=(KNtlUl4Jii4*&FTl`(%_N~&v!xkhbi@5{NB}*jskW;4rA49!g8~g zd%|?UrzRmKf7CWM%{m~dG3acm*^v^wYz1l~jO!al0-oXG?BEiwZL@qlYFk^LqntdW zGbD!}ZRX%=>tl1S%z@h#mRI|;B)&N5pxEQ2_iz&oPf(Ghe%_;z$Rz!xJg+`Le8O=q z$b}KEry~;M_%R<;w1;ybm_HFE=iKb^1Q1Nh3=<@BBauO zMZb^)iRj9(LtdWQoV9C-M&*~54&a$eFFR|Y+ z-+{Gi6-A^{TvtjNR9XPg1GY_8;1k=K0m>u6<24{fLrq7YGK>!_~9YO-U21 z#AkfTZ*-q~ZA>$k_OXiTS>Y{K>a|dxut>%|=a=CDJmt<{wbC(A5(t84ce;ctbAn^M za-}?HGnDtD<#+uxL+eHq_4I+@bTEyC;-r$Z;!bCCYhUS-MB>n=xAdF)RUGZ8w6WwU zAeF+3^@{*PuF9K1(0H3nA=4RhXZvF~GbyDZg^Bwoc08f$IXLS;Tj8%5doyldrDDl< zlCt_e`FlFkU#INF0~ks28B-wU##xMGer#En?T=kZZM6sX%P*Z(>z_gTk;*86q*y(( z-_r4aRM9Ze#0dJt^h{fhD7+W3i4;f5iHdus-zkK=jvI3f(pv1w%Nu_ku$S zDim||>@Wo^xv0U<#H(yQn8xM1I1_uG61cK5lKl6L%aPH#L&$xFnqoIqDPl}@5+yj| zbd83CR5>@|y91a+2I0TnT;zgYg)q}d3(2K;D5^!m|2q)+)#p z=56a=yAPee5$!fH587qs5wR;ZhGv&kAQ>Mlr9juY(e^kF#MDX2nTR{;V7vxeS7Ql- zE@2LCi&8yBd8L8XzxQXGJ0(Z=7H@*$DPt#Z%6^j*W@_ECL%?$%)ZUwy2}NaWmMJvx zi};s~?m@i!8`5nRj6q#SzW(eA0@W->#oYuvNsQ(%%$h3uJoac6;ww)_7d<>-cZzQn zGZ23f^`0A820F|R(8k$6)Bb`R*BNN1w(UY#i9@h&WTn`tpwsRqSWUB6vx|wBHNpO%&beS~c0NFMBU#AGg?KaSHvX(72X3 zRzs9i=5cKFY8^AFiBX1NCu4x0z?YqLd06h75Zd!BrvcFUMlXKXwPQrL>PdHYrk=-a z7QvIHL>ZLC`?8X>3mFmq{^Nx6%N&T%R3KBZH;&7iS$$seuh=5yPX%9m&guU8#6Q86MV+&?6pqW z9D^QGnH$dyeC&eBL9hLyUuQZr+9kZ4JVr+bDA#k779{LNRD>pOs$StH+at3NTfaQ^ zn9|xfH&P>oYJ6jvJ5)&b_Yw>aOT?PvJlu zc=MzrA6doZF+no{k3JmW3tuLoqIgaP;}z||mzIo8RXioU=#A8}CO<8TY3KM}h^K9e zoh)Vb(?|~oQlK_&Mt7j|7y=su4%X6Zr|L>=Jp_#a<(;o7wVx@SmeOVIci*NC)UDY( zNV8fg$<+?psyDy)1_*jJpDPltj3l|}`ku*UD)ar^zjF@I?SJESs&|+goLg@7<)Ut` z*M%5OkN4`V5ceYydBm|&C!_INM46i5+yw2^2LcxixD(ic5(rqDRE2EXvx*WWrsq=h zl$wgEyT22zasO^IItC5KTqKAHeWR)RFL@GHrI`t*SsuhQpbr*aPrR{}$r;66H zUf_cSGJQNSczi3Yp1#1zEbzoPmx9`AUD`A0=jg9q*49ZuKK@10AlVr?Ju0Bc0Wg&@ zI{kB7ouF1JZeon$2!D=RuMa}&u#;=-?EL`3 z=_|`$M8c|rLd&{QwZG#U8nsi+o9J672p zIY^la%38h3%Yx#@K|4KRa(ZN%_g7_$xG*mTp=dP;!mK``36}e-xE2hxMh(-dMs25n2Tj=V_b$SkQcLjqhgv&dE;mB@hRIvq9?c-q~yT>O|GHLwPsTJ|o{av|P z@2l5W_96Gii>dZ%&G5px?pQZ*lzqHBnBmy?`$t^v79Fhxh|tf8e8h{g4HunWGr7yr zj?@>-GBDECcFxpbRw4bZKGpC24c;`+jE-+54Oq2rccc?3>y{4KKYi_)D!;$N`Hhk>&<; zr1q~9tT}Q^hZmr)Jo!bpu73&T zmyHYf9X(U|pk*0s2Y|ZdDL6a75Tyr|JOe7{-;<8PLU%;s(`&ulWy|Ueeu=quUD)Hy z{0qZT3#LsK#Hg^_dKA!KEO3}G+@A@Q+ZifmHfyijs_zt?Hiyc@W z%1SP2$~eM^ORz*a2H){XTgbD=*)bH|Cfx}(*pngzImzZInXItL*(h@AgGqI zxJsH0+}aqcjC7V~E1J-?+U)4@UND0H^=>B4`(dPJMmlkvK*wey=Ygz&YK$Tc!pal8 zctj(X!vM_hx6dlcwmj3$FHMOEIb-3(Ka*t9Kpy4{+6(>>MytH z!y8YH{V;zB3T1Akd$|rcPyB8D%1kuicVQ~nxrk3JDPPHX6cm4wQ%}HLC?HPKwlK!2 ziml-t;@@F>&JbZ2GD7=_uwAA%%-74~xe?-OTOIUTY_sjkPRdyE__a?(Ig+aYp3ga_ z(eoMN>Zk`S?=|m)#Ner-TvC5C_^{f>KC$d*IvmVO@k%^)7GjlF?gFmh`a7`0ec|yP z(%&Pa;t*e|C&iDocoMFs{{TKMt%7I+9 zip0xxV}CQ%^HBv4@zm(l&^%GGrtr~gjRsb5jJ7ciy@Zmfq62;A{7p>z2Fv>H7p9VJ zYZQ-Nj~UcH>XVlY^Ks$ac0Cz^)oFxN(O>3SfRg=PH1qXG_V50%jfm`HW6SGpkXo34 z2ZlLiE>04d@-bb!fn@^|cPbYsP*eAMCwf_7D6KyUKIjjbeyw+O>HS||&}}w&ENKAk zG^C+7W*`jm*{2&hPxlaXRa=lGjcce+uWV2rDjj~OenW?Dc~}4CV&2h|&G5fc8io-h z7W*|RX~|$JF{^wjm2>%(l09cel=t1AcbmAC=zWxkVeJ6o2Z2Pzeb>UaS>WRse)-U` zE?|4#r7LP=|NkCjR5IB6=B`Am2)TpkT#e5<#}X1h+3}ZtZVuh#`ih_hZ?p`&=Jc#x zmK@7nF*9D@l`qbI)Pln-tYM!=1v%dLTl{}j_@6ZTZh0KYNk%f{a)cLCn_19F_A?pI zBX#LcXF|AQ-SA4%w_F}H`r79gVEya|;reFnu)=5N)yTLQ8VU>yIjKekiWI#}igYd3 zH-*};jeyIfS?r06#Fr4b@4F!aYKMu}@72UXbvKKOAwz_;s=hU=7Q zOno4p`3p&2yM)gB50VX7mfW0?b6~liuk}8gk+ zyoKdQje(BAWrG=yQSY-83p(TH;r6<%2Fn>lg@8DdLXlW9Bl;uQy{6t#yNUcr6+v=@ zkXG3ztX;oD7?X>8IKJEB%YaiXWsvimn`N5mdRd!+=VAi9eUcBl<#~bhfn6a+37sP`1B^3 zRy#@l$m8-zHG%iCGxVE!NspY4r=tV#60Mk%QvQV?STjC##K}7k&+4%z^sZPHhyNm~ zE^Xpcn(ygEUjnjH_ZLRVY;cT1(A2f}yb=7*3uWaR2hZtyBC0CxxpXQ?bx} z#3sKIIOw7Y%u#3d;v?#Az1 zRTv*7NS~>KeumOisib<)f$PawIonE>KXdtd6WF?&3ZTwl=S6!H#xj}qYV8K*)^JhLs*c-ebD{RUe9 zj)zCBHx65Lng4n)>Ff%4(Jv7I znWK!cD1g^+nEU85NjS#cG&d1W zoMM2zMzU~i#n);70)mwgAV-ZeBQy$*uM(5R&ZQG5c2f;Ce6i-tNfuD2yxRr>`qDQQ zW`SClg=YL`KMs#W9o3{yiZ!%Frw?f3g&C=*jD~PL5+=ya@922(um_a#2!9#kmv9dj zh{I*Mm`e&5If5VCv@;K2Q*d(}6?`ByQ*%#-78=0(3;PkAZddH@3q}IC7L%`&-rW(F zM+lZQ9{*6H)ebd-IYQf$dSl97@JC%S482iPA-nFvU{#=hV#bjq^~}quG=OzMj~sTL zy~pd%xC`vAh6f+(tT>>abH;`GV8EMF=r;BZ=^BV8zjBx^SJ}h(_P&o(CPP_Di_nR+ zs3e{~<@bpl7dHQ)voJ0fOnDWoVDUCElh)-pp?_)`51-#+TombEISxxEtRk9*rc;Ux zm8R`7+xl`yJ8k_G9-|y2uf=C0w#f5Y&7dtUgeP;n44>h1JtODA z&I!AhuyMYD!rjO-Gm#$&7|MVP1kA0}r4uEgi(|a;tkIcc6fMzwcB2v$Jf(^`(+SH4 zMp1e>e|9eseICz_4Hi+ow@=OzpVEA1Y{n;-#%G z!*3tf5Acowd#2}vZSB{LW#d_9s%Fh%-g*|yoZYvx z+xTad+Ah68?K1bPv>ceO1jH+8Kl_|WJ0fRU73Ey-xxGcu(>GDt5>?1I%<*)A z>X^B(brOcDaZGlxV{H@3=>Awnlvb}m4Jo;>ETlbvj-=5-Yo{oP>LV;Qg<|lT1kN0= z&kQtpoIsyU$-|iFGky}YOJ|v_ee&2g#~7>=gPq}&(<8Kc@Nu@q8c}gZB&;Rv z#~7$>8gr=|p_M-AKyhz?5}QT>s%O?n?Oyep#4Q=$p9HB3JV? z&~WUfU9I`RdkB!qBAg>KD-p%cH-x=Ys%KhQZ|2TfMW++-! zEj_W6q}evYsf}VpO(f?GS$;K&lprQLDdoa2l>=t#;g?vM{^84O!2B5(otzy?`p0N| z;Q76H(8}rTsm-Pt!6QyTvTN6LP-J6Y@3PQXt@10Pet$F_@A^i~MYjjGH+{hQ=IO%m zm@Cn>j9^)pGHI;lRa zb=-?CL)&;#DTo3HO2nbYl>{~QEml5)dVz;5RBXj{0%M~@LX+5Mr`P8_3HaV|d5gMbmNdhsiq zhK6jA$lqIBA;ZLd;_MM(xN%5P-}gjPauX>O+x8Oz?|Q8hgKfQ{ike93S5Cch=E zPwBvoS0y}?U)!})3vh&dONe(%`H`AN>chF(Xc$r?p3MaR$G+5gaN$f9``s0ReA;H5 z46asL`QRs-btd>dMTOG0VJ6qf;w_YiAQM$ewt{>W_YD7Zky^fOfBqviBGZmCZlM68 zRKN*dwPHptpX-IR6ek6Ve^syJIIk*yF?E^yNo1YetjNbe)+%=cAi9hJO@T^(`hfmx z9}p6~EMcT){}S8LH&v|d^j=Va_X&W%7UEtoqK1|9a9WYVg%i0rQ?!ylT6cabh@f9T z);z0u+p%jm%g2lTOUQ(WN;bIVGo<`7Lr=MA-I<+mx-+{MSgrKuj}!D@ABK^tW_OZ% zA`R1og@ICkLYTWO)JR_f&ZQT$cx`#Vmi3oETl;kqX|sv=6wed)BrU4$>D0uFE+6st zBA56D@D?(=qFwok;`9yVeWTeJX`wy|@bj6p^#PVLGHq%?*b5{0aQww4#}=3#T0qRU zwHVWYk{D4O2a`2_sVv=71Ir(hF%&i`Oyv$$N49vE= zyhz*n(m#hin1aX`=r0pXwM4;8)T~Blc3>Ak9;RM5lLB4Y(`P4=qm&ug%g(L1oI;T| zP`5mkV0u*G8$0{~RQ=&Rl7&VpXVBXUX~>$bb{^qOjsI@%Tkgq|>soOD_AO-Woc8c(1HUzfp2&)y! zc`f8R5KgAw6@E)~j&xr%I#QHWnT1*6NI%=e(CT&0?+?rSKGVn#DfN8cjZ`I&0kJyP zo)jCAs_=Q+y@yVX)n{g_hm;BDP#USGy`ooi8F1}<>^!+_#GUe|I3qt7hUYr|jNrPDLk5zaXHI;R6?&KED@#Wy_$Ubu8)Z|8LwK z!khtgl%v^PNTHVDJs%QFI?&X);`<{ihUoks;79mUHuHNyv~>0Z%ZE zC=`H7s0r`YSaYONIhN^T|IQa)yQTAzuqK$|`fDzhV5p64y+4CQ==>MAJt@H-E&Pg2 z5|o*gutVq#8M1d>xzu#!>7sp>37jbLQ1D1&XKQguHIfm?Nox|-oaGS*{~DSj2m@Ms zGezo9W)Tl?9LOgd8GvT<4RTICQ9g_V!BuRo&g7Y7j0HVR3*5MPv1>OB-$|{B1pm~7 zx-xf1{mml%`uA6~4;1HNGy!6vZHCn^$QuI+d$ zO=Y|85fFo2J)2OA9%7p;)O>sUh6Ge-H|j6%JL7VZyQS4Pw)wqfet$~N_Z>gKPK+g8R34`kP>VT3Hd?4A`I}va8*oTCY$b4 zUZj+(?hv^qhvhB7I&Ri)QWM~#9?KbxfkX0$Dsw#`wraDxgq>UsIE)e-uobxvA3|U0 z0mOFki@jF0no(1um!zM<-|VNHU;Z=!sq69*N@w^&3P@Dwm!ZV8jfGYac`0A!Bp>?= z>;W9Y{DFIC0&e5g=s=`{Jc?0n`n-vZx~d6p5?$k3gYL$P_&Ug++sZpjDdhV(LuWulbJ<;wnL3%g?cx zUple(29MVKiKJTHK53bXLxcuh>r%%}G=8*x^ziaBVEY?p(3j%1sbCx6>e~VWK7Lw(lE{9d zxNAHt<6a=F0TAoc&)aRPXHU4?MS+)aK>28_dKa&w)?EHKHL6G5MEA(ehg`C>W4zB9 zrFbB%6Og;1WzW-pyZfRIx;zEod~tbq!#&wFbe?jTN*vdh(feh4F7O%AyT{K{d{5rH zAud1Lfq*1At~_S^q!z&G-=(O=NAPkzW$m2&H7~ldsB-4~`Kc-sBQ7o8ZzH#W1tUc_V_7?X z7gLPX_n@$UJJ%gMyR^3)RV+2xz~zO19B&opKW|OFH~aq`$V(*W;YyVX_;Zd!SbO&G zWoi?0r$*3tlf%`~;H5HV+l5~%!jLc3bL?LA_%X)>CiMyGlNS`PHYSA+yPJMDS9&Nq zVLI?pGooytWLpLm@)7kcc`IR%i87S(a{7btW069CsSFkShui)8c*epSkDAZcTb%#u zYu9;L2RlfI3k(!^?q2Rb=A?T;8E()sjePlQ)ze@I`E0p;y{BHJ5Se8mJFJ) znwBOe8Wkl-5t7I_wH4f~1+Xpue;LXo@q^;x6ug6zjKg6XfG-4zdT?@Vqaew$s_~~B zURGcH?r79|y$>Z1vAY!=y`Lq>e&ZzwhVrg6R$4Qe3P z|1l9?KQO8*_b{jMz3Ob)6CcrFdh?*2D&no`!WPjA(BH3wJPg>?iyKRICwS4#OO>Sc zo^7_V53!bA;KRh^eJ3H3G*Y`2s0PUBr23`$;^vX(U4@p%wBDoK6u1zzCNtUz;|5ub z9wdA20ab~Vo85-a#yXrtsw%UcM`9?IMZiXN2F&7qkPjayWo2JTRv{%i`mi;x8-*xs zcj&^!Cte1ez}1kj)fE?Q_%P6r?NJLWSF_PKNfisW0Li6FXze4}3f76rF(-YhGPYlP zXZ}C`U!AE{a1u>xbBOIs?W|c{r5BrZ`*&882|jI;YA%7Kq6;4R+K8up1p` zrD;YnHHH&&Hd=NtH)qSUI5rvogPNY0E+k7$zYiYK+Z<~q43L>52W1L1EaUVq%LVdv z0qHtmRd~|CnQ3ecL94I#wwY)1gl~Tin z^@`0PfZk@Z*^)r(Atp&30)Efu*c|pe#u7H2)AJM{-A_N;|^E6=pg&{%@D?(4Mh z(Pjs=obIUp=4G-;gg^@nZQz6WZXKW5cJoo0UFhfWQ|cl!a{GgHgx~3rkaQ_-j;iCv zvHHT#hfTfUKjplr1Oz^^ve$i>WqzJkg5xRc4S{nHNJz>`4fX#Sm6AVxM7_ zVd=qVtGXNQuO5)>dZm*v_R|pY9DL==Olec8%l!7Iw53$(PiaAEeHj+0RlZ7U_f`0* zjiZ|DcW{031dFum1FwjZj%XrP9%2MKotxfv*~=*;-yeCowbV|}lM81sNcxrJkzjfC zTJ0$&M~HtF@X0_aLyi{^6m4hXx5UYwEqm%G2_N2fi15-C;CK|Lz`xFL$J)AMyvX1y zm6VX5N@z7Zi~EZl3b^$(19%lL15t=0ssEs~ zAsT*kqQGV<0g#~C8{3K3BoGGP zkpV%m!`-o;KQf0={wZdb2KmD5@XVcf61aXvfATDur_8Uh;z`i?BL0t@C`QI3B@U*R zBx6lqgGX7X6vVzlIWzMN{O<1^Fbb%lD;vhLar@*vWjz5|a>7W}$@IMm4B@_<0$8fn zAPHPhSo~yuCIxkKUazchDNkQ?V;4{ZYql1%t3)1qMQD_uA5;NPvkj21DtjqY;6NIR zMKvUh+UP*x?PiX)9Cm%Ec$F!5mf1q8*ujK$;P|w&LhS6jx(;EVJ2O0pDkdeABiOGD z^hrVp&w`Bzo)g-*d!XCoRbyJA@B*U0)g{v%v+|}_5Ym`rFc+=G7+lEoZqZ2YM5sXO z1&<3xn>2Lr{#QObSHDy);I(N0-)TIJvjni2bvj(fC+b!LXD2vOB3Y>l$1fA(xQx@P ziAtvLhEGFXeJFB?1am&V2YPsxAX><~O$oN&PqVx-srPpkX2j znXS!qmLr0hOu=)~O&XhFOEztLT|Ia#5o(7^+8&S>mRPGbp!wX1f0C}dm08b06YnXG zZtp%bsovkx5AxF|aS#93$I9~KN2?@VzRcwQe}8ybrpT#e7#jSapGS!C&(~?V0$gKt1ae1W<_{z% zh2x{#ddS^^QeH9Hn-dm9jX;?x3?+{!Px2@=^ey;UPZ=HZ&bsl%k-43I z*nYF$lYO=tv<>&_Sc2`E$HV1@sfa z-3}`#v&l+tek&0DQ!SpoeOghM7Ad7vJDpE&aRJwMZ!7@F7ybO*YG}hl%ukqhon=wrmvQS3&{2V*x*G zS4v=$SZq2*b}N8rUho#?xJ@l!XFVMW&kzRbGjQ47l8WdLUv*SN>=$qnR&%h?c`D?= zALRO}Yhnj7hQ$^CN6}R{H2HQ>L24i%8{M@rYIKLhs11+?DG5PDx+Il`Q4)iV6ecZ5 z2uSDX5R?)Sk(N+L2`K))eSgC9KJSg^+;h*_JEb54i+w-&-QYWsldLwoCRqI>94F-b zF>k0xi>TAolV!|NF7%PNIs>t`1rIGpx*^BzbzD;fE7JJ@7<)BK@dMtz<$$si{1!*m z@L^&pY>5+aFqn`W3}-|23vQRz$SV)dcKKE~NARiS(;eCv zkxhx3DLkk|$s$YO5V7`e`uWiPFRL>y?1nF1r=ur(b4L>WYLqt&<8_5;(7oPSS;hX4 zaFlI)V4@-@1*;aYjO6|gIXSZ<+}R4>T-7|dzYHBlCK z!NP>RRHx^!nFyt1kh>NiKCSs_RX;7WugoQcnKORi{APJ4+ibD_7qakdoHL)*^>4F` z-D^Z~G)*=q%65WJ+5f@!Q{7LpH8cfzn&$KtKAe5sp+M5V$>>6j4vkqa$|AM3;4iKAb)N;MQ~M=xm2>cmo!G541q?9qQU*I-+`}PU2%*B zq2phauT74|`rjPfX{~k4V!S6VF%_=2rJxj<5gl(^U zW`!AiH|4}$x=gwFxd`-jO?N-O5#1{2Ahq^x6KqH{8$Q3>C*FEGJt36d!sVVQswctx znAUtV)I^DBId9B9*kf89Eq7y1YFOo-YtK-6L6j(Ujpg zIv!@b=94$+7q(>!DtHx9;xjw(!8&2&9bbLPLAoioNFg-!AK z1lR;%+mI{|pYYkDxt*cvJ%su`z35PT;5hm_A+&;netlf zkmJMqQv8*0f3v`zbddrthZNPvfL{R&i-mp__(mvfFiaq><8P(_LX~yKP1Umh;B$z<4Wrj zV)#o)L(^nT@6JsG6<>PTzO2l;Nc1~0LV1~JB?&S|q69(| zF7Rm&+I{2OD@5Wu%aE7xj|TGe;iyks()>+uM{&f+LJqb4He(g#*9 zs|P%85b!lcGtll8D}O9+kh$66tIHUFWs>dkf~@U=!9=OqNL`FU>Y?A?L-6XM+_MCN+;QX+@}{DJzq;eGZRZr-k0|Pd zDlIWH0;l<}e=-`Y_?7!qYFQ#9KyNueh28FCBaZ!dP8vm&wcJUgKhJO4RGM4z3e{%5 z)Uds1p}a2i@tuk&t!y3O1GEWn9#zcIAuUh|V>`EvVh^Tvva_A8eqmV{CBK0)QN$~! zMsS&t{>fDHkB6}y`ChicHw=oRBLh2;`m9{0up-55QIe;eDxc7zcYX$ZVqD$&Dk1uD zS|Ccms^sa_fX-YFNXVZxS1E?-O-@hXugfLwSnLn%zS=Axb!qWE-TEQ#bIW>dtdqG| zuI}M0qAOxb+>@UrF3*&vbRapu8ALjBgtl#=}kV8EAJN&qd%2lt+QoV2M713Ef4LH9ZZy^ zmL|R4Gw9F8#KSNZWbig-R}8AaeEDL8bPvc(B{}00kN5kHsHtHIq zb)0|qF|Psij5Z4P$0=P_S~CPbh2fhZ_6v0HGsD2c~$;E3Z#N zdrpj7fqjADTyjPBQYR!{JXkg}|5Bf9Drj57deggxoqdM0<^9~^45ywg<1wvtgve70 zxiWU<6agI;RGV>*!|Bs?GMz%kA?UQpPVjtBxt1N4+>KRtcrRVQyRP=J3!+-h#02DB&^a(Sg3#fyEZnDa@fZE6qMStC!wYqMjX>J-ebTgw1-smK0K`!Mgaw-Y?Kf;(v z#Fkib0^;r26&HjjD>n;|`9CZaU{^^~Qf0#>_X*!Jrn4Ii1QSvn*;%nIkhWRBCanUQYQFqb49XUDVNUIe8AbA5%HCGk?2h1z2sbL;-sq{w%{S7QaCa zXy_ryh?fVey31QBaQ{p+C$0_9_xQ{){5gU`sZdjwBj0%YyU2x2J^7kKx1h4tTIcs< z&b&^ZKIUs$eel=?ba!>@1!2Y%J5T0swPr^-0mugi*8`e3Z-_HtO+6ufqsIFan2g`& z$}|>7Zznc{mfwd;FuohNP?COR7(8B0)i#~xeZ6~e-i5uqeH+_g z@h?)qdeitZ&JAyF2YOd)gut1Lp-=%e%lTa1Aqx}vnQN6(IYYtlY(}yBj8MB=g{ilS zg}|?URnhPQLP2;bC;IX-@zh}@|L%AxFfa0?zvFEr+{Hx3(aN9{?H32MMM#=$nl_}_ z*=bokKjYg}=&xLfFhyzKL6Cv{r-lXTSX(DFYH>pTT6&u;ccymf-QAv>uYG2|uN+H@ z+RPxN8@UndUlcIs6ss{jRkzI8BEYWm&mlZ^Yk7CJY(Cz_SfgQ!VG8wqQEGb%Vxvt7*3y8F??LDAR=XV>@03X>jV zC-p&}6X%G(9~_j@46@c!LsIJxhqvKkp1JbMBsl{qivCn(V)RN)&jPTA5nPW4p1xBf zAl_$$HMqV-Erthnn=NYh#P-$wWMNJBMO;2Id-cX3emgDDlE-%lh zNARm*{=r31r>{XI{9kC?Cn|yF=YdJprV9KKE!1u z-f^y`$bq2uvrd!f^QWhCL?q9&DlivtJaPEj61j5M<>E%bQD=pmT&_vJFNTM-mF*i_ zXJH~S?@iJr%(w!_CuD>W?-!lZQSHbd_R8H{rcxR&+XOpXjC$7(f8}Enohu@^VRscWo$M-*HBp)0E_<$R%hsUu?Syr?|*JNVu|sbPtGiJnkv%?F6?`p1y@#HDHW ze!vMfpVg>P+Y|;$T>bI|yY9I(h_&W~((A&*)tEsJ594@AO5jhey5}=7{0K58e-NWN zJ$hH;6E}2~p;Q zBxRrnr(A{3pvGa8OrSPpV`+Xb?sAArz~BPNzrl5`NJFqP8&tbQ5-`YdQ5#4^(SHbx zerT#=CoeFmy2H*NOl6&er9z`#N=1)vOzzxrpLhFO#MQ7GrVYhBnR;rNh05@X@APKF z8j+ylE4?1S5#Sa(@Y`+A66|Ccv#9w`SjCZ{m+jB1`h$jo)kIFk!86@t+sgCwc1n@0 zO(Lfg#-Ytf+ajI8KUka0_v$5UDP<>4u-n;x;dZbj2BCY2oqQb+``vgNVZZh@Q`O=v z8G=|M=&$}zEZ$q1;Q-Sz;fOZtkP!DrMY{^~MN97bUN4U|_voh45+TE+AzCC4*J7*h zN);0%h8hDlR)_+C@9B<$@4Q*vmROe$8;;|$IjZK9FCziTz0xcKKDp73)ykFo8<_Nf z+$|_~*D(H7qKsZ`Vy~yh!m3&TKW)_b<7@A2170MqerGDnePmSq!5z;xuZ^!sR8jL6 znP)?)JHZ{~;(JeKrSjQ|%l!1xKT>xOHi1R>5%H&q0T5z=w*is_euu-#db8*_JKJL9 zO#EO!LaEFK4GiF5!oYFN^(PL=enRNaG!{lp|3^jrK+aCp&8RJp{Lj+j&$IV;oUgk5 zc_h1LCpoOt&<_-I^#Rg;OlVKy>+ZPebl(eYl*cg&qsPY!y6>*}2h@O)rmiu{L?L|W zaj>dcgR4!Pu}%NQ+M$Oq>VX6v7AP{P$YKm`d9L8!W%`UZ(Xjw!8X$0VvM&fBy*Y7J z4YYZFv1;qFS-3($i$&W0SM*$ zsgk6}1}!b*DG9TZJ({S=4jO8;S$#BC3iEkvhY7`yC`|G_nJ@4Ikz>+OLqS{;w@wCj zoF;y=g&n8H73phM4wKLkiPO8%GUCsPwl0Q0n&*4*HTD(exo)OV85fjjQ%*xy3$=#p1tk+%ucE>;hb#h_-_Orj=U8~U^7nfd2Wr9l?woldJ zg&RKv3u=AUV_)IE^xIXcaCp8Vbzu9(|8Ge?hH2>io{Zjvp=wX>myV-gUDv&YQp@`L z9e18(ppX@$*i6^zr?(s`-DbaAyUSka6IZ_<%GHtdA_7j4eC-P$F?d%x8jw z_9!N?p_Vc{*c%n}b=C%@na@Czhj)qv=3k7&X;&jqNS!KaWfv5BTF0a=?uWUROHGfz zpu*rgL402H!H9Fh{a}$|Ig@)LWt({wSB<$3P7q%Uy217+28-63l;b9HNg6w#xFOvq zdgqT39yL37R4Ug4-raEopz9{VK*G>ib$#JbqyHjx9rE9fo#m3`zw;ZrL?cBJT*w^g z{KH1AY9m>YX1!aP{Fvyw2Q&AIKXCHJT-^{n^+w;l=9D-x?C%ccVH`?MPv-@Wgzjjh zS*W^E=}kP6_=EEMY~cDDDbYFg3mIk_0D+j-=$f>pge?D~FoXH-rTcA!G84-KkxEK& zuF;x&iy&ED8t=&T%(~koqByw;vucgoa4QZ#1ZO;Gx8M?ckC-g0sIblsev@`gh z<`*ZfyiT6NO`N&|NlL=$g+LU0)b)=7RiBoRP zg3?;Cjh`*2>=7(MR*XbM8;HhNVfYpmIPdXyJ8e*piW~&kw163RPYOqKW`jh0hbI>` z=3a){Gu$P*T01AY{%nMiYmQFSz6uKKPh2|5unz02qOncRl+;Hh&{Z2kXb!R$Q*A80 zL|lmRtm8JYfpW0Y-cWgrdiWRW?q08**oQ8n+W2B`gw6&%(-JC$bcP<@-H(@rKP>_8 zZF=;C?^VBe`+2V2g8F6b=g@B`NUPHGJ|&F4B5My&NlD#_nJNFi|oMp&Fa|ap(DrXEtDxiwXEp&&KW$f zdR$T`CzMjE8r+~`n+xi&M&{I`r9~AE7P40SKXVpjrgA94EK83 z+JL<9ira6>`l@8~h|YHTTB8Lxzal^qSZYgzRyQS_IhZC5VS2lgLw@aE1Zo!uIR}i z8G)Z`9|!9rEvRugW<@R2u8rDjx|NWdA)kb}f>{7{yq!_s$CrI6*vm_T%yB&I5+vba zbl13R#uT=vm6#2TDxP>HeTzHhZjYhgc};_qwBl)ERU_k%yzD&1fp1^rac>0GOlYR) zB1);I{~af+QN0u|%LG~r34e1H53D3InyE4AM;9ZvBZ!qK(&8KP6*Pv%F(UuVa#uW( zodrWkSN(3*kRnkIE+w^Hzujd4<(x6t4lnJ}%KWVJm$Dk@8Sg}cB*ra4eUx7(!|9c( z%2LcYN~~WbY3TxBWniG#lku9w>+9U%-NB300pqFnbfv~;O%TL&sbjj$zjCf7lb^Hu z$GY#@s*2)^S&N@LQc4kp7_9@qKW-Vuzwm$9G@UhWIQ1WQZk!1RJs-EKk5?_M2K7AS zVTJ`MpK3y--_}aCWN*3<$!NMV1-M`vNoGovkU%Q?;7jpJq4acn0i_OvH-TTAh6dH1 z+)+0hRP$98RQi?(ATzjZi*IM3FyE9wHT6LQGdi{WRIcWU!;-#gC|nS?)D!JL{gXL*M2<1pjL^>LAis!t5AAV_lln`BQZ zVu5!Y{pC`^{l!l2Oi1Ke?i!Y9M#we zc^Hty9@Aq|U!WY{I~9GsMcJ=P&y+{8RoISYjj0kbT9oq{!T_tVa>A_aNhN5ZgTu=h z#mawp5qVRzdOJ7(ST^*nwCTJW!wejfma@wP{_r1a@GbwLn_(Pmt-nb%Ll#BCZ)s(` z(S9jq{Z-LPSap@uXjMJFPeuGYmC0SlhpsUqSt~!&ayEW4e>^0Htk=r~R`P$6I#P4Y z^Jb(-o0*y|I02A4bVi}_krMLb)p6i191S|`q5DwK{zZ9xt%nX^zi8R2QD3`2Uhc?E zpMKBthbb^Usmeokd7=#tVt98jx{FbYxnd9+3-%fO4K@ouKjwHF(dr;k15geW>^)cQ zFbTS7Qh&A>o$74g zHQ-!383EiQdGN-!|5`TyvZw{}*Ds~os=&(G=Vp$ob^deX2NGbYr(k)0JWLIVssz?82wJ6#;V3IX~g_yWf z3(oeP!{cy;#;I}hWXA7nZr=WyeyaUVg4P9of7=kf7s zzPx7qG`XQuRRSkMbh7*xqX|qBaCaU))#4p{p!wji{R)0(0#aQ~2{GS^1pJ-y(7QbP zGLu=`lDy3Le+cQ>Qz~)j*!g5#aP>j%mT}R>hI5LjMkb#zrAw$ zirAX#eYoU+QmeKMf`3fiY~QXaMe{Y?uRE%cGKqEP!7OUT zKx4vCVrDp1&HaF^``}m2jNyaGU@ZqlCLA~fBJ}NiO`h-nXlWOd&bM-*{;Xy3AUL1$ zH#9sa=DVg4-PK0CDJbIIKRLZ=Znp;4vZZf!prAu4xFIKqxZmnMU=iH=fxsdt#StRJ zE|iBFrHeYNCT@Lw@Y}t-laG>9i%B_r>S9PdZn6fdw?-1h zpf>&JSnZEn;8RX@b#$1C9BEl>zQAJpSj*Cif=^h2b))_B=i3SyA26Iy za)))!F(d7Bd+sMBNiZnz=)}f{`33PT&+12!ey~II*A0XgiTmRy3|H^%tNusu*KA<3 zu69$ZiPhmiT25`8c@}qu{W(QT$bkEx*LpRpas)ZTLYDG_Bch}77vU<RgOY}Bsvb`?+8*@TFa~8$Xu6tuy?f#= zOCe-<%ZBtP>%8EAIoH==Jf4wzYSkrc)kty9Sw`^dydE`w661BATnAg6N6IvwS`{LjC2VFi?O8&~4H;J*` zkD?s0TaC8e7A_Z_@6nnj^?1?X)WA}B&vcN1OldxiUSScCOFk8;lSPN=NFdu**bIn$ z3)VG4;N_rQK6es#fCE6)-;M^!@rP7AukPJfOOB(I{a!Nz;1~IruZ;@6vl7lKZBA-DVCggInG?fp+6-M?^3P3_(pJHA3zh&5~2VHCb0Dvb6$?dg%Kl{`6 zJM%A3B0;;G`A{feq5RsxFy01AX-=MoUe=8d*1|oel(YoWJtPI1SNJ7K&+0E(1eC6Y zgwcQO?kcsixfFsC53=yc8j8 z84F)or6Hmfaq|!d{$af~cx0B`*2SI<50z>hOxHB>wP>+WJ+`@eD%j|FeR=s;co9HQ z+VYAUSpssk7w%JP-%qQh35=)a-5s>h!hO@seD*>vtI@&HcuE9+@O?LcnDB^OXHI!2 z1HiMj6^GY3gqKEz?>KkAhCTX29q>yr6}7b2DlZ!bDG46J*P#Pur}4Ec|Lzay*Wds1 z>G_~~17@i)svWM>TmFTtNa@1tRrjwSbY}encHNSLS(2DJv8KrD)e8EvXHb^^ZdT9l zj8N6%568;#gbF^JbatQIIP7;sT1Nq;`xr35VcpsAh&Yydis=LeTj<8qQ-%x%c_5&q zSkrwd?Da;c{loI|#DR4aMxw~j_TI1R#Z=b9E?89LKVaD0p9uP_L0srw1A_Ky% z9Eeai+{~e>N}u$0{eGL=B;>OFBIbD4EL7D~7wKeB%|O>yvAmh(1VZrFiifr2kp1%KUr^vb(i)x_2zZ*lK(Ps(nV3n`1McVmR!ZYRfR)l(cKbM$(2v zvNra(2+_U6L8*p3pMbvPgf|#?B;Gj>n0OW*sVa0mrV5%eA?SBAetIV5Pi5wko|xxh z*%JMiUu^gNJW(yPH~5jc(VzW{WEMcVedRR%a7DUA9>k|KVXMnfsN^gFo%C6A8NaNc zM{B{X!TvKb|BOFz{Duk|GnXKo#7#|1`p8C+P-Kce+GK_UahlkJ?vH|hG0`#g)pgGS zC3$wjN5OBYnKTxbfv?FPX?f$|bAkDF!1#27K@~HFnbwDPX!!)OG$Gx`{`S4UMT~$uoRw@FZh;) z@T=S0)SV@vf;$ge#$3-0BUwOMwz;aHJT$iEX{--q@$o4pXdOH2%{E}kQVQmMXMH#{ ziD3#fPzAN;+bD278RByW9t~<1Xqwk3HiDl=yt-F*f0JWd1CWCVcBrI{H}vOZ@`>jn zZxzRsGs+&I3dF#k9q4GzeToTi%}GlA<~aY{qeh_Y0ADU%(IwxycjT#|0_|W2r%Vy@ z1gL|`6czYsHRbB1RPKZPzatE<2Gg2M@AlXk-8SRj3F2W1%pVxR>ED=z>0vfX+X zUya2kQCnVzC_(UYh)YkfVU}~Sqp=6zLs}3P|F!5J^wWW9nc>>U$_72sS5z+ibr2tJ zx(eRWx(JBRZvb=aeIa>Q-Kdw^?g(X)N6~()QUakE*%kFrMz}Pbf^AGT%_zYuOL(LU4CE! z5m4@T`xHPZ7i3=u8jl3l9tU`{d>GYu5acT62cvwF!-~F>-kjr-FNcj73ifkJ%mj-$rSwOIg=1Y)y?amh2b~^#gE~t0|O)RJMf%vFLb$$qm$ANR1>wCXIbmirr$4N;4 zv(k}f`u^2M9@Oy0Z8KL_TOc9A&Ft7;Tq>7f;V-0F4{V}G?`W7G>&`PG61U)yKz8Xr z*vAOY@!+lU!J5s4t=mc_D?Lq5ykDQy)h!Jg&-&^42BB*EQOqwk!ujo=sJtn( z|0Q|vRxy?yfq`}fi#27m7DdLoCVk77{BML3VAXtcn6;+plfVTMXCmt5D-ojW%RaC8 zZ{{b@imbe0azgK;(XCi zLb-qZn2^7dXB!oHp?Kb1J<%bCXFz2smA#HByn;MjQ^n(Je=(Vyt-Oe(3$5FGD7fWv zgq2-$T%qwtN4)&3Svm_Zcq0Mzh0+!!Ncmzvma=8tGXCX$bps(UkFp+6*rVr8Q;wF@TPF-5t?i#?irAl2w;Xk5(*5+pbPDX+e)9G_`QsRWILv zQZG`<3*CIwg#`kr5E35&VC>4a#G6O_&UVTNE+w@7fbP>hkmYPtuPciNs(wm^ddA zUhn*-bO^8*7k}kFchJr&NS7=+;~n0&C|M&mOI2su4c}2I(3FYg zd$>y0c~?D8=;J>qslm|P6A2lC6}ht&&Cc<6#)jg8;h~jx-Y}hx0jw%IC9GCSo@G9X z$k0CgzTpR8dUtbjt^Bn-47w0On1-Jj8j4vqRjH3Rn%U5d^l8x8JaQ1HFeEwz>TIG+ zDoPZn3^$q6fRAT)9;ZzG;|wTu<|F1;b@SJFgA#>O8%_n#cDHj#Dvu@4t{wF2SdedI z8gx$5$aL8tI+?d(v*V9$CZj6#3QFCiQb>0)Oeqa7D#c94>HIqXM@7PI%4hy_KVa4C zvt^OQ_W#98*Vv%v^LQQY1RXMw-6=JY5*Ng7f4Cuf56WN zURO94Og49U><>GPUCLe+WY6frJHTHv#Zqw1F_gm}pT%S|E_w)n`@Nq$*3`aLx0kT_ zppxuVZ%op|^1S=`kW87n`hV?hx6Eb5XKNS*A)!*J65g{eWL=y<-OBPmIq6<`@gtA@ zo;dzGPZzxE?j(GGPs5k%CnyzVY)+MgqYV_n_!{2h{yH0lO(D-|3tsyn;j(GoXr#&r z0KMDHC$>g5*;#Kn4t*ylF?R{}!kDKL&~ON|N`ltZ`cGj=yCqOgTFhG{O3!vTcs%Cc z+w&NR5{a^w55)L@L&p-p=0EQR6bcs7>>O^G&;_g+jPZIDD|zxB1Q-NtOP4lgX?${9 zvNZ-=a?@%Jruo$wAL7ugq=laQxfBh2OCpZK#2L=>I@$0mV%GiJ_IVwDAy_9#6k8yjp z{n1$&X3k`6XBeB|P3GV}p+L1Q%|dpZM8cdu2rgqu&A~_l1II-bMeg|!5B5$A$I{0Q ze$nrRwATSXkhX48-;_$n(>0 zI2s5U1RW6+)M)vI%5?MzC)7bNvh9z?D|B%@9VXdq6Ca_$1ojtOQG zO@#+OaU@j0_1xgv$)EG=aOqd+bWJd;_li2^`DXkUp$tl+ z;fnl7zHOa;3WNTlW*ft@Gk_f3?wG8UJrJ6Q>&+>Z?J4g!#eG$#cEg3cj^4aKt#>8o zw_gNF{J9Z4V(1LOs%znk)cyX3S{$gr1A>$S$!=9PT#U)Q*TWL*Z~ zL6DUX*XUP2C5BQE=&LH`nA$E}`xS zS$%6~>}bg&|59tfV$$7(#Qi=&%*95~M!>@`7Pl&04_V}d%BMb*d5sr-m#ts!`apL2X6&<>niO?yNkBjaTdzz4^mT5PZGc9R z{h6Kt+ynzlQWmrW$9f)-mk~n;uSAs3M6a7y7@C<+1N^PaH0bFdo z@@FqO;C z{w-$f@6WR<(`?v(&wkua;M`Xji{aLxvamBuhWU$#7^hed?yt{&;;0!qL`=t+)!}1x z$8Wtm)JkIchKSB=4DZGjK1g!QIi=vUZ?o#S)K3GtUiHt>pRwDDvD_ER*yt1#HE+iH zF%W|;aDpna@c;nIA@2(lz3*}#ipf}BDC4cOT}Nglj1>M$(WEV^x^<#H9Oz$2&3)GRorqJtQ7G->5Nt44CK?%n)O zFD_AHsuu*p)svT;X@T^HQxnlP&MINA;%rQ1+*2cuv+hj+_Tc3w`|GIAE2p<{5<(^S zvg}8}&=jdTRKHZme*r5c43@DKFUfzAX`7JM#1x|L*J5uCQp6eheSmwgQc4l13sG`k z2?=F2ju%;wCVI+@?T)q6Ule5y#)n~XD}u0lc7dgh*_SuJ3x`ZOe%S*Bb`2~-x!iO- zgu6)IA~}T17DJB_nzQbwF#=^Uj%k6iwI7$$)BjsMWst4475&%V7-E3fZ$I|d^LNbwv@iR0G! zJ@QAsoUBM*_JbP`xLT{B!fP(q9q@WwE;b-L-W$DvMNZ2y7_@n`a>|6(Ix2#jEl|`3 z7(jm^cl^Ax$wOmeMVr@(wM@Z1jUA(YO(JHmBDRMwtx(RcoK3^lFWfAAZ^~c|SvUG@Ryh+nvtkUNMqBW%BZ4t7z(G%>1s<>cV~hm6-I$N1_mYtk7eiU= zd;R^Y9$m${bMjv=-j?u$URg_&R!-+@XsBw$NK>z!t&=-Wv!r7d4mE42J!{*8qR{PF6 zGtQljY9K!YjvuD47}9lQ++i?(Xd;=okbQ)$4#LiRQ2wVkf40BaD{=l)tvOfE#q<6Hfr9pFRIjT*6%GWNigM7H<(#h9lW9 zTc8rpOVaxlDw0Ff+MEik6^LQ?oC>@h5eaOC8>Mv5x5n?Djhn$(NamuyG=Eb;LCnRu zPdPq@83dNTo}SET`(Bn@8CwjmBdm-}X0%L_gJUG@=C5HqJg;7$qWj+n0-ja1!Yi5} zV|wY%(&O(zkY&sK&T*#fIk;?^F01E60J~F-U_hAQqjQLbw&ny2*TV4#t ztt1q9e;BV#7p=tOk$3y~_w3zeqM((Qdmlu~|BABL2@D-kxR7dZT3YSazZvmFZ=9|! zeR9yUhlOu`I-T=FltcVUx)@mjd}1l`DDyd}rV_@fLvUg9i2$E5*A=Trns`M+h^@%_ zJ`0_bJ-a(&nklJvZHYf=i#d09O;o zsZqO}1w767RkK+~uVYeB_vt&6vGk8*2Ga6RoAZ+=Hr&eGQvan#0YNR{u0U>7PxVjI zb}}{Ja+t(e%m~eB&yV-2eCH>4Q%tv6QA?Z_|Cx;$(AN$Hw7tVv5zo(i05su8q_kvs zc#XQ%wxXV;&jc9=(q>Ki#&d0Icn*(hMZTu|&B(2gXea;;HY_g``D}RUMudzWK3kgo zk4~^9JT7_s#wyPLFxdg;qQvm=iT8kVjP6uRNwv8>PXJfPg@m^ZVXAA~+DJ;OLsHm? zYf4EfYV73|_D`_cWK0R_6UFVyMu*r;+mv1n#_nzi}@FK(?PyXI?#M9 zrt(iB8rWj>_eAA2E3EHnD)x5zH`p5I)E+jh3nIpnoY;pvlt&|M89ozgCNDQsOh;> zho&E9Y*N75+8Rhq_2D$+qaP9i^(y*)uu>nQ7-SQw|FK`yYp)v1UJYijV?e_`0l}Iv z9ds`EA}G|Qz(RH*=#7K6y1izJD07b&UY4~mTUn)hWzy_qu zzUbr&1H{H7$Kl$3rb~M0>9M6CTx?{#BX5TA5n1=XvKdi9> zxCxtz8lw^gHFIm^_(-BkrO7=*9-5)p(q5Wdjrk57)t&hX!M2>66A3|^O% z#Dx5&$O6jkxntx(W)_cX6|hSmqwNP1;?SY3?y;`H4kIb*ldvq$ZeX$JK208yU+DUB zFh0B`e1~ByIDweijkI_H?45zN$}Mga(h~dlXr&mlm|?v6XAt$C&+(-U2^6Ih&$fTb6*hgZKL#kL+t>cvQ|Wb%*bO zazpku8a(aq6ALmWGb7%b%N3Wq@ZUn*YrB`hWP-cA_qj+K)PTH|Z6*6>7Y&IvLIJu{ zx0-Mb--hb9R<9OgJY(0D^F9a-`zqa3KOg%A=9Utgpv5j}8BS$SF#Y8#BY53}cBVUL z+z2Lr=3`?|)%mSau~9l{HyvourNQ!XXRo1*UiPH<2~V|+p$C_vUe7@4LzPUEimm49 zvk?*gw`s*>i3&J#t@?GzM{vwtjDvP+caRp7Q}g(5^2kCzrn!&Q4fZJOP5a$+;Nf}` z4@LaOE*986QiprMZ$K%Y`@@HrDgGWjVk(^=z5zN3v4UPGtsWqQj zTMzixP->DFrmV?&x@T2;PlA2Go$+~%T^i2dIr6^v=3LfK#<3oN)3%u8$vWJII*QM{ zqwG9ITL4<~UyX?IhY&7e+x|6&aoM1^^k6pO!2^w{pd;2h22!=UQz7W{hf<4kwHi~# zMarH9huC)=bmR@itX7^kET1(Eo9~~!fh{FKi=R#jL>*y^$F;EwY_(1kkVh3w7l>WH2`*e2M0T3j1D5V~&@P+!#lc;<~28oDwUyY!Kso+6<$bKd=MYBX%_k?AEk&a{; zmU@C<;zMH)QHvTBd;DymEMh45OVe}j~DS209X3AgNgK*@8I^Yy9OU`-w#|^y>oB1M?3j z@^7>MRnYg_U=;wEa^gKuXl{o*4e-X^Ud@|R*hGsT9AZ5lSmO`VVMN2g2jT#eH9dGC zS+Jda{1D$SRW-yD{Sg|o_NcB$liISfu0@nLu207XY-x# ztNb{px)vnmz2Nz}!oSBBZN^m5Oq0Rgjq;}Bx!7_|m(HFWf%=Cp@7M%iHH6*tAq%#` zO&On2{>Z}ShG&G)CJnl8GT>fCeEzTI8s;k`#{5#yMArU!hQaJ_Bo9;(cC2nf{%V?@ z(@U5yjx+x+5%KyN&Qq|8ac;_tF6l|-Rg(3h(2(niU4|Mi# zIQaS)R5VY`NDI4`!(1iba^get9pmqIgO4|V5ufO8bX@ysE_G~g-ri2P)qaaa7by>J zJ>=k3A$Cw9n~P=4D1^}N>Ug3tXZ??cq0^h4#U^)_emLCNx`30m@CgA8t^Ozt*qF0?EH4fQ!XiY?ajA~TSl{E&pNT*+oj7=6kkX)S>ZW|8KcaEX;}O1QrnIsw*{Q_KxskJdHu?DTpr z30TQ`Pu1B%f{D)IT|2URdcqEnQlZSf^$MSuOEw-uC;QXePC|5jpL|m@#{U1@h>7r6 z)*32*+{eiz%3>ucNOZ%%5_bibYUiPdKTakOB-amt;!ynj^vSwQjv{`w76$oOT%;^$WR;A$EG>2$Br0*9e~WQNjgE_zxL zbJ~_mM%+miAMnR>Qg-=so??+v0!=c!7`XntmchJxgJSMo+S;!(M_-d&*z_^pkiNM} zcaF7VRK@>Dx(-Ju|35AxP7!wqM_Fe(GshVjN1TzJ9VdHlDaEBYE8Cf!v$wNJ5@(O> zRmj<^QkojSr|<7S_&lHI{dv#V>-9$28)V)Bd$YAHCUhGbT0XX!N;rbi7Oh7C8S=}Y zt=dXWf|JG{gl=3Z&pYhxNinOZ@f(~;w-6`c>aPj6`>)Z;5~p{E?B6XFoE#M)PtD)z6TYNN!TdabL1LDl z!Qd)eKzKem`|xZMKelWImK=J;390x(ex(6!X*sM!X-SQ5r*y%D3cPaCz!Mzhs0v2L zJ8lSNq~)UKgQ|(fs+GMI4WSon8`p%Nq0Whs5@>)vJ!kJ*812a@uK(ZRXg#=t()LYRihaRz*J2ZHt)yK9KcApQScd!)!$R#&Ap< zuPCnGSKb5^wA3h*Lt=K zX^gl5c~%4@=c*Pu^=vSq4$XPolDqU7X;Nle5T3YBZHk3yYF`!o8sRFFqi_-J&(kLn zxaA1?-5t|=^pq0@H`Ds8Z!+ncD>^M(jr!hIYD7pj-DDT!8S(cK106Mqp+Ph`Y6sq+ z$4~uplCN@Z)zHiWcxSCzy^tPLS_7Chi%3Pu|0F$2TG0PR=dtav$ zn5}$yAm#5}@6sn{x+YwmE?sdI7c6Q$&L=+Uo^lANpa_d3=RVdNaHLj+m{SaozPwMi z1HZFY&Jl&B7j*!1V)6NEA$7Gnb=(i7oF)QQdEc`scmssaa7k^mI$gA>D$^}cGqVzr z3LjA?>c=sSg>dzxl7dR)&shdKtXl^Do~)sna1qhO^0vxc^k=JdP#!1pa<)f`Aic~l&+rGG=7;$ z$$t-TP}g5`jdma!kwPB361<=6Ovo8gUwmmwqGmoiin+xzF1Qf@0zN?u9vK9kU$wrk zoCd>qsT+>;$C}(2vt?=ls1H{ly=|@eO6WsW07kv8ojKZiz-}nB6LaS&@2sM<8?~`y zK5kxtb%v(^r0!C^$#Owi!?;nNJ`uY%^FG<)#fi;n#A6;0WZ#R>3#A(x_g; zPIQ4pj|t)*nRpp5)u1Q{J8(j~DSu|w!ZKX)Ma^o0CWvpKFKZv3CdxRaGtfIKQI#@%9~<)$C{@0bwdgBn zuXXX11BGJ5mh*VrG3Vcr%h}Ll-!wFfhs4eF6&E7bEXG~Y{_#qcZRt}pQ0s%TgbOu& z7kVv{tAuRLc3rO^`dTl23oR$=!Ak|?pkZK|RsE$^sAYr2-7jWZ9ruA?yj(55B*FSs zsbnscvpA*W@%$Sk9>2%drFh#o#7B))npbEsaGXUJ=6II7g>b6#Urxy| z>y7C)cpQeif-BK5FI0e~F>1Dl`4iHI6B!1_vRf(f;~a7VrwQ#Ax|O|0TWO-~0jR&M zX0T7k6qX*dscdb zV}-=jSoc#nyC-D`cV6XdhSppWzU6!1AzAQ;&o!qtS}%4?Rm%iz2aN2dg$A7(M5mj$ zjl_V7l zU@2BMKA5DFqRFkn`^lHJ(QI7^Ym(Bs{>8TApu4Nl>;$zQGT*h$dJ*8jO_9`&cR$Y4 z28o>SAux0}UOBK{uhK9q(Lenp*6KWngqiN^u~=RGa2Vm34LMyPk&$0B3%m#b1l1wC7~vdFJ(of@#G+xAmqm!$Sd3LzT-#< zQT4jE35pmAgV_4HEbDVd5k>;;y7C}`q6m*U8tP-D<=tK!p;O1|A5WleWDrI%0_j!p z(#!GwwL{5ZQvoGBixmC26iVo$(!PDHnFsy9_LTaQl)e2b8fqt8ZOxkUyK~+$4ZL3U zCD*>M@HEtg0FWSyOd9)N99Jm0`EE7)ox@C{3!*%cwp_C`Vy zbR)4(CdlrNJ(~T{_S7|}@uSxtD&qV}%pup%syfGwufn;oJQXEo7bD3Sldi1cBcZkS zaDSB7*GXpVf}Je_zbr@AP%c29*ilQvv^$gB#yHx7%L-}5E?>P+YT&cJ_jxh7$6X^= zBgbio=?}{W8Yns4HzTn~83}e}*~T7b2_eQqP+@~wf>{vv(UcK>F78MF81CBQi6N(z zG(+KV;^TdnsI8|f4N@3N&E-qZWFOXxlwGph4=d(f1|TC|D-`F_;4vj+Rp^r&&SV1Vwoe3ByOBV*IIK?b{S{ zOCqM=kp5B-5LJH#x|*`~)vx_!Ke3!qj(S$~Q>7+7I5DJ5)-GLl(=(Ku3WaIMFaeT?+Cx)3Pb=qJyR<)oAokRDT>yCxynw}ph7FWjIonvd{g(?SC%Py#(dEBN$(JF`6WmJ zDe>MKSIt^8hq!}+sRI1F0w+Dgo_xIqNNat{cQ!LO>-{ktOc;HJv=Z7WwTLx#Bki5i zgr|JKP!5TL9GbxX6X{(VlyalQDGO}oA=C*a{xA{ziWwm+ZYt9SRWv8GU%nloF5ymHzotKHJg-i=&o zk?8tWQXL9oOtu>$%?YDxUc!U0fSdnHixd06BMBX4xHZe6e8Nd4>loRe()tL0TzJI; z+3T^V8@Sb#Y>gVQ(HFA*>YhjQTQ`^x9_+P-e>%i;AD1B@CQ3YrnE3@pnbE?E%MeLC zm1~kIfb}0`M0cNG)mI=!Xy0(7e;%;d7WPBeYn95a&E};nVZSNl?Vd|4O`0?pEDdWj zZR5cIth)M>qQNcpf9#BGcFs#Rm~f}{Z=c?2&Uk2}6BxU`rXR8lf~4kI^Es;0hgXr= z?oS&FM7NQd)WU`ybrIgB=WTx6dis#0qR~F zGwQ21Kh}HA$eg(4XF;e*tK~Dy=|HMsIQ#W7`#H zjaZF0uB=jl3VX|USGGw@FEm%PZvlGG*}uzBd2Zefu{CaS(;fG@J)|iqQgrFlLRu>Rhz#&Zzn)I7Oj+8LPLPQr zMMh&NFWy^=n2;?3-@+rH~7<_gv9F z1Nx1kqRRduVGR*SZ#`PA0=N5Q%Og*^GdYPm0zZVFs3M-<3^WN_lBq_Bmy1QTD^*=~ zzeEH7kK#h>z#kCtg7uKED(pp*V9yFA2y^#jFr8PH9~}=lft9Z4PbT3X+Yf2h3&Vpb z@Gqg=vEgIhzxB~LJDV-jo(R>xxP8}ULwjjDULW~$*Og6RnqxgXKaLOmWnUCKAk?q_ z`P#z`Td+F$d}hF`uq?DAmF1X9qa((uVKG{`ISjHS-P=Ut;dKYeWBH)*dQ(%5E(Fqa zlkQ}bCr{kNuJOxWC?S4)N1SN+&cgfK`4Rs+GfDyNNv@>~?zaaBI)-a%g34-=3Q z$&{Pkj}zCvr2|+!;uZGpgc9V$yel*Q56If+{_oK7wRiUsYs~yQVkn6Dn`&enIomS^5*rx?ks0tIPsQnu7>}i{QGL zapqO%9hhmK{*+1Bf*gPai@NFkT($Y15Be6LaK)Txp=rSpF7OP(Waq$+vq2e?Z>0+f zCv-A1FR5oI8`xYd)mN)otf!5*K1`O;B-%SN z9RNqKsE4(z^ah-n+=Xg-}o{MjG{-9jr(amB{1=Qod?H z?N{RU)6L7wOcgH*louw*^4}bvpgdMky&`;K#W&r&bdEQy%Run{52wCaMdt50c zQpzfCDiZP+RX7q#Ui?0kdsR96(k^UZq5|0a#wU9YNmApsO}+dsx5MUPtcR%lZE%w! zTMnz|>7PG;zN9q>1DJpR2ks}y`MX@r&>(r)oC_~FD-TLVK|oIY98n*il4^wuc)KLF z3Ju~i-QA|;hH?9RG@FI`=CpzPJjBwL1q0Dr(O?O40V&}p6f`Cc95Kfkc{X~^j?CC& zA-oZ3M+%EzQz_hVX1 zQ7%$pK72vr$9pgGkY%pAj%jVEO!ufJM|(^bItk>5Ol@$Dqt!bVEpx<;}}KJ+w6is`AEpe*x< z7AdJ$3nE3=J&MJmSr_9gC0Ji65?_tOP2x0NjH&X6K02o;2(GkweY@2iRpU60WR*4OWXAU0 zcYGijiRlbA94p@3rt{~0n$eTIBr4e}fAW$5^V3qu+*a=RVaA9f2(Q5}L^oF}sXhET zSO7-E5rj;1$*;#g9znJ=%)fls*AFy#Tb8y4xa$RO=|a4eG>@B@M_kX?R@WBZU@QzI zo3fCC)m30O1?L_lQ)TG=cHk-?r-IFdMok0sOZ~^i?O`WxxKg0?LO@aVXD5UHo|1qO zF)Q@Ix}jTF{;s6mj*_8q=wi@GWAeqn^xQV#vys*$Di4tLp*K&sA~9q zpYoi=_4oB9bPzR&^Nn*-#mx+%?+TugZVvtU81gXu^FGu8EvY=km9OzijMO?W0T)&} zGP|Pk-Hb9?$#H8IN@U5jhC@}DMoAXY?X*hl%f6vq8*(;MMx!uOaM|aRqL$aC2 zV2@;{yHiQ)LGvtBRa($%%kuv^PQM_DjODOuM^~Rqv<*hvz!EDnZvrI4T7;X{ zI6$P_5a%ZaiE_(H8LQj$HiOg@^iI%x;D4shCx0aa-w~rgFLj~tl3pzaZdfneb3Nl> zj>h@`ttsS^zCLF@t`9>&nehPK&^_=>1lJ*=<@2EN@tTZn_q(=fpE3u`CDB8g*1+Wv zkymKV3HhOT!dR&UAj75?u$DJQ{`Y*Vow%G0s74?h6F!mJnN+u`TCG?`>c1mwp&EhsR$NJ-X5 zvEBasxT~K?;6OH5Wj@fRLVd~%clpz}-k0-gLDmBlXZh(iT#;`LgYNhwTcWmyi=+n* zzecD5^;OFemicM(#G!|QvMCtiYr*4& z6<9DescdIn$t`1hC=~>l`BA8l+u$AL<*3^cI}u43>cEw%5FQY|IsHA0clK^YTq3@s z08!-Ll%a73o4`&gH`8|d@+?PfmbPGZOUYR=nM?cGV|nyScUW5B0`N`WM=s5pHx#PZ zo65>4gH{;Ya#X2(+aQi+7P>98M-;SLfmva9DA20u_69&|u>ubA#Q%5iHx?ird4vk) z#CoH{ku3Oh;}_mzz*uz0r`k)EWmV)CG?VaF=u8cfqO|(oQS}=OCry>O?FH7Fp7N{T z4Bx6#wH)BOfOY}34@8+OuxPj9EbaqF;54SZ4kcrVf@z*91$l#*yHznhk646>imyu9 z6^T5w=6jQooQ+pBZ+)4FyQksQL~Nk#rG1IgG#`Kc?Na#S;1 zH`fqqNL)w`KgRpie~x9f(JLoO%YAX0pk-D9t-c@UE)yoxBX}d(MEZ(`FWsH5 zR1=iqt#Urm;VP2tt;e;*hV%i#gFWDOf4JX4-Bcec6sr|J`r7b)3ZT)R|?`> z0A+%+EV*T@dvK?DMpBTh1)y$m@+HnFPnWt2%@{pEx)o(zQoYLU4tQ(U#;9yaRo?xT z!6_?6$XNyF#qE4h;Fglfv$)88C2VT1JpDfR`kbQiF*r6H+khIDPbx->@H*iNIGsle7=+ zOu%D%W@9-OESbfc6}ZPKsgvgTvg-G33&Ya5NVQphJl?3Q+nvjbezcK#llFCJslm`P zQg)ju$Na85>7g+mbdXDhSG0FwE_V=!3cJ{)H3i%AbZH~y^iBwqt08|gC2%$2v!a^8 zgy``#(nnoJzsv$)qNjH#1`#ZtONcw4a;No3vJ~~kELnwnfTCTwuGd+{Q{d&hCi7Oe z?OT(;u#b~VGn)4w8%_OsL#f_k%6Fum7=+i_F3ziv@6vO$)Q|Wm-oh>K*{~p@$iaBs zria5t24?y3*&nO@B5R8zx!UsMYg>@Z5b4*0Zdju9B^acb*}GU*xe_H<%&*Tp?A?lLJDDOB6i*HX!J;aY+nf4sZ-5hh?_LP53`(RiSR;wL{=|-8& zpGVJw)Em13cQWD)Ks^~9d_XG`&m@Pb2#c6sc}Ao{lYQB?5N6F0%wn3=h@e$yY%tfO zG37~Dg4xDRwCU98YO%#f?kqx+W5Hw17nkS$8RjB8UQK&bNq0_Cw0ysi#n@2q!;qn4 z#N1PNzpg0`60-oz+R(zzh$mZQtFa*B{95c_qirzn%A|7!5f8@*IM)>IW3W6(rN3rx z3<>EhO9uAn@#O(B=sJou5LwtF++d0JkaE1$7iKCDFj)s`q7?Gh z<-R1AWSjIZcfXW)(<5u5b50zipqyiP{myZAWC~4<#&X{j()_=`D|9R6G?;teqyVDu zR`H@$wM)D&@1sU%_;XyEjRHUtm zF$AHnW_d+2WdQ2M>XCE74?xdkvx(-xfpN%QHYcMlPN?ctpz_CNLRWfk+u9suEC;-G zHtYH?M|&+H5?Li8&g=Y`?Pcgg6>A2Gx_WI*W7I+H!Y>#e!pT@^le=eH!|Liv^gdjq zk~l}&dT^L{S=GMHo-0H8{1dS zQ@FR9jH4P{Sz`vETeZ_u4RkgX9U+}`a3LJV3G83BKR@M)smLrv-O;O@@?puZ@TVMIw zh^Gr(c!0sca+CMww{^XGmz&Q=T6d&NKu6E<_=XQ!av>*%Q+4EXfBm@@nMZT*trN6^ zT4Mz9_wBJ0wA=Q!8aRn7Yg3naB+Rh9igN0p0jX*BU)d-V4W`Pw6uw2K=ZtJj;7x|x zePw@=L&aYCLA7%Yvb+ZFH6;?B5o}hz{QKK4QRY+aMXu}YyR^z-*6N0Xiz$b0@^jPG z(Z0C{RM@PZ0;N=eq$Tv9@!g;4hkX3gtqqS7pA^spuRI$dhqgGW$K0kK(`x2C7Th-A z(W$w7UoyJdcrHxrDGx5VstnO*+-K|`FzIUK(6p2G$gFBur)0zqUP2*@OIxrOhOJUv z)12tFZI0-e%*ud@HOqed$uxUkzb7A?=k&+@^}~M<0+BWd`{B9NVO&u&cHWyl4T8DG zise;Z)P(cm8l^DA79$0?h%p+S$u0YgrpIg5NcB~n%hN;LezxL6BUosfA|&USJj)*~ z-Cwxb+bmpun^H-tb`yXxb{ixYMj<^327)j6^AJl>F1HrLo-RJ&miGDRHRp>enGX*w zWmd40oQwhh_}eU5v`_t$!oKLPdu!kfpOj!CiC{m26{+_Fj(}hP>&Kr~yWN;4Re-eM zD+d+ooxkUbnC3{rx2`Upl%IwYoSmn^bIKx{sOa> z7W!TpDmmZk2>#ORkrQl;CX})efN6Pgn7=(p%rxVdZXFV)xDZp`boU?y_XTRSQ$M|d zEAehUJI`X&Mn?1rU}&4jChC4NH7Ip@TT`tlosuOrG{aNuzbm}V%*$^3D!q1!j!seX zlJ2*hgnmO;V%Ry(D4dt&!&j}^G(J}=3D!xFUvnp?Y+P1bOT}ZLe!0Li@M|8#Sni_= zC1xG#dDA@M%<`$ad|U?EAv+t~o8AFd0d=PHsp7gcbxe075!S4t4rm2M3jqw=Ik)VC z5T-riS54~-H1_5-wzGi^;<@rMNjt5Ugl`+tpC$%PbL#(1GXMNO14SIq+2y44h_qaH zQIj3K6_s}>V~lyj zYaYG-SwDY4(>&(Z{V_UCm%VszTvCc&Z`*@23n3cY;!MJ~i{S?U3a9q35DySdS6JBr zZmYmVnl~>{polaOBry1AuT?t`v#{jr&=D&1XN$iz4H7#)+Yc0cbM`|m=PG_9*Eez> zomVF0l<)~IXvcMC4kH2!6xwKg*Ja|DS3+GbD}sHbrUO(h*WlA>3Zhp2AqBx=h2V36 z%bE=l`59omCj3=ZuV|X9`Qtabn9)mWBLR3f93urvb{F#lR>}O!DK9xFFBN6sWq{q- z7C7#4oHM5oGvw;m&S2`AkxhNxqD(e@=W}fvO8|a0Pnbh`=UQi|Jsw|EFznoRb>EG` zjes~yu>PrVPd_r*ruE+>Xkp;3$r+=8dXILp!B&y|PUgj_?*xd7xaFe`*1#ODCD#jH z)alT|{m!KEqwJ`{>*)_AA8_U3u`e&56r3n+G160lX?dN}`+-rLkzVB;^ zSEkW*La&FAwdQdf`SGia=?PVIsAZD&TcpR;K|18guW@tY&4@!hAzu|KQcm6C_4nt) z&#Mk^jZ|g3Xnzx=MN^hI#T6kMuiMyZB~Hz7%O8SZq)$TiVUa)1GhyrJDRx-scu?*~ z3#Mt7u*5}xkg;P%IPE2|ifaO#gf4SOvKCP(G-mc{@-5c=pD>c(kL_J3D+01_7^ zGBwMMz2uXuu0Ux=-+t`<6fJ*uQ8w0c$;5+7qU`sfl0+oNhJF04@`;14y$}B8O@rG* z56~gLG8i{r{5{p+cWx9Gx#IFvr5V*5SOXbj%S`Z~7lqsgz99^|lep-Yj7|8OjNC!c zni7RoaL9XG9kuDmqjird#*A&VIug@@ID7_LGDFGoWWQ?N5V7W$>#5zJYy#4xll zengB8y_ay#`>#g3DW2e1DNgcNSxU>C6YeNSZvs~k{jcYO}wCYX2;60LOCia z1`TsAKv?j{7=22m^R;GdkxeH|i=@S%lQi{v6$NIc)T!XmWN_IP>Dp2*y>Ej~CGg8! zF)3q3Yl@M#(f{7dZaBmY9SvzV`)*09(-wm;6*E6Lh`&jFQJGbVx|^yN=V;j4)IS+Y zws(s*JO7SWKi+YUb_8gJ+uxXu>HG^922*|hsqPD7d6;VuM|9T8zQ-yiYbQ=!Mr#I7 zE{oO7v|i0l5_Lu)4hBCa`aw)xXp9h9nv*z5bIY zx4N%icOd=Q>8R$*X~5;&|C5i#z73mwps2!%EUp(>5T4dVim=669))12B$68(APX@M z4)yjbwHu9jw*EH)Aj<7WoqZ~;(TPnA3>kHhEl)9-~MnV(A9d3o$d(ksPgY|!shtf0kYR5EHf;_N9 ztp!&dCdkFmWfh};DCHbeHp`ob$i~yu#ZV!;ys#rD#qk(vkZS+)P-g zZE)e(w%uBY38IL>MXc*Lb&#_26J&=VCqOgCp5e)rZ48!Mx)~S;tuF|Mxhu zwrO=yf}h$EPI%Csyl4({rRvlHvNTX&hS^oVb8SI0nCO-3v8CrA^q9}Nz6MuucGIAq zrk+kYbc1GV$Wwi7MI9j}2~VreP9`=e>M4OoPsW%?Jb*jhf^gG2Rl zF3T#N{j)jSL(tlprR)C6;pQ}oC>Et6)LVUMySy-Mb9{RoshNzAi(hn9WD}br zaf2py(ZUI^RGF4;ckM;b+bij8D+sqkK6!WUQ$tq08UPYrK^1#*w?nvtwd_?+?QiT+KMkTNLE+<{TWPqg zVvs;Mxhxxa`906K4!qu#@kf>%)ictTeX;XLI`vSIYxLD8OF$7j`f7D8l^K&dyUiC;mYk#orHe}8<^x# zon^IxWZ4)Oc>;?x2m&x&=fXYWC4Wl@Q=M=-ql#Cn;c03TBu=9dISI^j#&7Z-*14=? zC{6tmyg4d(@aSl@= zj+4&Pd!V?t#`mPr`E%9zCzS%n&=S_QJ+VEx-L_Je_K?MQ0$4NG|LS8`P0e(l4OVkT zoF)TfPXVX7U0kfS)UA(UJnRRw!ysGHm8v&5OH+Ih=J->0JZ@7~N~AKo<5D|w`oYvT z`L29m)Q}RyRBKBTQW{uLs{F2_SWEgQL3B7u+sI!O=GZDA*y|$(fwp>f#UAR;f@;bn zIffFfKk6+R;}n%(eNlq_nVi_&AidpW;&#(jQGo}d(Qt`$YFB)F0;g;t3>blJMrw&B ze6Me>=lxFo`aGtZYueJZ#pilj7q@~Me=j6e<6V17hnRIn{;vDxox+az_+264_lx#J zj#3a9hVs`KK-6pb4;B~%aMplA++wpiFK2jr!01SOD3&h6tuuObe2(UwCj!G z?WPc~2`c)n>$%%AEBdvo4lczJG;rvYl=-RtX>^H}u;m8?&_KHSEWJo30H5Vtz*!lp zCH2?r60g2_G(qq6HH>^QTf)pSz_6m!ZKhh|`N4sD7RS-~9WT3|SG1?R8_0A|Y4=Wg zBK&K+cy2WCPCiK0cf75Dpg(2E5|ZO=e)9eNuKf;w4$B*l)8HrL(NAFJZ?(7b5VisO zY-MCVjT|~P(tVqBFRm*7^ECrC?qdw>;mc>a019VlD3x8KiSkAFEn@ncaKAYBF`Zrh zvM>Rg_YB#XY4*i1`Y;&ORn8aS4a^2@re7*-QtL9_7B5XtM)TJa<3D4hh)7w=U8*x zu8Jo6zH?uRDLLS3lwx3n6-^&rVEnIx^?~}H-7T_uCnU2tJE(NYDM72hJB5Z#b0jEQgS;CT7i9^de5yd zbFbz!rsB8FC@qiiMrt`#_myd&}gS* zUlTp~Wq*{*Ub8W-F(p1+JwQlB@(u7i-JcgZO@d;L_agf$5A~jVOdwws;yHQe7<;p2 z&K0S6xfL;t;SgrOvs%bpUqe)<%!hsl?JG%(yuTjx$bP7AkvWR@Y0d;~fbe_IB<-53 zH>t4?G#bc00n!sZl{)1DNd|>@2U<4~8O!ubO!Y!}s&Ex5SXZ`UqMg_jM}s3Bfvh1n z^cXp%o_&`|H)An%)9uy>!jv?3z8Z8JAmx4kzI94_4r66%vX`~BWokEpOA%O1OMfUJ zwBj|6V>8}*kISn8b%fTsGu*Fwm<{XLPhoQhZWy;+9ggo8( zRzj`?VgT{XYQZpThDccCz>miz8_9%)$AV-xq`g7!b3m(1kiLrnSAQpilg1ER6F+W- ziRVfwj_#sWw2Xb3LxHkK9p2-wcwzPyxVqh;1;}2nA)iE6oW7UJ_b?2qGIcxO>G$o! zR}N{A!pQ=UVbY^jq;}lp1zdQ?Q;%`u6Ao3dRJu?Xk1=szlqn;SD}+|utSz0B z{q?p6<9=I94ET;>wR?A<#oD`VAP{_}5die$$P@M4veO6IDxn@1Yh)EsZ9v0S8*|<- zJr&ZLcc?Lj5*?1bckiJJk?HdvPqpBJWXQL0AmQ}~CM06uww!IU0Sjb*T-JZXkfAr$ z65_=T3yaNV!eWkT=5xR&-KIJAVAYP|4k@Vq*dToB&T}6lIm?6h;s!W=D=hVPkmQzz zet?VU=O&$l+yoEL^eNb5gA4z;-1@zYa+xT|xQIWu>_DV|?m5_P75-Y=9xwl-(Udt6 zv>)$@&Clb^7V_EI8$$$SeBv?LgS`S;nKsqc78nJvJ;vH%FK3*J+*lzCHJ&< z?LM6jzTcdn@XEo`^=Qbh871a1Z<@3dJo8=b#lw@W=2?qFv)RIvmyuINdGN$-3OkW9 zYopC?ZpobS-+wGQ1bynQHWR6Qti7|vp}CKc04=^_Fx@h6==$A`Kd{uhY0#Ba|4p zh`s*5_xUTnvQqE%jnN7H&#)eNOZAAaaxq&Nt@89IgE;3w!!6v>;)(E6p2TdxXWT)B z%tJ1PulvC}Q^XvRJuhFZmd%rC7(wP{Jlm1j^U7|<<2xHnzEY;NaEvz*f2p$BO zkZCdGu9PGAUPzC+Wj;XzBA*Y14~@q>3W@nD)Zxqu6Gy*ZI8dC@-1t8_l^y3+%jD6wgH5vQ0)h^^v&sMub-5Ze=@#{_myjt}=PdOJn`7u$EG)7aIdL>Bq1 z9x)^UFtI!BDVm4EPj6l)78ZPcc&#yaFO#{ksKP`j<)*RCwiwGgoTEnw2fz?6>_d{sB20)ft2H5k5XoDc= zGGjyRs4 z({h)*v=T)uBo$AclD!6!mT=z`++iobSHt-OL%)1Ed)`j-1c{~l{A<(M)tXNERp82f z`M}{=Wnu~*@Jdj2Ft-WD<_54-5~~S6^i=}U;eGE(*_DfQDc)P=+hDTUbUhJjd7~@b zP5OR+04>m-PgvWiWM|k;?|{2XR3`rCDXwN-8f}n~FE0~2wI8aq718w}W?LCDB`ot- zkxXCUO-=06iMQ6X`p8ko4QHhW;77X~%bD5&&vJJ*UKov}q>mFTOB%cQ*B8~9yZPU880KI|pR@|0MoA&X(Yqv9-E%LXe}NEpR?h@7GN<(*3+ zWI9&u!R9`H1^>Rr0xaV>cfN*~Km<#~_dlv)aD2~7=0A9W{|En30n z>MX6kHsuk}eF;9I*<-*KyDmd^kNkpG*x+_*9)il(O#>dcm%&N4TaZXgIIyZfy|y{& ze$;Q*4Rki{{}I``(vgS`WG%Gkm zvcUrHwgXC1ERb-g-WCJp1=<_;uWv?e9(7uHBkD^Hv~GN*uPYH>3N!jrlUrX^m$Kx3w8-l`^n<`I#gWBhuxUiQHGKY10Mjf>N^I3FYY^|uZ z@f`d(`Z$)El(2gH(N6yyixn=gSDJSOSLLWei6lBc%YRf(Wg3{7k8Ad(2#74$52=I% zs{&dQ@o`t!{=%*(qn_q~X|5#>bXpP_GBo5Y7hxbxwHzLJu^cRZwyC*Bqu&do-SEBl z?D?Rau|NSL@}OfpR-=YoW@`kFYIq}c@4s2X_g~vsY-s35^Ek7`bKZ>1g#=ECe%vx+ zJUc5JT92(rCBJ~c=Y^pkdMY1+l@@`&!F>ph0>*Ib4u+7CXb?BWsZaXWXV`Q9JtRdu zczxIz-aG(x=r_t?y5Os@f+o7U63T5bKJy$?S{D^q7e)lMnr}bBoZNY;x8f|L2DZHE z1l9|LY4zy^)OfU$;U~wjD>GxN)aXT)B%|%V|G<3y zcIH#!rbg%~xT(Yo&(wPh{=B3c_lb8pV8_|H8So?=!5JBWS~w}JKTR9Mh3zJSKw zW@N@$v4dmqYRn1deM|Zmc|@Ega0%xTeZ@2vx-~AGIsX4V4rrFlOJRcSj5=cBeI7?9 z4ZJ^thz5M_5K^7Lh!;_0snf*)(mi1^#cG5P-@SV7p?;Tg5+-HS@C1BcEUoVu_sza^ zaCGLd3jCG#a++d8pA~UH(S%W6{>sc z6d!_CSHo_R8Ofj5l^ZSNDWF{uS;-7e7PUCdE&&Tt|hQ33^>s~9$C%)nCT+%`Q+ z-lcoQ`0J~4wQ5c6wQjRJmN-f0l(Wv4Bb^Ms~U*cMq`qSNJbpW=qb<&!_j>oYjS9$V8zlfLzsks%?PW zOkE1#dlV_@wXnI5x`mhgsVoJKg&EzMG`l22{YneT!+8h*nMU;js$urJ0~VRKnwm8B z>XUxzr)2eFxY&G?^!>;GnvUOp6{;{=344{IHmSX;|NncPvfthxFB{=({2u z5PDaMldl{X2Eu0~Om8R`Pc^xG)?Kv@sTLKo=HJWCqNSjU{Yu8d5?mgX7~M!-c&8sr zL%(W>FCPoJ;IdC)GPexTG_@3!n7LdFmHDqX*7O4PYx$?J+1(>D>vrr;5vRO`VO^~@ zD1i~-Ml&qDz4WRR@+IX+1m2#Kxf8!(a%$+2h!cfPYEBiJcCrc(IJSaVRh08+6=TE? z;|tcCjtMslfEu>%ZV8>7<$f3IWr&~*jM3D@M&*sfRY@3!h*t_aE#ux~&}1PCnmRQ;FO)j_;M1HlT*Rz_ zotu$6@B?9yIq$tvti%wFqcZ&b_+Bmp9q&*k-3w6=uc4)Rf7udRf!f&8o$hh=s;CvV z?Ol$?Sdl@8XG>WbN&%hJ@4=&VnoO&Ucv2866U37_W-F!(S_f3_0COxbBNF#hP)qd} z-=nOJ_qK13l(-+k*aY1;5<5q6gL~&{xCXp#Jrb0Ii}X2SYz!r9KzhMKQmkbtFqm8P z-YxGe${T1mGFo2&2b)xcB-?J#U6-NtIsl@-deDb$yr%hvB9T1yK8}B%fx3eG6Qe*> zF>5*O@I%m0**{Z!Eh+jl;j&Wmr-sox#nf_hFd9PewcaiWm!^(F!Q_TNxMvz`X;>2u81ZxVhI$N7^#<34bNHSJ7HSxp03-*K^jzjRPJb>G*;g)51nSHVaQ?3tk*~Q>D}4D76h?#Kw<7&A zFb8jPT0u(E4xCbt%W2Fpf^YGyJ4H*RmOV(nX9I>hDaW8cLdk#Ydo~i!hyY)kX|+(a zRM2OsvpD!bosPN{AKm6juP}->xnOinPI6u^f50_FyUculVXP>D{)i(d8EPiSV(|}; z4Ln6LLCTGt=-IpYkFmwFA`Foj9wuR7`I}@#Q%BKJ)p(;4j>H8+Q}Q-B=so@!+&v|3 z?sIE_vRhB)@IHfpP*@nlT)A23se?u^Ya&XxXF4pEc0w4TTX`~?Arzk(FXfoO0OqGb zp7sTKN{Ln%E%cTOdA#QQptk8?d%NY|BT)bQU6`7A2Bn+o(&lJfRDHSjm|WTZknXZ@ zJEr_gY!<}9=zO}G>ESZ73Dt9LA0{LBl-O+RZ19s*y$1#ZLac_+WZ(9q*i?-IRCC#j zL`)UN#`YYZ_hE^_7wG;|M%#hUcdB1~ym8UB-*x4NkV4jq*yIef{_4Nz@ZjeQln&2n ztdG4|h5zXX_cq7@Knq0dctG0bzo2HFi_$s58@Ev`95q~@x$=AbIAlrnut@{ZEFUWe z&(=icM>#pD1J+eLL&*sSxP|KXX!_*Zgm%`pn^IqX>a`~rG{YP~sai)K>7<+A>QzhleLi5;<(`jCHg*xGO2jcY+ z5I$H)Dr$n7P<>NiG#)uCQokgWC$KH|HQoj4Vb|fO(V&EPkRqafm5^4f=8kk(SPDde z>S!>A2KoWF+LZ3=ShV$DpJ4F_7TIL_gihzSN&QjD0Awj4>f= z$etA0<6G9OB}+w!iqiW0W<0<12b|CAo_o)^=X36Pzt4xQd1q^~(1#zdgda-J=zLF( zT9QTadt}XS2#+yfd$-ZaF9iCcEz+S{Cjvr^-XoJ65^By-fF6% zh=A_-Ey^s_vHmKZ3yf2Q%1POg;aFK^mo0?e1YmxdubfL}Tr|rLVmd9xl*;1hr?x~N zUmr4n%-sgEdYKC6NoCj=sWd#M)x-Gze_Ag;EJ`WK7ULeKe4NYB60WpSc$WHR93FW8 zR@jX%aZ1WZPV+w_MMen;A|P6mPavo4R64%wutJzaB?W;Wc9R`+XQ0X|)rhA69QDqI&6_YfVE49dTRI z3GI|+h)|xv!5pE3zX6-;jpmDgFkdQ@Ixxan)^|4WdE7Tqi+;EEel8OXR669mQDJ!v zo93Y8-?C;7Y2S(l*o__W-Yb1xgG88u@oO!-X~acg@zzMVq8zYa?N+{^wRQ69gZF&T zgoM0h;#0xt@c2t3@~U#k6`Q9aaVhR~Qrd+|%@iZaW|?b>xIiwM)-c#vV8 z25#k%_Y>ZaFG`j9W)9QNe}C=+IfIlpuY_)zk~|w0^A+POv(#O>@XecnUw}s(BBFJ& z=?5*%$N|m00)Efz%0z0V6bl&BOP{MriZczrJ8FDC=ivfeMuSy_Q$r+ql%+EyYJgf; zSx07bPGyKX-acl@5qh+`L$z4(Fm5hoiINi~E?+p-sYhbqhUSNpt5B`IUu9K3WqbOJ zfTzSP;oex$U%;sLRdToh_)~+>dRDnl&h=xepTm+5FWggd$dLUaXX!eN!S34p_r3rC z(AB0n-zaM)V<^_b439X4RT?>t!NUSv=xPo|7%my9wTB*X9nu2rwWeeTVmuu96RV43 zs@hZAwp6^2lLTg!tzHSjS$|(HY0r$It9`<*RPl|l*kTozz+K}4L z@mJZ{*ikYhx+A0(<{?~xY}hj*l#fA+U2^3_U$0%R4L zIeX$O4I0OEQB|FnOCX&$5BMM;c^qLw`k|ur01-h|bfG+^5tkc2t0OoOM3gCqYNx7W zeA3c;OKny{t=Mpm|5)~qL=)*@o$zQ~$cqe0u)|&=1@;6iJnb*0va|xec zqfP#ZD6aKri#k6sx;wvTI@W7!v^<+QWK7eO#6nGI9Bn={5hps35?tw*uDNi8o*^1|ETRBdPtnDKLTa>k?)n#u%8~B>_@M3zLBfnqqMdGY|O&S+M zjmG(~?|DEZIu|S&u~0mx0o8bO2RX!BErwO( z2QW28?*#3-L?j*?TW<_p5I!UQ^NQ!RH%Eo!&}HrsL~aECxy%HcQ)zM75CO1PgZ?c0 zWDO>F(YHKK;d^|U6Gi!o{N4L~DczJZ_)&ddPtPkfrq_;s&(-cf=!Cc1pv`Ash>PO- zJQKR&1Dn$snkZB4fmen>E4Q?HDzLG2`jmJOYEZ)(5bzjS{5+6ryEpNk=V{6tBNnwC zOCD9q<_Xw|b#>9#dFm{~;jbt~kxa}B?eEs%aE<4c3w7^D19^RvCgduc9{y-ZBDO@T zJ_#7PEfqD-A!M(A=VzxZs~;uRF%-e6i-W?y7=u;Btdq=7EaKMZ4)s5Ml#yb-Nk5k3 zNM(w9KQU^uLYFYaHseA}_N<%hra{I^s*jG*2V3|tlZqKBTiQ%}K}l6L1fgHC7OHIu z9(Z0clU}r`5!S68Qf2s9o)dM^?5M_CAtk|KJQ}Q%!3Qht`dq%o-j}Z<%BkTcT| z6tjc*E+#xTB)JsnuH|u4W0-2lXm_bVhGnI|FF4ajNW1wOIErnmH_WHfF4%dKw$|DOmMsU*}J8(84(AHDv=yTQDIXQ{CD@W2MGP3Cg z#tW%t!lJMpu7oah@(sZ#8=ZJo@_-bRghxNOkeH|(w>ck?ml_8u0{u;`2&^rK&t{_P zkI%puoL1b_tFZU9>j|`9Nv$!v@Je=mo*8|~^c1Qp=vjNXyJ`1;Rhr@}k1cs;z7o^# z8RPG@2quXcdzsWiZa>HH$BlM;84unCmAIKp=}gV5-QfrVb4|T5&013C3evrDYs6#U zS-|Mjf!)@q+;#MAQQ&rL&E9#OBa1wpB@*X2U&{9-I#s1?(;rK|Cy{^x4+k@H{VxtR z2Qh~-8vK|&Oxuw@^yR1n>+oWvprS@qL#s0SqDjZy27|oeRy`JCCqQ-Fr0pGt8u+xy ztmP%KPtaFV$$$=c-`1N%cJVOtrM6RiAvi}5RZ;`Gel9zVcQfybt(IdwF;+6<=xX{w0YJ-BO&Kwa`qcBm0VwcH&l)UYubY*I&WGC z{+)t%^yeEc*WN8tr@a)FL;ZZ~!C&fqHmP3dO2nXZ#euoz85QZ zxl`w|ZT*Sf(&$~H5mEG`ri+8{9U>0qc!C=>P9dbsTD*wsrF!rTE{+n0TIL z9Bg~nxyxGmwh{;bcOvzHPhvR+WUuLHBaG714s)&c$mPT-!Hg$^bs6Jf?&Ill*H$VC zLd{TwG+eMcp=y!Mp}}%B&U5j3*J93;)=hit2YV?@jO<8Di->Z~S*R?JXAh?y``3R= zwonYy)+4SSR)OdWPV3hQecxuGh+D}KZ#n|L1bkX-Wxwo{F!9i-rG13`Ou?STNT_{z zmh4luBhRS6hm*%%(GLqA#SbVh;Gh13R8F%CJKuVvwZiT5@ZY9;P^j~l3(3M`uZ(S2 z+;}QLnYtD}0NkJ(OI@z*J#7#p>-Kxk zFB$5G+hwg1?4iqc`_X4S>gw2MB|7?inUWA?_zPJQA`-^^`L4B#by^&wyWoq*qGsLM zB!cz3MI!3nN!YR-EhLGKl1c9~9UnUtt^M2EI8wKr z*`o;dZv|^C=QqeXp1|H`uH}J~Q!80+*1N~3>5iG%2DjS~z8Jm8<_$^1uVsWmOrY?_ zV|7VS&(y3GS+G+__SMDiDG&kf9o5@vVOM5Xgt;}DZuEEAaaZdtdlOk)C`gmc!0ZeQ0lFI%wetT}@UXZ$<=)X^K4WK*0 zX~W3U8a`Q{`jh@LeC09T@pI?g%=WqhqiUjAyu57nEP89#lrz7`(+Ygsm*2N|F=jG$ zHGh@n47R!qL6KzLGtR0jJlB5-k-1g>ENUc_`Aj~ijard9;km2E64xjJ;E*wm93ZD< zd(nS}_^Juyva%Dsjb!8llZUHBI$TU}BBl)Ftj2{0N~UiUlFs$Fc0|IJ zDhB#3Qo#lhEc}YILed2%TyvUvsf(QHe3Q)firY>NVrdG(G5K68~^IbqiYdo#vx6bh2slzXQyM6aCH!e~WuQ%#)%2 zc5Hz42o%aQai8KRNc{E|_sOH_0nwyXoH$9SnNV(>g@dpopaGw%h zP)|lb2y3O7aL=M%<-PSi^WHyVH{81NtnewJ|3PaA>Q*r#sGRa5r(E%-tlpo6;>P zmyr12FIN#&&`p~>&9#T$Xh-o)WFa2)zi`-rh4aziRqUl*!z{``Oraf0>)>azFF`rj$472s206pJe zDQFjpBkvE7MV?qSfh|G{tm zo6tYa^?ebB3WR0z?b3_=()On-Lkp)aq{`;k9wXsl{}?9YOQ?3 z^?U2I_1jB(eE)RiYK&p=kXI)g*{;E&Z%|NJ|4|%4+x!N;f+(BGu&F|Vl)gr0hUQ8L zcHCy9rlK~-Pu~!R-!FC2Q)w#?%4Mj5lVB&q6mbBp9Ul>7y?A8HVXXO@vreJkqCd`$ zsaHdy;U3*CCiRaLj2nv^`0s{niMLBZ0`z>uy>SG`UZji!SL^lhe;>DIi6c_Yhf?T+ zI;M9bHf@+6@n%^~JOuf^pFKO0hr4iL`VQ%r{Fg#7N@hI=*t>Rfk*&cO-tnqF { + const methods = useForm({}) + + const selectedValue = methods.watch(MODULES_FIELD_NAME) ?? [] + + return ( + + + + {'selected values: ' + selectedValue.map((m: DisplayModules) => m.name)} + + ) +} + +const render = (): ReturnType => { + return renderWithProviders(, { + i18nInstance: i18n, + }) +} + +describe('ControlledEmptySelectorButtonGroup', () => { + it('should render ControlledEmptySelectorButtonGroup component', () => { + render() + + screen.getByText('Heater-Shaker Module GEN1') + screen.getByText('Temperature Module GEN2') + }) + + it('should add the value when the button is clicked', async () => { + render() + + const button1 = screen.getByText('Heater-Shaker Module GEN1') + + expect( + screen.queryByText( + 'selected values: Heater-Shaker Module GEN1,Temperature Module GEN2' + ) + ).not.toBeInTheDocument() + + fireEvent.click(button1) + + const button2 = screen.getByText('Temperature Module GEN2') + + fireEvent.click(button2) + + expect( + await screen.findByText( + 'selected values: Heater-Shaker Module GEN1,Temperature Module GEN2' + ) + ).toBeInTheDocument() + }) +}) diff --git a/opentrons-ai-client/src/molecules/ControlledEmptySelectorButtonGroup/index.tsx b/opentrons-ai-client/src/molecules/ControlledEmptySelectorButtonGroup/index.tsx new file mode 100644 index 00000000000..ad9791f1fcd --- /dev/null +++ b/opentrons-ai-client/src/molecules/ControlledEmptySelectorButtonGroup/index.tsx @@ -0,0 +1,40 @@ +import { Flex, WRAP, SPACING, EmptySelectorButton } from '@opentrons/components' +import { Controller, useFormContext } from 'react-hook-form' +import type { DisplayModules } from '../../organisms/ModulesSection' +import { MODULES_FIELD_NAME } from '../../organisms/ModulesSection' + +export function ControlledEmptySelectorButtonGroup({ + modules, +}: { + modules: DisplayModules[] +}): JSX.Element | null { + const { watch } = useFormContext() + const modulesWatch: DisplayModules[] = watch(MODULES_FIELD_NAME) ?? [] + + return ( + { + return ( + + {modules.map(module => ( + { + if (modulesWatch.some(m => m.type === module.type)) { + return + } + field.onChange([...modulesWatch, module]) + }} + text={module.name} + textAlignment="left" + /> + ))} + + ) + }} + /> + ) +} diff --git a/opentrons-ai-client/src/molecules/ModelDiagram/index.tsx b/opentrons-ai-client/src/molecules/ModelDiagram/index.tsx new file mode 100644 index 00000000000..e4211e7df98 --- /dev/null +++ b/opentrons-ai-client/src/molecules/ModelDiagram/index.tsx @@ -0,0 +1,80 @@ +import { css } from 'styled-components' +import { + MAGNETIC_MODULE_TYPE, + TEMPERATURE_MODULE_TYPE, + THERMOCYCLER_MODULE_TYPE, + MAGNETIC_MODULE_V1, + MAGNETIC_MODULE_V2, + TEMPERATURE_MODULE_V1, + TEMPERATURE_MODULE_V2, + THERMOCYCLER_MODULE_V1, + HEATERSHAKER_MODULE_TYPE, + HEATERSHAKER_MODULE_V1, + THERMOCYCLER_MODULE_V2, + MAGNETIC_BLOCK_TYPE, + MAGNETIC_BLOCK_V1, + ABSORBANCE_READER_TYPE, + ABSORBANCE_READER_V1, +} from '@opentrons/shared-data' + +import magdeck_gen1 from '../../assets/images/modules/magdeck_gen1.png' +import magdeck_gen2 from '../../assets/images/modules/magdeck_gen2.png' +import tempdeck_gen1 from '../../assets/images/modules/tempdeck_gen1.png' +import temp_deck_gen_2_transparent from '../../assets/images/modules/temp_deck_gen_2_transparent.png' +import thermocycler from '../../assets/images/modules/thermocycler.png' +import thermocycler_gen2 from '../../assets/images/modules/thermocycler_gen2.png' +import heater_shaker_module_transparent from '../../assets/images/modules/heater_shaker_module_transparent.png' +import mag_block from '../../assets/images/modules/MagneticBlock_GEN1_HERO.png' +import type { ModuleType, ModuleModel } from '@opentrons/shared-data' + +interface Props { + type: ModuleType + model: ModuleModel +} + +type ModuleImg = { + [type in ModuleType]: { + [model in ModuleModel]?: string + } +} + +const MODULE_IMG_BY_TYPE: ModuleImg = { + [MAGNETIC_MODULE_TYPE]: { + [MAGNETIC_MODULE_V1]: magdeck_gen1, + [MAGNETIC_MODULE_V2]: magdeck_gen2, + }, + [TEMPERATURE_MODULE_TYPE]: { + [TEMPERATURE_MODULE_V1]: tempdeck_gen1, + [TEMPERATURE_MODULE_V2]: temp_deck_gen_2_transparent, + }, + [THERMOCYCLER_MODULE_TYPE]: { + [THERMOCYCLER_MODULE_V1]: thermocycler, + [THERMOCYCLER_MODULE_V2]: thermocycler_gen2, + }, + [HEATERSHAKER_MODULE_TYPE]: { + [HEATERSHAKER_MODULE_V1]: heater_shaker_module_transparent, + }, + [MAGNETIC_BLOCK_TYPE]: { + [MAGNETIC_BLOCK_V1]: mag_block, + }, + [ABSORBANCE_READER_TYPE]: { + // TODO (AA): update absorbance reader image + [ABSORBANCE_READER_V1]: heater_shaker_module_transparent, + }, +} + +const IMAGE_MAX_WIDTH = '96px' +export function ModuleDiagram(props: Props): JSX.Element { + const model = MODULE_IMG_BY_TYPE[props.type][props.model] + return ( + {props.type} + ) +} diff --git a/opentrons-ai-client/src/molecules/ModuleListItemGroup/__tests__/ModuleListItemGroup.test.tsx b/opentrons-ai-client/src/molecules/ModuleListItemGroup/__tests__/ModuleListItemGroup.test.tsx new file mode 100644 index 00000000000..5c04e3a6b44 --- /dev/null +++ b/opentrons-ai-client/src/molecules/ModuleListItemGroup/__tests__/ModuleListItemGroup.test.tsx @@ -0,0 +1,93 @@ +import { renderWithProviders } from '../../../__testing-utils__' +import { i18n } from '../../../i18n' +import { ModuleListItemGroup } from '../index' +import { describe, it, expect } from 'vitest' +import { fireEvent, screen } from '@testing-library/react' +import { FormProvider, useForm } from 'react-hook-form' +import type { DisplayModules } from '../../../organisms/ModulesSection' + +const modulesMock: DisplayModules[] = [ + { + type: 'heaterShakerModuleType', + model: 'heaterShakerModuleV1', + name: 'Heater-Shaker Module GEN1', + }, + { + type: 'temperatureModuleType', + model: 'temperatureModuleV2', + name: 'Temperature Module GEN2', + }, +] + +const TestFormProviderComponent = () => { + const methods = useForm({ + defaultValues: { + modules: modulesMock, + }, + }) + + return ( + + + + ) +} + +const render = (): ReturnType => { + return renderWithProviders(, { + i18nInstance: i18n, + }) +} + +describe('ModuleListItemGroup', () => { + it('should render ModuleListItemGroup component', () => { + render() + + expect(screen.getAllByText('Adapter').length).toBe(2) + expect(screen.getAllByText('remove').length).toBe(2) + + screen.getByAltText('heaterShakerModuleType') + screen.getByText('Heater-Shaker Module GEN1') + + screen.getByAltText('temperatureModuleType') + screen.getByText('Temperature Module GEN2') + }) + + it('should remove the list item if remove is clicked', async () => { + render() + + const removeListItemButton = screen.getAllByText('remove')[0] + + fireEvent.click(removeListItemButton) + + expect( + screen.queryByText('Heater-Shaker Module GEN1') + ).not.toBeInTheDocument() + }) + + it('should render the dropdown if adapters are available', () => { + render() + + expect(screen.getAllByText('Choose an adapter').length).toBe(2) + }) + + it('should be able to select an adapter', () => { + render() + + const dropdownButton = screen.getAllByText('Choose an adapter')[1] + + fireEvent.click(dropdownButton) + + const adapterOption = screen.getByText( + 'Opentrons 24 Well Aluminum Block with Generic 2 mL Screwcap' + ) + + fireEvent.click(adapterOption) + + expect( + screen.getByText( + 'Opentrons 24 Well Aluminum Block with Generic 2 mL Screwcap' + ) + ).toBeInTheDocument() + }) +}) diff --git a/opentrons-ai-client/src/molecules/ModuleListItemGroup/index.tsx b/opentrons-ai-client/src/molecules/ModuleListItemGroup/index.tsx new file mode 100644 index 00000000000..878600fc97f --- /dev/null +++ b/opentrons-ai-client/src/molecules/ModuleListItemGroup/index.tsx @@ -0,0 +1,173 @@ +import { + Flex, + SPACING, + ALIGN_CENTER, + BORDERS, + COLORS, + ListItem, + ListItemCustomize, +} from '@opentrons/components' +import type { DropdownBorder } from '@opentrons/components' +import { + ABSORBANCE_READER_TYPE, + getAllDefinitions, + getModuleDisplayName, + HEATERSHAKER_MODULE_TYPE, + MAGNETIC_BLOCK_TYPE, + MAGNETIC_MODULE_TYPE, + TEMPERATURE_MODULE_TYPE, + THERMOCYCLER_MODULE_TYPE, +} from '@opentrons/shared-data' +import type { ModuleType } from '@opentrons/shared-data' +import { Controller, useFormContext } from 'react-hook-form' +import { ModuleDiagram } from '../ModelDiagram' +import { MODULES_FIELD_NAME } from '../../organisms/ModulesSection' +import type { DisplayModules } from '../../organisms/ModulesSection' +import { useTranslation } from 'react-i18next' +import { useMemo } from 'react' + +export const RECOMMENDED_LABWARE_BY_MODULE: { [K in ModuleType]: string[] } = { + [TEMPERATURE_MODULE_TYPE]: [ + 'opentrons_24_aluminumblock_generic_2ml_screwcap', + 'opentrons_96_well_aluminum_block', + 'opentrons_96_aluminumblock_generic_pcr_strip_200ul', + 'opentrons_24_aluminumblock_nest_1.5ml_screwcap', + 'opentrons_24_aluminumblock_nest_1.5ml_snapcap', + 'opentrons_24_aluminumblock_nest_2ml_screwcap', + 'opentrons_24_aluminumblock_nest_2ml_snapcap', + 'opentrons_24_aluminumblock_nest_0.5ml_screwcap', + 'opentrons_aluminum_flat_bottom_plate', + 'opentrons_96_deep_well_temp_mod_adapter', + ], + [MAGNETIC_MODULE_TYPE]: [ + 'nest_96_wellplate_100ul_pcr_full_skirt', + 'nest_96_wellplate_2ml_deep', + 'opentrons_96_wellplate_200ul_pcr_full_skirt', + ], + [THERMOCYCLER_MODULE_TYPE]: [ + 'nest_96_wellplate_100ul_pcr_full_skirt', + 'opentrons_96_wellplate_200ul_pcr_full_skirt', + ], + [HEATERSHAKER_MODULE_TYPE]: [ + 'opentrons_96_deep_well_adapter', + 'opentrons_96_flat_bottom_adapter', + 'opentrons_96_pcr_adapter', + 'opentrons_universal_flat_adapter', + ], + [MAGNETIC_BLOCK_TYPE]: [ + 'nest_96_wellplate_100ul_pcr_full_skirt', + 'nest_96_wellplate_2ml_deep', + 'opentrons_96_wellplate_200ul_pcr_full_skirt', + ], + [ABSORBANCE_READER_TYPE]: [ + 'opentrons_flex_lid_absorbance_plate_reader_module', + ], +} + +export function ModuleListItemGroup(): JSX.Element | null { + const { watch, setValue } = useFormContext() + const { t } = useTranslation('create_protocol') + const modulesWatch: DisplayModules[] = watch(MODULES_FIELD_NAME) ?? [] + + const allDefinitionsValues = useMemo( + () => Object.values(getAllDefinitions()), + [] + ) + + const getDefDisplayName = (value: string): string => { + return ( + allDefinitionsValues.find(def => def.parameters.loadName === value) + ?.metadata.displayName ?? value + ) + } + + return ( + <> + {modulesWatch?.map(module => { + const adapters = RECOMMENDED_LABWARE_BY_MODULE[module.type] + + return ( + { + const currentModule = field.value.find( + (m: DisplayModules) => m.type === module.type + ) + + return ( + + 0 + ? t('modules_adapter_label') + : undefined + } + linkText={t('modules_remove_label')} + dropdown={ + adapters != null && adapters.length > 0 + ? { + title: (null as unknown) as string, + currentOption: { + name: + getDefDisplayName( + currentModule?.adapter?.value as string + ) ?? 'Choose an adapter', + value: currentModule?.adapter?.value, + }, + onClick: (value: string) => { + field.onChange( + field.value.map((m: DisplayModules) => + m.type === module.type + ? { + ...m, + adapter: { + name: getDefDisplayName(value), + value, + }, + } + : m + ) + ) + }, + dropdownType: 'neutral' as DropdownBorder, + filterOptions: adapters?.map(adapter => ({ + name: getDefDisplayName(adapter), + value: adapter, + })), + } + : undefined + } + onClick={() => { + setValue( + MODULES_FIELD_NAME, + modulesWatch.filter(m => m.type !== module.type), + { shouldValidate: true } + ) + }} + header={getModuleDisplayName(module.model)} + leftHeaderItem={ + + + + } + /> + + ) + }} + /> + ) + })} + + ) +} diff --git a/opentrons-ai-client/src/molecules/PromptPreview/index.tsx b/opentrons-ai-client/src/molecules/PromptPreview/index.tsx index d74884ad1ae..ce7687907a8 100644 --- a/opentrons-ai-client/src/molecules/PromptPreview/index.tsx +++ b/opentrons-ai-client/src/molecules/PromptPreview/index.tsx @@ -24,6 +24,7 @@ interface PromptPreviewProps { const PromptPreviewContainer = styled(Flex)` flex-direction: ${DIRECTION_COLUMN}; width: 100%; + max-width: 516px; height: ${SIZE_AUTO}; padding-top: ${SPACING.spacing8}; background-color: ${COLORS.transparent}; @@ -78,7 +79,7 @@ export function PromptPreview({ key={`section-${index}`} title={section.title} items={section.items} - itemMaxWidth={index <= 2 ? '33.33%' : '100%'} + itemMaxWidth={index <= 1 ? '33.33%' : '100%'} /> ) )} diff --git a/opentrons-ai-client/src/organisms/ModulesSection/__tests__/ModulesSection.test.tsx b/opentrons-ai-client/src/organisms/ModulesSection/__tests__/ModulesSection.test.tsx new file mode 100644 index 00000000000..0a556238930 --- /dev/null +++ b/opentrons-ai-client/src/organisms/ModulesSection/__tests__/ModulesSection.test.tsx @@ -0,0 +1,96 @@ +import { fireEvent, screen, waitFor } from '@testing-library/react' +import { describe, it, expect } from 'vitest' +import { renderWithProviders } from '../../../__testing-utils__' +import { i18n } from '../../../i18n' +import { FormProvider, useForm } from 'react-hook-form' +import { ModulesSection } from '..' + +const TestFormProviderComponent = () => { + const methods = useForm({ + defaultValues: {}, + }) + + return ( + + + + ) +} + +const render = (): ReturnType => { + return renderWithProviders(, { + i18nInstance: i18n, + }) +} + +describe('ModulesSection', () => { + it('should render modules buttons, no modules added yet, and confirm button', async () => { + render() + + expect(screen.getAllByRole('button').length).toBe(5) + expect(screen.getByText('No modules added yet')).toBeInTheDocument() + expect(screen.getByText('Confirm')).toBeInTheDocument() + }) + + it('should render a list item with the selected module if user clicks the module button', () => { + render() + + const moduleButton = screen.getByText('Heater-Shaker Module GEN1') + fireEvent.click(moduleButton) + + expect(screen.getAllByText('Heater-Shaker Module GEN1').length).toBe(2) + expect(screen.queryByText('No modules added yet')).not.toBeInTheDocument() + }) + + it('should render multiple list items with the selected modules if user clicks multiple module buttons', () => { + render() + + const moduleButton1 = screen.getByText('Heater-Shaker Module GEN1') + fireEvent.click(moduleButton1) + + const moduleButton2 = screen.getByText('Temperature Module GEN2') + fireEvent.click(moduleButton2) + + expect(screen.getAllByText('Heater-Shaker Module GEN1').length).toBe(2) + expect(screen.getAllByText('Temperature Module GEN2').length).toBe(2) + }) + + it('should remove the module list item if user clicks the remove link', () => { + render() + + const moduleButton = screen.getByText('Heater-Shaker Module GEN1') + fireEvent.click(moduleButton) + + expect(screen.getAllByText('Heater-Shaker Module GEN1').length).toBe(2) + + const removeLink = screen.getByText('remove') + fireEvent.click(removeLink) + + expect(screen.getAllByText('Heater-Shaker Module GEN1').length).toBe(1) + }) + + it('should disable confirm button when all fields are not filled', async () => { + render() + + const confirmButton = screen.getByRole('button', { name: 'Confirm' }) + await waitFor(() => { + expect(confirmButton).not.toBeEnabled() + }) + }) + + it('should enable confirm button when all fields are filled', async () => { + render() + + const confirmButton = screen.getByRole('button', { name: 'Confirm' }) + await waitFor(() => { + expect(confirmButton).not.toBeEnabled() + }) + + const moduleButton = screen.getByText('Heater-Shaker Module GEN1') + fireEvent.click(moduleButton) + + await waitFor(() => { + expect(confirmButton).toBeEnabled() + }) + }) +}) diff --git a/opentrons-ai-client/src/organisms/ModulesSection/index.tsx b/opentrons-ai-client/src/organisms/ModulesSection/index.tsx new file mode 100644 index 00000000000..85f068bc226 --- /dev/null +++ b/opentrons-ai-client/src/organisms/ModulesSection/index.tsx @@ -0,0 +1,102 @@ +import { + DIRECTION_COLUMN, + DISPLAY_FLEX, + Flex, + InfoScreen, + JUSTIFY_FLEX_END, + LargeButton, + SPACING, +} from '@opentrons/components' +import { useFormContext } from 'react-hook-form' +import { useTranslation } from 'react-i18next' +import styled from 'styled-components' +import { useAtom } from 'jotai' +import { createProtocolAtom } from '../../resources/atoms' +import { MODULES_STEP } from '../ProtocolSectionsContainer' +import { ControlledEmptySelectorButtonGroup } from '../../molecules/ControlledEmptySelectorButtonGroup' +import { ModuleListItemGroup } from '../../molecules/ModuleListItemGroup' +import type { ModuleType, ModuleModel } from '@opentrons/shared-data' + +export interface DisplayModules { + type: ModuleType + model: ModuleModel + name: string + adapter?: { + name: string + value: string + } +} + +export const MODULES_FIELD_NAME = 'modules' + +export function ModulesSection(): JSX.Element | null { + const { t } = useTranslation('create_protocol') + const { + formState: { isValid }, + watch, + } = useFormContext() + const [{ currentStep }, setCreateProtocolAtom] = useAtom(createProtocolAtom) + + const modules: DisplayModules[] = [ + { + type: 'heaterShakerModuleType', + model: 'heaterShakerModuleV1', + name: t('heater_shaker_module_v1'), + }, + { + type: 'temperatureModuleType', + model: 'temperatureModuleV2', + name: t('temperature_module_v2'), + }, + { + type: 'thermocyclerModuleType', + model: 'thermocyclerModuleV2', + name: t('thermocycler_module_v2'), + }, + { + type: 'magneticModuleType', + model: 'magneticModuleV1', + name: t('magnetic_module_v1'), + }, + ] + + function handleConfirmButtonClick(): void { + const step = currentStep > MODULES_STEP ? currentStep : MODULES_STEP + 1 + + setCreateProtocolAtom({ + currentStep: step, + focusStep: step, + }) + } + + const modulesWatch: DisplayModules[] = watch(MODULES_FIELD_NAME) ?? [] + + return ( + + + + {modulesWatch.length === 0 && ( + + )} + + + + + + + + ) +} + +const ButtonContainer = styled.div` + display: ${DISPLAY_FLEX}; + justify-content: ${JUSTIFY_FLEX_END}; +` diff --git a/opentrons-ai-client/src/organisms/ProtocolSectionsContainer/index.tsx b/opentrons-ai-client/src/organisms/ProtocolSectionsContainer/index.tsx index bd54a4201ad..4bbd370c00f 100644 --- a/opentrons-ai-client/src/organisms/ProtocolSectionsContainer/index.tsx +++ b/opentrons-ai-client/src/organisms/ProtocolSectionsContainer/index.tsx @@ -7,6 +7,7 @@ import { createProtocolAtom } from '../../resources/atoms' import { useAtom } from 'jotai' import { useFormContext } from 'react-hook-form' import { InstrumentsSection } from '../InstrumentsSection' +import { ModulesSection } from '../ModulesSection' export const APPLICATION_STEP = 0 export const INSTRUMENTS_STEP = 1 @@ -47,12 +48,12 @@ export function ProtocolSectionsContainer(): JSX.Element | null { { stepNumber: INSTRUMENTS_STEP, title: 'instruments_title', - Component: () => , + Component: InstrumentsSection, }, { stepNumber: MODULES_STEP, title: 'modules_title', - Component: () => Content, + Component: ModulesSection, }, { stepNumber: LABWARE_LIQUIDS_STEP, diff --git a/opentrons-ai-client/src/pages/CreateProtocol/__tests__/CreateProtocol.test.tsx b/opentrons-ai-client/src/pages/CreateProtocol/__tests__/CreateProtocol.test.tsx index d71130d6f1a..9182f1778ca 100644 --- a/opentrons-ai-client/src/pages/CreateProtocol/__tests__/CreateProtocol.test.tsx +++ b/opentrons-ai-client/src/pages/CreateProtocol/__tests__/CreateProtocol.test.tsx @@ -7,6 +7,7 @@ import { Provider } from 'jotai' import { fillApplicationSectionAndClickConfirm, fillInstrumentsSectionAndClickConfirm, + fillModulesSectionAndClickConfirm, } from '../../../resources/utils/createProtocolTestUtils' const render = (): ReturnType => { @@ -119,4 +120,19 @@ describe('CreateProtocol', () => { ) }) }) + + it('should display the Prompt preview correctly for Modules section', async () => { + render() + + await fillApplicationSectionAndClickConfirm() + await fillInstrumentsSectionAndClickConfirm() + await fillModulesSectionAndClickConfirm() + + const previewItems = screen.getAllByTestId('Tag_default') + + expect(previewItems).toHaveLength(7) + expect(previewItems[6]).toHaveTextContent( + 'Heater-Shaker Module GEN1 with Opentrons 96 Deep Well Heater-Shaker Adapter' + ) + }) }) diff --git a/opentrons-ai-client/src/pages/CreateProtocol/index.tsx b/opentrons-ai-client/src/pages/CreateProtocol/index.tsx index 22b3cbcc338..b3bbd83169e 100644 --- a/opentrons-ai-client/src/pages/CreateProtocol/index.tsx +++ b/opentrons-ai-client/src/pages/CreateProtocol/index.tsx @@ -12,6 +12,7 @@ import { createProtocolAtom, headerWithMeterAtom } from '../../resources/atoms' import { useAtom } from 'jotai' import { ProtocolSectionsContainer } from '../../organisms/ProtocolSectionsContainer' import { generatePromptPreviewData } from '../../resources/utils/createProtocolUtils' +import type { DisplayModules } from '../../organisms/ModulesSection' export interface CreateProtocolFormData { application: { @@ -26,6 +27,7 @@ export interface CreateProtocolFormData { rightPipette: string flexGripper: string } + modules: DisplayModules[] } const TOTAL_STEPS = 5 @@ -33,7 +35,7 @@ const TOTAL_STEPS = 5 export function CreateProtocol(): JSX.Element | null { const { t } = useTranslation('create_protocol') const [, setHeaderWithMeterAtom] = useAtom(headerWithMeterAtom) - const [{ currentStep }] = useAtom(createProtocolAtom) + const [{ currentStep }, setCreateProtocolAtom] = useAtom(createProtocolAtom) const methods = useForm({ defaultValues: { @@ -57,6 +59,21 @@ export function CreateProtocol(): JSX.Element | null { }) }, [currentStep]) + useEffect(() => { + return () => { + setHeaderWithMeterAtom({ + displayHeaderWithMeter: false, + progress: 0, + }) + + methods.reset() + setCreateProtocolAtom({ + currentStep: 0, + focusStep: 0, + }) + } + }, []) + return ( { }) fireEvent.click(confirmButton) } + +export async function fillModulesSectionAndClickConfirm(): Promise { + const firstModuleButton = screen.getByText('Heater-Shaker Module GEN1') + fireEvent.click(firstModuleButton) + + expect( + screen.getAllByText('Heater-Shaker Module GEN1')[1] + ).toBeInTheDocument() + + const adapterDropdown = screen.getByText('Choose an adapter') + fireEvent.click(adapterDropdown) + + const adapterOption = screen.getByText( + 'Opentrons 96 Deep Well Heater-Shaker Adapter' + ) + fireEvent.click(adapterOption) + + const confirmButton = screen.getByText('Confirm') + await waitFor(() => { + expect(confirmButton).toBeEnabled() + }) + fireEvent.click(confirmButton) +} diff --git a/opentrons-ai-client/src/resources/utils/createProtocolUtils.tsx b/opentrons-ai-client/src/resources/utils/createProtocolUtils.tsx index bb29912ae80..7e137fef854 100644 --- a/opentrons-ai-client/src/resources/utils/createProtocolUtils.tsx +++ b/opentrons-ai-client/src/resources/utils/createProtocolUtils.tsx @@ -59,6 +59,23 @@ export function generatePromptPreviewInstrumentItems( return items.filter(Boolean) } +export function generatePromptPreviewModulesItems( + watch: UseFormWatch, + t: any +): string[] { + const { modules } = watch() + + if (modules === undefined || modules?.length === 0) return [] + + const items = modules?.map(module => + module.adapter === undefined || module.adapter?.name === '' + ? module.name + : `${module.name} with ${module.adapter.name}` + ) + + return items.filter(Boolean) +} + export function generatePromptPreviewData( watch: UseFormWatch, t: any @@ -75,5 +92,9 @@ export function generatePromptPreviewData( title: t('instruments_title'), items: generatePromptPreviewInstrumentItems(watch, t), }, + { + title: t('modules_title'), + items: generatePromptPreviewModulesItems(watch, t), + }, ] } From 69c8cc00bd2c9b38a93c24dfa5866d31edae20ad Mon Sep 17 00:00:00 2001 From: connected-znaim <60662281+connected-znaim@users.noreply.github.com> Date: Wed, 6 Nov 2024 16:22:54 -0500 Subject: [PATCH 71/81] feat(opentrons-ai-client): Chat page to interact with LLM (#16703) # Overview Added chat page with four new buttons to regenerate, send feedback (not fully functional), copy and download the python code. Regenerate: Finds the corresponding request to that LLM response and fills in the inputfield so that it can be resubmitted. It also scrolls down to the input field to show the filled out prompt Send Feedback: Shows a send feedback modal that can in the future send feedback to the server. This API will be implemented in a subsequent PR. Copy: Copies the code to the clipboard Download: Converts the python code in the LLM response into a python file and downloads it. image image ## Test Plan and Hands on Testing Manually tested that regenerate picks the right prompt by adding a few in the chat. Manually tested that clicking feedback shows the feedback modal Manually tested that copy works Manually tested that download creates the file, downloads it and checked the contents to make sure the file was created properly. ## Changelog ## Review requests ## Risk assessment --------- Co-authored-by: FELIPE BELGINE --- components/src/icons/icon-data.ts | 10 ++ .../localization/en/protocol_generator.json | 4 + .../__tests__/ChatDisplay.test.tsx | 19 ++- .../src/molecules/ChatDisplay/index.tsx | 134 ++++++++++++++---- .../src/molecules/ChatFooter/index.tsx | 3 +- .../__tests__/FeedbackModal.test.tsx | 36 +++++ .../src/molecules/FeedbackModal/index.tsx | 65 +++++++++ .../src/molecules/InputPrompt/index.tsx | 11 ++ .../organisms/MainContentContainer/index.tsx | 69 --------- .../Chat/Chat.stories.tsx} | 8 +- .../Chat/__tests__/Chat.test.tsx} | 17 ++- opentrons-ai-client/src/pages/Chat/index.tsx | 79 ++++++++--- opentrons-ai-client/src/resources/atoms.ts | 7 +- opentrons-ai-client/src/resources/types.ts | 2 + 14 files changed, 335 insertions(+), 129 deletions(-) create mode 100644 opentrons-ai-client/src/molecules/FeedbackModal/__tests__/FeedbackModal.test.tsx create mode 100644 opentrons-ai-client/src/molecules/FeedbackModal/index.tsx delete mode 100644 opentrons-ai-client/src/organisms/MainContentContainer/index.tsx rename opentrons-ai-client/src/{organisms/MainContentContainer/MainContainer.stories.tsx => pages/Chat/Chat.stories.tsx} (59%) rename opentrons-ai-client/src/{organisms/MainContentContainer/__tests__/MainContentContainer.test.tsx => pages/Chat/__tests__/Chat.test.tsx} (68%) diff --git a/components/src/icons/icon-data.ts b/components/src/icons/icon-data.ts index 9f8338c7e87..9c97c5bee91 100644 --- a/components/src/icons/icon-data.ts +++ b/components/src/icons/icon-data.ts @@ -685,6 +685,11 @@ export const ICON_DATA_BY_NAME: Record< 'M18.793 34.9163C15.3763 34.6386 12.5013 33.2358 10.168 30.708C7.83464 28.1802 6.66797 25.1802 6.66797 21.708C6.66797 19.5691 7.16102 17.5552 8.14714 15.6663C9.13325 13.7775 10.5152 12.2358 12.293 11.0413L14.0846 12.833C12.5291 13.7497 11.3207 15.0066 10.4596 16.6038C9.59852 18.2011 9.16797 19.9025 9.16797 21.708C9.16797 24.4858 10.0846 26.8886 11.918 28.9163C13.7513 30.9441 16.043 32.1108 18.793 32.4163V34.9163ZM21.293 34.9163V32.4163C24.0707 32.083 26.3624 30.9094 28.168 28.8955C29.9735 26.8816 30.8763 24.4858 30.8763 21.708C30.8763 18.6802 29.8277 16.1177 27.7305 14.0205C25.6332 11.9233 23.0707 10.8747 20.043 10.8747H19.2096L21.7096 13.3747L19.918 15.1663L14.3763 9.62467L19.918 4.08301L21.7096 5.87467L19.2096 8.37467H20.043C23.7652 8.37467 26.918 9.67329 29.5013 12.2705C32.0846 14.8677 33.3763 18.0136 33.3763 21.708C33.3763 25.1802 32.2166 28.1802 29.8971 30.708C27.5777 33.2358 24.7096 34.6386 21.293 34.9163Z', viewBox: '0 0 40 40', }, + reload: { + path: + 'M15.1406 23.6501C11.9581 23.6501 9.25062 22.5457 7.01813 20.337C4.78562 18.1282 3.66937 15.4326 3.66937 12.2501V12.0007L2.38687 13.2832C2.12562 13.5445 1.79312 13.6751 1.38937 13.6751C0.985625 13.6751 0.653125 13.5445 0.391875 13.2832C0.130625 13.022 0 12.6895 0 12.2857C0 11.882 0.130625 11.5495 0.391875 11.2882L4.09687 7.58322C4.38188 7.29822 4.71438 7.15572 5.09438 7.15572C5.47437 7.15572 5.80687 7.29822 6.09188 7.58322L9.79688 11.2882C10.0581 11.5495 10.1888 11.882 10.1888 12.2857C10.1888 12.6895 10.0581 13.022 9.79688 13.2832C9.53562 13.5445 9.20312 13.6751 8.79937 13.6751C8.39563 13.6751 8.06312 13.5445 7.80188 13.2832L6.51937 12.0007V12.2501C6.51937 14.6251 7.35656 16.6438 9.03094 18.3063C10.7053 19.9688 12.7419 20.8001 15.1406 20.8001C15.5206 20.8001 15.8947 20.7764 16.2628 20.7288C16.6309 20.6813 16.9931 20.5982 17.3494 20.4795C17.7531 20.3607 18.1331 20.3726 18.4894 20.5151C18.8456 20.6576 19.1187 20.907 19.3088 21.2632C19.4988 21.6432 19.5166 22.0173 19.3622 22.3854C19.2078 22.7535 18.9287 22.997 18.525 23.1157C17.9788 23.3057 17.4206 23.4423 16.8506 23.5254C16.2806 23.6085 15.7106 23.6501 15.1406 23.6501ZM14.9981 3.7001C14.6181 3.7001 14.2441 3.72385 13.8759 3.77135C13.5078 3.81885 13.1456 3.90197 12.7894 4.02072C12.3856 4.13947 11.9997 4.1276 11.6316 3.9851C11.2634 3.8426 10.9844 3.59322 10.7944 3.23697C10.6044 2.88072 10.5866 2.51854 10.7409 2.15041C10.8953 1.78229 11.1625 1.53885 11.5425 1.4201C12.1125 1.2301 12.6825 1.0876 13.2525 0.992598C13.8225 0.897598 14.4044 0.850098 14.9981 0.850098C18.1806 0.850098 20.8881 1.95447 23.1206 4.16322C25.3531 6.37197 26.4694 9.0676 26.4694 12.2501V12.4995L27.7519 11.217C28.0131 10.9557 28.3456 10.8251 28.7494 10.8251C29.1531 10.8251 29.4856 10.9557 29.7469 11.217C30.0081 11.4782 30.1388 11.8107 30.1388 12.2145C30.1388 12.6182 30.0081 12.9507 29.7469 13.212L26.0419 16.917C25.7569 17.202 25.4244 17.3445 25.0444 17.3445C24.6644 17.3445 24.3319 17.202 24.0469 16.917L20.3419 13.212C20.0806 12.9507 19.95 12.6182 19.95 12.2145C19.95 11.8107 20.0806 11.4782 20.3419 11.217C20.6031 10.9557 20.9356 10.8251 21.3394 10.8251C21.7431 10.8251 22.0756 10.9557 22.3369 11.217L23.6194 12.4995V12.2501C23.6194 9.8751 22.7822 7.85635 21.1078 6.19385C19.4334 4.53135 17.3969 3.7001 14.9981 3.7001Z', + viewBox: '0 0 31 24', + }, reticle: { path: 'M8.01487 8.84912C8.47511 8.84912 8.84821 8.47603 8.84821 8.01579C8.84821 7.55555 8.47511 7.18245 8.01487 7.18245C7.55464 7.18245 7.18154 7.55555 7.18154 8.01579C7.18154 8.47603 7.55464 8.84912 8.01487 8.84912Z M8.66654 0.928711V2.36089C11.27 2.66533 13.3354 4.73075 13.6398 7.33418H15.072V8.66751H13.6398C13.3354 11.2709 11.27 13.3363 8.66654 13.6408V15.073H7.3332V13.6408C4.72979 13.3363 2.66437 11.2709 2.35992 8.66751H0.927734V7.33418H2.35992C2.66436 4.73075 4.72978 2.66533 7.3332 2.36089V0.928711H8.66654ZM12.2944 7.33418H11.6184C11.2502 7.33418 10.9518 7.63266 10.9518 8.00085C10.9518 8.36904 11.2502 8.66751 11.6184 8.66751H12.2944C12.0071 10.5336 10.5326 12.008 8.66654 12.2953V11.6194C8.66654 11.2512 8.36806 10.9527 7.99987 10.9527C7.63168 10.9527 7.3332 11.2512 7.3332 11.6194V12.2953C5.46716 12.008 3.99268 10.5336 3.70536 8.66751H4.38132C4.74951 8.66751 5.04798 8.36904 5.04798 8.00085C5.04798 7.63266 4.74951 7.33418 4.38132 7.33418H3.70536C3.99267 5.46812 5.46715 3.99364 7.3332 3.70632V4.38229C7.3332 4.75048 7.63168 5.04896 7.99987 5.04896C8.36806 5.04896 8.66654 4.75048 8.66654 4.38229V3.70632C10.5326 3.99364 12.0071 5.46812 12.2944 7.33418Z', @@ -729,6 +734,11 @@ export const ICON_DATA_BY_NAME: Record< 'M10.8307 8.3335L1.66406 31.6668H4.78906L7.16406 25.4168H17.8307L20.2057 31.6668H23.3307L14.1641 8.3335H10.8307ZM16.8307 22.7502H8.16406L12.4141 11.4585H12.5807L16.8307 22.7502ZM30.1577 16.6668L24.1641 31.6668H26.2073L27.7602 27.649H34.7346L36.2875 31.6668H38.3307L32.3371 16.6668H30.1577ZM34.0807 25.9347H28.4141L31.1929 18.6758H31.3019L34.0807 25.9347Z', viewBox: '0 0 40 40', }, + 'thumbs-down': { + path: + 'M2.99062 18.9525C2.23062 18.9525 1.56562 18.6675 0.995625 18.0975C0.425625 17.5275 0.140625 16.8625 0.140625 16.1025V13.2525C0.140625 13.0862 0.164375 12.9081 0.211875 12.7181C0.259375 12.5281 0.306875 12.35 0.354375 12.1837L4.62937 2.13749C4.84312 1.66249 5.19938 1.25874 5.69812 0.92624C6.19688 0.59374 6.71938 0.42749 7.26562 0.42749H22.9406V18.9525L14.3906 27.4312C14.0344 27.7875 13.6128 27.9953 13.1259 28.0547C12.6391 28.1141 12.17 28.025 11.7188 27.7875C11.2675 27.55 10.935 27.2175 10.7212 26.79C10.5075 26.3625 10.46 25.9231 10.5787 25.4719L12.1819 18.9525H2.99062ZM20.0906 17.7412V3.27749H7.26562L2.99062 13.2525V16.1025H15.8156L13.8919 23.94L20.0906 17.7412ZM27.2156 0.42749C27.9994 0.42749 28.6703 0.706553 29.2284 1.26468C29.7866 1.8228 30.0656 2.49374 30.0656 3.27749V16.1025C30.0656 16.8862 29.7866 17.5572 29.2284 18.1153C28.6703 18.6734 27.9994 18.9525 27.2156 18.9525H22.9406V16.1025H27.2156V3.27749H22.9406V0.42749H27.2156Z', + viewBox: '0 0 31 29', + }, 'tip-position': { path: 'M10.75 2H9.25V4.75H10.75V2ZM10.75 9.25V7.25H9.25V9.25H7.25V10.75H9.25V12.75H10.75V10.75H12.75V9.25H10.75ZM10.75 18V15.25H9.25V18H10.75ZM2 9.25V10.75H4.75V9.25H2ZM18 9.25H15.25V10.75H18V9.25Z', diff --git a/opentrons-ai-client/src/assets/localization/en/protocol_generator.json b/opentrons-ai-client/src/assets/localization/en/protocol_generator.json index e3e23b4f0d3..e321b939ade 100644 --- a/opentrons-ai-client/src/assets/localization/en/protocol_generator.json +++ b/opentrons-ai-client/src/assets/localization/en/protocol_generator.json @@ -3,6 +3,7 @@ "api": "API: An API level is 2.15", "application": "Application: Your protocol's name, describing what it does.", "commands": "Commands: List the protocol's steps, specifying quantities in microliters (uL) and giving exact source and destination locations.", + "cancel": "Cancel", "copyright": "Copyright © 2024 Opentrons", "copy_code": "Copy code", "choose_file": "Choose file", @@ -51,6 +52,9 @@ "robot_type": "Robot type: Choose the OT-2 or Opentrons Flex.", "robot": "Robot: OT-2.", "share_your_thoughts": "Share your thoughts here", + "send_feedback": "Send feedback", + "send_feedback_input_title": "Share why the response was not helpful", + "send_feedback_to_opentrons": "Send feedback to Opentrons", "side_panel_body": "Write a prompt in natural language to generate a Reagent Transfer or a PCR protocol for the OT-2 or Opentrons Flex using the Opentrons Python Protocol API.", "side_panel_header": "Use natural language to generate protocols with OpentronsAI powered by OpenAI", "simulate_description": "Once OpentronsAI has written your protocol, type `simulate` in the prompt box to try it out.", diff --git a/opentrons-ai-client/src/molecules/ChatDisplay/__tests__/ChatDisplay.test.tsx b/opentrons-ai-client/src/molecules/ChatDisplay/__tests__/ChatDisplay.test.tsx index afec6d800cc..7836d18f90f 100644 --- a/opentrons-ai-client/src/molecules/ChatDisplay/__tests__/ChatDisplay.test.tsx +++ b/opentrons-ai-client/src/molecules/ChatDisplay/__tests__/ChatDisplay.test.tsx @@ -5,9 +5,24 @@ import { renderWithProviders } from '../../../__testing-utils__' import { i18n } from '../../../i18n' import { ChatDisplay } from '../index' +import { useForm, FormProvider } from 'react-hook-form' + +const RenderChatDisplay = (props: React.ComponentProps) => { + const methods = useForm({ + defaultValues: {}, + }) + + return ( + + + + ) +} const render = (props: React.ComponentProps) => { - return renderWithProviders(, { i18nInstance: i18n }) + return renderWithProviders(, { + i18nInstance: i18n, + }) } describe('ChatDisplay', () => { @@ -18,6 +33,7 @@ describe('ChatDisplay', () => { chat: { role: 'assistant', reply: 'mock text from the backend', + requestId: '12351234', }, chatId: 'mockId', } @@ -35,6 +51,7 @@ describe('ChatDisplay', () => { chat: { role: 'user', reply: 'mock text from user input', + requestId: '12351234', }, chatId: 'mockId', } diff --git a/opentrons-ai-client/src/molecules/ChatDisplay/index.tsx b/opentrons-ai-client/src/molecules/ChatDisplay/index.tsx index dd39d415acc..22dbee37f1a 100644 --- a/opentrons-ai-client/src/molecules/ChatDisplay/index.tsx +++ b/opentrons-ai-client/src/molecules/ChatDisplay/index.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react' +import { useEffect, useState } from 'react' import styled from 'styled-components' import { useTranslation } from 'react-i18next' import Markdown from 'react-markdown' @@ -12,28 +12,81 @@ import { JUSTIFY_CENTER, JUSTIFY_FLEX_END, JUSTIFY_FLEX_START, - POSITION_ABSOLUTE, POSITION_RELATIVE, - PrimaryButton, SPACING, LegacyStyledText, TYPOGRAPHY, + StyledText, + DIRECTION_ROW, OVERFLOW_AUTO, } from '@opentrons/components' import type { ChatData } from '../../resources/types' +import { useAtom } from 'jotai' +import { + chatDataAtom, + feedbackModalAtom, + scrollToBottomAtom, +} from '../../resources/atoms' +import { delay } from 'lodash' +import { useFormContext } from 'react-hook-form' interface ChatDisplayProps { chat: ChatData chatId: string } +const HoverShadow = styled(Flex)` + alignitems: ${ALIGN_CENTER}; + justifycontent: ${JUSTIFY_CENTER}; + padding: ${SPACING.spacing8}; + transition: box-shadow 0.3s ease; + border-radius: ${BORDERS.borderRadius8}; + + &:hover { + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); + border-radius: ${BORDERS.borderRadius8}; + } +` + +const StyledIcon = styled(Icon)` + color: ${COLORS.blue50}; +` + export function ChatDisplay({ chat, chatId }: ChatDisplayProps): JSX.Element { const { t } = useTranslation('protocol_generator') const [isCopied, setIsCopied] = useState(false) - const { role, reply } = chat + const [, setShowFeedbackModal] = useAtom(feedbackModalAtom) + const { setValue } = useFormContext() + const [chatdata] = useAtom(chatDataAtom) + const [scrollToBottom, setScrollToBottom] = useAtom(scrollToBottomAtom) + const { role, reply, requestId } = chat const isUser = role === 'user' + const setInputFieldToCorrespondingRequest = (): void => { + const prompt = chatdata.find( + chat => chat.role === 'user' && chat.requestId === requestId + )?.reply + setScrollToBottom(!scrollToBottom) + setValue('userPrompt', prompt) + } + + const handleFileDownload = (): void => { + const lastCodeBlock = document.querySelector(`#${chatId}`) + const code = lastCodeBlock?.textContent ?? '' + const blobParts: BlobPart[] = [code] + + const file = new File(blobParts, 'OpentronsAI.py', { type: 'text/python' }) + const url = URL.createObjectURL(file) + const a = document.createElement('a') + + document.body.appendChild(a) + a.href = url + a.download = 'OpentronsAI.py' + a.click() + window.URL.revokeObjectURL(url) + } + const handleClickCopy = async (): Promise => { const lastCodeBlock = document.querySelector(`#${chatId}`) const code = lastCodeBlock?.textContent ?? '' @@ -41,28 +94,32 @@ export function ChatDisplay({ chat, chatId }: ChatDisplayProps): JSX.Element { setIsCopied(true) } + useEffect(() => { + if (isCopied) + delay(() => { + setIsCopied(false) + }, 2000) + }, [isCopied]) + function CodeText(props: JSX.IntrinsicAttributes): JSX.Element { return } return ( - + - + {isUser ? t('you') : t('opentronsai')} - + {/* text should be markdown so this component will have a package or function to parse markdown */} {!isUser ? ( - - - { + setInputFieldToCorrespondingRequest() + }} + > + + + { + setShowFeedbackModal(true) + }} + > + + + { + await handleClickCopy() + }} + > + - - + + { + handleFileDownload() + }} + > + + + ) : null} diff --git a/opentrons-ai-client/src/molecules/ChatFooter/index.tsx b/opentrons-ai-client/src/molecules/ChatFooter/index.tsx index b477da1dacd..fef7596f6f4 100644 --- a/opentrons-ai-client/src/molecules/ChatFooter/index.tsx +++ b/opentrons-ai-client/src/molecules/ChatFooter/index.tsx @@ -15,9 +15,9 @@ export function ChatFooter(): JSX.Element { return ( @@ -32,5 +32,4 @@ const DISCLAIMER_TEXT_STYLE = css` font-size: ${TYPOGRAPHY.fontSize20}; line-height: ${TYPOGRAPHY.lineHeight24}; text-align: ${TYPOGRAPHY.textAlignCenter}; - padding-bottom: ${SPACING.spacing24}; ` diff --git a/opentrons-ai-client/src/molecules/FeedbackModal/__tests__/FeedbackModal.test.tsx b/opentrons-ai-client/src/molecules/FeedbackModal/__tests__/FeedbackModal.test.tsx new file mode 100644 index 00000000000..15d17938e93 --- /dev/null +++ b/opentrons-ai-client/src/molecules/FeedbackModal/__tests__/FeedbackModal.test.tsx @@ -0,0 +1,36 @@ +import { FeedbackModal } from '..' +import { renderWithProviders } from '../../../__testing-utils__' +import { screen } from '@testing-library/react' +import { describe, it, expect } from 'vitest' +import { i18n } from '../../../i18n' +import { feedbackModalAtom } from '../../../resources/atoms' + +const initialValues: Array<[any, any]> = [[feedbackModalAtom, true]] + +const render = (): ReturnType => { + return renderWithProviders(, { + i18nInstance: i18n, + initialValues, + }) +} + +describe('FeedbackModal', () => { + it('should render Feedback modal', () => { + render() + screen.getByText('Send feedback to Opentrons') + screen.getByText('Share why the response was not helpful') + screen.getByText('Cancel') + screen.getByText('Send feedback') + }) + + // should move this test to the chat page + it.skip('should set the showFeedbackModel atom to be false when cancel button is clicked', () => { + render() + expect(feedbackModalAtom.init).toBe(true) + + const cancelButton = screen.getByText('Cancel') + cancelButton.click() + // check if the feedbackModalAtom is set to false + expect(feedbackModalAtom.read).toBe(false) + }) +}) diff --git a/opentrons-ai-client/src/molecules/FeedbackModal/index.tsx b/opentrons-ai-client/src/molecules/FeedbackModal/index.tsx new file mode 100644 index 00000000000..e65aa7a504c --- /dev/null +++ b/opentrons-ai-client/src/molecules/FeedbackModal/index.tsx @@ -0,0 +1,65 @@ +import { + Modal, + Flex, + SPACING, + ALIGN_FLEX_END, + SecondaryButton, + StyledText, + PrimaryButton, + InputField, +} from '@opentrons/components' +import { useAtom } from 'jotai' +import { useTranslation } from 'react-i18next' +import { feedbackModalAtom } from '../../resources/atoms' +import { useState } from 'react' + +export function FeedbackModal(): JSX.Element { + const { t } = useTranslation('protocol_generator') + + const [feedbackValue, setFeedbackValue] = useState('') + const [, setShowFeedbackModal] = useAtom(feedbackModalAtom) + + return ( + { + setShowFeedbackModal(false) + }} + footer={ + + { + setShowFeedbackModal(false) + }} + > + + {t(`cancel`)} + + + { + setShowFeedbackModal(false) + }} + > + + {t(`send_feedback`)} + + + + } + > + { + setFeedbackValue(event.target.value as string) + }} + > + + ) +} diff --git a/opentrons-ai-client/src/molecules/InputPrompt/index.tsx b/opentrons-ai-client/src/molecules/InputPrompt/index.tsx index 70ee01560f4..c87d24f1975 100644 --- a/opentrons-ai-client/src/molecules/InputPrompt/index.tsx +++ b/opentrons-ai-client/src/molecules/InputPrompt/index.tsx @@ -3,6 +3,7 @@ import { useTranslation } from 'react-i18next' import styled, { css } from 'styled-components' import { useFormContext } from 'react-hook-form' import { useAtom } from 'jotai' +import { v4 as uuidv4 } from 'uuid' import { ALIGN_CENTER, @@ -42,13 +43,21 @@ export function InputPrompt(): JSX.Element { const [submitted, setSubmitted] = useState(false) const userPrompt = watch('userPrompt') ?? '' const { data, isLoading, callApi } = useApiCall() + const [requestId, setRequestId] = useState(uuidv4()) + + // This is to autofill the input field for when we navigate to the chat page from the existing/new protocol generator pages + useEffect(() => { + setValue('userPrompt', chatPromptAtomValue) + }, [chatPromptAtomValue, setValue]) useEffect(() => { setValue('userPrompt', chatPromptAtomValue) }, [chatPromptAtomValue, setValue]) const handleClick = async (): Promise => { + setRequestId(uuidv4()) const userInput: ChatData = { + requestId, role: 'user', reply: userPrompt, } @@ -100,6 +109,7 @@ export function InputPrompt(): JSX.Element { if (submitted && data != null && !isLoading) { const { role, reply } = data as ChatData const assistantResponse: ChatData = { + requestId, role, reply, } @@ -166,6 +176,7 @@ const LegacyStyledTextarea = styled.textarea` font-size: ${TYPOGRAPHY.fontSize20}; line-height: ${TYPOGRAPHY.lineHeight24}; padding: 1.2rem 0; + font-size: 1rem; ::placeholder { position: absolute; diff --git a/opentrons-ai-client/src/organisms/MainContentContainer/index.tsx b/opentrons-ai-client/src/organisms/MainContentContainer/index.tsx deleted file mode 100644 index cc2ad54bc39..00000000000 --- a/opentrons-ai-client/src/organisms/MainContentContainer/index.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import { useRef, useEffect } from 'react' -import styled from 'styled-components' -import { useAtom } from 'jotai' - -import { - DIRECTION_COLUMN, - Flex, - OVERFLOW_AUTO, - SPACING, -} from '@opentrons/components' -import { PromptGuide } from '../../molecules/PromptGuide' -import { ChatDisplay } from '../../molecules/ChatDisplay' -import { ChatFooter } from '../../molecules/ChatFooter' -import { chatDataAtom } from '../../resources/atoms' - -export function MainContentContainer(): JSX.Element { - const [chatData] = useAtom(chatDataAtom) - const scrollRef = useRef(null) - - useEffect(() => { - if (scrollRef.current != null) - scrollRef.current.scrollIntoView({ - behavior: 'smooth', - block: 'nearest', - inline: 'nearest', - }) - }, [chatData.length]) - - return ( - - - - - - - {chatData.length > 0 - ? chatData.map((chat, index) => ( - - )) - : null} - - - - - - - - ) -} - -const ChatDataContainer = styled(Flex)` - flex-direction: ${DIRECTION_COLUMN}; - width: 100%; -` diff --git a/opentrons-ai-client/src/organisms/MainContentContainer/MainContainer.stories.tsx b/opentrons-ai-client/src/pages/Chat/Chat.stories.tsx similarity index 59% rename from opentrons-ai-client/src/organisms/MainContentContainer/MainContainer.stories.tsx rename to opentrons-ai-client/src/pages/Chat/Chat.stories.tsx index 4f8fe5739fd..3a4d0d674d4 100644 --- a/opentrons-ai-client/src/organisms/MainContentContainer/MainContainer.stories.tsx +++ b/opentrons-ai-client/src/pages/Chat/Chat.stories.tsx @@ -1,12 +1,12 @@ import { I18nextProvider } from 'react-i18next' import { i18n } from '../../i18n' -import { MainContentContainer as MainContentContainerComponent } from './index' +import { Chat as ChatComponent } from './index' import type { Meta, StoryObj } from '@storybook/react' -const meta: Meta = { +const meta: Meta = { title: 'AI/organisms/ChatContainer', - component: MainContentContainerComponent, + component: ChatComponent, decorators: [ Story => ( @@ -16,5 +16,5 @@ const meta: Meta = { ], } export default meta -type Story = StoryObj +type Story = StoryObj export const ChatContainer: Story = {} diff --git a/opentrons-ai-client/src/organisms/MainContentContainer/__tests__/MainContentContainer.test.tsx b/opentrons-ai-client/src/pages/Chat/__tests__/Chat.test.tsx similarity index 68% rename from opentrons-ai-client/src/organisms/MainContentContainer/__tests__/MainContentContainer.test.tsx rename to opentrons-ai-client/src/pages/Chat/__tests__/Chat.test.tsx index d3014a5895b..77874086534 100644 --- a/opentrons-ai-client/src/organisms/MainContentContainer/__tests__/MainContentContainer.test.tsx +++ b/opentrons-ai-client/src/pages/Chat/__tests__/Chat.test.tsx @@ -4,7 +4,7 @@ import { renderWithProviders } from '../../../__testing-utils__' import { i18n } from '../../../i18n' import { PromptGuide } from '../../../molecules/PromptGuide' import { ChatFooter } from '../../../molecules/ChatFooter' -import { MainContentContainer } from '../index' +import { Chat } from '../index' vi.mock('../../../molecules/PromptGuide') vi.mock('../../../molecules/ChatFooter') @@ -12,20 +12,27 @@ vi.mock('../../../molecules/ChatFooter') window.HTMLElement.prototype.scrollIntoView = vi.fn() const render = (): ReturnType => { - return renderWithProviders(, { + return renderWithProviders(, { i18nInstance: i18n, }) } -describe('MainContentContainer', () => { +describe('Chat', () => { beforeEach(() => { vi.mocked(PromptGuide).mockReturnValue(

    ) vi.mocked(ChatFooter).mockReturnValue(
    mock ChatFooter
    ) }) - it('should render prompt guide and text', () => { + it('should render footer', () => { render() - screen.getByText('mock PromptGuide') screen.getByText('mock ChatFooter') }) + + it.skip('should not show the feedback modal when loading the page', () => { + render() + screen.getByText('Send feedback to Opentrons') + screen.getByText('Share why the response was not helpful') + screen.getByText('Cancel') + screen.getByText('Send feedback') + }) }) diff --git a/opentrons-ai-client/src/pages/Chat/index.tsx b/opentrons-ai-client/src/pages/Chat/index.tsx index 6d9492038b8..7bedeb8dffe 100644 --- a/opentrons-ai-client/src/pages/Chat/index.tsx +++ b/opentrons-ai-client/src/pages/Chat/index.tsx @@ -1,13 +1,17 @@ import { useForm, FormProvider } from 'react-hook-form' -import { - DIRECTION_COLUMN, - DIRECTION_ROW, - Flex, - JUSTIFY_CENTER, - POSITION_RELATIVE, -} from '@opentrons/components' +import { DIRECTION_COLUMN, Flex, SPACING } from '@opentrons/components' -import { MainContentContainer } from '../../organisms/MainContentContainer' +import { useAtom } from 'jotai' +import { useRef, useEffect } from 'react' +import { + chatDataAtom, + feedbackModalAtom, + scrollToBottomAtom, +} from '../../resources/atoms' +import { ChatDisplay } from '../../molecules/ChatDisplay' +import { ChatFooter } from '../../molecules/ChatFooter' +import styled from 'styled-components' +import { FeedbackModal } from '../../molecules/FeedbackModal' export interface InputType { userPrompt: string @@ -20,19 +24,54 @@ export function Chat(): JSX.Element | null { }, }) + const [chatData] = useAtom(chatDataAtom) + const scrollRef = useRef(null) + const [showFeedbackModal] = useAtom(feedbackModalAtom) + const [scrollToBottom] = useAtom(scrollToBottomAtom) + + useEffect(() => { + if (scrollRef.current != null) + scrollRef.current.scrollIntoView({ + behavior: 'smooth', + block: 'nearest', + inline: 'nearest', + }) + }, [chatData.length, scrollToBottom]) + return ( - - - - {/* */} - + + + + + {chatData.length > 0 + ? chatData.map((chat, index) => ( + + )) + : null} + - - + + + {showFeedbackModal ? : null} + + ) } + +const ChatDataContainer = styled(Flex)` + flex-direction: ${DIRECTION_COLUMN}; + width: 100%; +` diff --git a/opentrons-ai-client/src/resources/atoms.ts b/opentrons-ai-client/src/resources/atoms.ts index b92f3e848f5..ffacfe7afd8 100644 --- a/opentrons-ai-client/src/resources/atoms.ts +++ b/opentrons-ai-client/src/resources/atoms.ts @@ -11,11 +11,16 @@ import type { /** ChatDataAtom is for chat data (user prompt and response from OpenAI API) */ export const chatDataAtom = atom([]) -/** ChatPromptAtom is for the prefilled userprompt when landing on the chat page */ +/** ChatPromptAtom is for the prefilled userprompt when navigating to the chat page from existing/new protocol pages */ export const chatPromptAtom = atom('') +/** Scroll to bottom of chat atom */ +export const scrollToBottomAtom = atom(false) + export const chatHistoryAtom = atom([]) +export const feedbackModalAtom = atom(false) + export const tokenAtom = atom(null) export const mixpanelAtom = atom({ diff --git a/opentrons-ai-client/src/resources/types.ts b/opentrons-ai-client/src/resources/types.ts index 410bdfd98a6..cd6be5dc1b7 100644 --- a/opentrons-ai-client/src/resources/types.ts +++ b/opentrons-ai-client/src/resources/types.ts @@ -8,6 +8,8 @@ export interface ChatData { reply: string /** for testing purpose will be removed and this is not used in the app */ fake?: boolean + /** uuid to map the chat prompt request to the response from the LLM */ + requestId: string } export interface Chat { From 7e59b5383003aaeb3dd74f870da64a272f888cb2 Mon Sep 17 00:00:00 2001 From: koji Date: Wed, 6 Nov 2024 18:00:29 -0500 Subject: [PATCH 72/81] fix(app, protocol-designer): align left_right mount text (#16715) * fix(app, protocol-designer): align left_right mount text --- app/src/assets/localization/en/device_details.json | 2 +- .../__tests__/InstrumentsDashboard.test.tsx | 2 +- .../src/assets/localization/en/create_new_protocol.json | 2 +- protocol-designer/src/assets/localization/en/shared.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/assets/localization/en/device_details.json b/app/src/assets/localization/en/device_details.json index ee0be003723..17daa2c5955 100644 --- a/app/src/assets/localization/en/device_details.json +++ b/app/src/assets/localization/en/device_details.json @@ -74,7 +74,7 @@ "instruments_and_modules": "Instruments and Modules", "labware_bottom": "Labware Bottom", "last_run_time": "last run {{number}}", - "left_right": "Left+Right Mounts", + "left_right": "Left + Right Mounts", "left": "left", "lights": "Lights", "link_firmware_update": "View Firmware Update", diff --git a/app/src/pages/ODD/InstrumentsDashboard/__tests__/InstrumentsDashboard.test.tsx b/app/src/pages/ODD/InstrumentsDashboard/__tests__/InstrumentsDashboard.test.tsx index 7f2687e07b7..5e78f28b4c9 100644 --- a/app/src/pages/ODD/InstrumentsDashboard/__tests__/InstrumentsDashboard.test.tsx +++ b/app/src/pages/ODD/InstrumentsDashboard/__tests__/InstrumentsDashboard.test.tsx @@ -183,7 +183,7 @@ describe('InstrumentsDashboard', () => { }, } as any) render('/instruments') - screen.getByText('Left+Right Mounts') + screen.getByText('Left + Right Mounts') screen.getByText('extension Mount') }) }) diff --git a/protocol-designer/src/assets/localization/en/create_new_protocol.json b/protocol-designer/src/assets/localization/en/create_new_protocol.json index 622464e6547..b0c137992e2 100644 --- a/protocol-designer/src/assets/localization/en/create_new_protocol.json +++ b/protocol-designer/src/assets/localization/en/create_new_protocol.json @@ -13,7 +13,7 @@ "incompatible_tip_body": "Using a pipette with an incompatible tip rack may result reduce pipette accuracy and collisions. We strongly recommend that you do not pair a pipette with an incompatible tip rack.", "incompatible_tips": "Incompatible tips", "labware_name": "Labware name", - "left_right": "Left+Right", + "left_right": "Left + Right", "modules_added": "Modules added", "name": "Name", "need_gripper": "Do you want to move labware automatically with the gripper?", diff --git a/protocol-designer/src/assets/localization/en/shared.json b/protocol-designer/src/assets/localization/en/shared.json index 64a5cdffdcc..bdfbd8a2b36 100644 --- a/protocol-designer/src/assets/localization/en/shared.json +++ b/protocol-designer/src/assets/localization/en/shared.json @@ -44,7 +44,7 @@ "labware_name_conflict": "Duplicate labware name", "labware": "Labware", "learn_more": "Learn more about the recent changes in the {{version}} release.", - "left_right": "Left+Right", + "left_right": "Left + Right", "left": "Left", "liquid": "Liquid", "magneticmoduletype": "Magnetic Module", From 825c23c60a83051b8f791138277d134d3c71d9f5 Mon Sep 17 00:00:00 2001 From: koji Date: Thu, 7 Nov 2024 09:11:21 -0500 Subject: [PATCH 73/81] fix(protocol-designer): fix dropdownmenu expands upwards (#16713) * fix(protocol-designer): fix dropdownmenu expands upwards (#16713) --- .../atoms/ListItem/ListItemChildren/ListItemCustomize.tsx | 7 ++++++- components/src/molecules/DropdownMenu/index.tsx | 4 ++++ .../src/pages/CreateNewProtocolWizard/SelectFixtures.tsx | 1 + .../src/pages/CreateNewProtocolWizard/SelectModules.tsx | 1 + 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/components/src/atoms/ListItem/ListItemChildren/ListItemCustomize.tsx b/components/src/atoms/ListItem/ListItemChildren/ListItemCustomize.tsx index aa04dd91722..b9e31ad2782 100644 --- a/components/src/atoms/ListItem/ListItemChildren/ListItemCustomize.tsx +++ b/components/src/atoms/ListItem/ListItemChildren/ListItemCustomize.tsx @@ -18,6 +18,8 @@ interface ListItemCustomizeProps { label?: string dropdown?: DropdownMenuProps tag?: TagProps + /** temporary prop for dropdown menu */ + forceDirection?: boolean } export function ListItemCustomize(props: ListItemCustomizeProps): JSX.Element { @@ -29,6 +31,7 @@ export function ListItemCustomize(props: ListItemCustomizeProps): JSX.Element { linkText, dropdown, tag, + forceDirection = false, } = props return ( @@ -49,7 +52,9 @@ export function ListItemCustomize(props: ListItemCustomizeProps): JSX.Element { {label} ) : null} - {dropdown != null ? : null} + {dropdown != null ? ( + + ) : null} {tag != null ? : null} {onClick != null && linkText != null ? ( diff --git a/components/src/molecules/DropdownMenu/index.tsx b/components/src/molecules/DropdownMenu/index.tsx index c6aa7abc1c2..5dfa6a985f4 100644 --- a/components/src/molecules/DropdownMenu/index.tsx +++ b/components/src/molecules/DropdownMenu/index.tsx @@ -69,6 +69,8 @@ export interface DropdownMenuProps { onBlur?: React.FocusEventHandler /** optional disabled */ disabled?: boolean + /** force direction for pd after release this will be fixed and remove */ + forceDirection?: boolean } // TODO: (smb: 4/15/22) refactor this to use html select for accessibility @@ -88,6 +90,7 @@ export function DropdownMenu(props: DropdownMenuProps): JSX.Element { disabled = false, onFocus, onBlur, + forceDirection = false, } = props const [targetProps, tooltipProps] = useHoverTooltip() const [showDropdownMenu, setShowDropdownMenu] = React.useState(false) @@ -105,6 +108,7 @@ export function DropdownMenu(props: DropdownMenuProps): JSX.Element { }) React.useEffect(() => { + if (forceDirection) return const handlePositionCalculation = (): void => { const dropdownRect = dropDownMenuWrapperRef.current?.getBoundingClientRect() if (dropdownRect != null) { diff --git a/protocol-designer/src/pages/CreateNewProtocolWizard/SelectFixtures.tsx b/protocol-designer/src/pages/CreateNewProtocolWizard/SelectFixtures.tsx index eda7253ed62..023b588d7c0 100644 --- a/protocol-designer/src/pages/CreateNewProtocolWizard/SelectFixtures.tsx +++ b/protocol-designer/src/pages/CreateNewProtocolWizard/SelectFixtures.tsx @@ -158,6 +158,7 @@ export function SelectFixtures(props: WizardTileProps): JSX.Element | null { return ( { setValue( diff --git a/protocol-designer/src/pages/CreateNewProtocolWizard/SelectModules.tsx b/protocol-designer/src/pages/CreateNewProtocolWizard/SelectModules.tsx index 575bca4ae8b..105fc2ecea5 100644 --- a/protocol-designer/src/pages/CreateNewProtocolWizard/SelectModules.tsx +++ b/protocol-designer/src/pages/CreateNewProtocolWizard/SelectModules.tsx @@ -258,6 +258,7 @@ export function SelectModules(props: WizardTileProps): JSX.Element | null { return ( Date: Thu, 7 Nov 2024 09:11:44 -0500 Subject: [PATCH 74/81] fix(protocol-designer): add new text for 8-channel pipette mix (#16714) * fix(protocol-designer): add new text for 8-channel pipette mix (#16714) --- protocol-designer/src/assets/localization/en/form.json | 1 + 1 file changed, 1 insertion(+) diff --git a/protocol-designer/src/assets/localization/en/form.json b/protocol-designer/src/assets/localization/en/form.json index c5a1099fbc1..e4b0419ceb4 100644 --- a/protocol-designer/src/assets/localization/en/form.json +++ b/protocol-designer/src/assets/localization/en/form.json @@ -281,6 +281,7 @@ "columns_aspirate_wells": "Source columns", "columns_dispense_wells": "Destination columns", "columns_mix_wells": "Select columns", + "columns_wells": "Mix wells", "wells": "wells", "wells_aspirate_wells": "Select source wells", "wells_dispense_wells": "Select destination wells", From 0e3fd3ad6b1cb422cea4a3f0f9be9b4a60d1d6ad Mon Sep 17 00:00:00 2001 From: koji Date: Thu, 7 Nov 2024 09:13:42 -0500 Subject: [PATCH 75/81] fix(protocol-designer): fix 96-channel display in pipette info and overview (#16708) * fix(protocol-designer): fix 96-channel display in pipette info and overview --- .../localization/en/create_new_protocol.json | 2 +- .../localization/en/protocol_overview.json | 7 +-- .../__tests__/PipetteInfoItem.test.tsx | 4 +- .../src/organisms/PipetteInfoItem/index.tsx | 2 +- .../SelectPipettes.tsx | 5 ++- .../ProtocolOverview/InstrumentsInfo.tsx | 45 ++++++++++--------- .../__tests__/InstrumentsInfo.test.tsx | 34 ++++++++++++-- 7 files changed, 67 insertions(+), 32 deletions(-) diff --git a/protocol-designer/src/assets/localization/en/create_new_protocol.json b/protocol-designer/src/assets/localization/en/create_new_protocol.json index b0c137992e2..6b0cd5a6ade 100644 --- a/protocol-designer/src/assets/localization/en/create_new_protocol.json +++ b/protocol-designer/src/assets/localization/en/create_new_protocol.json @@ -17,7 +17,7 @@ "modules_added": "Modules added", "name": "Name", "need_gripper": "Do you want to move labware automatically with the gripper?", - "pip": "{{mount}} Pipette", + "pipette": "{{mount}} Mount", "pipette_gen": "Pipette generation", "pipette_tips": "Pipette tips", "pipette_type": "Pipette type", diff --git a/protocol-designer/src/assets/localization/en/protocol_overview.json b/protocol-designer/src/assets/localization/en/protocol_overview.json index e1975f4e4ef..b03097576cd 100644 --- a/protocol-designer/src/assets/localization/en/protocol_overview.json +++ b/protocol-designer/src/assets/localization/en/protocol_overview.json @@ -8,11 +8,12 @@ "edit_protocol": "Edit protocol", "edit": "Edit", "export_protocol": "Export protocol", - "extension": "Extension mount", + "extension": "Extension Mount", "gripper": "Opentrons Flex Gripper", "instruments": "Instruments", "labware": "Labware", - "left_pip": "Left pipette", + "left_mount": "Left Mount", + "left_right_mount": "Left + Right Mount", "liquid_defs": "Liquid Definitions", "liquids": "Liquids", "materials_list": "Materials list", @@ -28,7 +29,7 @@ "protocol_metadata": "Protocol Metadata", "protocol_steps": "Protocol Steps", "required_app_version": "Required app version", - "right_pip": "Right pipette", + "right_mount": "Right Mount", "robotType": "Robot type", "starting_deck": "Protocol Starting Deck", "steps": "{{count}} steps", diff --git a/protocol-designer/src/organisms/PipetteInfoItem/__tests__/PipetteInfoItem.test.tsx b/protocol-designer/src/organisms/PipetteInfoItem/__tests__/PipetteInfoItem.test.tsx index 53ab36986ea..ae60f21c4fb 100644 --- a/protocol-designer/src/organisms/PipetteInfoItem/__tests__/PipetteInfoItem.test.tsx +++ b/protocol-designer/src/organisms/PipetteInfoItem/__tests__/PipetteInfoItem.test.tsx @@ -34,7 +34,7 @@ describe('PipetteInfoItem', () => { it('renders pipette with edit and remove buttons', () => { render(props) screen.getByText('P1000 Single-Channel GEN1') - screen.getByText('Left Pipette') + screen.getByText('Left Mount') screen.getByText('mock display name') fireEvent.click(screen.getByText('Edit')) expect(props.editClick).toHaveBeenCalled() @@ -49,7 +49,7 @@ describe('PipetteInfoItem', () => { } render(props) screen.getByText('P1000 Single-Channel GEN1') - screen.getByText('Right Pipette') + screen.getByText('Right Mount') screen.getByText('mock display name') fireEvent.click(screen.getByText('Edit')) expect(props.editClick).toHaveBeenCalled() diff --git a/protocol-designer/src/organisms/PipetteInfoItem/index.tsx b/protocol-designer/src/organisms/PipetteInfoItem/index.tsx index 97ffe27f8cd..5b98a2c81a2 100644 --- a/protocol-designer/src/organisms/PipetteInfoItem/index.tsx +++ b/protocol-designer/src/organisms/PipetteInfoItem/index.tsx @@ -40,7 +40,7 @@ export function PipetteInfoItem(props: PipetteInfoItemProps): JSX.Element { {i18n.format( - t('pip', { + t('pipette', { mount: is96Channel ? t('left_right') : mount, }), 'titleCase' diff --git a/protocol-designer/src/pages/CreateNewProtocolWizard/SelectPipettes.tsx b/protocol-designer/src/pages/CreateNewProtocolWizard/SelectPipettes.tsx index 115a8a46f9d..c6fa5b4ca87 100644 --- a/protocol-designer/src/pages/CreateNewProtocolWizard/SelectPipettes.tsx +++ b/protocol-designer/src/pages/CreateNewProtocolWizard/SelectPipettes.tsx @@ -192,7 +192,7 @@ export function SelectPipettes(props: WizardTileProps): JSX.Element | null { {t('pipette_type')} - + {PIPETTE_TYPES[robotType].map(type => { return type.value === '96' && (pipettesByMount.left.pipetteName != null || @@ -225,6 +225,7 @@ export function SelectPipettes(props: WizardTileProps): JSX.Element | null { {t('pipette_gen')} @@ -256,7 +257,7 @@ export function SelectPipettes(props: WizardTileProps): JSX.Element | null { {t('pipette_vol')} - + {PIPETTE_VOLUMES[robotType]?.map(volume => { if ( robotType === FLEX_ROBOT_TYPE && diff --git a/protocol-designer/src/pages/ProtocolOverview/InstrumentsInfo.tsx b/protocol-designer/src/pages/ProtocolOverview/InstrumentsInfo.tsx index 810fc098db0..63ce567a805 100644 --- a/protocol-designer/src/pages/ProtocolOverview/InstrumentsInfo.tsx +++ b/protocol-designer/src/pages/ProtocolOverview/InstrumentsInfo.tsx @@ -40,14 +40,17 @@ export function InstrumentsInfo({ equipment => equipment?.name === 'gripper' ) + const has96Channel = leftPipette?.name === 'p1000_96' && rightPipette == null + const pipetteInfo = (pipette?: PipetteOnDeck): JSX.Element => { const pipetteName = pipette != null ? getPipetteSpecsV2(pipette.name as PipetteName)?.displayName : t('na') - const tipsInfo = pipette?.tiprackLabwareDef - ? pipette.tiprackLabwareDef.map(labware => labware.metadata.displayName) - : t('na') + const tipsInfo = + pipette?.tiprackLabwareDef != null + ? pipette.tiprackLabwareDef.map(labware => labware.metadata.displayName) + : t('na') if (pipetteName === t('na') || tipsInfo === t('na')) { return ( @@ -124,29 +127,31 @@ export function InstrumentsInfo({ desktopStyle="bodyDefaultRegular" color={COLORS.grey60} > - {t('left_pip')} + {has96Channel ? t('left_right_mount') : t('left_mount')} } content={pipetteInfo(leftPipette)} /> - - - - {t('right_pip')} - -
    - } - content={pipetteInfo(rightPipette)} - /> - + {!has96Channel ? ( + + + + {t('right_mount')} + +
    + } + content={pipetteInfo(rightPipette)} + /> + + ) : null} {robotType === FLEX_ROBOT_TYPE ? ( { screen.getByText('Instruments') screen.getByText('Robot type') screen.getAllByText('Opentrons Flex') - screen.getByText('Left pipette') - screen.getByText('Right pipette') - screen.getByText('Extension mount') + screen.getByText('Left Mount') + screen.getByText('Right Mount') + screen.getByText('Extension Mount') expect(screen.getAllByText('N/A').length).toBe(3) }) @@ -103,4 +122,13 @@ describe('InstrumentsInfo', () => { fireEvent.click(screen.getByText('Edit')) expect(mockSetShowEditInstrumentsModal).toHaveBeenCalled() }) + + it('should render left + right mount when 96 channels is selected', () => { + props = { + ...props, + pipettesOnDeck: mock96Pipette, + } + render(props) + screen.getByText('Left + Right Mount') + }) }) From 03a7b6a71fd166cf52bf92bbe975cf56fced74d6 Mon Sep 17 00:00:00 2001 From: Nick Diehl <47604184+ncdiehl11@users.noreply.github.com> Date: Thu, 7 Nov 2024 09:34:31 -0500 Subject: [PATCH 76/81] feat(protocol-designer): overhaul StepForm error handling (#16699) # Overview This PR overhauls logic for step form form-level error handling according to the new design paradigm of maintaining the enabled state of save/continue buttons and showing all form errors when appropriate. I add a number of step form-specific errors and wire them up in their respective forms. I also maintain aspirate and dispense tab states in the StepForm component to enable tab switching logic on save. Lastly, I provide a number of design fixes while I was touching these components. --- components/src/atoms/InputField/index.tsx | 28 +- .../src/assets/localization/en/form.json | 7 + .../molecules/InputStepFormField/index.tsx | 3 + .../ToggleExpandStepFormField/index.tsx | 2 +- .../src/organisms/Alerts/FormAlerts.tsx | 36 +- .../Alerts/__tests__/FormAlerts.test.tsx | 1 + .../StepForm/PipetteFields/FlowRateField.tsx | 1 + .../PipetteFields/WellSelectionField.tsx | 10 +- .../StepForm/StepFormToolbox.tsx | 107 ++++-- .../StepTools/HeaterShakerTools/index.tsx | 23 +- .../StepForm/StepTools/MagnetTools/index.tsx | 7 +- .../StepForm/StepTools/MixTools/index.tsx | 38 ++- .../MoveLabwareTools/LabwareLocationField.tsx | 46 +-- .../StepTools/MoveLabwareTools/index.tsx | 41 ++- .../StepTools/MoveLiquidTools/index.tsx | 51 ++- .../StepForm/StepTools/PauseTools/index.tsx | 218 ++++++------ .../StepTools/TemperatureTools/index.tsx | 86 ++--- .../ThermocyclerTools/ProfileSettings.tsx | 18 +- .../ThermocyclerTools/ThermocyclerState.tsx | 16 +- .../StepTools/__tests__/MagnetTools.test.tsx | 2 + .../__tests__/TemperatureTools.test.tsx | 6 +- .../StepForm/__tests__/utils.test.ts | 24 +- .../Designer/ProtocolSteps/StepForm/types.ts | 3 + .../Designer/ProtocolSteps/StepForm/utils.ts | 29 +- .../src/steplist/fieldLevel/index.ts | 3 - .../src/steplist/formLevel/errors.ts | 314 +++++++++++++++++- .../src/steplist/formLevel/index.ts | 59 +++- 27 files changed, 811 insertions(+), 368 deletions(-) diff --git a/components/src/atoms/InputField/index.tsx b/components/src/atoms/InputField/index.tsx index c6d8eff68ea..fc1e1a4560f 100644 --- a/components/src/atoms/InputField/index.tsx +++ b/components/src/atoms/InputField/index.tsx @@ -73,10 +73,18 @@ export interface InputFieldProps { size?: 'medium' | 'small' /** react useRef to control input field instead of react event */ ref?: React.MutableRefObject + /** optional IconName to display icon aligned to left of input field */ leftIcon?: IconName + /** if true, show delete icon aligned to right of input field */ showDeleteIcon?: boolean + /** callback passed to optional delete icon onClick */ onDelete?: () => void + /** if true, style the background of input field to error state */ hasBackgroundError?: boolean + /** optional prop to override input field border radius */ + borderRadius?: string + /** optional prop to override input field padding */ + padding?: string } export const InputField = React.forwardRef( @@ -91,6 +99,8 @@ export const InputField = React.forwardRef( showDeleteIcon = false, hasBackgroundError = false, onDelete, + borderRadius, + padding, ...inputProps } = props const hasError = props.error != null @@ -112,8 +122,10 @@ export const InputField = React.forwardRef( const INPUT_FIELD = css` display: flex; background-color: ${hasBackgroundError ? COLORS.red30 : COLORS.white}; - border-radius: ${BORDERS.borderRadius4}; - padding: ${SPACING.spacing8}; + border-radius: ${borderRadius != null + ? borderRadius + : BORDERS.borderRadius4}; + padding: ${padding != null ? padding : SPACING.spacing8}; border: ${hasBackgroundError ? 'none' : `1px ${BORDERS.styleSolid} @@ -280,7 +292,12 @@ export const InputField = React.forwardRef( ) : null}
    ) : null} - + ( ) : null} {hasError ? ( - + {props.error} ) : null} diff --git a/protocol-designer/src/assets/localization/en/form.json b/protocol-designer/src/assets/localization/en/form.json index e4b0419ceb4..5ed9f9d8331 100644 --- a/protocol-designer/src/assets/localization/en/form.json +++ b/protocol-designer/src/assets/localization/en/form.json @@ -176,6 +176,12 @@ "step_notes": { "label": "Step Notes" }, + "temperature": { + "caption": "Valid range is 4 – 95˚C", + "setTemperature": "Temperature", + "toggleOff": "Deactivate", + "toggleOn": "Set" + }, "thermocyclerAction": { "options": { "profile": "Program a Thermocycler profile", @@ -268,6 +274,7 @@ }, "mixRepetitions": "repetitions", "mixVolumeLabel": "mix volume", + "moduleState": "Module state", "multiDispenseOptionsLabel": "multi-dispense options", "section": { "dropTip": "drop tip", diff --git a/protocol-designer/src/molecules/InputStepFormField/index.tsx b/protocol-designer/src/molecules/InputStepFormField/index.tsx index b0cf78383ea..13b113e7215 100644 --- a/protocol-designer/src/molecules/InputStepFormField/index.tsx +++ b/protocol-designer/src/molecules/InputStepFormField/index.tsx @@ -12,6 +12,7 @@ interface InputStepFormFieldProps extends FieldProps { showTooltip?: boolean caption?: string formLevelError?: string | null + placeholder?: string } export function InputStepFormField( @@ -33,6 +34,7 @@ export function InputStepFormField( formLevelError, setIsPristine, type, + placeholder, ...otherProps } = props const { t } = useTranslation('tooltip') @@ -59,6 +61,7 @@ export function InputStepFormField( }} value={value ? String(value) : null} units={units} + placeholder={placeholder} /> ) diff --git a/protocol-designer/src/molecules/ToggleExpandStepFormField/index.tsx b/protocol-designer/src/molecules/ToggleExpandStepFormField/index.tsx index 3bb253dca9d..5c34b465647 100644 --- a/protocol-designer/src/molecules/ToggleExpandStepFormField/index.tsx +++ b/protocol-designer/src/molecules/ToggleExpandStepFormField/index.tsx @@ -46,7 +46,7 @@ export function ToggleExpandStepFormField( } = props const resetFieldValue = (): void => { - restProps.updateValue('null') + restProps.updateValue(null) } const onToggleUpdateValue = (): void => { diff --git a/protocol-designer/src/organisms/Alerts/FormAlerts.tsx b/protocol-designer/src/organisms/Alerts/FormAlerts.tsx index ad470253e69..f9d7166943d 100644 --- a/protocol-designer/src/organisms/Alerts/FormAlerts.tsx +++ b/protocol-designer/src/organisms/Alerts/FormAlerts.tsx @@ -22,6 +22,7 @@ import { } from '../../pages/Designer/ProtocolSteps/StepForm/utils' import { WarningContents } from './WarningContents' +import type { ReactNode } from 'react' import type { ProfileItem } from '@opentrons/step-generation' import type { StepFieldName } from '../../form-types' import type { ProfileFormError } from '../../steplist/formLevel/profileErrors' @@ -31,10 +32,16 @@ interface FormAlertsProps { showFormErrorsAndWarnings: boolean focusedField?: StepFieldName | null dirtyFields?: StepFieldName[] + page: number +} + +interface WarningType { + title: string + description: ReactNode | null } function FormAlertsComponent(props: FormAlertsProps): JSX.Element | null { - const { showFormErrorsAndWarnings, focusedField, dirtyFields } = props + const { showFormErrorsAndWarnings, focusedField, dirtyFields, page } = props const { t } = useTranslation('alert') const dispatch = useDispatch() @@ -70,6 +77,8 @@ function FormAlertsComponent(props: FormAlertsProps): JSX.Element | null { focusedField, dirtyFields: dirtyFields ?? [], errors: formLevelErrorsForUnsavedForm, + page, + showErrors: showFormErrorsAndWarnings, }) const profileItemsById: Record | null | undefined = @@ -123,21 +132,32 @@ function FormAlertsComponent(props: FormAlertsProps): JSX.Element | null { ) + const filteredFormErrorsForBanner = visibleFormErrors.reduce( + (acc, error) => { + return error.showAtForm ?? true + ? [ + ...acc, + { + title: error.title, + description: error.body ?? null, + }, + ] + : acc + }, + [] + ) + const formErrors = [ - ...visibleFormErrors.map(error => ({ - title: error.title, - description: error.body ?? null, - showAtForm: error.showAtForm ?? true, - })), + ...filteredFormErrorsForBanner, ...visibleDynamicFieldFormErrors.map(error => ({ title: error.title, - description: error.body || null, + description: error.body ?? null, })), ] const formWarnings = visibleFormWarnings.map(warning => ({ title: warning.title, - description: warning.body || null, + description: warning.body ?? null, dismissId: warning.type, })) diff --git a/protocol-designer/src/organisms/Alerts/__tests__/FormAlerts.test.tsx b/protocol-designer/src/organisms/Alerts/__tests__/FormAlerts.test.tsx index 26c5cdb02ce..5c7428d6996 100644 --- a/protocol-designer/src/organisms/Alerts/__tests__/FormAlerts.test.tsx +++ b/protocol-designer/src/organisms/Alerts/__tests__/FormAlerts.test.tsx @@ -38,6 +38,7 @@ describe('FormAlerts', () => { focusedField: null, dirtyFields: [], showFormErrorsAndWarnings: false, + page: 0, } vi.mocked(getFormLevelErrorsForUnsavedForm).mockReturnValue([]) vi.mocked(getFormWarningsForSelectedStep).mockReturnValue([]) diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/FlowRateField.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/FlowRateField.tsx index db28d285a0d..2e264548d28 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/FlowRateField.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/FlowRateField.tsx @@ -100,6 +100,7 @@ export function FlowRateField(props: FlowRateFieldProps): JSX.Element { max: maxFlowRate, unit: t('application:units.microliterPerSec'), })} + placeholder={String(defaultFlowRate)} /> ) } diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/WellSelectionField.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/WellSelectionField.tsx index f12f3e0dd02..ddd54b923f6 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/WellSelectionField.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/WellSelectionField.tsx @@ -4,6 +4,7 @@ import { useTranslation } from 'react-i18next' import { ALIGN_CENTER, + BORDERS, COLORS, DIRECTION_COLUMN, Flex, @@ -101,8 +102,7 @@ export const WellSelectionField = ( @@ -123,10 +123,12 @@ export const WellSelectionField = ( disabled={disabled ?? labwareId != null} readOnly name={name} - error={errorToShow} - value={primaryWellCount} + value={primaryWellCount ?? errorToShow} onClick={handleOpen} hasBackgroundError={hasFormError} + size="medium" + borderRadius={BORDERS.borderRadius8} + padding={SPACING.spacing12} /> {createPortal( diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx index cee9fdadb4f..1d2bdecf973 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react' +import { useRef, useState } from 'react' import get from 'lodash/get' import { useTranslation } from 'react-i18next' import { useSelector } from 'react-redux' @@ -40,10 +40,16 @@ import { getVisibleFormErrors, getVisibleFormWarnings, capitalizeFirstLetter, + getIsErrorOnCurrentPage, } from './utils' import type { StepFieldName } from '../../../../steplist/fieldLevel' import type { FormData, StepType } from '../../../../form-types' -import type { FieldPropsByName, FocusHandlers, StepFormProps } from './types' +import type { + FieldPropsByName, + FocusHandlers, + LiquidHandlingTab, + StepFormProps, +} from './types' import { getFormLevelErrorsForUnsavedForm } from '../../../../step-forms/selectors' type StepFormMap = { @@ -90,6 +96,8 @@ export function StepFormToolbox(props: StepFormToolboxProps): JSX.Element { 'protocol_steps', ]) const { makeSnackbar } = useKitchen() + const toolsComponentRef = useRef(null) + const formWarningsForSelectedStep = useSelector( getFormWarningsForSelectedStep ) @@ -105,6 +113,7 @@ export function StepFormToolbox(props: StepFormToolboxProps): JSX.Element { showFormErrorsAndWarnings, setShowFormErrorsAndWarnings, ] = useState(false) + const [tab, setTab] = useState('aspirate') const visibleFormWarnings = getVisibleFormWarnings({ focusedField, dirtyFields: dirtyFields ?? [], @@ -114,6 +123,8 @@ export function StepFormToolbox(props: StepFormToolboxProps): JSX.Element { focusedField, dirtyFields: dirtyFields ?? [], errors: formLevelErrorsForUnsavedForm, + page: toolboxStep, + showErrors: showFormErrorsAndWarnings, }) const [isRename, setIsRename] = useState(false) const icon = stepIconsByType[formData.stepType] @@ -123,6 +134,13 @@ export function StepFormToolbox(props: StepFormToolboxProps): JSX.Element { formData.stepType ) + const isAspirateError = formLevelErrorsForUnsavedForm.some( + error => error.tab === 'aspirate' && error.page === toolboxStep + ) + const isDispenseError = formLevelErrorsForUnsavedForm.some( + error => error.tab === 'dispense' && error.page === toolboxStep + ) + if (!ToolsComponent) { // early-exit if step form doesn't exist, this is a good check for when new steps // are added @@ -141,6 +159,19 @@ export function StepFormToolbox(props: StepFormToolboxProps): JSX.Element { visibleFormWarnings.length + timelineWarningsForSelectedStep.length const numErrors = timeline.errors?.length ?? 0 + const isErrorOnCurrentPage = getIsErrorOnCurrentPage({ + errors: formLevelErrorsForUnsavedForm, + page: toolboxStep, + }) + const handleScrollToTop = (): void => { + if (toolsComponentRef.current) { + toolsComponentRef.current.scrollIntoView({ + behavior: 'smooth', + block: 'start', + }) + } + } + const handleSaveClick = (): void => { if (canSave) { handleSave() @@ -157,6 +188,27 @@ export function StepFormToolbox(props: StepFormToolboxProps): JSX.Element { ) } else { setShowFormErrorsAndWarnings(true) + if (tab === 'aspirate' && isDispenseError && !isAspirateError) { + setTab('dispense') + } + if (tab === 'dispense' && isAspirateError && !isDispenseError) { + setTab('aspirate') + } + handleScrollToTop() + } + } + + const handleContinue = (): void => { + if (isMultiStepToolbox && toolboxStep === 0) { + if (!isErrorOnCurrentPage) { + setToolboxStep(1) + setShowFormErrorsAndWarnings(false) + } else { + setShowFormErrorsAndWarnings(true) + handleScrollToTop() + } + } else { + handleSaveClick() } } @@ -202,21 +254,13 @@ export function StepFormToolbox(props: StepFormToolboxProps): JSX.Element { width="100%" onClick={() => { setToolboxStep(0) + setShowFormErrorsAndWarnings(false) }} > {i18n.format(t('shared:back'), 'capitalize')} ) : null} - { - setToolboxStep(1) - } - : handleSaveClick - } - width="100%" - > + {isMultiStepToolbox && toolboxStep === 0 ? i18n.format(t('shared:continue'), 'capitalize') : t('shared:save')} @@ -235,23 +279,28 @@ export function StepFormToolbox(props: StepFormToolboxProps): JSX.Element { } > - - +
    + + +
    ) diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/HeaterShakerTools/index.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/HeaterShakerTools/index.tsx index 0abee471ef5..2d16704fdb3 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/HeaterShakerTools/index.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/HeaterShakerTools/index.tsx @@ -18,13 +18,7 @@ import { getFormErrorsMappedToField, getFormLevelError } from '../../utils' import type { StepFormProps } from '../../types' export function HeaterShakerTools(props: StepFormProps): JSX.Element { - const { - propsForFields, - formData, - showFormErrors = false, - focusedField = null, - visibleFormErrors, - } = props + const { propsForFields, formData, visibleFormErrors } = props const { t } = useTranslation(['application', 'form', 'protocol_steps']) const moduleLabwareOptions = useSelector(getHeaterShakerLabwareOptions) @@ -65,10 +59,8 @@ export function HeaterShakerTools(props: StepFormProps): JSX.Element { 'form:step_edit_form.field.heaterShaker.temperature.toggleOff' )} formLevelError={getFormLevelError( - showFormErrors, 'targetHeaterShakerTemperature', - mappedErrorsToField, - focusedField + mappedErrorsToField )} /> diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/MagnetTools/index.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/MagnetTools/index.tsx index 2468923d9c2..5d0d54cd5ea 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/MagnetTools/index.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/MagnetTools/index.tsx @@ -32,11 +32,12 @@ import { } from '../../../../../../step-forms/selectors' import { getModulesOnDeckByType } from '../../../../../../ui/modules/utils' import { LINE_CLAMP_TEXT_STYLE } from '../../../../../../atoms' +import { getFormErrorsMappedToField, getFormLevelError } from '../../utils' import type { StepFormProps } from '../../types' export function MagnetTools(props: StepFormProps): JSX.Element { - const { propsForFields, formData } = props + const { propsForFields, formData, visibleFormErrors } = props const { t } = useTranslation(['application', 'form', 'protocol_steps']) const moduleLabwareOptions = useSelector(getMagneticLabwareOptions) const moduleEntities = useSelector(getModuleEntities) @@ -69,6 +70,9 @@ export function MagnetTools(props: StepFormProps): JSX.Element { }) : '' const engageHeightCaption = `${engageHeightMinMax} ${engageHeightDefault}` + + const mappedErrorsToField = getFormErrorsMappedToField(visibleFormErrors) + return ( diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/MixTools/index.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/MixTools/index.tsx index a319afc572a..aae66a5f762 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/MixTools/index.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/MixTools/index.tsx @@ -1,6 +1,5 @@ import { useSelector } from 'react-redux' import { useTranslation } from 'react-i18next' -import { useState } from 'react' import { DIRECTION_COLUMN, Divider, @@ -37,16 +36,24 @@ import { } from '../../PipetteFields' import { getBlowoutLocationOptionsForForm, + getFormErrorsMappedToField, + getFormLevelError, getLabwareFieldForPositioningField, } from '../../utils' import type { StepFormProps } from '../../types' export function MixTools(props: StepFormProps): JSX.Element { - const { propsForFields, formData, toolboxStep, visibleFormErrors } = props + const { + propsForFields, + formData, + toolboxStep, + visibleFormErrors, + tab, + setTab, + } = props const pipettes = useSelector(getPipetteEntities) const enableReturnTip = useSelector(getEnableReturnTip) const labwares = useSelector(getLabwareEntities) - const [tab, setTab] = useState<'aspirate' | 'dispense'>('aspirate') const { t, i18n } = useTranslation(['application', 'form']) const aspirateTab = { text: i18n.format(t('aspirate'), 'capitalize'), @@ -63,6 +70,7 @@ export function MixTools(props: StepFormProps): JSX.Element { setTab('dispense') }, } + const is96Channel = propsForFields.pipette.value != null && pipettes[String(propsForFields.pipette.value)].name === 'p1000_96' @@ -71,6 +79,8 @@ export function MixTools(props: StepFormProps): JSX.Element { const userSelectedDropTipLocation = labwares[String(propsForFields.dropTip_location.value)] != null + const mappedErrorsToField = getFormErrorsMappedToField(visibleFormErrors) + return toolboxStep === 0 ? ( @@ -81,7 +91,10 @@ export function MixTools(props: StepFormProps): JSX.Element { pipetteId={propsForFields.pipette.value} /> - + - error.dependentFields.includes('labware') + error.dependentFields.includes('wells') ) ?? false } + errorToShow={getFormLevelError('wells', mappedErrorsToField)} /> - + ) : null} @@ -238,6 +260,10 @@ export function MixTools(props: StepFormProps): JSX.Element { options={getBlowoutLocationOptionsForForm({ stepType: formData.stepType, })} + errorToShow={getFormLevelError( + 'blowout_location', + mappedErrorsToField + )} /> ) diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/MoveLabwareTools/index.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/MoveLabwareTools/index.tsx index fa71de6a2b4..8355ed6fa4d 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/MoveLabwareTools/index.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/MoveLabwareTools/index.tsx @@ -8,13 +8,14 @@ import { getAdditionalEquipment, getCurrentFormCanBeSaved, } from '../../../../../../step-forms/selectors' +import { getFormErrorsMappedToField, getFormLevelError } from '../../utils' import { MoveLabwareField } from './MoveLabwareField' import { LabwareLocationField } from './LabwareLocationField' import type { StepFormProps } from '../../types' export function MoveLabwareTools(props: StepFormProps): JSX.Element { - const { propsForFields } = props + const { propsForFields, visibleFormErrors } = props const { t, i18n } = useTranslation(['application', 'form', 'tooltip']) const robotType = useSelector(getRobotType) const canSave = useSelector(getCurrentFormCanBeSaved) @@ -23,32 +24,40 @@ export function MoveLabwareTools(props: StepFormProps): JSX.Element { equipment => equipment?.name === 'gripper' ) + const mappedErrorsToField = getFormErrorsMappedToField(visibleFormErrors) + return ( {robotType === FLEX_ROBOT_TYPE ? ( - + <> + + + ) : null} - + - ) } diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/MoveLiquidTools/index.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/MoveLiquidTools/index.tsx index 95291484386..19661741298 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/MoveLiquidTools/index.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/MoveLiquidTools/index.tsx @@ -1,6 +1,5 @@ import { useSelector } from 'react-redux' import { useTranslation } from 'react-i18next' -import { useState } from 'react' import { DIRECTION_COLUMN, Divider, @@ -40,6 +39,8 @@ import { } from '../../PipetteFields' import { getBlowoutLocationOptionsForForm, + getFormErrorsMappedToField, + getFormLevelError, getLabwareFieldForPositioningField, } from '../../utils' import type { StepFieldName } from '../../../../../../form-types' @@ -50,10 +51,17 @@ const makeAddFieldNamePrefix = (prefix: string) => ( ): StepFieldName => `${prefix}_${fieldName}` export function MoveLiquidTools(props: StepFormProps): JSX.Element { - const { toolboxStep, propsForFields, formData, visibleFormErrors } = props + const { + toolboxStep, + propsForFields, + formData, + visibleFormErrors, + setShowFormErrorsAndWarnings, + tab, + setTab, + } = props const { t, i18n } = useTranslation(['protocol_steps', 'form']) const { path } = formData - const [tab, setTab] = useState<'aspirate' | 'dispense'>('aspirate') const additionalEquipmentEntities = useSelector( getAdditionalEquipmentEntities ) @@ -93,6 +101,7 @@ export function MoveLiquidTools(props: StepFormProps): JSX.Element { isActive: tab === 'aspirate', onClick: () => { setTab('aspirate') + setShowFormErrorsAndWarnings?.(false) }, } const dispenseTab = { @@ -101,11 +110,14 @@ export function MoveLiquidTools(props: StepFormProps): JSX.Element { isActive: tab === 'dispense', onClick: () => { setTab('dispense') + setShowFormErrorsAndWarnings?.(false) }, } const hideWellOrderField = tab === 'dispense' && (isWasteChuteSelected || isTrashBinSelected) + const mappedErrorsToField = getFormErrorsMappedToField(visibleFormErrors) + return toolboxStep === 0 ? ( @@ -117,9 +129,15 @@ export function MoveLiquidTools(props: StepFormProps): JSX.Element { pipetteId={propsForFields.pipette.value} /> - + - + - + {isDisposalLocation ? null : ( )} @@ -290,6 +313,10 @@ export function MoveLiquidTools(props: StepFormProps): JSX.Element { title={t('protocol_steps:mix_volume')} {...propsForFields[`${tab}_mix_volume`]} units={t('application:units.microliter')} + errorToShow={getFormLevelError( + `${tab}_mix_volume`, + mappedErrorsToField + )} /> ) : null} @@ -324,6 +355,10 @@ export function MoveLiquidTools(props: StepFormProps): JSX.Element { title={t('protocol_steps:delay_duration')} {...propsForFields[`${tab}_delay_seconds`]} units={t('application:units.seconds')} + errorToShow={getFormLevelError( + `${tab}_delay_seconds`, + mappedErrorsToField + )} /> ) : null} diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/PauseTools/index.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/PauseTools/index.tsx index 98175175218..07d80908d0b 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/PauseTools/index.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/PauseTools/index.tsx @@ -37,8 +37,6 @@ export function PauseTools(props: StepFormProps): JSX.Element { const { propsForFields, visibleFormErrors, - focusedField, - showFormErrors, setShowFormErrorsAndWarnings, } = props @@ -84,6 +82,10 @@ export function PauseTools(props: StepFormProps): JSX.Element { const mappedErrorsToField = getFormErrorsMappedToField(visibleFormErrors) + const formLevelErrorsWithoutField = visibleFormErrors.filter( + error => error.dependentFields.length === 0 + ) + return ( <> @@ -133,105 +135,133 @@ export function PauseTools(props: StepFormProps): JSX.Element { largeDesktopBorderRadius disabled={!pauseUntilModuleEnabled} /> + {formLevelErrorsWithoutField.map(error => ( + + {error.title} + + ))} - - - {pauseAction === PAUSE_UNTIL_TIME ? ( + {pauseAction != null ? ( + <> + {' '} + - - - + {pauseAction === PAUSE_UNTIL_TIME ? ( + + + + + + ) : null} + {pauseAction === PAUSE_UNTIL_TEMP ? ( + <> + + + {i18n.format( + t( + 'form:step_edit_form.field.moduleActionLabware.label' + ), + 'capitalize' + )} + + { + propsForFields.moduleId.updateValue(value) + }} + currentOption={ + moduleOptions.find( + option => + option.value === propsForFields.moduleId.value + ) ?? { name: '', value: '' } + } + dropdownType="neutral" + width="100%" + error={getFormLevelError( + 'moduleId', + mappedErrorsToField + )} + /> + + + + + + ) : null} - ) : null} - {pauseAction === PAUSE_UNTIL_TEMP ? ( - <> - - - {i18n.format( - t('form:step_edit_form.field.moduleActionLabware.label'), - 'capitalize' - )} - - { - propsForFields.moduleId.updateValue(value) - }} - currentOption={ - moduleOptions.find( - option => option.value === propsForFields.moduleId.value - ) ?? { name: '', value: '' } - } - dropdownType="neutral" - width="100%" - /> - - + - - - - ) : null} - - - - {i18n.format( - t('form:step_edit_form.field.pauseMessage.label'), - 'capitalize' - )} - - ) => { - propsForFields.pauseMessage.updateValue(e.currentTarget.value) - }} - height="7rem" - /> - + {i18n.format( + t('form:step_edit_form.field.pauseMessage.label'), + 'capitalize' + )} + + ) => { + propsForFields.pauseMessage.updateValue( + e.currentTarget.value + ) + }} + height="7rem" + /> + + + ) : null} diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/TemperatureTools/index.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/TemperatureTools/index.tsx index cc7eddf8c32..c5d03a44afa 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/TemperatureTools/index.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/TemperatureTools/index.tsx @@ -5,26 +5,23 @@ import { COLORS, DIRECTION_COLUMN, Flex, - RadioButton, SPACING, } from '@opentrons/components' -import { - getTemperatureLabwareOptions, - getTemperatureModuleIds, -} from '../../../../../../ui/modules/selectors' +import { getTemperatureLabwareOptions } from '../../../../../../ui/modules/selectors' import { DropdownStepFormField, - InputStepFormField, + ToggleExpandStepFormField, } from '../../../../../../molecules' -import type { ChangeEvent } from 'react' +import { getFormErrorsMappedToField, getFormLevelError } from '../../utils' + import type { StepFormProps } from '../../types' export function TemperatureTools(props: StepFormProps): JSX.Element { - const { propsForFields, formData } = props + const { propsForFields, formData, visibleFormErrors } = props const { t } = useTranslation(['application', 'form', 'protocol_steps']) const moduleLabwareOptions = useSelector(getTemperatureLabwareOptions) - const temperatureModuleIds = useSelector(getTemperatureModuleIds) - const { setTemperature, moduleId } = formData + + const mappedErrorsToField = getFormErrorsMappedToField(visibleFormErrors) return ( @@ -34,57 +31,24 @@ export function TemperatureTools(props: StepFormProps): JSX.Element { title={t('protocol_steps:module')} /> - {temperatureModuleIds != null - ? temperatureModuleIds.map(id => - id === moduleId ? ( - - - ) => { - propsForFields.setTemperature.updateValue( - e.currentTarget.value - ) - }} - buttonLabel={t( - 'form:step_edit_form.field.setTemperature.options.true' - )} - buttonValue="true" - isSelected={propsForFields.setTemperature.value === 'true'} - /> - - {setTemperature === 'true' && ( - - )} - - ) => { - propsForFields.setTemperature.updateValue( - e.currentTarget.value - ) - }} - buttonLabel={t( - 'form:step_edit_form.field.setTemperature.options.false' - )} - buttonValue="false" - isSelected={propsForFields.setTemperature.value === 'false'} - /> - - - ) : null - ) - : null} + + + ) } diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/ThermocyclerTools/ProfileSettings.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/ThermocyclerTools/ProfileSettings.tsx index 59d94469fd1..dc343ce693e 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/ThermocyclerTools/ProfileSettings.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/ThermocyclerTools/ProfileSettings.tsx @@ -18,12 +18,7 @@ interface ProfileSettingsProps { focusedField?: string | null } export function ProfileSettings(props: ProfileSettingsProps): JSX.Element { - const { - propsForFields, - showFormErrors, - visibleFormErrors, - focusedField, - } = props + const { propsForFields, visibleFormErrors } = props const mappedErrorsToField = getFormErrorsMappedToField(visibleFormErrors) @@ -43,12 +38,7 @@ export function ProfileSettings(props: ProfileSettingsProps): JSX.Element { units={t('units.microliter')} padding="0" showTooltip={false} - formLevelError={getFormLevelError( - showFormErrors, - 'profileVolume', - mappedErrorsToField, - focusedField - )} + formLevelError={getFormLevelError('profileVolume', mappedErrorsToField)} /> diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/ThermocyclerTools/ThermocyclerState.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/ThermocyclerTools/ThermocyclerState.tsx index 0b00c140f65..024c22c0e62 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/ThermocyclerTools/ThermocyclerState.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/ThermocyclerTools/ThermocyclerState.tsx @@ -33,8 +33,6 @@ export function ThermocyclerState(props: ThermocyclerStateProps): JSX.Element { formData, isHold = false, visibleFormErrors, - showFormErrors = true, - focusedField, } = props const { i18n, t } = useTranslation(['application', 'form']) @@ -83,12 +81,7 @@ export function ThermocyclerState(props: ThermocyclerStateProps): JSX.Element { isSelected={formData[blockFieldActive] === true} onLabel={t('form:step_edit_form.field.heaterShaker.shaker.toggleOn')} offLabel={t('form:step_edit_form.field.heaterShaker.shaker.toggleOff')} - formLevelError={getFormLevelError( - showFormErrors, - blockTempField, - mappedErrorsToField, - focusedField - )} + formLevelError={getFormLevelError(blockTempField, mappedErrorsToField)} /> { }, }, showFormErrors: false, + tab: 'aspirate', + setTab: vi.fn(), } vi.mocked(getMagneticLabwareOptions).mockReturnValue([ { name: 'mock labware in mock module in slot abc', value: 'mockValue' }, diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/__tests__/TemperatureTools.test.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/__tests__/TemperatureTools.test.tsx index 498e6b2e1db..904377f66f4 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/__tests__/TemperatureTools.test.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/__tests__/TemperatureTools.test.tsx @@ -72,6 +72,8 @@ describe('TemperatureTools', () => { }, }, showFormErrors: false, + tab: 'aspirate', + setTab: vi.fn(), } vi.mocked(getTemperatureModuleIds).mockReturnValue(['mockId']) @@ -85,9 +87,7 @@ describe('TemperatureTools', () => { it('renders a temperature module form with 1 module', () => { render(props) - screen.getByText('Module') + screen.getByText('Module state') screen.getByText('mock module') - screen.getByText('Deactivate module') - screen.getByText('Change to temperature') }) }) diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/__tests__/utils.test.ts b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/__tests__/utils.test.ts index 6007eae6d0c..1f79fe88440 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/__tests__/utils.test.ts +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/__tests__/utils.test.ts @@ -122,26 +122,16 @@ describe('getFormErrorsMappedToField', () => { }) describe('getFormLevelError', () => { - it('shows form-level error at field when field is not focused and showAtField is true', () => { - const result = getFormLevelError(true, 'field1', MAPPED_ERRORS) + it('shows form-level error at field when showAtField is true', () => { + const result = getFormLevelError('field1', MAPPED_ERRORS) expect(result).toEqual('form level error title') }) - it('shows no form-level error at field when field is focused and showAtField is true', () => { - const result = getFormLevelError(true, 'field1', MAPPED_ERRORS, 'field1') - expect(result).toBeNull() - }) - - it('shows no form-level error at field when field is not focused and showAtField is false', () => { - const result = getFormLevelError( - true, - 'field1', - { - ...MAPPED_ERRORS, - field1: { ...MAPPED_ERRORS.field1, showAtField: false }, - }, - 'field2' - ) + it('shows no form-level error at field when showAtField is false', () => { + const result = getFormLevelError('field1', { + ...MAPPED_ERRORS, + field1: { ...MAPPED_ERRORS.field1, showAtField: false }, + }) expect(result).toBeNull() }) }) diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/types.ts b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/types.ts index f0bd6970e73..c2d50cfbcb5 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/types.ts +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/types.ts @@ -20,6 +20,7 @@ export interface FieldProps { export type FieldPropsByName = Record // Shared props across all step forms +export type LiquidHandlingTab = 'aspirate' | 'dispense' export interface StepFormProps { formData: FormData focusHandlers: FocusHandlers @@ -29,4 +30,6 @@ export interface StepFormProps { showFormErrors: boolean focusedField?: string | null setShowFormErrorsAndWarnings?: React.Dispatch> + tab: LiquidHandlingTab + setTab: React.Dispatch> } diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/utils.ts b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/utils.ts index 563308f1238..3821d0ba49d 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/utils.ts +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/utils.ts @@ -104,20 +104,33 @@ export const getDirtyFields = ( // exclude form "metadata" (not really fields) return without(dirtyFields, 'stepType', 'id') } + +export const getIsErrorOnCurrentPage = (args: { + errors: StepFormErrors + page: number +}): boolean => { + const { errors, page = 0 } = args + return errors.some(error => error.page == null || error.page === page) +} + export const getVisibleFormErrors = (args: { focusedField?: string | null dirtyFields: string[] errors: StepFormErrors + showErrors?: boolean + page: number }): StepFormErrors => { - const { focusedField, dirtyFields, errors } = args + const { focusedField, errors, page = 0, showErrors } = args + return errors.filter(error => { const dependentFieldsAreNotFocused = !error.dependentFields.includes( // @ts-expect-error(sa, 2021-6-22): focusedField might be undefined focusedField ) - const dependentFieldsAreDirty = - difference(error.dependentFields, dirtyFields).length === 0 - return dependentFieldsAreNotFocused && dependentFieldsAreDirty + + const isPageImplicated = error.page != null ? page === error.page : true + + return isPageImplicated && dependentFieldsAreNotFocused && showErrors }) } export const getVisibleFormWarnings = (args: { @@ -353,14 +366,10 @@ export const getFormErrorsMappedToField = ( } export const getFormLevelError = ( - showFormErrors: boolean, fieldName: string, - mappedErrorsToField: ErrorMappedToField, - focusedField?: string | null + mappedErrorsToField: ErrorMappedToField ): string | null => { - return showFormErrors && - focusedField !== fieldName && - mappedErrorsToField[fieldName] && + return mappedErrorsToField[fieldName] && mappedErrorsToField[fieldName].showAtField ? mappedErrorsToField[fieldName].title : null diff --git a/protocol-designer/src/steplist/fieldLevel/index.ts b/protocol-designer/src/steplist/fieldLevel/index.ts index 5440cda40e7..4d240fdd649 100644 --- a/protocol-designer/src/steplist/fieldLevel/index.ts +++ b/protocol-designer/src/steplist/fieldLevel/index.ts @@ -307,9 +307,6 @@ const stepFieldHelperMap: Record = { maskValue: composeMaskers(maskToFloat, trimDecimals(1)), castValue: Number, }, - setTemperature: { - getErrors: composeErrors(requiredField), - }, targetTemperature: { getErrors: composeErrors( minFieldValue(MIN_TEMP_MODULE_TEMP), diff --git a/protocol-designer/src/steplist/formLevel/errors.ts b/protocol-designer/src/steplist/formLevel/errors.ts index 5a2d71c1ff6..407d908ad72 100644 --- a/protocol-designer/src/steplist/formLevel/errors.ts +++ b/protocol-designer/src/steplist/formLevel/errors.ts @@ -55,6 +55,8 @@ export interface FormError { dependentFields: StepFieldName[] showAtField?: boolean showAtForm?: boolean + page?: number + tab?: 'aspirate' | 'dispense' } const INCOMPATIBLE_ASPIRATE_LABWARE: FormError = { title: 'Selected aspirate labware is incompatible with pipette', @@ -100,8 +102,10 @@ const MAGNET_ACTION_TYPE_REQUIRED: FormError = { dependentFields: ['magnetAction'], } const ENGAGE_HEIGHT_REQUIRED: FormError = { - title: 'Engage height is required', + title: 'Engage height required', dependentFields: ['magnetAction', 'engageHeight'], + showAtForm: false, + showAtField: true, } const ENGAGE_HEIGHT_MIN_EXCEEDED: FormError = { title: 'Specified distance is below module minimum', @@ -117,46 +121,52 @@ const MODULE_ID_REQUIRED: FormError = { dependentFields: ['moduleId'], } const TARGET_TEMPERATURE_REQUIRED: FormError = { - title: 'Temperature is required', + title: 'Temperature required', dependentFields: ['setTemperature', 'targetTemperature'], showAtForm: false, showAtField: true, } const PROFILE_VOLUME_REQUIRED: FormError = { - title: 'Volume is required', + title: 'Well volume required', dependentFields: ['thermocyclerFormType', 'profileVolume'], showAtForm: false, showAtField: true, + page: 1, } const PROFILE_LID_TEMPERATURE_REQUIRED: FormError = { - title: 'Temperature is required', + title: 'Temperature required', dependentFields: ['thermocyclerFormType', 'profileTargetLidTemp'], showAtForm: false, showAtField: true, + page: 1, } const LID_TEMPERATURE_REQUIRED: FormError = { - title: 'Temperature is required', + title: 'Temperature required', dependentFields: ['lidIsActive', 'lidTargetTemp'], showAtForm: false, showAtField: true, + page: 1, } const BLOCK_TEMPERATURE_REQUIRED: FormError = { - title: 'Temperature is required', + title: 'Temperature required', dependentFields: ['blockIsActive', 'blockTargetTemp'], showAtForm: false, showAtField: true, + page: 1, } const BLOCK_TEMPERATURE_HOLD_REQUIRED: FormError = { - title: 'Temperature is required', + title: 'Temperature required', dependentFields: ['blockIsActiveHold', 'blockTargetTempHold'], showAtForm: false, showAtField: true, + page: 1, } const LID_TEMPERATURE_HOLD_REQUIRED: FormError = { - title: 'Temperature is required', + title: 'Temperature required', dependentFields: ['lidIsActiveHold', 'lidTargetTempHold'], showAtForm: false, showAtField: true, + page: 1, } const SHAKE_SPEED_REQUIRED: FormError = { title: 'Speed required', @@ -170,6 +180,18 @@ const SHAKE_TIME_REQUIRED: FormError = { showAtForm: false, showAtField: true, } +const PAUSE_ACTION_REQUIRED: FormError = { + title: 'Pause type required', + dependentFields: [], + showAtForm: false, + showAtField: true, +} +const PAUSE_MODULE_REQUIRED: FormError = { + title: 'Select a module', + dependentFields: ['moduleId', 'pauseAction'], + showAtForm: false, + showAtField: true, +} const PAUSE_TEMP_REQUIRED: FormError = { title: 'Pause temperature required', dependentFields: ['pauseTemperature', 'pauseAction'], @@ -192,7 +214,7 @@ const HS_TEMPERATURE_REQUIRED: FormError = { showAtField: true, } const LABWARE_TO_MOVE_REQUIRED: FormError = { - title: 'Labware to move required', + title: 'Labware required', dependentFields: ['labware'], showAtForm: false, showAtField: true, @@ -203,6 +225,134 @@ const NEW_LABWARE_LOCATION_REQUIRED: FormError = { showAtForm: false, showAtField: true, } +const ASPIRATE_WELLS_REQUIRED: FormError = { + title: 'Choose wells', + dependentFields: ['aspirate_wells'], + showAtForm: false, + showAtField: true, + page: 0, +} +const DISPENSE_WELLS_REQUIRED: FormError = { + title: 'Choose wells', + dependentFields: ['dispense_wells'], + showAtForm: false, + showAtField: true, + page: 0, +} +const MIX_WELLS_REQUIRED: FormError = { + title: 'Choose wells', + dependentFields: ['wells'], + showAtForm: false, + showAtField: true, + page: 0, +} +const VOLUME_REQUIRED: FormError = { + title: 'Volume required', + dependentFields: ['volume'], + showAtForm: false, + showAtField: true, + page: 0, +} +const TIMES_REQUIRED: FormError = { + title: 'Repetitions required', + dependentFields: ['times'], + showAtForm: false, + showAtField: true, + page: 0, +} +const ASPIRATE_LABWARE_REQUIRED: FormError = { + title: 'Labware required', + dependentFields: ['aspirate_labware'], + showAtForm: false, + showAtField: true, + page: 0, +} +const DISPENSE_LABWARE_REQUIRED: FormError = { + title: 'Labware required', + dependentFields: ['dispense_labware'], + showAtForm: false, + showAtField: true, + page: 0, +} +const MIX_LABWARE_REQUIRED: FormError = { + title: 'Labware required', + dependentFields: ['labware'], + showAtForm: false, + showAtField: true, + page: 0, +} +const ASPIRATE_MIX_TIMES_REQUIRED: FormError = { + title: 'Repititions required', + dependentFields: ['aspirate_mix_times'], + showAtForm: false, + showAtField: true, + page: 1, + tab: 'aspirate', +} +const ASPIRATE_MIX_VOLUME_REQUIRED: FormError = { + title: 'Volume required', + dependentFields: ['aspirate_mix_checkbox', 'aspirate_mix_volume'], + showAtForm: false, + showAtField: true, + page: 1, + tab: 'aspirate', +} +const ASPIRATE_DELAY_DURATION_REQUIRED: FormError = { + title: 'Duration required', + dependentFields: ['aspirate_delay_checkbox', 'aspirate_delay_seconds'], + showAtForm: false, + showAtField: true, + page: 1, + tab: 'aspirate', +} +const ASPIRATE_AIRGAP_VOLUME_REQUIRED: FormError = { + title: 'Volume required', + dependentFields: ['aspirate_airGap_checkbox', 'aspirate_airGap_volume'], + showAtForm: false, + showAtField: true, + page: 1, + tab: 'aspirate', +} +const DISPENSE_MIX_TIMES_REQUIRED: FormError = { + title: 'Repititions required', + dependentFields: ['dispense_mix_checkbox', 'dispense_mix_times'], + showAtForm: false, + showAtField: true, + page: 1, + tab: 'dispense', +} +const DISPENSE_MIX_VOLUME_REQUIRED: FormError = { + title: 'Volume required', + dependentFields: ['dispense_mix_checkbox', 'dispense_mix_volume'], + showAtForm: false, + showAtField: true, + page: 1, + tab: 'dispense', +} +const DISPENSE_DELAY_DURATION_REQUIRED: FormError = { + title: 'Duration required', + dependentFields: ['dispense_delay_checkbox', 'dispense_delay_seconds'], + showAtForm: false, + showAtField: true, + page: 1, + tab: 'dispense', +} +const DISPENSE_AIRGAP_VOLUME_REQUIRED: FormError = { + title: 'Volume required', + dependentFields: ['dispense_airGap_checkbox', 'dispense_airGap_volume'], + showAtForm: false, + showAtField: true, + page: 1, + tab: 'dispense', +} +const BLOWOUT_LOCATION_REQUIRED: FormError = { + title: 'Volume required', + dependentFields: ['blowout_checkbox', 'blowout_location'], + showAtForm: false, + showAtField: true, + page: 1, + tab: 'dispense', +} export interface HydratedFormData { [key: string]: any @@ -357,7 +507,7 @@ export const targetTemperatureRequired = ( fields: HydratedFormData ): FormError | null => { const { setTemperature, targetTemperature } = fields - return setTemperature === 'true' && !targetTemperature + return setTemperature && !targetTemperature ? TARGET_TEMPERATURE_REQUIRED : null } @@ -429,6 +579,12 @@ export const temperatureRequired = ( ? HS_TEMPERATURE_REQUIRED : null } +export const pauseActionRequired = ( + fields: HydratedFormData +): FormError | null => { + const { pauseAction } = fields + return pauseAction == null ? PAUSE_ACTION_REQUIRED : null +} export const pauseTimeRequired = ( fields: HydratedFormData ): FormError | null => { @@ -437,6 +593,14 @@ export const pauseTimeRequired = ( ? PAUSE_TIME_REQUIRED : null } +export const pauseModuleRequired = ( + fields: HydratedFormData +): FormError | null => { + const { moduleId, pauseAction } = fields + return pauseAction === PAUSE_UNTIL_TEMP && moduleId == null + ? PAUSE_MODULE_REQUIRED + : null +} export const pauseTemperatureRequired = ( fields: HydratedFormData ): FormError | null => { @@ -455,8 +619,9 @@ export const newLabwareLocationRequired = ( fields: HydratedFormData ): FormError | null => { const { newLocation } = fields - console.log(fields) - return newLocation == null ? NEW_LABWARE_LOCATION_REQUIRED : null + return newLocation == null && newLocation.slotName == null + ? NEW_LABWARE_LOCATION_REQUIRED + : null } export const engageHeightRangeExceeded = ( fields: HydratedFormData @@ -485,6 +650,131 @@ export const engageHeightRangeExceeded = ( return null } +export const aspirateWellsRequired = ( + fields: HydratedFormData +): FormError | null => { + const { aspirate_wells } = fields + return aspirate_wells == null || aspirate_wells.length === 0 + ? ASPIRATE_WELLS_REQUIRED + : null +} +export const dispenseWellsRequired = ( + fields: HydratedFormData +): FormError | null => { + const { dispense_wells, dispense_labware } = fields + return (dispense_wells == null || dispense_wells.length === 0) && + !( + dispense_labware != null && + (dispense_labware.name === 'wasteChute' || + dispense_labware.name === 'trashBin') + ) + ? DISPENSE_WELLS_REQUIRED + : null +} +export const mixWellsRequired = ( + fields: HydratedFormData +): FormError | null => { + const { wells } = fields + return wells == null || wells.length === 0 ? MIX_WELLS_REQUIRED : null +} +export const volumeRequired = (fields: HydratedFormData): FormError | null => { + const { volume } = fields + return !volume ? VOLUME_REQUIRED : null +} +export const timesRequired = (fields: HydratedFormData): FormError | null => { + const { times } = fields + return !times ? TIMES_REQUIRED : null +} +export const aspirateLabwareRequired = ( + fields: HydratedFormData +): FormError | null => { + const { aspirate_labware } = fields + return aspirate_labware == null ? ASPIRATE_LABWARE_REQUIRED : null +} +export const dispenseLabwareRequired = ( + fields: HydratedFormData +): FormError | null => { + const { dispense_labware } = fields + return dispense_labware == null ? DISPENSE_LABWARE_REQUIRED : null +} +export const mixLabwareRequired = ( + fields: HydratedFormData +): FormError | null => { + const { labware } = fields + return labware == null ? MIX_LABWARE_REQUIRED : null +} +export const aspirateMixTimesRequired = ( + fields: HydratedFormData +): FormError | null => { + const { aspirate_mix_checkbox, aspirate_mix_times } = fields + return aspirate_mix_checkbox && !aspirate_mix_times + ? ASPIRATE_MIX_TIMES_REQUIRED + : null +} +export const aspirateMixVolumeRequired = ( + fields: HydratedFormData +): FormError | null => { + const { aspirate_mix_checkbox, aspirate_mix_volume } = fields + return aspirate_mix_checkbox && !aspirate_mix_volume + ? ASPIRATE_MIX_VOLUME_REQUIRED + : null +} +export const aspirateDelayDurationRequired = ( + fields: HydratedFormData +): FormError | null => { + const { aspirate_delay_seconds, aspirate_delay_checkbox } = fields + return aspirate_delay_checkbox && !aspirate_delay_seconds + ? ASPIRATE_DELAY_DURATION_REQUIRED + : null +} +export const aspirateAirGapVolumeRequired = ( + fields: HydratedFormData +): FormError | null => { + const { aspirate_airGap_checkbox, aspirate_airGap_volume } = fields + return aspirate_airGap_checkbox && !aspirate_airGap_volume + ? ASPIRATE_AIRGAP_VOLUME_REQUIRED + : null +} +export const dispenseMixTimesRequired = ( + fields: HydratedFormData +): FormError | null => { + const { dispense_mix_checkbox, dispense_mix_times } = fields + return dispense_mix_checkbox && !dispense_mix_times + ? DISPENSE_MIX_TIMES_REQUIRED + : null +} +export const dispenseMixVolumeRequired = ( + fields: HydratedFormData +): FormError | null => { + const { dispense_mix_checkbox, dispense_mix_volume } = fields + return dispense_mix_checkbox && !dispense_mix_volume + ? DISPENSE_MIX_VOLUME_REQUIRED + : null +} +export const dispenseDelayDurationRequired = ( + fields: HydratedFormData +): FormError | null => { + const { dispense_delay_seconds, dispense_delay_checkbox } = fields + return dispense_delay_checkbox && !dispense_delay_seconds + ? DISPENSE_DELAY_DURATION_REQUIRED + : null +} +export const dispenseAirGapVolumeRequired = ( + fields: HydratedFormData +): FormError | null => { + const { dispense_airGap_checkbox, dispense_airGap_volume } = fields + return dispense_airGap_checkbox && !dispense_airGap_volume + ? DISPENSE_AIRGAP_VOLUME_REQUIRED + : null +} +export const blowoutLocationRequired = ( + fields: HydratedFormData +): FormError | null => { + const { blowout_checkbox, blowout_location } = fields + return blowout_checkbox && !blowout_location + ? BLOWOUT_LOCATION_REQUIRED + : null +} /******************* ** Helpers ** diff --git a/protocol-designer/src/steplist/formLevel/index.ts b/protocol-designer/src/steplist/formLevel/index.ts index dd7b9fea36c..937d8edee64 100644 --- a/protocol-designer/src/steplist/formLevel/index.ts +++ b/protocol-designer/src/steplist/formLevel/index.ts @@ -21,6 +21,27 @@ import { shakeTimeRequired, pauseTimeRequired, pauseTemperatureRequired, + newLabwareLocationRequired, + labwareToMoveRequired, + pauseModuleRequired, + aspirateLabwareRequired, + dispenseLabwareRequired, + aspirateMixVolumeRequired, + aspirateMixTimesRequired, + aspirateDelayDurationRequired, + aspirateAirGapVolumeRequired, + dispenseMixTimesRequired, + dispenseDelayDurationRequired, + dispenseAirGapVolumeRequired, + dispenseMixVolumeRequired, + blowoutLocationRequired, + aspirateWellsRequired, + dispenseWellsRequired, + mixWellsRequired, + mixLabwareRequired, + volumeRequired, + timesRequired, + pauseActionRequired, } from './errors' import { @@ -63,20 +84,52 @@ const stepFormHelperMap: Partial> = { ), }, mix: { - getErrors: composeErrors(incompatibleLabware, volumeTooHigh), + getErrors: composeErrors( + incompatibleLabware, + volumeTooHigh, + mixWellsRequired, + mixLabwareRequired, + volumeRequired, + timesRequired, + aspirateDelayDurationRequired, + dispenseDelayDurationRequired, + blowoutLocationRequired + ), getWarnings: composeWarnings( belowPipetteMinimumVolume, mixTipPositionInTube ), }, pause: { - getErrors: composeErrors(pauseTimeRequired, pauseTemperatureRequired), + getErrors: composeErrors( + pauseActionRequired, + pauseTimeRequired, + pauseTemperatureRequired, + pauseModuleRequired + ), + }, + moveLabware: { + getErrors: composeErrors(labwareToMoveRequired, newLabwareLocationRequired), }, moveLiquid: { getErrors: composeErrors( incompatibleAspirateLabware, incompatibleDispenseLabware, - wellRatioMoveLiquid + wellRatioMoveLiquid, + volumeRequired, + aspirateLabwareRequired, + dispenseLabwareRequired, + aspirateMixTimesRequired, + aspirateMixVolumeRequired, + aspirateDelayDurationRequired, + aspirateAirGapVolumeRequired, + dispenseMixTimesRequired, + dispenseMixVolumeRequired, + dispenseDelayDurationRequired, + dispenseAirGapVolumeRequired, + blowoutLocationRequired, + aspirateWellsRequired, + dispenseWellsRequired ), getWarnings: composeWarnings( belowPipetteMinimumVolume, From 8784b7578f7c187808a485615116854fa120029a Mon Sep 17 00:00:00 2001 From: Jethary Alcid <66035149+jerader@users.noreply.github.com> Date: Thu, 7 Nov 2024 09:35:42 -0500 Subject: [PATCH 77/81] =?UTF-8?q?feat(protocol-designer):=20plug=20in=20so?= =?UTF-8?q?ftware=20doc=20link=20and=20robot=20required=E2=80=A6=20(#16702?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit … version closes AUTH-998 RQA-3491 AUTH-987 --- .../src/assets/localization/en/modal.json | 3 ++- .../src/organisms/Alerts/KnowledgeLink.tsx | 17 ------------ .../src/organisms/Alerts/linkConstants.ts | 16 ------------ .../AnnouncementModal/announcements.tsx | 26 ++++++++++++++++--- .../src/organisms/KnowledgeLink.tsx | 17 ++++++++++++ protocol-designer/src/organisms/index.ts | 1 + .../DeckSetup/MagnetModuleChangeContent.tsx | 10 ++----- .../ProtocolOverview/ProtocolMetadata.tsx | 2 +- .../__tests__/ProtocolMetadata.test.tsx | 2 +- .../src/steplist/formLevel/warnings.tsx | 20 +++----------- 10 files changed, 50 insertions(+), 64 deletions(-) delete mode 100644 protocol-designer/src/organisms/Alerts/KnowledgeLink.tsx delete mode 100644 protocol-designer/src/organisms/Alerts/linkConstants.ts create mode 100644 protocol-designer/src/organisms/KnowledgeLink.tsx diff --git a/protocol-designer/src/assets/localization/en/modal.json b/protocol-designer/src/assets/localization/en/modal.json index 8b891c0f405..2c065e2d6b6 100644 --- a/protocol-designer/src/assets/localization/en/modal.json +++ b/protocol-designer/src/assets/localization/en/modal.json @@ -55,7 +55,8 @@ "body1": "Welcome to Protocol Designer 8.2.0!", "body2": "We’re excited to release the new Opentrons Protocol Designer, now with a fresh redesign! Enjoy the same functionality with the added ability to:", "body3": "Add multiple Heater-Shaker Modules and Magnetic Blocks to the deck (Flex only).", - "body4": "All protocols now require Opentrons App version 8.0.0+ to run." + "body4": "All protocols now require Opentrons App version 8.2.0+ to run.", + "body5": "For more information, see the Protocol Designer Instruction Manual." } }, "labware_selection": { diff --git a/protocol-designer/src/organisms/Alerts/KnowledgeLink.tsx b/protocol-designer/src/organisms/Alerts/KnowledgeLink.tsx deleted file mode 100644 index f29919ba6ce..00000000000 --- a/protocol-designer/src/organisms/Alerts/KnowledgeLink.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import type * as React from 'react' -import { Link } from '@opentrons/components' -import { links } from './linkConstants' - -interface KnowledgeLinkProps { - to: keyof typeof links - children: React.ReactNode -} - -export function KnowledgeLink(props: KnowledgeLinkProps): JSX.Element { - const { to, children } = props - return ( - - {children} - - ) -} diff --git a/protocol-designer/src/organisms/Alerts/linkConstants.ts b/protocol-designer/src/organisms/Alerts/linkConstants.ts deleted file mode 100644 index 13b251961bd..00000000000 --- a/protocol-designer/src/organisms/Alerts/linkConstants.ts +++ /dev/null @@ -1,16 +0,0 @@ -export const KNOWLEDGEBASE_ROOT_URL = - 'https://support.opentrons.com/s/protocol-designer' - -export const links = { - airGap: `https://support.opentrons.com/en/articles/4398106-air-gap`, - multiDispense: `https://support.opentrons.com/en/articles/4170341-paths`, - protocolSteps: `https://support.opentrons.com/s/protocol-designer?tabset-92ba3=2`, - customLabware: `https://support.opentrons.com/en/articles/3136504-creating-custom-labware-definitions`, - recommendedLabware: - 'https://support.opentrons.com/s/article/What-labware-can-I-use-with-my-modules', - pipetteGen1MultiModuleCollision: - 'https://support.opentrons.com/en/articles/4168741-module-placement', - betaReleases: `https://support.opentrons.com/en/articles/3854833-opentrons-beta-software-releases`, - magneticModuleGenerations: - 'http://support.opentrons.com/en/articles/1820112-magnetic-module', -} as const diff --git a/protocol-designer/src/organisms/AnnouncementModal/announcements.tsx b/protocol-designer/src/organisms/AnnouncementModal/announcements.tsx index b06dad7d704..edbc801351a 100644 --- a/protocol-designer/src/organisms/AnnouncementModal/announcements.tsx +++ b/protocol-designer/src/organisms/AnnouncementModal/announcements.tsx @@ -1,11 +1,12 @@ -import type * as React from 'react' import { Trans, useTranslation } from 'react-i18next' import { css } from 'styled-components' import { + COLORS, DIRECTION_COLUMN, Flex, JUSTIFY_CENTER, JUSTIFY_SPACE_AROUND, + Link as LinkComponent, SPACING, StyledText, } from '@opentrons/components' @@ -19,14 +20,16 @@ import thermocyclerGen2 from '../../assets/images/modules/thermocycler_gen2.png' import liquidEnhancements from '../../assets/images/announcements/liquid-enhancements.gif' import opentronsFlex from '../../assets/images/OpentronsFlex.png' import deckConfigutation from '../../assets/images/deck_configuration.png' +import { DOC_URL } from '../KnowledgeLink' +import type { ReactNode } from 'react' import styles from './AnnouncementModal.module.css' export interface Announcement { announcementKey: string - image: React.ReactNode | null + image: ReactNode | null heading: string - message: React.ReactNode + message: ReactNode } const batchEditStyles = css` @@ -323,7 +326,22 @@ export const useAnnouncements = (): Announcement[] => { }} - i18nKey={'announcements.redesign.body4'} + i18nKey="announcements.redesign.body4" + /> + + + + ), + }} + i18nKey="announcements.redesign.body5" /> diff --git a/protocol-designer/src/organisms/KnowledgeLink.tsx b/protocol-designer/src/organisms/KnowledgeLink.tsx new file mode 100644 index 00000000000..8398539db57 --- /dev/null +++ b/protocol-designer/src/organisms/KnowledgeLink.tsx @@ -0,0 +1,17 @@ +import { Link } from '@opentrons/components' +import type { ReactNode } from 'react' + +interface KnowledgeLinkProps { + children: ReactNode +} + +export const DOC_URL = 'https://docs.opentrons.com/protocol-designer/' + +export function KnowledgeLink(props: KnowledgeLinkProps): JSX.Element { + const { children } = props + return ( + + {children} + + ) +} diff --git a/protocol-designer/src/organisms/index.ts b/protocol-designer/src/organisms/index.ts index 08e1745bccf..72d3ae1ff92 100644 --- a/protocol-designer/src/organisms/index.ts +++ b/protocol-designer/src/organisms/index.ts @@ -11,6 +11,7 @@ export * from './FileUploadMessagesModal/' export * from './GateModal' export * from './IncompatibleTipsModal' export * from './Kitchen' +export * from './KnowledgeLink' export * from './LabwareUploadModal' export * from './PipetteInfoItem' export * from './ProtocolMetadataNav' diff --git a/protocol-designer/src/pages/Designer/DeckSetup/MagnetModuleChangeContent.tsx b/protocol-designer/src/pages/Designer/DeckSetup/MagnetModuleChangeContent.tsx index 0a5e9c18471..3bf4e7de3a4 100644 --- a/protocol-designer/src/pages/Designer/DeckSetup/MagnetModuleChangeContent.tsx +++ b/protocol-designer/src/pages/Designer/DeckSetup/MagnetModuleChangeContent.tsx @@ -2,10 +2,10 @@ import { useTranslation } from 'react-i18next' import { DIRECTION_COLUMN, Flex, - Link, SPACING, StyledText, } from '@opentrons/components' +import { KnowledgeLink } from '../../../organisms' export function MagnetModuleChangeContent(): JSX.Element { const { t } = useTranslation('starting_deck_state') @@ -26,13 +26,7 @@ export function MagnetModuleChangeContent(): JSX.Element { - {t('read_more_gen1_gen2')}{' '} - - {t('here')} - + {t('read_more_gen1_gen2')} {t('here')} diff --git a/protocol-designer/src/pages/ProtocolOverview/ProtocolMetadata.tsx b/protocol-designer/src/pages/ProtocolOverview/ProtocolMetadata.tsx index e24f016e07c..b29cdc1fbc6 100644 --- a/protocol-designer/src/pages/ProtocolOverview/ProtocolMetadata.tsx +++ b/protocol-designer/src/pages/ProtocolOverview/ProtocolMetadata.tsx @@ -14,7 +14,7 @@ import { import { BUTTON_LINK_STYLE } from '../../atoms' -const REQUIRED_APP_VERSION = '8.0.0' +const REQUIRED_APP_VERSION = '8.2.0' type MetadataInfo = Array<{ author?: string diff --git a/protocol-designer/src/pages/ProtocolOverview/__tests__/ProtocolMetadata.test.tsx b/protocol-designer/src/pages/ProtocolOverview/__tests__/ProtocolMetadata.test.tsx index 405bd946279..8df6988b1c4 100644 --- a/protocol-designer/src/pages/ProtocolOverview/__tests__/ProtocolMetadata.test.tsx +++ b/protocol-designer/src/pages/ProtocolOverview/__tests__/ProtocolMetadata.test.tsx @@ -45,7 +45,7 @@ describe('ProtocolMetadata', () => { screen.getByText('Protocol Metadata') screen.getByText('Edit') screen.getByText('Required app version') - screen.getByText('8.0.0 or higher') + screen.getByText('8.2.0 or higher') }) it('should render protocol metadata', () => { diff --git a/protocol-designer/src/steplist/formLevel/warnings.tsx b/protocol-designer/src/steplist/formLevel/warnings.tsx index ef9e5a62603..d40bf9b20af 100644 --- a/protocol-designer/src/steplist/formLevel/warnings.tsx +++ b/protocol-designer/src/steplist/formLevel/warnings.tsx @@ -1,5 +1,4 @@ import { getWellTotalVolume } from '@opentrons/shared-data' -import { KnowledgeBaseLink } from '../../components/KnowledgeBaseLink' import type { FormError } from './errors' import type { LabwareDefinition2 } from '@opentrons/shared-data' @@ -29,13 +28,8 @@ const belowMinAirGapVolumeWarning = (min: number): FormWarning => ({ const belowPipetteMinVolumeWarning = (min: number): FormWarning => ({ type: 'BELOW_PIPETTE_MINIMUM_VOLUME', title: `Disposal volume is below recommended minimum (${min} uL)`, - body: ( - <> - { - 'For accuracy in multi-dispense Transfers we recommend you use a disposal volume of at least the pipette`s minimum. Read more ' - } - - ), + body: + 'For accuracy in multi-dispense Transfers we recommend you use a disposal volume of at least the pipette`s minimum.', dependentFields: ['pipette', 'volume'], }) @@ -48,14 +42,8 @@ const overMaxWellVolumeWarning = (): FormWarning => ({ const belowMinDisposalVolumeWarning = (min: number): FormWarning => ({ type: 'BELOW_MIN_DISPOSAL_VOLUME', title: `Disposal volume is below recommended minimum (${min} uL)`, - body: ( - <> - { - 'For accuracy in multi-dispense Transfers we recommend you use a disposal volume of at least the pipette`s minimum. Read more ' - } - {'here'}. - - ), + body: + 'For accuracy in multi-dispense Transfers we recommend you use a disposal volume of at least the pipette`s minimum.', dependentFields: ['disposalVolume_volume', 'pipette'], }) From b1b4b30fcd4c244291497e62d817c2084b15adba Mon Sep 17 00:00:00 2001 From: Jamey Huffnagle Date: Thu, 7 Nov 2024 09:59:21 -0500 Subject: [PATCH 78/81] fix(app-shell, app-shell-odd): Fix devtools not working on built versions of desktop app/ODD (#16709) Works toward EXEC-392 --- app-shell-odd/src/main.ts | 5 ++++- app-shell/src/main.ts | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app-shell-odd/src/main.ts b/app-shell-odd/src/main.ts index ccb9ff61aa2..9eb17a016cc 100644 --- a/app-shell-odd/src/main.ts +++ b/app-shell-odd/src/main.ts @@ -197,7 +197,10 @@ function installDevtools(): void { log.debug('Installing devtools') - install(extensions, forceReinstall) + install(extensions, { + loadExtensionOptions: { allowFileAccess: true }, + forceDownload: forceReinstall, + }) .then(() => log.debug('Devtools extensions installed')) .catch((error: unknown) => { log.warn('Failed to install devtools extensions', { diff --git a/app-shell/src/main.ts b/app-shell/src/main.ts index 0f4ab41733b..e09b9d0ae4c 100644 --- a/app-shell/src/main.ts +++ b/app-shell/src/main.ts @@ -145,7 +145,10 @@ function installDevtools(): Promise { log.debug('Installing devtools') if (typeof install === 'function') { - return install(extensions, forceReinstall) + return install(extensions, { + loadExtensionOptions: { allowFileAccess: true }, + forceDownload: forceReinstall, + }) .then(() => log.debug('Devtools extensions installed')) .catch((error: unknown) => { log.warn('Failed to install devtools extensions', { From c8714076e13ae78c1b961c9a2bf7d53783256f4c Mon Sep 17 00:00:00 2001 From: Jethary Alcid <66035149+jerader@users.noreply.github.com> Date: Thu, 7 Nov 2024 10:10:58 -0500 Subject: [PATCH 79/81] fix(protocol-designer): liquids show up when zooming into slot (#16717) closes RQA-3524 --- .../DeckSetup/SelectedHoveredItems.tsx | 100 ++++++++++++------ .../__tests__/SelectedHoveredItems.test.tsx | 57 ++++++++-- 2 files changed, 114 insertions(+), 43 deletions(-) diff --git a/protocol-designer/src/pages/Designer/DeckSetup/SelectedHoveredItems.tsx b/protocol-designer/src/pages/Designer/DeckSetup/SelectedHoveredItems.tsx index 71f07b973e3..2f3d0b4323d 100644 --- a/protocol-designer/src/pages/Designer/DeckSetup/SelectedHoveredItems.tsx +++ b/protocol-designer/src/pages/Designer/DeckSetup/SelectedHoveredItems.tsx @@ -7,6 +7,8 @@ import { import { selectors } from '../../../labware-ingred/selectors' import { getOnlyLatestDefs } from '../../../labware-defs' import { getCustomLabwareDefsByURI } from '../../../labware-defs/selectors' +import { getInitialDeckSetup } from '../../../step-forms/selectors' +import { LabwareOnDeck } from '../../../components/DeckSetup/LabwareOnDeck' import { ModuleLabel } from './ModuleLabel' import { LabwareLabel } from '../LabwareLabel' import { FixtureRender } from './FixtureRender' @@ -48,20 +50,44 @@ export const SelectedHoveredItems = ( } = selectedSlotInfo const customLabwareDefs = useSelector(getCustomLabwareDefsByURI) const defs = getOnlyLatestDefs() - + const deckSetup = useSelector(getInitialDeckSetup) + const { labware, modules } = deckSetup + const matchingSelectedLabwareOnDeck = Object.values(labware).find(labware => { + const moduleUnderLabware = Object.values(modules).find( + mod => mod.id === labware.slot + ) + const matchingSlot = + moduleUnderLabware != null ? moduleUnderLabware.slot : labware.slot + return ( + matchingSlot === selectedSlot.slot && + labware.labwareDefURI === selectedLabwareDefUri + ) + }) + const matchingSelectedNestedLabwareOnDeck = Object.values(labware).find( + lw => { + const adapterUnderLabware = Object.values(labware).find( + lab => lab.id === lw.slot + ) + if (adapterUnderLabware == null) { + return + } + const moduleUnderLabware = Object.values(modules).find( + mod => mod.id === adapterUnderLabware.slot + ) + const matchingSlot = + moduleUnderLabware != null + ? moduleUnderLabware.slot + : adapterUnderLabware.slot + return ( + lw.labwareDefURI === selectedNestedLabwareDefUri && + matchingSlot === selectedSlot.slot + ) + } + ) const hoveredLabwareDef = hoveredLabware != null ? defs[hoveredLabware] ?? customLabwareDefs[hoveredLabware] ?? null : null - const selectedLabwareDef = - selectedLabwareDefUri != null - ? defs[selectedLabwareDefUri] ?? customLabwareDefs[selectedLabwareDefUri] - : null - const selectedNestedLabwareDef = - selectedNestedLabwareDefUri != null - ? defs[selectedNestedLabwareDefUri] ?? - customLabwareDefs[selectedNestedLabwareDefUri] - : null const orientation = slotPosition != null @@ -83,9 +109,9 @@ export const SelectedHoveredItems = ( } labwareInfos.push(selectedLabwareLabel) } - if (selectedNestedLabwareDef != null && hoveredLabware == null) { + if (matchingSelectedNestedLabwareOnDeck != null && hoveredLabware == null) { const selectedNestedLabwareLabel = { - text: selectedNestedLabwareDef.metadata.displayName, + text: matchingSelectedNestedLabwareOnDeck.def.metadata.displayName, isSelected: true, isLast: hoveredLabware == null, } @@ -132,19 +158,23 @@ export const SelectedHoveredItems = ( orientation={orientation} > <> - {selectedLabwareDef != null && + {matchingSelectedLabwareOnDeck != null && selectedModuleModel != null && hoveredLabware == null ? ( - - - + ) : null} - {selectedNestedLabwareDef != null && + {matchingSelectedNestedLabwareOnDeck != null && selectedModuleModel != null && hoveredLabware == null ? ( - - - + ) : null} {hoveredLabwareDef != null && selectedModuleModel != null ? ( @@ -165,41 +195,47 @@ export const SelectedHoveredItems = ( ) : null} ) : null} - {selectedLabwareDef != null && + {matchingSelectedLabwareOnDeck != null && slotPosition != null && selectedModuleModel == null && hoveredLabware == null ? ( <> - - - + {selectedNestedLabwareDefUri == null ? ( ) : null} ) : null} - {selectedNestedLabwareDef != null && + {matchingSelectedNestedLabwareOnDeck != null && slotPosition != null && selectedModuleModel == null && hoveredLabware == null ? ( <> - - - - {selectedLabwareDef != null ? ( + + {matchingSelectedLabwareOnDeck != null ? ( { const actual = await importOriginal() return { ...actual, - LabwareRender: vi.fn(), Module: vi.fn(), } }) @@ -43,6 +48,20 @@ describe('SelectedHoveredItems', () => { hoveredFixture: null, slotPosition: [0, 0, 0], } + vi.mocked(getInitialDeckSetup).mockReturnValue({ + modules: {}, + additionalEquipmentOnDeck: {}, + pipettes: {}, + labware: { + labware: { + id: 'mockId', + def: fixture24Tuberack as LabwareDefinition2, + labwareDefURI: 'fixture/fixture_universal_flat_bottom_adapter/1', + slot: 'D3', + }, + }, + }) + vi.mocked(LabwareOnDeck).mockReturnValue(
    mock LabwareOnDeck
    ) vi.mocked(selectors.getZoomedInSlotInfo).mockReturnValue({ selectedLabwareDefUri: null, selectedNestedLabwareDefUri: null, @@ -52,7 +71,6 @@ describe('SelectedHoveredItems', () => { }) vi.mocked(getCustomLabwareDefsByURI).mockReturnValue({}) vi.mocked(FixtureRender).mockReturnValue(
    mock FixtureRender
    ) - vi.mocked(LabwareRender).mockReturnValue(
    mock LabwareRender
    ) vi.mocked(Module).mockReturnValue(
    mock Module
    ) }) it('renders a selected fixture by itself', () => { @@ -70,9 +88,9 @@ describe('SelectedHoveredItems', () => { }) render(props) screen.getByText('mock FixtureRender') - screen.getByText('mock LabwareRender') + screen.getByText('mock LabwareOnDeck') expect(screen.queryByText('mock Module')).not.toBeInTheDocument() - screen.getByText('Fixture Opentrons Universal Flat Heater-Shaker Adapter') + screen.getByText('Opentrons screwcap 2mL tuberack') }) it('renders a selected module', () => { vi.mocked(selectors.getZoomedInSlotInfo).mockReturnValue({ @@ -102,6 +120,25 @@ describe('SelectedHoveredItems', () => { screen.getByText('Fixture Opentrons Universal Flat Heater-Shaker Adapter') }) it('renders selected fixture and both labware and nested labware', () => { + vi.mocked(getInitialDeckSetup).mockReturnValue({ + modules: {}, + additionalEquipmentOnDeck: {}, + pipettes: {}, + labware: { + labware: { + id: 'mockId', + def: fixture24Tuberack as LabwareDefinition2, + labwareDefURI: 'fixture/fixture_universal_flat_bottom_adapter/1', + slot: 'D3', + }, + labware2: { + id: 'mockId2', + def: fixture24Tuberack as LabwareDefinition2, + labwareDefURI: 'fixture/fixture_universal_flat_bottom_adapter/1', + slot: 'mockId', + }, + }, + }) vi.mocked(selectors.getZoomedInSlotInfo).mockReturnValue({ selectedLabwareDefUri: 'fixture/fixture_universal_flat_bottom_adapter/1', selectedNestedLabwareDefUri: @@ -112,12 +149,10 @@ describe('SelectedHoveredItems', () => { }) render(props) screen.getByText('mock FixtureRender') - expect(screen.getAllByText('mock LabwareRender')).toHaveLength(2) - expect( - screen.getAllByText( - 'Fixture Opentrons Universal Flat Heater-Shaker Adapter' - ) - ).toHaveLength(2) + expect(screen.getAllByText('mock LabwareOnDeck')).toHaveLength(2) + expect(screen.getAllByText('Opentrons screwcap 2mL tuberack')).toHaveLength( + 2 + ) }) it('renders nothing when there is a hovered module but selected fixture', () => { props.hoveredModule = HEATERSHAKER_MODULE_V1 From cee27a2e8806f2f8589df8387af4ec7bde66e1a6 Mon Sep 17 00:00:00 2001 From: Shlok Amin Date: Thu, 7 Nov 2024 11:11:54 -0800 Subject: [PATCH 80/81] feat(app): hide unused env vars from vite dist (#16720) --- .github/workflows/app-test-build-deploy.yaml | 35 +++++++++++--------- app-shell-odd/Makefile | 6 ++-- app-shell/Makefile | 14 ++++---- app/vite.config.mts | 6 +++- 4 files changed, 37 insertions(+), 24 deletions(-) diff --git a/.github/workflows/app-test-build-deploy.yaml b/.github/workflows/app-test-build-deploy.yaml index f0bfe7d8946..d443fae35a0 100644 --- a/.github/workflows/app-test-build-deploy.yaml +++ b/.github/workflows/app-test-build-deploy.yaml @@ -318,12 +318,12 @@ jobs: if: startsWith(matrix.os, 'windows') && contains(needs.determine-build-type.outputs.type, 'release') shell: cmd env: - SM_HOST: ${{ secrets.SM_HOST }} + SM_HOST: ${{ secrets.SM_HOST_V2 }} SM_CLIENT_CERT_FILE: "D:\\Certificate_pkcs12.p12" - SM_CLIENT_CERT_PASSWORD: ${{secrets.SM_CLIENT_CERT_PASSWORD}} - SM_API_KEY: ${{secrets.SM_API_KEY}} + SM_CLIENT_CERT_PASSWORD: ${{secrets.SM_CLIENT_CERT_PASSWORD_V2}} + SM_API_KEY: ${{secrets.SM_API_KEY_V2}} run: | - curl -X GET https://one.digicert.com/signingmanager/api-ui/v1/releases/Keylockertools-windows-x64.msi/download -H "x-api-key:${{secrets.SM_API_KEY}}" -o Keylockertools-windows-x64.msi + curl -X GET https://one.digicert.com/signingmanager/api-ui/v1/releases/Keylockertools-windows-x64.msi/download -H "x-api-key:${{secrets.SM_API_KEY_V2}}" -o Keylockertools-windows-x64.msi msiexec /i Keylockertools-windows-x64.msi /quiet /qn smksp_registrar.exe list smctl.exe keypair ls @@ -331,6 +331,15 @@ jobs: smksp_cert_sync.exe smctl.exe healthcheck --all + # Do the frontend dist bundle + - name: 'bundle ${{matrix.variant}} frontend' + env: + OT_APP_MIXPANEL_ID: ${{ secrets.OT_APP_MIXPANEL_ID }} + OT_APP_INTERCOM_ID: ${{ secrets.OT_APP_INTERCOM_ID }} + OPENTRONS_PROJECT: ${{ steps.project.outputs.project }} + run: | + make -C app dist + # build the desktop app and deploy it - name: 'build ${{matrix.variant}} app for ${{ matrix.os }}' if: matrix.target == 'desktop' @@ -339,18 +348,14 @@ jobs: OT_APP_MIXPANEL_ID: ${{ secrets.OT_APP_MIXPANEL_ID }} OT_APP_INTERCOM_ID: ${{ secrets.OT_APP_INTERCOM_ID }} WINDOWS_SIGN: ${{ format('{0}', contains(needs.determine-build-type.outputs.type, 'release')) }} - SM_HOST: ${{secrets.SM_HOST}} - SM_CLIENT_CERT_FILE: "D:\\Certificate_pkcs12.p12" - SM_CLIENT_CERT_PASSWORD: ${{secrets.SM_CLIENT_CERT_PASSWORD}} - SM_API_KEY: ${{secrets.SM_API_KEY}} - SM_CODE_SIGNING_CERT_SHA1_HASH: ${{secrets.SM_CODE_SIGNING_CERT_SHA1_HASH}} - SM_KEYPAIR_ALIAS: ${{secrets.SM_KEYPAIR_ALIAS}} + SM_CODE_SIGNING_CERT_SHA1_HASH: ${{secrets.SM_CODE_SIGNING_CERT_SHA1_HASH_V2}} + SM_KEYPAIR_ALIAS: ${{secrets.SM_KEYPAIR_ALIAS_V2}} WINDOWS_CSC_FILEPATH: "D:\\opentrons_labworks_inc.crt" - CSC_LINK: ${{ secrets.OT_APP_CSC_MACOS }} - CSC_KEY_PASSWORD: ${{ secrets.OT_APP_CSC_KEY_MACOS }} - APPLE_ID: ${{ secrets.OT_APP_APPLE_ID }} - APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.OT_APP_APPLE_ID_PASSWORD }} - APPLE_TEAM_ID: ${{ secrets.OT_APP_APPLE_TEAM_ID }} + CSC_LINK: ${{ secrets.OT_APP_CSC_MACOS_V2 }} + CSC_KEY_PASSWORD: ${{ secrets.OT_APP_CSC_KEY_MACOS_V2 }} + APPLE_ID: ${{ secrets.OT_APP_APPLE_ID_V2 }} + APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.OT_APP_APPLE_ID_PASSWORD_V2 }} + APPLE_TEAM_ID: ${{ secrets.OT_APP_APPLE_TEAM_ID_V2 }} HOST_PYTHON: python OPENTRONS_PROJECT: ${{ steps.project.outputs.project }} OT_APP_DEPLOY_BUCKET: ${{ steps.project.outputs.bucket }} diff --git a/app-shell-odd/Makefile b/app-shell-odd/Makefile index 543ed2de95f..5d2d7ac37bd 100644 --- a/app-shell-odd/Makefile +++ b/app-shell-odd/Makefile @@ -65,12 +65,14 @@ deps: .PHONY: package-deps package-deps: clean lib deps +# Note: keep the push dep separate from the dist target so it doesn't accidentally +# do a js dist when we want to only build electron .PHONY: dist-ot3 -dist-ot3: package-deps +dist-ot3: clean lib NO_USB_DETECTION=true OT_APP_DEPLOY_BUCKET=opentrons-app OT_APP_DEPLOY_FOLDER=builds OPENTRONS_PROJECT=$(OPENTRONS_PROJECT) $(builder) --linux --arm64 .PHONY: push-ot3 -push-ot3: dist-ot3 +push-ot3: dist-ot3 deps tar -zcvf opentrons-robot-app.tar.gz -C ./dist/linux-arm64-unpacked/ ./ scp $(if $(ssh_key),-i $(ssh_key)) $(ssh_opts) -r ./opentrons-robot-app.tar.gz root@$(host): ssh $(if $(ssh_key),-i $(ssh_key)) $(ssh_opts) root@$(host) "mount -o remount,rw / && systemctl stop opentrons-robot-app && rm -rf /opt/opentrons-app && mkdir -p /opt/opentrons-app" diff --git a/app-shell/Makefile b/app-shell/Makefile index 5daafd82f44..74e4e4b1912 100644 --- a/app-shell/Makefile +++ b/app-shell/Makefile @@ -121,32 +121,34 @@ package dist-posix dist-osx dist-linux dist-win: export BUILD_ID := $(build_id) package dist-posix dist-osx dist-linux dist-win: export NO_PYTHON := $(if $(no_python_bundle),true,false) package dist-posix dist-osx dist-linux dist-win: export USE_HARD_LINKS := false +# Note: these depend on make -C app dist having been run; do not do this automatically because we separate these +# tasks in CI and even if you have a file dep it's easy to accidentally make the dist run. .PHONY: package -package: package-deps +package: $(builder) --dir .PHONY: dist-posix -dist-posix: package-deps +dist-posix: clean lib $(builder) --linux --mac $(MAKE) _dist-collect-artifacts .PHONY: dist-osx -dist-osx: package-deps +dist-osx: clean lib $(builder) --mac --x64 $(MAKE) _dist-collect-artifacts .PHONY: dist-linux -dist-linux: package-deps +dist-linux: clean lib $(builder) --linux $(MAKE) _dist-collect-artifacts .PHONY: dist-win -dist-win: package-deps +dist-win: clean lib $(builder) --win --x64 $(MAKE) _dist-collect-artifacts .PHONY: dist-ot3 -dist-ot3: package-deps +dist-ot3: clean lib NO_PYTHON=true $(builder) --linux --arm64 --dir cd dist/linux-arm64-unpacked diff --git a/app/vite.config.mts b/app/vite.config.mts index 0d1ccadcc19..f10fedf4f7e 100644 --- a/app/vite.config.mts +++ b/app/vite.config.mts @@ -46,7 +46,11 @@ export default defineConfig( }, }, define: { - 'process.env': process.env, + 'process.env': { + NODE_ENV: process.env.NODE_ENV, + OT_APP_MIXPANEL_ID: process.env.OT_APP_MIXPANEL_ID, + OPENTRONS_PROJECT: process.env.OPENTRONS_PROJECT, + }, global: 'globalThis', _PKG_VERSION_: JSON.stringify(version), _OPENTRONS_PROJECT_: JSON.stringify(project), From 803a4c779b617004fe805415ac41d026ccd2c32a Mon Sep 17 00:00:00 2001 From: Nick Diehl <47604184+ncdiehl11@users.noreply.github.com> Date: Thu, 7 Nov 2024 14:19:48 -0500 Subject: [PATCH 81/81] fix(protocol-designer): wire up dynamic form errors logic (#16721) This PR fixes a bug where moveLabware step form fails silently on save. The issue is that the check for form-level errors is not complete in getVisibleFormErrors, so there is a form state where `canSave` is false, but no visible errors are produced. Here, update `getDynamicFieldFormErrorsForUnsavedForm` to check for our special-cased dynamic move labware form field errors, and append that to our form level errors for unsaved form in `StepFormToolbox`. I also wire up this form error in MoveLabwareTools as it does not point to any specific field. --- .../ProtocolSteps/StepForm/StepFormToolbox.tsx | 17 +++++++++++++++-- .../src/step-forms/selectors/index.ts | 17 ++++++++++++----- .../src/steplist/formLevel/errors.ts | 3 ++- .../steplist/formLevel/moveLabwareFormErrors.ts | 6 +++--- 4 files changed, 32 insertions(+), 11 deletions(-) diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx index 1d2bdecf973..2cc845fbe17 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepFormToolbox.tsx @@ -50,7 +50,10 @@ import type { LiquidHandlingTab, StepFormProps, } from './types' -import { getFormLevelErrorsForUnsavedForm } from '../../../../step-forms/selectors' +import { + getDynamicFieldFormErrorsForUnsavedForm, + getFormLevelErrorsForUnsavedForm, +} from '../../../../step-forms/selectors' type StepFormMap = { [K in StepType]?: React.ComponentType | null @@ -107,6 +110,13 @@ export function StepFormToolbox(props: StepFormToolboxProps): JSX.Element { const formLevelErrorsForUnsavedForm = useSelector( getFormLevelErrorsForUnsavedForm ) + const dynamicFormLevelErrorsForUnsavedForm = useSelector( + getDynamicFieldFormErrorsForUnsavedForm + ).map(error => ({ + title: error.title, + body: error.body, + dependentFields: error.dependentProfileFields, + })) const timeline = useSelector(getRobotStateTimeline) const [toolboxStep, setToolboxStep] = useState(0) const [ @@ -122,7 +132,10 @@ export function StepFormToolbox(props: StepFormToolboxProps): JSX.Element { const visibleFormErrors = getVisibleFormErrors({ focusedField, dirtyFields: dirtyFields ?? [], - errors: formLevelErrorsForUnsavedForm, + errors: [ + ...formLevelErrorsForUnsavedForm, + ...dynamicFormLevelErrorsForUnsavedForm, + ], page: toolboxStep, showErrors: showFormErrorsAndWarnings, }) diff --git a/protocol-designer/src/step-forms/selectors/index.ts b/protocol-designer/src/step-forms/selectors/index.ts index 70b4ff44ce2..75c47774fca 100644 --- a/protocol-designer/src/step-forms/selectors/index.ts +++ b/protocol-designer/src/step-forms/selectors/index.ts @@ -651,13 +651,20 @@ export const getHydratedUnsavedForm: Selector< export const getDynamicFieldFormErrorsForUnsavedForm: Selector< BaseState, ProfileFormError[] -> = createSelector(getHydratedUnsavedForm, hydratedForm => { - if (!hydratedForm) return [] +> = createSelector( + getHydratedUnsavedForm, + getInvariantContext, + (hydratedForm, invariantContext) => { + if (!hydratedForm) return [] - const errors = _dynamicFieldFormErrors(hydratedForm) + const errors = [ + ..._dynamicFieldFormErrors(hydratedForm), + ..._dynamicMoveLabwareFieldFormErrors(hydratedForm, invariantContext), + ] - return errors -}) + return errors + } +) export const getFormLevelErrorsForUnsavedForm: Selector< BaseState, StepFormErrors diff --git a/protocol-designer/src/steplist/formLevel/errors.ts b/protocol-designer/src/steplist/formLevel/errors.ts index 407d908ad72..add7662903a 100644 --- a/protocol-designer/src/steplist/formLevel/errors.ts +++ b/protocol-designer/src/steplist/formLevel/errors.ts @@ -619,7 +619,8 @@ export const newLabwareLocationRequired = ( fields: HydratedFormData ): FormError | null => { const { newLocation } = fields - return newLocation == null && newLocation.slotName == null + return newLocation == null || + Object.values(newLocation as Object).every(val => val == null) ? NEW_LABWARE_LOCATION_REQUIRED : null } diff --git a/protocol-designer/src/steplist/formLevel/moveLabwareFormErrors.ts b/protocol-designer/src/steplist/formLevel/moveLabwareFormErrors.ts index b9ee871772d..3362a0a2bff 100644 --- a/protocol-designer/src/steplist/formLevel/moveLabwareFormErrors.ts +++ b/protocol-designer/src/steplist/formLevel/moveLabwareFormErrors.ts @@ -32,7 +32,7 @@ const getMoveLabwareError = ( invariantContext.moduleEntities[newLocation.moduleId].type const modAllowList = COMPATIBLE_LABWARE_ALLOWLIST_BY_MODULE_TYPE[moduleType] errorString = !modAllowList.includes(loadName) - ? 'labware incompatible with this module' + ? 'Labware incompatible with this module' : null } else if ('labwareId' in newLocation) { const adapterValueDefUri = @@ -41,7 +41,7 @@ const getMoveLabwareError = ( const adapterAllowList = COMPATIBLE_LABWARE_ALLOWLIST_FOR_ADAPTER[adapterValueDefUri] errorString = !adapterAllowList?.includes(selectedLabwareDefUri) - ? 'labware incompatible with this adapter' + ? 'Labware incompatible with this adapter' : null } return errorString @@ -68,7 +68,7 @@ export const getMoveLabwareFormErrors = ( ? ([ { title: errorString, - dependentProfileFields: [], + dependentProfileFields: ['newLocation'], }, ] as ProfileFormError[]) : []

    kQbB5C7>C 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≧1f-66R>b?RN^i5b_${_TUb;wl`cw*h|O7xbKjvE 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 J|C6_&j*>vZS7saHqrXQb|$m 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 z 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א>Vxl>;cHgy*y^9% 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