diff --git a/.gitignore b/.gitignore index b6ca0d4..91910c9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +configs/ +temp/ ## Python # Byte-compiled / optimized / DLL files @@ -237,4 +239,7 @@ unilabos/device_mesh/view_robot.rviz # Certs -**/.certs \ No newline at end of file +**/.certs +local_test2.py +ros-humble-unilabos-msgs-0.9.13-h6403a04_5.tar.bz2 +*.bz2 diff --git a/README.md b/README.md index 94010e9..f58cf3e 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ conda env update --file unilabos-[YOUR_OS].yml -n environment_name # Currently, you need to install the `unilabos_msgs` package # You can download the system-specific package from the Release page -conda install ros-humble-unilabos-msgs-0.9.7-xxxxx.tar.bz2 +conda install ros-humble-unilabos-msgs-0.10.0-xxxxx.tar.bz2 # Install PyLabRobot and other prerequisites git clone https://github.com/PyLabRobot/pylabrobot plr_repo diff --git a/README_zh.md b/README_zh.md index d4f77f4..ef555e7 100644 --- a/README_zh.md +++ b/README_zh.md @@ -49,7 +49,7 @@ conda env update --file unilabos-[YOUR_OS].yml -n 环境名 # 现阶段,需要安装 `unilabos_msgs` 包 # 可以前往 Release 页面下载系统对应的包进行安装 -conda install ros-humble-unilabos-msgs-0.9.7-xxxxx.tar.bz2 +conda install ros-humble-unilabos-msgs-0.10.0-xxxxx.tar.bz2 # 安装PyLabRobot等前置 git clone https://github.com/PyLabRobot/pylabrobot plr_repo diff --git a/deck.json b/deck.json new file mode 100644 index 0000000..7a97961 --- /dev/null +++ b/deck.json @@ -0,0 +1,13533 @@ +[ + { + "id": "PRCXI_Deck", + "name": "PRCXI_Deck", + "sample_id": null, + "children": [ + "HPLCPlateT1", + "container_for_nothing1", + "container_for_nothing2", + "trash", + "container_for_nothing3", + "container_for_nothing", + "container_for_nothing4", + "RackT8", + "container_for_nothing5", + "container_for_nothing6", + "PlateT11", + "container_for_nothing7", + "container_for_nothing8" + ], + "parent": "lh_PRCXI_Deck", + "type": "deck", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Deck", + "size_x": 100, + "size_y": 100, + "size_z": 100, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "deck", + "barcode": null + }, + "data": {} + }, + { + "id": "HPLCPlateT1", + "name": "HPLCPlateT1", + "sample_id": null, + "children": [ + "HPLCPlateT1_A1", + "HPLCPlateT1_B1", + "HPLCPlateT1_C1", + "HPLCPlateT1_D1", + "HPLCPlateT1_E1", + "HPLCPlateT1_F1", + "HPLCPlateT1_G1", + "HPLCPlateT1_H1", + "HPLCPlateT1_A2", + "HPLCPlateT1_B2", + "HPLCPlateT1_C2", + "HPLCPlateT1_D2", + "HPLCPlateT1_E2", + "HPLCPlateT1_F2", + "HPLCPlateT1_G2", + "HPLCPlateT1_H2", + "HPLCPlateT1_A3", + "HPLCPlateT1_B3", + "HPLCPlateT1_C3", + "HPLCPlateT1_D3", + "HPLCPlateT1_E3", + "HPLCPlateT1_F3", + "HPLCPlateT1_G3", + "HPLCPlateT1_H3", + "HPLCPlateT1_A4", + "HPLCPlateT1_B4", + "HPLCPlateT1_C4", + "HPLCPlateT1_D4", + "HPLCPlateT1_E4", + "HPLCPlateT1_F4", + "HPLCPlateT1_G4", + "HPLCPlateT1_H4", + "HPLCPlateT1_A5", + "HPLCPlateT1_B5", + "HPLCPlateT1_C5", + "HPLCPlateT1_D5", + "HPLCPlateT1_E5", + "HPLCPlateT1_F5", + "HPLCPlateT1_G5", + "HPLCPlateT1_H5", + "HPLCPlateT1_A6", + "HPLCPlateT1_B6", + "HPLCPlateT1_C6", + "HPLCPlateT1_D6", + "HPLCPlateT1_E6", + "HPLCPlateT1_F6", + "HPLCPlateT1_G6", + "HPLCPlateT1_H6", + "HPLCPlateT1_A7", + "HPLCPlateT1_B7", + "HPLCPlateT1_C7", + "HPLCPlateT1_D7", + "HPLCPlateT1_E7", + "HPLCPlateT1_F7", + "HPLCPlateT1_G7", + "HPLCPlateT1_H7", + "HPLCPlateT1_A8", + "HPLCPlateT1_B8", + "HPLCPlateT1_C8", + "HPLCPlateT1_D8", + "HPLCPlateT1_E8", + "HPLCPlateT1_F8", + "HPLCPlateT1_G8", + "HPLCPlateT1_H8", + "HPLCPlateT1_A9", + "HPLCPlateT1_B9", + "HPLCPlateT1_C9", + "HPLCPlateT1_D9", + "HPLCPlateT1_E9", + "HPLCPlateT1_F9", + "HPLCPlateT1_G9", + "HPLCPlateT1_H9", + "HPLCPlateT1_A10", + "HPLCPlateT1_B10", + "HPLCPlateT1_C10", + "HPLCPlateT1_D10", + "HPLCPlateT1_E10", + "HPLCPlateT1_F10", + "HPLCPlateT1_G10", + "HPLCPlateT1_H10", + "HPLCPlateT1_A11", + "HPLCPlateT1_B11", + "HPLCPlateT1_C11", + "HPLCPlateT1_D11", + "HPLCPlateT1_E11", + "HPLCPlateT1_F11", + "HPLCPlateT1_G11", + "HPLCPlateT1_H11", + "HPLCPlateT1_A12", + "HPLCPlateT1_B12", + "HPLCPlateT1_C12", + "HPLCPlateT1_D12", + "HPLCPlateT1_E12", + "HPLCPlateT1_F12", + "HPLCPlateT1_G12", + "HPLCPlateT1_H12" + ], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": { + "Material": { + "uuid": "548bbc3df0d4447586f2c19d2c0c0c55", + "Code": "HPLC01", + "Name": "HPLC料盘" + } + } + }, + { + "id": "HPLCPlateT1_A1", + "name": "HPLCPlateT1_A1", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B1", + "name": "HPLCPlateT1_B1", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C1", + "name": "HPLCPlateT1_C1", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D1", + "name": "HPLCPlateT1_D1", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E1", + "name": "HPLCPlateT1_E1", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F1", + "name": "HPLCPlateT1_F1", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G1", + "name": "HPLCPlateT1_G1", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H1", + "name": "HPLCPlateT1_H1", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A2", + "name": "HPLCPlateT1_A2", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B2", + "name": "HPLCPlateT1_B2", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C2", + "name": "HPLCPlateT1_C2", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D2", + "name": "HPLCPlateT1_D2", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E2", + "name": "HPLCPlateT1_E2", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F2", + "name": "HPLCPlateT1_F2", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G2", + "name": "HPLCPlateT1_G2", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H2", + "name": "HPLCPlateT1_H2", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A3", + "name": "HPLCPlateT1_A3", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B3", + "name": "HPLCPlateT1_B3", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C3", + "name": "HPLCPlateT1_C3", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D3", + "name": "HPLCPlateT1_D3", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E3", + "name": "HPLCPlateT1_E3", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F3", + "name": "HPLCPlateT1_F3", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G3", + "name": "HPLCPlateT1_G3", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H3", + "name": "HPLCPlateT1_H3", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A4", + "name": "HPLCPlateT1_A4", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B4", + "name": "HPLCPlateT1_B4", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C4", + "name": "HPLCPlateT1_C4", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D4", + "name": "HPLCPlateT1_D4", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E4", + "name": "HPLCPlateT1_E4", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F4", + "name": "HPLCPlateT1_F4", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G4", + "name": "HPLCPlateT1_G4", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H4", + "name": "HPLCPlateT1_H4", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A5", + "name": "HPLCPlateT1_A5", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B5", + "name": "HPLCPlateT1_B5", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C5", + "name": "HPLCPlateT1_C5", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D5", + "name": "HPLCPlateT1_D5", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E5", + "name": "HPLCPlateT1_E5", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F5", + "name": "HPLCPlateT1_F5", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G5", + "name": "HPLCPlateT1_G5", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H5", + "name": "HPLCPlateT1_H5", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A6", + "name": "HPLCPlateT1_A6", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B6", + "name": "HPLCPlateT1_B6", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C6", + "name": "HPLCPlateT1_C6", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D6", + "name": "HPLCPlateT1_D6", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E6", + "name": "HPLCPlateT1_E6", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F6", + "name": "HPLCPlateT1_F6", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G6", + "name": "HPLCPlateT1_G6", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H6", + "name": "HPLCPlateT1_H6", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A7", + "name": "HPLCPlateT1_A7", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B7", + "name": "HPLCPlateT1_B7", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C7", + "name": "HPLCPlateT1_C7", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D7", + "name": "HPLCPlateT1_D7", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E7", + "name": "HPLCPlateT1_E7", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F7", + "name": "HPLCPlateT1_F7", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G7", + "name": "HPLCPlateT1_G7", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H7", + "name": "HPLCPlateT1_H7", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A8", + "name": "HPLCPlateT1_A8", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B8", + "name": "HPLCPlateT1_B8", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C8", + "name": "HPLCPlateT1_C8", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D8", + "name": "HPLCPlateT1_D8", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E8", + "name": "HPLCPlateT1_E8", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F8", + "name": "HPLCPlateT1_F8", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G8", + "name": "HPLCPlateT1_G8", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H8", + "name": "HPLCPlateT1_H8", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A9", + "name": "HPLCPlateT1_A9", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B9", + "name": "HPLCPlateT1_B9", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C9", + "name": "HPLCPlateT1_C9", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D9", + "name": "HPLCPlateT1_D9", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E9", + "name": "HPLCPlateT1_E9", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F9", + "name": "HPLCPlateT1_F9", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G9", + "name": "HPLCPlateT1_G9", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H9", + "name": "HPLCPlateT1_H9", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A10", + "name": "HPLCPlateT1_A10", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B10", + "name": "HPLCPlateT1_B10", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C10", + "name": "HPLCPlateT1_C10", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D10", + "name": "HPLCPlateT1_D10", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E10", + "name": "HPLCPlateT1_E10", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F10", + "name": "HPLCPlateT1_F10", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G10", + "name": "HPLCPlateT1_G10", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H10", + "name": "HPLCPlateT1_H10", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A11", + "name": "HPLCPlateT1_A11", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B11", + "name": "HPLCPlateT1_B11", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C11", + "name": "HPLCPlateT1_C11", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D11", + "name": "HPLCPlateT1_D11", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E11", + "name": "HPLCPlateT1_E11", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F11", + "name": "HPLCPlateT1_F11", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G11", + "name": "HPLCPlateT1_G11", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H11", + "name": "HPLCPlateT1_H11", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A12", + "name": "HPLCPlateT1_A12", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B12", + "name": "HPLCPlateT1_B12", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C12", + "name": "HPLCPlateT1_C12", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D12", + "name": "HPLCPlateT1_D12", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E12", + "name": "HPLCPlateT1_E12", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F12", + "name": "HPLCPlateT1_F12", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G12", + "name": "HPLCPlateT1_G12", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H12", + "name": "HPLCPlateT1_H12", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "container_for_nothing1", + "name": "container_for_nothing1", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "container_for_nothing2", + "name": "container_for_nothing2", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "trash", + "name": "trash", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "container", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Trash", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "trash", + "model": null, + "barcode": null, + "max_volume": "Infinity", + "material_z_thickness": 0, + "compute_volume_from_height": null, + "compute_height_from_volume": null + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [], + "Material": { + "uuid": "730067cf07ae43849ddf4034299030e9" + } + } + }, + { + "id": "container_for_nothing3", + "name": "container_for_nothing3", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "container_for_nothing", + "name": "container_for_nothing", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "container_for_nothing4", + "name": "container_for_nothing4", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "RackT8", + "name": "RackT8", + "sample_id": null, + "children": [ + "name_A1", + "name_B1", + "name_C1", + "name_D1", + "name_E1", + "name_F1", + "name_G1", + "name_H1", + "name_A2", + "name_B2", + "name_C2", + "name_D2", + "name_E2", + "name_F2", + "name_G2", + "name_H2", + "name_A3", + "name_B3", + "name_C3", + "name_D3", + "name_E3", + "name_F3", + "name_G3", + "name_H3", + "name_A4", + "name_B4", + "name_C4", + "name_D4", + "name_E4", + "name_F4", + "name_G4", + "name_H4", + "name_A5", + "name_B5", + "name_C5", + "name_D5", + "name_E5", + "name_F5", + "name_G5", + "name_H5", + "name_A6", + "name_B6", + "name_C6", + "name_D6", + "name_E6", + "name_F6", + "name_G6", + "name_H6", + "name_A7", + "name_B7", + "name_C7", + "name_D7", + "name_E7", + "name_F7", + "name_G7", + "name_H7", + "name_A8", + "name_B8", + "name_C8", + "name_D8", + "name_E8", + "name_F8", + "name_G8", + "name_H8", + "name_A9", + "name_B9", + "name_C9", + "name_D9", + "name_E9", + "name_F9", + "name_G9", + "name_H9", + "name_A10", + "name_B10", + "name_C10", + "name_D10", + "name_E10", + "name_F10", + "name_G10", + "name_H10", + "name_A11", + "name_B11", + "name_C11", + "name_D11", + "name_E11", + "name_F11", + "name_G11", + "name_H11", + "name_A12", + "name_B12", + "name_C12", + "name_D12", + "name_E12", + "name_F12", + "name_G12", + "name_H12" + ], + "parent": "PRCXI_Deck", + "type": "container", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_rack", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": { + "Material": { + "uuid": "068b3815e36b4a72a59bae017011b29f", + "Code": "ZX-001-10+", + "Name": "10μL加长 Tip头" + } + } + }, + { + "id": "name_A1", + "name": "name_A1", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 13.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B1", + "name": "name_B1", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 13.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C1", + "name": "name_C1", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 13.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D1", + "name": "name_D1", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 13.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E1", + "name": "name_E1", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 13.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F1", + "name": "name_F1", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 13.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G1", + "name": "name_G1", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 13.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H1", + "name": "name_H1", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 13.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A2", + "name": "name_A2", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 22.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B2", + "name": "name_B2", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 22.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C2", + "name": "name_C2", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 22.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D2", + "name": "name_D2", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 22.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E2", + "name": "name_E2", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 22.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F2", + "name": "name_F2", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 22.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G2", + "name": "name_G2", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 22.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H2", + "name": "name_H2", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 22.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A3", + "name": "name_A3", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 31.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B3", + "name": "name_B3", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 31.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C3", + "name": "name_C3", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 31.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D3", + "name": "name_D3", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 31.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E3", + "name": "name_E3", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 31.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F3", + "name": "name_F3", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 31.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G3", + "name": "name_G3", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 31.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H3", + "name": "name_H3", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 31.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A4", + "name": "name_A4", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 40.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B4", + "name": "name_B4", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 40.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C4", + "name": "name_C4", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 40.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D4", + "name": "name_D4", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 40.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E4", + "name": "name_E4", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 40.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F4", + "name": "name_F4", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 40.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G4", + "name": "name_G4", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 40.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H4", + "name": "name_H4", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 40.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A5", + "name": "name_A5", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 49.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B5", + "name": "name_B5", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 49.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C5", + "name": "name_C5", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 49.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D5", + "name": "name_D5", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 49.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E5", + "name": "name_E5", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 49.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F5", + "name": "name_F5", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 49.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G5", + "name": "name_G5", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 49.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H5", + "name": "name_H5", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 49.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A6", + "name": "name_A6", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 58.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B6", + "name": "name_B6", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 58.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C6", + "name": "name_C6", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 58.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D6", + "name": "name_D6", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 58.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E6", + "name": "name_E6", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 58.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F6", + "name": "name_F6", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 58.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G6", + "name": "name_G6", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 58.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H6", + "name": "name_H6", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 58.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A7", + "name": "name_A7", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 67.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B7", + "name": "name_B7", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 67.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C7", + "name": "name_C7", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 67.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D7", + "name": "name_D7", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 67.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E7", + "name": "name_E7", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 67.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F7", + "name": "name_F7", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 67.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G7", + "name": "name_G7", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 67.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H7", + "name": "name_H7", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 67.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A8", + "name": "name_A8", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 76.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B8", + "name": "name_B8", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 76.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C8", + "name": "name_C8", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 76.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D8", + "name": "name_D8", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 76.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E8", + "name": "name_E8", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 76.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F8", + "name": "name_F8", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 76.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G8", + "name": "name_G8", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 76.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H8", + "name": "name_H8", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 76.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A9", + "name": "name_A9", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 85.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B9", + "name": "name_B9", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 85.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C9", + "name": "name_C9", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 85.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D9", + "name": "name_D9", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 85.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E9", + "name": "name_E9", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 85.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F9", + "name": "name_F9", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 85.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G9", + "name": "name_G9", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 85.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H9", + "name": "name_H9", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 85.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A10", + "name": "name_A10", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 94.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B10", + "name": "name_B10", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 94.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C10", + "name": "name_C10", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 94.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D10", + "name": "name_D10", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 94.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E10", + "name": "name_E10", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 94.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F10", + "name": "name_F10", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 94.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G10", + "name": "name_G10", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 94.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H10", + "name": "name_H10", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 94.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A11", + "name": "name_A11", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 103.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B11", + "name": "name_B11", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 103.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C11", + "name": "name_C11", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 103.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D11", + "name": "name_D11", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 103.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E11", + "name": "name_E11", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 103.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F11", + "name": "name_F11", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 103.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G11", + "name": "name_G11", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 103.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H11", + "name": "name_H11", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 103.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A12", + "name": "name_A12", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 112.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B12", + "name": "name_B12", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 112.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C12", + "name": "name_C12", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 112.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D12", + "name": "name_D12", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 112.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E12", + "name": "name_E12", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 112.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F12", + "name": "name_F12", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 112.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G12", + "name": "name_G12", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 112.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H12", + "name": "name_H12", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 112.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "container_for_nothing5", + "name": "container_for_nothing5", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "container_for_nothing6", + "name": "container_for_nothing6", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "PlateT11", + "name": "PlateT11", + "sample_id": null, + "children": [ + "PlateT11_A1", + "PlateT11_B1", + "PlateT11_C1", + "PlateT11_D1", + "PlateT11_E1", + "PlateT11_F1", + "PlateT11_G1", + "PlateT11_H1", + "PlateT11_A2", + "PlateT11_B2", + "PlateT11_C2", + "PlateT11_D2", + "PlateT11_E2", + "PlateT11_F2", + "PlateT11_G2", + "PlateT11_H2", + "PlateT11_A3", + "PlateT11_B3", + "PlateT11_C3", + "PlateT11_D3", + "PlateT11_E3", + "PlateT11_F3", + "PlateT11_G3", + "PlateT11_H3", + "PlateT11_A4", + "PlateT11_B4", + "PlateT11_C4", + "PlateT11_D4", + "PlateT11_E4", + "PlateT11_F4", + "PlateT11_G4", + "PlateT11_H4", + "PlateT11_A5", + "PlateT11_B5", + "PlateT11_C5", + "PlateT11_D5", + "PlateT11_E5", + "PlateT11_F5", + "PlateT11_G5", + "PlateT11_H5", + "PlateT11_A6", + "PlateT11_B6", + "PlateT11_C6", + "PlateT11_D6", + "PlateT11_E6", + "PlateT11_F6", + "PlateT11_G6", + "PlateT11_H6", + "PlateT11_A7", + "PlateT11_B7", + "PlateT11_C7", + "PlateT11_D7", + "PlateT11_E7", + "PlateT11_F7", + "PlateT11_G7", + "PlateT11_H7", + "PlateT11_A8", + "PlateT11_B8", + "PlateT11_C8", + "PlateT11_D8", + "PlateT11_E8", + "PlateT11_F8", + "PlateT11_G8", + "PlateT11_H8", + "PlateT11_A9", + "PlateT11_B9", + "PlateT11_C9", + "PlateT11_D9", + "PlateT11_E9", + "PlateT11_F9", + "PlateT11_G9", + "PlateT11_H9", + "PlateT11_A10", + "PlateT11_B10", + "PlateT11_C10", + "PlateT11_D10", + "PlateT11_E10", + "PlateT11_F10", + "PlateT11_G10", + "PlateT11_H10", + "PlateT11_A11", + "PlateT11_B11", + "PlateT11_C11", + "PlateT11_D11", + "PlateT11_E11", + "PlateT11_F11", + "PlateT11_G11", + "PlateT11_H11", + "PlateT11_A12", + "PlateT11_B12", + "PlateT11_C12", + "PlateT11_D12", + "PlateT11_E12", + "PlateT11_F12", + "PlateT11_G12", + "PlateT11_H12" + ], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": { + "Material": { + "uuid": "57b1e4711e9e4a32b529f3132fc5931f" + } + } + }, + { + "id": "PlateT11_A1", + "name": "PlateT11_A1", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + "Water", + 100 + ] + ], + "pending_liquids": [ + [ + "Water", + 100 + ] + ], + "liquid_history": [ + "Water" + ] + } + }, + { + "id": "PlateT11_B1", + "name": "PlateT11_B1", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C1", + "name": "PlateT11_C1", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D1", + "name": "PlateT11_D1", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E1", + "name": "PlateT11_E1", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F1", + "name": "PlateT11_F1", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G1", + "name": "PlateT11_G1", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H1", + "name": "PlateT11_H1", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A2", + "name": "PlateT11_A2", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + "Water", + 100 + ] + ], + "pending_liquids": [ + [ + "Water", + 100 + ] + ], + "liquid_history": [ + "Water" + ] + } + }, + { + "id": "PlateT11_B2", + "name": "PlateT11_B2", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C2", + "name": "PlateT11_C2", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D2", + "name": "PlateT11_D2", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E2", + "name": "PlateT11_E2", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F2", + "name": "PlateT11_F2", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G2", + "name": "PlateT11_G2", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H2", + "name": "PlateT11_H2", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A3", + "name": "PlateT11_A3", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + "Water", + 100 + ] + ], + "pending_liquids": [ + [ + "Water", + 100 + ] + ], + "liquid_history": [ + "Water" + ] + } + }, + { + "id": "PlateT11_B3", + "name": "PlateT11_B3", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C3", + "name": "PlateT11_C3", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D3", + "name": "PlateT11_D3", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E3", + "name": "PlateT11_E3", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F3", + "name": "PlateT11_F3", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G3", + "name": "PlateT11_G3", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H3", + "name": "PlateT11_H3", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A4", + "name": "PlateT11_A4", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + "Water", + 100 + ] + ], + "pending_liquids": [ + [ + "Water", + 100 + ] + ], + "liquid_history": [ + "Water" + ] + } + }, + { + "id": "PlateT11_B4", + "name": "PlateT11_B4", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C4", + "name": "PlateT11_C4", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D4", + "name": "PlateT11_D4", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E4", + "name": "PlateT11_E4", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F4", + "name": "PlateT11_F4", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G4", + "name": "PlateT11_G4", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H4", + "name": "PlateT11_H4", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A5", + "name": "PlateT11_A5", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + "Water", + 100 + ] + ], + "pending_liquids": [ + [ + "Water", + 100 + ] + ], + "liquid_history": [ + "Water" + ] + } + }, + { + "id": "PlateT11_B5", + "name": "PlateT11_B5", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C5", + "name": "PlateT11_C5", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D5", + "name": "PlateT11_D5", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E5", + "name": "PlateT11_E5", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F5", + "name": "PlateT11_F5", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G5", + "name": "PlateT11_G5", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H5", + "name": "PlateT11_H5", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A6", + "name": "PlateT11_A6", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + "Water", + 100 + ] + ], + "pending_liquids": [ + [ + "Water", + 100 + ] + ], + "liquid_history": [ + "Water" + ] + } + }, + { + "id": "PlateT11_B6", + "name": "PlateT11_B6", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C6", + "name": "PlateT11_C6", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D6", + "name": "PlateT11_D6", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E6", + "name": "PlateT11_E6", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F6", + "name": "PlateT11_F6", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G6", + "name": "PlateT11_G6", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H6", + "name": "PlateT11_H6", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A7", + "name": "PlateT11_A7", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_B7", + "name": "PlateT11_B7", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C7", + "name": "PlateT11_C7", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D7", + "name": "PlateT11_D7", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E7", + "name": "PlateT11_E7", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F7", + "name": "PlateT11_F7", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G7", + "name": "PlateT11_G7", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H7", + "name": "PlateT11_H7", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A8", + "name": "PlateT11_A8", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_B8", + "name": "PlateT11_B8", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C8", + "name": "PlateT11_C8", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D8", + "name": "PlateT11_D8", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E8", + "name": "PlateT11_E8", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F8", + "name": "PlateT11_F8", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G8", + "name": "PlateT11_G8", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H8", + "name": "PlateT11_H8", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A9", + "name": "PlateT11_A9", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_B9", + "name": "PlateT11_B9", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C9", + "name": "PlateT11_C9", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D9", + "name": "PlateT11_D9", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E9", + "name": "PlateT11_E9", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F9", + "name": "PlateT11_F9", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G9", + "name": "PlateT11_G9", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H9", + "name": "PlateT11_H9", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A10", + "name": "PlateT11_A10", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_B10", + "name": "PlateT11_B10", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C10", + "name": "PlateT11_C10", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D10", + "name": "PlateT11_D10", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E10", + "name": "PlateT11_E10", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F10", + "name": "PlateT11_F10", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G10", + "name": "PlateT11_G10", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H10", + "name": "PlateT11_H10", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A11", + "name": "PlateT11_A11", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_B11", + "name": "PlateT11_B11", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C11", + "name": "PlateT11_C11", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D11", + "name": "PlateT11_D11", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E11", + "name": "PlateT11_E11", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F11", + "name": "PlateT11_F11", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G11", + "name": "PlateT11_G11", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H11", + "name": "PlateT11_H11", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A12", + "name": "PlateT11_A12", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_B12", + "name": "PlateT11_B12", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C12", + "name": "PlateT11_C12", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D12", + "name": "PlateT11_D12", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E12", + "name": "PlateT11_E12", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F12", + "name": "PlateT11_F12", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G12", + "name": "PlateT11_G12", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H12", + "name": "PlateT11_H12", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "container_for_nothing7", + "name": "container_for_nothing7", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "container_for_nothing8", + "name": "container_for_nothing8", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + } +] \ No newline at end of file diff --git a/recipes/conda_build_config.yaml b/recipes/conda_build_config.yaml index fd870d0..8e95491 100644 --- a/recipes/conda_build_config.yaml +++ b/recipes/conda_build_config.yaml @@ -1,3 +1,6 @@ +channel_sources: + - robostack,robostack-staging,conda-forge,defaults + gazebo: - '11' libpqxx: diff --git a/recipes/ros-humble-unilabos-msgs/recipe.yaml b/recipes/ros-humble-unilabos-msgs/recipe.yaml index e476d1b..81c390b 100644 --- a/recipes/ros-humble-unilabos-msgs/recipe.yaml +++ b/recipes/ros-humble-unilabos-msgs/recipe.yaml @@ -1,6 +1,6 @@ package: name: ros-humble-unilabos-msgs - version: 0.9.7 + version: 0.10.0 source: path: ../../unilabos_msgs folder: ros-humble-unilabos-msgs/src/work diff --git a/recipes/unilabos/recipe.yaml b/recipes/unilabos/recipe.yaml index 2a48b04..3b97b9a 100644 --- a/recipes/unilabos/recipe.yaml +++ b/recipes/unilabos/recipe.yaml @@ -1,6 +1,6 @@ package: name: unilabos - version: "0.9.7" + version: "0.10.0" source: path: ../.. diff --git a/setup.py b/setup.py index 8fd9bbc..f256bd6 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ package_name = 'unilabos' setup( name=package_name, - version='0.9.7', + version='0.10.0', packages=find_packages(), include_package_data=True, install_requires=['setuptools'], diff --git a/test/experiments/camera.json b/test/experiments/camera.json new file mode 100644 index 0000000..2d20845 --- /dev/null +++ b/test/experiments/camera.json @@ -0,0 +1,45 @@ +{ + "nodes": [ + { + "id": "Camera", + "name": "摄像头", + "children": [ + ], + "parent": null, + "type": "device", + "class": "camera", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "camera_index": 0, + "period": 0.05 + }, + "data": { + } + }, + { + "id": "Gripper1", + "name": "假夹爪", + "children": [ + ], + "parent": null, + "type": "device", + "class": "gripper.mock", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + }, + "data": { + } + } + ], + "links": [ + + ] +} \ No newline at end of file diff --git a/test/experiments/comprehensive_protocol/checklist.md b/test/experiments/comprehensive_protocol/checklist.md index ed73ec5..67b4c3b 100644 --- a/test/experiments/comprehensive_protocol/checklist.md +++ b/test/experiments/comprehensive_protocol/checklist.md @@ -23,6 +23,7 @@ HeatChillProtocol: generate_heat_chill_protocol, (√) HeatChillStartProtocol: generate_heat_chill_start_protocol, (√) HeatChillStopProtocol: generate_heat_chill_stop_protocol, (√) + HeatChillToTempProtocol: StirProtocol: generate_stir_protocol, (√) StartStirProtocol: generate_start_stir_protocol, (√) StopStirProtocol: generate_stop_stir_protocol, (√) @@ -30,7 +31,228 @@ CleanVesselProtocol: generate_clean_vessel_protocol, (√) DissolveProtocol: generate_dissolve_protocol, (√) FilterThroughProtocol: generate_filter_through_protocol, (√) - RunColumnProtocol: generate_run_column_protocol, (×) - WashSolidProtocol: generate_wash_solid_protocol, (×) + RunColumnProtocol: generate_run_column_protocol, (√) -上下文体积搜索 \ No newline at end of file +上下文体积搜索 +3. 还没创建的protocol + ResetHandling 写完了 + Dry 写完了 + AdjustPH 写完了 + Recrystallize 写完了 + TakeSample + Hydrogenate +4. 参数对齐 + + + + + + + + + + +class PumpTransferProtocol(BaseModel): + from_vessel: str + to_vessel: str + volume: float + amount: str = "" + time: float = 0 + viscous: bool = False + rinsing_solvent: str = "air" + rinsing_volume: float = 5000 + rinsing_repeats: int = 2 + solid: bool = False 测完了三个都能跑✅ + flowrate: float = 500 + transfer_flowrate: float = 2500 + +class SeparateProtocol(BaseModel): + purpose: str + product_phase: str + from_vessel: str + separation_vessel: str + to_vessel: str + waste_phase_to_vessel: str + solvent: str + solvent_volume: float + through: str + repeats: int + stir_time: float + stir_speed: float + settling_time: float 测完了能跑✅ + + +class EvaporateProtocol(BaseModel): + vessel: str + pressure: float + temp: float + time: float 测完了能跑✅ + stir_speed: float + + +class EvacuateAndRefillProtocol(BaseModel): + vessel: str + gas: str + repeats: int 测完了能跑✅ + +class AddProtocol(BaseModel): + vessel: str + reagent: str + volume: float + mass: float + amount: str + time: float + stir: bool + stir_speed: float + + + + + + viscous: bool + purpose: str 测完了能跑✅ + +class CentrifugeProtocol(BaseModel): + vessel: str + speed: float + time: float 没毛病 + temp: float + +class FilterProtocol(BaseModel): + vessel: str + filtrate_vessel: str + stir: bool + stir_speed: float + temp: float 测完了能跑✅ + continue_heatchill: bool + volume: float + +class HeatChillProtocol(BaseModel): + vessel: str + temp: float + time: float + + + + + stir: bool 测完了能跑✅ + stir_speed: float + purpose: str + +class HeatChillStartProtocol(BaseModel): + vessel: str + temp: float 疑似没有 + purpose: str + +class HeatChillStopProtocol(BaseModel): + vessel: str 疑似没有 + +class StirProtocol(BaseModel): + stir_time: float + stir_speed: float + + + settling_time: float 测完了能跑✅ + +class StartStirProtocol(BaseModel): + vessel: str + stir_speed: float 疑似没有 + purpose: str + +class StopStirProtocol(BaseModel): + vessel: str 疑似没有 + +class TransferProtocol(BaseModel): + from_vessel: str + to_vessel: str + volume: float + amount: str = "" + time: float = 0 + viscous: bool = False + rinsing_solvent: str = "" + rinsing_volume: float = 0.0 + rinsing_repeats: int = 0 + solid: bool = False 这个protocol早该删掉了 + +class CleanVesselProtocol(BaseModel): + vessel: str + solvent: str + volume: float + temp: float + repeats: int = 1 + +class DissolveProtocol(BaseModel): + vessel: str + solvent: str + volume: float + amount: str = "" + temp: float = 25.0 + time: float = 0.0 + stir_speed: float = 0.0 测完了能跑✅ + +class FilterThroughProtocol(BaseModel): + from_vessel: str + to_vessel: str + filter_through: str + eluting_solvent: str = "" + eluting_volume: float = 0.0 疑似没有 + eluting_repeats: int = 0 + residence_time: float = 0.0 + +class RunColumnProtocol(BaseModel): + from_vessel: str + to_vessel: str + column: str 测完了能跑✅ + +class WashSolidProtocol(BaseModel): + vessel: str + solvent: str + volume: float + filtrate_vessel: str = "" + temp: float = 25.0 + stir: bool = False + + + + stir_speed: float = 0.0 测完了能跑✅ + time: float = 0.0 + repeats: int = 1 + +class AdjustPHProtocol(BaseModel): + vessel: str = Field(..., description="目标容器") + ph_value: float = Field(..., description="目标pH值") # 改为 ph_value + reagent: str = Field(..., description="酸碱试剂名称") + # 移除其他可选参数,使用默认值 <新写的,没问题> + +class ResetHandlingProtocol(BaseModel): + solvent: str = Field(..., description="溶剂名称") <新写的,没问题> + +class DryProtocol(BaseModel): + compound: str = Field(..., description="化合物名称") <新写的,没问题> + vessel: str = Field(..., description="目标容器") + +class RecrystallizeProtocol(BaseModel): + ratio: str = Field(..., description="溶剂比例(如 '1:1', '3:7')") + solvent1: str = Field(..., description="第一种溶剂名称") <新写的,没问题> + solvent2: str = Field(..., description="第二种溶剂名称") + vessel: str = Field(..., description="目标容器") + volume: float = Field(..., description="总体积 (mL)") + +class HydrogenateProtocol(BaseModel): + temp: str = Field(..., description="反应温度(如 '45 °C')") + time: str = Field(..., description="反应时间(如 '2 h')") <新写的,没问题> + vessel: str = Field(..., description="反应容器") + + 还差 + + + + + +单位修复: + evaporate + heatchill + recrysitallize + stir + wash solid \ No newline at end of file diff --git a/test/experiments/comprehensive_protocol/comprehensive_slim.json b/test/experiments/comprehensive_protocol/comprehensive_slim.json new file mode 100644 index 0000000..d9dd773 --- /dev/null +++ b/test/experiments/comprehensive_protocol/comprehensive_slim.json @@ -0,0 +1,70 @@ +{ + "nodes": [ + { + "id": "OrganicSynthesisStation", + "name": "有机化学流程综合测试工作站", + "children": [ + "heater_1" + ], + "parent": null, + "type": "device", + "class": "workstation", + "position": { + "x": 600, + "y": 400, + "z": 0 + }, + "config": { + "protocol_type": [ + "AddProtocol", + "TransferProtocol", + "StartStirProtocol", + "StopStirProtocol", + "StirProtocol", + "RunColumnProtocol", + "CentrifugeProtocol", + "FilterProtocol", + "CleanVesselProtocol", + "DissolveProtocol", + "FilterThroughProtocol", + "WashSolidProtocol", + "SeparateProtocol", + "EvaporateProtocol", + "HeatChillProtocol", + "HeatChillStartProtocol", + "HeatChillStopProtocol", + "EvacuateAndRefillProtocol", + "PumpTransferProtocol", + "AdjustPHProtocol", + "ResetHandlingProtocol", + "DryProtocol", + "HydrogenateProtocol", + "RecrystallizeProtocol" + ] + }, + "data": {} + }, + { + "id": "heater_1", + "name": "加热器", + "children": [], + "parent": "OrganicSynthesisStation", + "type": "device", + "class": "virtual_heatchill", + "position": { + "x": 450, + "y": 450, + "z": 0 + }, + "config": { + "max_temp": 200.0, + "min_temp": -20.0 + }, + "data": { + "status": "Idle", + "current_temp": 25.0 + } + } + ], + "links": [] +} \ No newline at end of file diff --git a/test/experiments/comprehensive_protocol/comprehensive_station.json b/test/experiments/comprehensive_protocol/comprehensive_station.json index 071d913..43e4cc6 100644 --- a/test/experiments/comprehensive_protocol/comprehensive_station.json +++ b/test/experiments/comprehensive_protocol/comprehensive_station.json @@ -23,14 +23,20 @@ "waste_bottle_2", "solenoid_valve_1", "solenoid_valve_2", + "solenoid_valve_3", "vacuum_pump_1", "gas_source_1", + "h2_gas_source", "filter_1", "column_1", "separator_1", "collection_bottle_1", "collection_bottle_2", - "collection_bottle_3" + "collection_bottle_3", + "solid_dispenser_1", + "solid_reagent_bottle_1", + "solid_reagent_bottle_2", + "solid_reagent_bottle_3" ], "parent": null, "type": "device", @@ -60,7 +66,12 @@ "HeatChillStartProtocol", "HeatChillStopProtocol", "EvacuateAndRefillProtocol", - "PumpTransferProtocol" + "PumpTransferProtocol", + "AdjustPHProtocol", + "ResetHandlingProtocol", + "DryProtocol", + "HydrogenateProtocol", + "RecrystallizeProtocol" ] }, "data": {} @@ -461,6 +472,28 @@ "is_open": false } }, + { + "id": "solenoid_valve_3", + "name": "氢气电磁阀", + "children": [], + "parent": "OrganicSynthesisStation", + "type": "device", + "class": "virtual_solenoid_valve", + "position": { + "x": 450, + "y": 400, + "z": 0 + }, + "config": { + "voltage": 12.0, + "response_time": 0.1, + "gas_compatible": true + }, + "data": { + "valve_state": "Closed", + "is_open": false + } + }, { "id": "vacuum_pump_1", "name": "真空泵", @@ -500,6 +533,29 @@ "max_pressure": 5.0 } }, + { + "id": "h2_gas_source", + "name": "氢气气源", + "children": [], + "parent": "OrganicSynthesisStation", + "type": "device", + "class": "virtual_gas_source", + "position": { + "x": 500, + "y": 350, + "z": 0 + }, + "config": { + "max_pressure": 10.0, + "gas_type": "hydrogen" + }, + "data": { + "gas_type": "hydrogen", + "max_pressure": 10.0, + "current_pressure": 0.0, + "status": "OFF" + } + }, { "id": "filter_1", "name": "过滤器", @@ -620,6 +676,98 @@ "data": { "current_volume": 0.0 } + }, + { + "id": "solid_dispenser_1", + "name": "固体粉末加样器", + "children": [], + "parent": "OrganicSynthesisStation", + "type": "device", + "class": "virtual_solid_dispenser", + "position": { + "x": 600, + "y": 300, + "z": 0 + }, + "config": { + "max_capacity": 100.0, + "precision": 0.001 + }, + "data": { + "status": "Ready", + "current_reagent": "", + "dispensed_amount": 0.0, + "total_operations": 0 + } + }, + { + "id": "solid_reagent_bottle_1", + "name": "固体试剂瓶1-氯化钠", + "children": [], + "parent": "OrganicSynthesisStation", + "type": "container", + "class": "container", + "position": { + "x": 550, + "y": 250, + "z": 0 + }, + "config": { + "volume": 500.0, + "reagent": "sodium_chloride", + "physical_state": "solid" + }, + "data": { + "current_mass": 500.0, + "reagent_name": "sodium_chloride", + "physical_state": "solid" + } + }, + { + "id": "solid_reagent_bottle_2", + "name": "固体试剂瓶2-碳酸钠", + "children": [], + "parent": "OrganicSynthesisStation", + "type": "container", + "class": "container", + "position": { + "x": 600, + "y": 250, + "z": 0 + }, + "config": { + "volume": 500.0, + "reagent": "sodium_carbonate", + "physical_state": "solid" + }, + "data": { + "current_mass": 500.0, + "reagent_name": "sodium_carbonate", + "physical_state": "solid" + } + }, + { + "id": "solid_reagent_bottle_3", + "name": "固体试剂瓶3-氯化镁", + "children": [], + "parent": "OrganicSynthesisStation", + "type": "container", + "class": "container", + "position": { + "x": 650, + "y": 250, + "z": 0 + }, + "config": { + "volume": 500.0, + "reagent": "magnesium_chloride", + "physical_state": "solid" + }, + "data": { + "current_mass": 500.0, + "reagent_name": "magnesium_chloride", + "physical_state": "solid" + } } ], "links": [ @@ -680,7 +828,7 @@ "type": "fluid", "port": { "multiway_valve_1": "5", - "rotavap_1": "sample_in" + "rotavap_1": "samplein" } }, { @@ -750,7 +898,7 @@ "type": "fluid", "port": { "multiway_valve_2": "3", - "solenoid_valve_2": "in" + "solenoid_valve_2": "out" } }, { @@ -760,7 +908,7 @@ "type": "fluid", "port": { "gas_source_1": "gassource", - "solenoid_valve_2": "out" + "solenoid_valve_2": "in" } }, { @@ -770,7 +918,7 @@ "type": "transport", "port": { "multiway_valve_2": "4", - "filter_1": "filter_in" + "filter_1": "filterin" } }, { @@ -800,7 +948,7 @@ "type": "fluid", "port": { "multiway_valve_2": "6", - "separator_1": "separator_in" + "separator_1": "separatorin" } }, { @@ -809,7 +957,7 @@ "target": "collection_bottle_3", "type": "fluid", "port": { - "separator_1": "bottom_phase_out", + "separator_1": "bottomphaseout", "collection_bottle_3": "top" } }, @@ -859,7 +1007,7 @@ "target": "waste_bottle_2", "type": "fluid", "port": { - "separator_1": "top_phase_out", + "separator_1": "topphaseout", "waste_bottle_2": "top" } }, @@ -874,14 +1022,14 @@ } }, { - "id": "link_filter_filtrate_to_collection1", - "source": "filter_1", - "target": "collection_bottle_1", - "type": "transport", - "port": { - "filter_1": "filtrate_out", - "collection_bottle_1": "top" - } + "id": "link_filter_filtrate_to_collection1", + "source": "filter_1", + "target": "collection_bottle_1", + "type": "transport", + "port": { + "filter_1": "filtrateout", + "collection_bottle_1": "top" + } }, { "id": "link_filter_retentate_to_waste1", @@ -889,9 +1037,69 @@ "target": "waste_bottle_1", "type": "transport", "port": { - "filter_1": "retentate_out", + "filter_1": "retentateout", "waste_bottle_1": "top" } + }, + { + "id": "link_h2_gas_to_valve3", + "source": "h2_gas_source", + "target": "solenoid_valve_3", + "type": "fluid", + "port": { + "h2_gas_source": "gassource", + "solenoid_valve_3": "in" + } + }, + { + "id": "link_valve3_to_reactor", + "source": "solenoid_valve_3", + "target": "main_reactor", + "type": "fluid", + "port": { + "solenoid_valve_3": "out", + "main_reactor": "top" + } + }, + { + "id": "link_solid_dispenser_to_reactor", + "source": "solid_dispenser_1", + "target": "main_reactor", + "type": "resource", + "port": { + "solid_dispenser_1": "SolidOut", + "main_reactor": "top" + } + }, + { + "id": "link_solid_bottle1_to_dispenser", + "source": "solid_reagent_bottle_1", + "target": "solid_dispenser_1", + "type": "resource", + "port": { + "solid_reagent_bottle_1": "top", + "solid_dispenser_1": "SolidIn" + } + }, + { + "id": "link_solid_bottle2_to_dispenser", + "source": "solid_reagent_bottle_2", + "target": "solid_dispenser_1", + "type": "resource", + "port": { + "solid_reagent_bottle_2": "top", + "solid_dispenser_1": "SolidIn" + } + }, + { + "id": "link_solid_bottle3_to_dispenser", + "source": "solid_reagent_bottle_3", + "target": "solid_dispenser_1", + "type": "resource", + "port": { + "solid_reagent_bottle_3": "top", + "solid_dispenser_1": "SolidIn" + } } ] } \ No newline at end of file diff --git a/test/experiments/prcxi.json b/test/experiments/prcxi.json new file mode 100644 index 0000000..a6c93a3 --- /dev/null +++ b/test/experiments/prcxi.json @@ -0,0 +1,13567 @@ +{ + "nodes": [ + { + "id": "PRCXI", + "name": "PRCXI", + "parent": null, + "type": "device", + "class": "liquid_handler.prcxi", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "deck": { + "_resource_child_name": "PRCXI_Deck", + "_resource_type": "unilabos.devices.liquid_handling.prcxi.prcxi:PRCXI9300Deck" + }, + "host": "10.181.102.13", + "port": 9999, + "timeout": 10.0, + "axis": "Right", + "channel_num": 1, + "setup": true, + "debug": false, + "simulator": false, + "matrix_id": "fd383e6d-2d0e-40b5-9c01-1b2870b1f1b1" + }, + "data": {}, + "children": [ + "PRCXI_Deck" + ] + }, + { + "id": "PRCXI_Deck", + "name": "PRCXI_Deck", + "sample_id": null, + "children": [ + "HPLCPlateT1", + "container_for_nothing1", + "container_for_nothing2", + "trash", + "container_for_nothing3", + "container_for_nothing", + "container_for_nothing4", + "RackT8", + "container_for_nothing5", + "container_for_nothing6", + "PlateT11", + "container_for_nothing7", + "container_for_nothing8" + ], + "parent": "lh_PRCXI_Deck", + "type": "deck", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Deck", + "size_x": 100, + "size_y": 100, + "size_z": 100, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "deck", + "barcode": null + }, + "data": {} + }, + { + "id": "HPLCPlateT1", + "name": "HPLCPlateT1", + "sample_id": null, + "children": [ + "HPLCPlateT1_A1", + "HPLCPlateT1_B1", + "HPLCPlateT1_C1", + "HPLCPlateT1_D1", + "HPLCPlateT1_E1", + "HPLCPlateT1_F1", + "HPLCPlateT1_G1", + "HPLCPlateT1_H1", + "HPLCPlateT1_A2", + "HPLCPlateT1_B2", + "HPLCPlateT1_C2", + "HPLCPlateT1_D2", + "HPLCPlateT1_E2", + "HPLCPlateT1_F2", + "HPLCPlateT1_G2", + "HPLCPlateT1_H2", + "HPLCPlateT1_A3", + "HPLCPlateT1_B3", + "HPLCPlateT1_C3", + "HPLCPlateT1_D3", + "HPLCPlateT1_E3", + "HPLCPlateT1_F3", + "HPLCPlateT1_G3", + "HPLCPlateT1_H3", + "HPLCPlateT1_A4", + "HPLCPlateT1_B4", + "HPLCPlateT1_C4", + "HPLCPlateT1_D4", + "HPLCPlateT1_E4", + "HPLCPlateT1_F4", + "HPLCPlateT1_G4", + "HPLCPlateT1_H4", + "HPLCPlateT1_A5", + "HPLCPlateT1_B5", + "HPLCPlateT1_C5", + "HPLCPlateT1_D5", + "HPLCPlateT1_E5", + "HPLCPlateT1_F5", + "HPLCPlateT1_G5", + "HPLCPlateT1_H5", + "HPLCPlateT1_A6", + "HPLCPlateT1_B6", + "HPLCPlateT1_C6", + "HPLCPlateT1_D6", + "HPLCPlateT1_E6", + "HPLCPlateT1_F6", + "HPLCPlateT1_G6", + "HPLCPlateT1_H6", + "HPLCPlateT1_A7", + "HPLCPlateT1_B7", + "HPLCPlateT1_C7", + "HPLCPlateT1_D7", + "HPLCPlateT1_E7", + "HPLCPlateT1_F7", + "HPLCPlateT1_G7", + "HPLCPlateT1_H7", + "HPLCPlateT1_A8", + "HPLCPlateT1_B8", + "HPLCPlateT1_C8", + "HPLCPlateT1_D8", + "HPLCPlateT1_E8", + "HPLCPlateT1_F8", + "HPLCPlateT1_G8", + "HPLCPlateT1_H8", + "HPLCPlateT1_A9", + "HPLCPlateT1_B9", + "HPLCPlateT1_C9", + "HPLCPlateT1_D9", + "HPLCPlateT1_E9", + "HPLCPlateT1_F9", + "HPLCPlateT1_G9", + "HPLCPlateT1_H9", + "HPLCPlateT1_A10", + "HPLCPlateT1_B10", + "HPLCPlateT1_C10", + "HPLCPlateT1_D10", + "HPLCPlateT1_E10", + "HPLCPlateT1_F10", + "HPLCPlateT1_G10", + "HPLCPlateT1_H10", + "HPLCPlateT1_A11", + "HPLCPlateT1_B11", + "HPLCPlateT1_C11", + "HPLCPlateT1_D11", + "HPLCPlateT1_E11", + "HPLCPlateT1_F11", + "HPLCPlateT1_G11", + "HPLCPlateT1_H11", + "HPLCPlateT1_A12", + "HPLCPlateT1_B12", + "HPLCPlateT1_C12", + "HPLCPlateT1_D12", + "HPLCPlateT1_E12", + "HPLCPlateT1_F12", + "HPLCPlateT1_G12", + "HPLCPlateT1_H12" + ], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": { + "Material": { + "uuid": "548bbc3df0d4447586f2c19d2c0c0c55", + "Code": "HPLC01", + "Name": "HPLC料盘" + } + } + }, + { + "id": "HPLCPlateT1_A1", + "name": "HPLCPlateT1_A1", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B1", + "name": "HPLCPlateT1_B1", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C1", + "name": "HPLCPlateT1_C1", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D1", + "name": "HPLCPlateT1_D1", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E1", + "name": "HPLCPlateT1_E1", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F1", + "name": "HPLCPlateT1_F1", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G1", + "name": "HPLCPlateT1_G1", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H1", + "name": "HPLCPlateT1_H1", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A2", + "name": "HPLCPlateT1_A2", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B2", + "name": "HPLCPlateT1_B2", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C2", + "name": "HPLCPlateT1_C2", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D2", + "name": "HPLCPlateT1_D2", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E2", + "name": "HPLCPlateT1_E2", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F2", + "name": "HPLCPlateT1_F2", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G2", + "name": "HPLCPlateT1_G2", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H2", + "name": "HPLCPlateT1_H2", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A3", + "name": "HPLCPlateT1_A3", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B3", + "name": "HPLCPlateT1_B3", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C3", + "name": "HPLCPlateT1_C3", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D3", + "name": "HPLCPlateT1_D3", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E3", + "name": "HPLCPlateT1_E3", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F3", + "name": "HPLCPlateT1_F3", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G3", + "name": "HPLCPlateT1_G3", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H3", + "name": "HPLCPlateT1_H3", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A4", + "name": "HPLCPlateT1_A4", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B4", + "name": "HPLCPlateT1_B4", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C4", + "name": "HPLCPlateT1_C4", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D4", + "name": "HPLCPlateT1_D4", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E4", + "name": "HPLCPlateT1_E4", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F4", + "name": "HPLCPlateT1_F4", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G4", + "name": "HPLCPlateT1_G4", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H4", + "name": "HPLCPlateT1_H4", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A5", + "name": "HPLCPlateT1_A5", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B5", + "name": "HPLCPlateT1_B5", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C5", + "name": "HPLCPlateT1_C5", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D5", + "name": "HPLCPlateT1_D5", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E5", + "name": "HPLCPlateT1_E5", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F5", + "name": "HPLCPlateT1_F5", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G5", + "name": "HPLCPlateT1_G5", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H5", + "name": "HPLCPlateT1_H5", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A6", + "name": "HPLCPlateT1_A6", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B6", + "name": "HPLCPlateT1_B6", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C6", + "name": "HPLCPlateT1_C6", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D6", + "name": "HPLCPlateT1_D6", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E6", + "name": "HPLCPlateT1_E6", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F6", + "name": "HPLCPlateT1_F6", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G6", + "name": "HPLCPlateT1_G6", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H6", + "name": "HPLCPlateT1_H6", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A7", + "name": "HPLCPlateT1_A7", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B7", + "name": "HPLCPlateT1_B7", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C7", + "name": "HPLCPlateT1_C7", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D7", + "name": "HPLCPlateT1_D7", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E7", + "name": "HPLCPlateT1_E7", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F7", + "name": "HPLCPlateT1_F7", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G7", + "name": "HPLCPlateT1_G7", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H7", + "name": "HPLCPlateT1_H7", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A8", + "name": "HPLCPlateT1_A8", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B8", + "name": "HPLCPlateT1_B8", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C8", + "name": "HPLCPlateT1_C8", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D8", + "name": "HPLCPlateT1_D8", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E8", + "name": "HPLCPlateT1_E8", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F8", + "name": "HPLCPlateT1_F8", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G8", + "name": "HPLCPlateT1_G8", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H8", + "name": "HPLCPlateT1_H8", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A9", + "name": "HPLCPlateT1_A9", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B9", + "name": "HPLCPlateT1_B9", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C9", + "name": "HPLCPlateT1_C9", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D9", + "name": "HPLCPlateT1_D9", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E9", + "name": "HPLCPlateT1_E9", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F9", + "name": "HPLCPlateT1_F9", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G9", + "name": "HPLCPlateT1_G9", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H9", + "name": "HPLCPlateT1_H9", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A10", + "name": "HPLCPlateT1_A10", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B10", + "name": "HPLCPlateT1_B10", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C10", + "name": "HPLCPlateT1_C10", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D10", + "name": "HPLCPlateT1_D10", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E10", + "name": "HPLCPlateT1_E10", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F10", + "name": "HPLCPlateT1_F10", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G10", + "name": "HPLCPlateT1_G10", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H10", + "name": "HPLCPlateT1_H10", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A11", + "name": "HPLCPlateT1_A11", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B11", + "name": "HPLCPlateT1_B11", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C11", + "name": "HPLCPlateT1_C11", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D11", + "name": "HPLCPlateT1_D11", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E11", + "name": "HPLCPlateT1_E11", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F11", + "name": "HPLCPlateT1_F11", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G11", + "name": "HPLCPlateT1_G11", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H11", + "name": "HPLCPlateT1_H11", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A12", + "name": "HPLCPlateT1_A12", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B12", + "name": "HPLCPlateT1_B12", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C12", + "name": "HPLCPlateT1_C12", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D12", + "name": "HPLCPlateT1_D12", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E12", + "name": "HPLCPlateT1_E12", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F12", + "name": "HPLCPlateT1_F12", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G12", + "name": "HPLCPlateT1_G12", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H12", + "name": "HPLCPlateT1_H12", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "container_for_nothing1", + "name": "container_for_nothing1", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "container_for_nothing2", + "name": "container_for_nothing2", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "trash", + "name": "trash", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "container", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Trash", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "trash", + "model": null, + "barcode": null, + "max_volume": "Infinity", + "material_z_thickness": 0, + "compute_volume_from_height": null, + "compute_height_from_volume": null + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [], + "Material": { + "uuid": "730067cf07ae43849ddf4034299030e9" + } + } + }, + { + "id": "container_for_nothing3", + "name": "container_for_nothing3", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "container_for_nothing", + "name": "container_for_nothing", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "container_for_nothing4", + "name": "container_for_nothing4", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "RackT8", + "name": "RackT8", + "sample_id": null, + "children": [ + "name_A1", + "name_B1", + "name_C1", + "name_D1", + "name_E1", + "name_F1", + "name_G1", + "name_H1", + "name_A2", + "name_B2", + "name_C2", + "name_D2", + "name_E2", + "name_F2", + "name_G2", + "name_H2", + "name_A3", + "name_B3", + "name_C3", + "name_D3", + "name_E3", + "name_F3", + "name_G3", + "name_H3", + "name_A4", + "name_B4", + "name_C4", + "name_D4", + "name_E4", + "name_F4", + "name_G4", + "name_H4", + "name_A5", + "name_B5", + "name_C5", + "name_D5", + "name_E5", + "name_F5", + "name_G5", + "name_H5", + "name_A6", + "name_B6", + "name_C6", + "name_D6", + "name_E6", + "name_F6", + "name_G6", + "name_H6", + "name_A7", + "name_B7", + "name_C7", + "name_D7", + "name_E7", + "name_F7", + "name_G7", + "name_H7", + "name_A8", + "name_B8", + "name_C8", + "name_D8", + "name_E8", + "name_F8", + "name_G8", + "name_H8", + "name_A9", + "name_B9", + "name_C9", + "name_D9", + "name_E9", + "name_F9", + "name_G9", + "name_H9", + "name_A10", + "name_B10", + "name_C10", + "name_D10", + "name_E10", + "name_F10", + "name_G10", + "name_H10", + "name_A11", + "name_B11", + "name_C11", + "name_D11", + "name_E11", + "name_F11", + "name_G11", + "name_H11", + "name_A12", + "name_B12", + "name_C12", + "name_D12", + "name_E12", + "name_F12", + "name_G12", + "name_H12" + ], + "parent": "PRCXI_Deck", + "type": "container", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_rack", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": { + "Material": { + "uuid": "068b3815e36b4a72a59bae017011b29f", + "Code": "ZX-001-10+", + "Name": "10μL加长 Tip头" + } + } + }, + { + "id": "name_A1", + "name": "name_A1", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 13.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B1", + "name": "name_B1", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 13.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C1", + "name": "name_C1", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 13.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D1", + "name": "name_D1", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 13.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E1", + "name": "name_E1", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 13.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F1", + "name": "name_F1", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 13.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G1", + "name": "name_G1", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 13.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H1", + "name": "name_H1", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 13.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A2", + "name": "name_A2", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 22.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B2", + "name": "name_B2", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 22.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C2", + "name": "name_C2", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 22.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D2", + "name": "name_D2", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 22.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E2", + "name": "name_E2", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 22.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F2", + "name": "name_F2", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 22.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G2", + "name": "name_G2", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 22.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H2", + "name": "name_H2", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 22.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A3", + "name": "name_A3", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 31.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B3", + "name": "name_B3", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 31.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C3", + "name": "name_C3", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 31.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D3", + "name": "name_D3", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 31.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E3", + "name": "name_E3", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 31.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F3", + "name": "name_F3", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 31.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G3", + "name": "name_G3", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 31.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H3", + "name": "name_H3", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 31.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A4", + "name": "name_A4", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 40.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B4", + "name": "name_B4", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 40.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C4", + "name": "name_C4", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 40.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D4", + "name": "name_D4", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 40.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E4", + "name": "name_E4", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 40.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F4", + "name": "name_F4", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 40.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G4", + "name": "name_G4", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 40.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H4", + "name": "name_H4", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 40.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A5", + "name": "name_A5", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 49.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B5", + "name": "name_B5", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 49.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C5", + "name": "name_C5", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 49.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D5", + "name": "name_D5", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 49.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E5", + "name": "name_E5", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 49.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F5", + "name": "name_F5", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 49.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G5", + "name": "name_G5", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 49.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H5", + "name": "name_H5", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 49.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A6", + "name": "name_A6", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 58.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B6", + "name": "name_B6", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 58.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C6", + "name": "name_C6", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 58.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D6", + "name": "name_D6", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 58.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E6", + "name": "name_E6", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 58.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F6", + "name": "name_F6", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 58.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G6", + "name": "name_G6", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 58.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H6", + "name": "name_H6", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 58.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A7", + "name": "name_A7", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 67.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B7", + "name": "name_B7", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 67.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C7", + "name": "name_C7", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 67.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D7", + "name": "name_D7", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 67.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E7", + "name": "name_E7", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 67.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F7", + "name": "name_F7", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 67.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G7", + "name": "name_G7", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 67.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H7", + "name": "name_H7", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 67.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A8", + "name": "name_A8", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 76.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B8", + "name": "name_B8", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 76.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C8", + "name": "name_C8", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 76.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D8", + "name": "name_D8", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 76.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E8", + "name": "name_E8", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 76.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F8", + "name": "name_F8", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 76.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G8", + "name": "name_G8", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 76.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H8", + "name": "name_H8", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 76.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A9", + "name": "name_A9", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 85.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B9", + "name": "name_B9", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 85.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C9", + "name": "name_C9", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 85.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D9", + "name": "name_D9", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 85.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E9", + "name": "name_E9", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 85.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F9", + "name": "name_F9", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 85.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G9", + "name": "name_G9", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 85.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H9", + "name": "name_H9", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 85.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A10", + "name": "name_A10", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 94.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B10", + "name": "name_B10", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 94.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C10", + "name": "name_C10", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 94.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D10", + "name": "name_D10", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 94.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E10", + "name": "name_E10", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 94.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F10", + "name": "name_F10", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 94.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G10", + "name": "name_G10", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 94.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H10", + "name": "name_H10", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 94.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A11", + "name": "name_A11", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 103.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B11", + "name": "name_B11", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 103.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C11", + "name": "name_C11", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 103.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D11", + "name": "name_D11", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 103.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E11", + "name": "name_E11", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 103.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F11", + "name": "name_F11", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 103.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G11", + "name": "name_G11", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 103.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H11", + "name": "name_H11", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 103.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A12", + "name": "name_A12", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 112.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B12", + "name": "name_B12", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 112.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C12", + "name": "name_C12", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 112.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D12", + "name": "name_D12", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 112.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E12", + "name": "name_E12", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 112.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F12", + "name": "name_F12", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 112.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G12", + "name": "name_G12", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 112.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H12", + "name": "name_H12", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 112.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "container_for_nothing5", + "name": "container_for_nothing5", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "container_for_nothing6", + "name": "container_for_nothing6", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "PlateT11", + "name": "PlateT11", + "sample_id": null, + "children": [ + "PlateT11_A1", + "PlateT11_B1", + "PlateT11_C1", + "PlateT11_D1", + "PlateT11_E1", + "PlateT11_F1", + "PlateT11_G1", + "PlateT11_H1", + "PlateT11_A2", + "PlateT11_B2", + "PlateT11_C2", + "PlateT11_D2", + "PlateT11_E2", + "PlateT11_F2", + "PlateT11_G2", + "PlateT11_H2", + "PlateT11_A3", + "PlateT11_B3", + "PlateT11_C3", + "PlateT11_D3", + "PlateT11_E3", + "PlateT11_F3", + "PlateT11_G3", + "PlateT11_H3", + "PlateT11_A4", + "PlateT11_B4", + "PlateT11_C4", + "PlateT11_D4", + "PlateT11_E4", + "PlateT11_F4", + "PlateT11_G4", + "PlateT11_H4", + "PlateT11_A5", + "PlateT11_B5", + "PlateT11_C5", + "PlateT11_D5", + "PlateT11_E5", + "PlateT11_F5", + "PlateT11_G5", + "PlateT11_H5", + "PlateT11_A6", + "PlateT11_B6", + "PlateT11_C6", + "PlateT11_D6", + "PlateT11_E6", + "PlateT11_F6", + "PlateT11_G6", + "PlateT11_H6", + "PlateT11_A7", + "PlateT11_B7", + "PlateT11_C7", + "PlateT11_D7", + "PlateT11_E7", + "PlateT11_F7", + "PlateT11_G7", + "PlateT11_H7", + "PlateT11_A8", + "PlateT11_B8", + "PlateT11_C8", + "PlateT11_D8", + "PlateT11_E8", + "PlateT11_F8", + "PlateT11_G8", + "PlateT11_H8", + "PlateT11_A9", + "PlateT11_B9", + "PlateT11_C9", + "PlateT11_D9", + "PlateT11_E9", + "PlateT11_F9", + "PlateT11_G9", + "PlateT11_H9", + "PlateT11_A10", + "PlateT11_B10", + "PlateT11_C10", + "PlateT11_D10", + "PlateT11_E10", + "PlateT11_F10", + "PlateT11_G10", + "PlateT11_H10", + "PlateT11_A11", + "PlateT11_B11", + "PlateT11_C11", + "PlateT11_D11", + "PlateT11_E11", + "PlateT11_F11", + "PlateT11_G11", + "PlateT11_H11", + "PlateT11_A12", + "PlateT11_B12", + "PlateT11_C12", + "PlateT11_D12", + "PlateT11_E12", + "PlateT11_F12", + "PlateT11_G12", + "PlateT11_H12" + ], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": { + "Material": { + "uuid": "57b1e4711e9e4a32b529f3132fc5931f" + } + } + }, + { + "id": "PlateT11_A1", + "name": "PlateT11_A1", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + "Water", + 100 + ] + ], + "pending_liquids": [ + [ + "Water", + 100 + ] + ], + "liquid_history": [ + "Water" + ] + } + }, + { + "id": "PlateT11_B1", + "name": "PlateT11_B1", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C1", + "name": "PlateT11_C1", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D1", + "name": "PlateT11_D1", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E1", + "name": "PlateT11_E1", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F1", + "name": "PlateT11_F1", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G1", + "name": "PlateT11_G1", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H1", + "name": "PlateT11_H1", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A2", + "name": "PlateT11_A2", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + "Water", + 100 + ] + ], + "pending_liquids": [ + [ + "Water", + 100 + ] + ], + "liquid_history": [ + "Water" + ] + } + }, + { + "id": "PlateT11_B2", + "name": "PlateT11_B2", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C2", + "name": "PlateT11_C2", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D2", + "name": "PlateT11_D2", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E2", + "name": "PlateT11_E2", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F2", + "name": "PlateT11_F2", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G2", + "name": "PlateT11_G2", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H2", + "name": "PlateT11_H2", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A3", + "name": "PlateT11_A3", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + "Water", + 100 + ] + ], + "pending_liquids": [ + [ + "Water", + 100 + ] + ], + "liquid_history": [ + "Water" + ] + } + }, + { + "id": "PlateT11_B3", + "name": "PlateT11_B3", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C3", + "name": "PlateT11_C3", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D3", + "name": "PlateT11_D3", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E3", + "name": "PlateT11_E3", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F3", + "name": "PlateT11_F3", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G3", + "name": "PlateT11_G3", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H3", + "name": "PlateT11_H3", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A4", + "name": "PlateT11_A4", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + "Water", + 100 + ] + ], + "pending_liquids": [ + [ + "Water", + 100 + ] + ], + "liquid_history": [ + "Water" + ] + } + }, + { + "id": "PlateT11_B4", + "name": "PlateT11_B4", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C4", + "name": "PlateT11_C4", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D4", + "name": "PlateT11_D4", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E4", + "name": "PlateT11_E4", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F4", + "name": "PlateT11_F4", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G4", + "name": "PlateT11_G4", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H4", + "name": "PlateT11_H4", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A5", + "name": "PlateT11_A5", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + "Water", + 100 + ] + ], + "pending_liquids": [ + [ + "Water", + 100 + ] + ], + "liquid_history": [ + "Water" + ] + } + }, + { + "id": "PlateT11_B5", + "name": "PlateT11_B5", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C5", + "name": "PlateT11_C5", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D5", + "name": "PlateT11_D5", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E5", + "name": "PlateT11_E5", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F5", + "name": "PlateT11_F5", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G5", + "name": "PlateT11_G5", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H5", + "name": "PlateT11_H5", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A6", + "name": "PlateT11_A6", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + "Water", + 100 + ] + ], + "pending_liquids": [ + [ + "Water", + 100 + ] + ], + "liquid_history": [ + "Water" + ] + } + }, + { + "id": "PlateT11_B6", + "name": "PlateT11_B6", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C6", + "name": "PlateT11_C6", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D6", + "name": "PlateT11_D6", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E6", + "name": "PlateT11_E6", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F6", + "name": "PlateT11_F6", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G6", + "name": "PlateT11_G6", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H6", + "name": "PlateT11_H6", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A7", + "name": "PlateT11_A7", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_B7", + "name": "PlateT11_B7", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C7", + "name": "PlateT11_C7", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D7", + "name": "PlateT11_D7", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E7", + "name": "PlateT11_E7", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F7", + "name": "PlateT11_F7", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G7", + "name": "PlateT11_G7", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H7", + "name": "PlateT11_H7", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A8", + "name": "PlateT11_A8", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_B8", + "name": "PlateT11_B8", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C8", + "name": "PlateT11_C8", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D8", + "name": "PlateT11_D8", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E8", + "name": "PlateT11_E8", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F8", + "name": "PlateT11_F8", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G8", + "name": "PlateT11_G8", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H8", + "name": "PlateT11_H8", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A9", + "name": "PlateT11_A9", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_B9", + "name": "PlateT11_B9", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C9", + "name": "PlateT11_C9", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D9", + "name": "PlateT11_D9", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E9", + "name": "PlateT11_E9", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F9", + "name": "PlateT11_F9", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G9", + "name": "PlateT11_G9", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H9", + "name": "PlateT11_H9", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A10", + "name": "PlateT11_A10", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_B10", + "name": "PlateT11_B10", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C10", + "name": "PlateT11_C10", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D10", + "name": "PlateT11_D10", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E10", + "name": "PlateT11_E10", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F10", + "name": "PlateT11_F10", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G10", + "name": "PlateT11_G10", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H10", + "name": "PlateT11_H10", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A11", + "name": "PlateT11_A11", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_B11", + "name": "PlateT11_B11", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C11", + "name": "PlateT11_C11", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D11", + "name": "PlateT11_D11", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E11", + "name": "PlateT11_E11", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F11", + "name": "PlateT11_F11", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G11", + "name": "PlateT11_G11", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H11", + "name": "PlateT11_H11", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A12", + "name": "PlateT11_A12", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_B12", + "name": "PlateT11_B12", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C12", + "name": "PlateT11_C12", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D12", + "name": "PlateT11_D12", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E12", + "name": "PlateT11_E12", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F12", + "name": "PlateT11_F12", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G12", + "name": "PlateT11_G12", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H12", + "name": "PlateT11_H12", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "container_for_nothing7", + "name": "container_for_nothing7", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "container_for_nothing8", + "name": "container_for_nothing8", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + } + ], + "links": [] +} \ No newline at end of file diff --git a/unilabos-linux-64.yaml b/unilabos-linux-64.yaml index aeac636..5a94764 100644 --- a/unilabos-linux-64.yaml +++ b/unilabos-linux-64.yaml @@ -48,8 +48,9 @@ dependencies: - ros-humble-ros2-control - ros-humble-robot-state-publisher - ros-humble-joint-state-publisher - # web + # web and visualization - ros-humble-rosbridge-server + - ros-humble-cv-bridge # geometry & motion planning - ros-humble-tf2 - ros-humble-moveit @@ -62,4 +63,5 @@ dependencies: # ilab equipments # - ros-humble-unilabos-msgs - pip: - - paho-mqtt \ No newline at end of file + - paho-mqtt + - opentrons_shared_data \ No newline at end of file diff --git a/unilabos-osx-64.yaml b/unilabos-osx-64.yaml index 72ffb4c..1c6db8d 100644 --- a/unilabos-osx-64.yaml +++ b/unilabos-osx-64.yaml @@ -62,4 +62,5 @@ dependencies: # ilab equipments # - ros-humble-unilabos-msgs - pip: - - paho-mqtt \ No newline at end of file + - paho-mqtt + - opentrons_shared_data \ No newline at end of file diff --git a/unilabos-osx-arm64.yaml b/unilabos-osx-arm64.yaml index 83ffe1b..8f40130 100644 --- a/unilabos-osx-arm64.yaml +++ b/unilabos-osx-arm64.yaml @@ -50,8 +50,9 @@ dependencies: - ros-humble-ros2-control - ros-humble-robot-state-publisher - ros-humble-joint-state-publisher - # web + # web and visualization - ros-humble-rosbridge-server + - ros-humble-cv-bridge # geometry & motion planning - ros-humble-tf2 - ros-humble-moveit @@ -64,4 +65,5 @@ dependencies: # ilab equipments # - ros-humble-unilabos-msgs - pip: - - paho-mqtt \ No newline at end of file + - paho-mqtt + - opentrons_shared_data \ No newline at end of file diff --git a/unilabos-win64.yaml b/unilabos-win64.yaml index 19a4008..bb4e832 100644 --- a/unilabos-win64.yaml +++ b/unilabos-win64.yaml @@ -6,12 +6,12 @@ channels: dependencies: # Basics - python=3.11.11 - - compilers - - cmake - - make - - ninja - - sphinx - - sphinx_rtd_theme + # - compilers + # - cmake + # - make + # - ninja + # - sphinx + # - sphinx_rtd_theme # Data Visualization - numpy - scipy @@ -23,7 +23,7 @@ dependencies: - pyserial - pyusb - pylibftdi - - pymodbus + - pymodbus==3.6.9 - python-can - pyvisa - opencv @@ -48,8 +48,9 @@ dependencies: - ros-humble-ros2-control - ros-humble-robot-state-publisher - ros-humble-joint-state-publisher - # web + # web and visualization - ros-humble-rosbridge-server + - ros-humble-cv-bridge # geometry & motion planning - ros-humble-tf2 - ros-humble-moveit @@ -61,5 +62,13 @@ dependencies: # ros-humble-gazebo-ros // ignored because of the conflict with ign-gazebo # ilab equipments # ros-humble-unilabos-msgs + # driver + #- crcmod - pip: - - paho-mqtt \ No newline at end of file + - paho-mqtt + - opentrons_shared_data + # driver + #- ur-rtde # set PYTHONUTF8=1 + #- pyautogui + #- pywinauto + #- pywinauto_recorder \ No newline at end of file diff --git a/unilabos/app/controler.py b/unilabos/app/controler.py index 5d55256..d23470f 100644 --- a/unilabos/app/controler.py +++ b/unilabos/app/controler.py @@ -1,8 +1,10 @@ import json +import traceback import uuid from unilabos.app.model import JobAddReq, JobData from unilabos.ros.nodes.presets.host_node import HostNode +from unilabos.utils.type_check import serialize_result_info def get_resources() -> tuple: @@ -25,12 +27,19 @@ def job_add(req: JobAddReq) -> JobData: if req.job_id is None: req.job_id = str(uuid.uuid4()) action_name = req.data["action"] - action_kwargs = req.data["action_kwargs"] - req.data['action'] = action_name - if action_name == "execute_command_from_outer": - action_kwargs = {"command": json.dumps(action_kwargs)} - elif "command" in action_kwargs: - action_kwargs = action_kwargs["command"] + action_type = req.data.get("action_type", "LocalUnknown") + action_args = req.data.get("action_kwargs", None) # 兼容老版本,后续删除 + if action_args is None: + action_args = req.data.get("action_args") + else: + if "command" in action_args: + action_args = action_args["command"] # print(f"job_add:{req.device_id} {action_name} {action_kwargs}") - HostNode.get_instance().send_goal(req.device_id, action_name=action_name, action_kwargs=action_kwargs, goal_uuid=req.job_id, server_info=req.server_info) + try: + HostNode.get_instance().send_goal(req.device_id, action_type=action_type, action_name=action_name, action_kwargs=action_args, goal_uuid=req.job_id, server_info=req.server_info) + except Exception as e: + for bridge in HostNode.get_instance().bridges: + traceback.print_exc() + if hasattr(bridge, "publish_job_status"): + bridge.publish_job_status({}, req.job_id, "failed", serialize_result_info(traceback.format_exc(), False, {})) return JobData(jobId=req.job_id) diff --git a/unilabos/app/mq.py b/unilabos/app/mq.py index 1dbfba9..c569c04 100644 --- a/unilabos/app/mq.py +++ b/unilabos/app/mq.py @@ -56,6 +56,10 @@ class MQTTClient: payload_json["data"] = {} if "action" in payload_json: payload_json["data"]["action"] = payload_json.pop("action") + if "action_type" in payload_json: + payload_json["data"]["action_type"] = payload_json.pop("action_type") + if "action_args" in payload_json: + payload_json["data"]["action_args"] = payload_json.pop("action_args") if "action_kwargs" in payload_json: payload_json["data"]["action_kwargs"] = payload_json.pop("action_kwargs") job_req = JobAddReq.model_validate(payload_json) diff --git a/unilabos/app/register.py b/unilabos/app/register.py index 76ad5a5..7a78cf9 100644 --- a/unilabos/app/register.py +++ b/unilabos/app/register.py @@ -18,10 +18,22 @@ def register_devices_and_resources(mqtt_client, lab_registry): mqtt_client.publish_registry(device_info["id"], device_info, False) logger.debug(f"[UniLab Register] 注册设备: {device_info['id']}") - # 注册资源信息 + # 注册资源信息 - 使用HTTP方式 + from unilabos.app.web.client import http_client + + resources_to_register = {} for resource_info in lab_registry.obtain_registry_resource_info(): - mqtt_client.publish_registry(resource_info["id"], resource_info, False) - logger.debug(f"[UniLab Register] 注册资源: {resource_info['id']}") + resources_to_register[resource_info["id"]] = resource_info + logger.debug(f"[UniLab Register] 准备注册资源: {resource_info['id']}") + + if resources_to_register: + start_time = time.time() + response = http_client.resource_registry(resources_to_register) + cost_time = time.time() - start_time + if response.status_code in [200, 201]: + logger.info(f"[UniLab Register] 成功通过HTTP注册 {len(resources_to_register)} 个资源 {cost_time}ms") + else: + logger.error(f"[UniLab Register] HTTP注册资源失败: {response.status_code}, {response.text} {cost_time}ms") time.sleep(10) @@ -34,7 +46,7 @@ def main(): """ parser = argparse.ArgumentParser(description="注册设备和资源到 MQTT") parser.add_argument( - "--registry_path", + "--registry", type=str, default=None, action="append", @@ -46,12 +58,16 @@ def main(): default=None, help="配置文件路径,支持.py格式的Python配置文件", ) + parser.add_argument( + "--complete_registry", + action="store_true", + default=False, + help="是否补全注册表", + ) args = parser.parse_args() - - # 构建注册表 - build_registry(args.registry_path) load_config_from_file(args.config) - + # 构建注册表 + build_registry(args.registry, args.complete_registry) from unilabos.app.mq import mqtt_client # 连接mqtt @@ -64,4 +80,4 @@ def main(): if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/unilabos/app/web/client.py b/unilabos/app/web/client.py index 09b6ede..923e904 100644 --- a/unilabos/app/web/client.py +++ b/unilabos/app/web/client.py @@ -40,8 +40,9 @@ class HTTPClient: Returns: Response: API响应对象 """ + database_param = 1 if database_process_later else 0 response = requests.post( - f"{self.remote_addr}/lab/resource/edge/batch_create/?database_process_later={1 if database_process_later else 0}", + f"{self.remote_addr}/lab/resource/edge/batch_create/?database_process_later={database_param}", json=resources, headers={"Authorization": f"lab {self.auth}"}, timeout=100, @@ -149,6 +150,26 @@ class HTTPClient: ) return response + def resource_registry(self, registry_data: Dict[str, Any]) -> requests.Response: + """ + 注册资源到服务器 + + Args: + registry_data: 注册表数据,格式为 {resource_id: resource_info} + + Returns: + Response: API响应对象 + """ + response = requests.post( + f"{self.remote_addr}/lab/registry/", + json=registry_data, + headers={"Authorization": f"lab {self.auth}"}, + timeout=30, + ) + if response.status_code not in [200, 201]: + logger.error(f"注册资源失败: {response.status_code}, {response.text}") + return response + # 创建默认客户端实例 http_client = HTTPClient() diff --git a/unilabos/app/web/pages.py b/unilabos/app/web/pages.py index 51b109b..9f9a6c0 100644 --- a/unilabos/app/web/pages.py +++ b/unilabos/app/web/pages.py @@ -7,6 +7,7 @@ Web页面模块 import json import os import sys +import traceback from pathlib import Path from typing import Dict @@ -17,7 +18,7 @@ from jinja2 import Environment, FileSystemLoader from unilabos.config.config import BasicConfig from unilabos.registry.registry import lab_registry from unilabos.ros.msgs.message_converter import msg_converter_manager -from unilabos.utils.log import error +from unilabos.utils.log import error, debug from unilabos.utils.type_check import TypeEncoder from unilabos.app.web.utils.device_utils import get_registry_info from unilabos.app.web.utils.host_utils import get_host_node_info @@ -123,6 +124,7 @@ def setup_web_pages(router: APIRouter) -> None: return html except Exception as e: + debug(traceback.format_exc()) error(f"生成状态页面时出错: {str(e)}") raise HTTPException(status_code=500, detail=f"Error generating status page: {str(e)}") diff --git a/unilabos/app/web/utils/action_utils.py b/unilabos/app/web/utils/action_utils.py index be2baa3..233506d 100644 --- a/unilabos/app/web/utils/action_utils.py +++ b/unilabos/app/web/utils/action_utils.py @@ -65,6 +65,8 @@ def get_yaml_from_goal_type(goal_type) -> str: Returns: str: 默认Goal参数的YAML格式字符串 """ + if isinstance(goal_type, str): + return "{}" if not goal_type: return "{}" diff --git a/unilabos/compile/__init__.py b/unilabos/compile/__init__.py index 98ea8a2..ef6f8c6 100644 --- a/unilabos/compile/__init__.py +++ b/unilabos/compile/__init__.py @@ -21,16 +21,23 @@ from .dissolve_protocol import generate_dissolve_protocol from .filter_through_protocol import generate_filter_through_protocol from .run_column_protocol import generate_run_column_protocol from .wash_solid_protocol import generate_wash_solid_protocol +from .adjustph_protocol import generate_adjust_ph_protocol +from .reset_handling_protocol import generate_reset_handling_protocol +from .dry_protocol import generate_dry_protocol +from .recrystallize_protocol import generate_recrystallize_protocol +from .hydrogenate_protocol import generate_hydrogenate_protocol # Define a dictionary of protocol generators. action_protocol_generators = { AddProtocol: generate_add_protocol, AGVTransferProtocol: generate_agv_transfer_protocol, + AdjustPHProtocol: generate_adjust_ph_protocol, CentrifugeProtocol: generate_centrifuge_protocol, CleanProtocol: generate_clean_protocol, CleanVesselProtocol: generate_clean_vessel_protocol, DissolveProtocol: generate_dissolve_protocol, + DryProtocol: generate_dry_protocol, EvacuateAndRefillProtocol: generate_evacuateandrefill_protocol, EvaporateProtocol: generate_evaporate_protocol, FilterProtocol: generate_filter_protocol, @@ -38,7 +45,10 @@ action_protocol_generators = { HeatChillProtocol: generate_heat_chill_protocol, HeatChillStartProtocol: generate_heat_chill_start_protocol, HeatChillStopProtocol: generate_heat_chill_stop_protocol, + HydrogenateProtocol: generate_hydrogenate_protocol, PumpTransferProtocol: generate_pump_protocol_with_rinsing, + RecrystallizeProtocol: generate_recrystallize_protocol, + ResetHandlingProtocol: generate_reset_handling_protocol, RunColumnProtocol: generate_run_column_protocol, SeparateProtocol: generate_separate_protocol, StartStirProtocol: generate_start_stir_protocol, diff --git a/unilabos/compile/add_protocol.py b/unilabos/compile/add_protocol.py index 144ec96..18497c1 100644 --- a/unilabos/compile/add_protocol.py +++ b/unilabos/compile/add_protocol.py @@ -1,627 +1,717 @@ import networkx as nx -from typing import List, Dict, Any +import re +import logging +from typing import List, Dict, Any, Union from .pump_protocol import generate_pump_protocol_with_rinsing +logger = logging.getLogger(__name__) -def find_reagent_vessel(G: nx.DiGraph, reagent: str) -> str: +def debug_print(message): + """调试输出""" + print(f"[ADD] {message}", flush=True) + logger.info(f"[ADD] {message}") + +def parse_volume_input(volume_input: Union[str, float]) -> float: """ - 根据试剂名称查找对应的试剂瓶,支持多种匹配模式: - 1. 容器名称匹配(如 flask_DMF, reagent_bottle_1-DMF) - 2. 容器内液体类型匹配(如 liquid_type: "DMF", name: "ethanol") - 3. 试剂名称匹配(如 reagent_name: "DMF", config.reagent: "ethyl_acetate") + 解析体积输入,支持带单位的字符串 Args: - G: 网络图 - reagent: 试剂名称 + volume_input: 体积输入(如 "2.7 mL", "2.67 mL", "?", 10.0) Returns: - str: 试剂瓶的vessel ID - - Raises: - ValueError: 如果找不到对应的试剂瓶 + float: 体积(毫升) """ - print(f"ADD_PROTOCOL: 正在查找试剂 '{reagent}' 的容器...") + if isinstance(volume_input, (int, float)): + debug_print(f"📏 体积输入为数值: {volume_input}") + return float(volume_input) - # 第一步:通过容器名称匹配 - possible_names = [ - f"flask_{reagent}", # flask_DMF, flask_ethanol - f"bottle_{reagent}", # bottle_DMF, bottle_ethanol - f"vessel_{reagent}", # vessel_DMF, vessel_ethanol - f"{reagent}_flask", # DMF_flask, ethanol_flask - f"{reagent}_bottle", # DMF_bottle, ethanol_bottle - f"{reagent}", # 直接用试剂名 - f"reagent_{reagent}", # reagent_DMF, reagent_ethanol - f"reagent_bottle_{reagent}", # reagent_bottle_DMF - ] - - # 尝试名称匹配 - for vessel_name in possible_names: - if vessel_name in G.nodes(): - print(f"ADD_PROTOCOL: 通过名称匹配找到容器: {vessel_name}") - return vessel_name - - # 第二步:通过模糊名称匹配(名称中包含试剂名) - for node_id in G.nodes(): - if G.nodes[node_id].get('type') == 'container': - # 检查节点ID或名称中是否包含试剂名 - node_name = G.nodes[node_id].get('name', '').lower() - if (reagent.lower() in node_id.lower() or - reagent.lower() in node_name): - print(f"ADD_PROTOCOL: 通过模糊名称匹配找到容器: {node_id} (名称: {node_name})") - return node_id - - # 第三步:通过液体类型匹配 - for node_id in G.nodes(): - if G.nodes[node_id].get('type') == 'container': - vessel_data = G.nodes[node_id].get('data', {}) - liquids = vessel_data.get('liquid', []) - - for liquid in liquids: - if isinstance(liquid, dict): - # 支持两种格式的液体类型字段 - liquid_type = liquid.get('liquid_type') or liquid.get('name', '') - reagent_name = vessel_data.get('reagent_name', '') - config_reagent = G.nodes[node_id].get('config', {}).get('reagent', '') - - # 检查多个可能的字段 - if (liquid_type.lower() == reagent.lower() or - reagent_name.lower() == reagent.lower() or - config_reagent.lower() == reagent.lower()): - print(f"ADD_PROTOCOL: 通过液体类型匹配找到容器: {node_id}") - print(f" - liquid_type: {liquid_type}") - print(f" - reagent_name: {reagent_name}") - print(f" - config.reagent: {config_reagent}") - return node_id - - # 第四步:列出所有可用的容器信息帮助调试 - available_containers = [] - for node_id in G.nodes(): - if G.nodes[node_id].get('type') == 'container': - vessel_data = G.nodes[node_id].get('data', {}) - config_data = G.nodes[node_id].get('config', {}) - liquids = vessel_data.get('liquid', []) - - container_info = { - 'id': node_id, - 'name': G.nodes[node_id].get('name', ''), - 'liquid_types': [], - 'reagent_name': vessel_data.get('reagent_name', ''), - 'config_reagent': config_data.get('reagent', '') - } - - for liquid in liquids: - if isinstance(liquid, dict): - liquid_type = liquid.get('liquid_type') or liquid.get('name', '') - if liquid_type: - container_info['liquid_types'].append(liquid_type) - - available_containers.append(container_info) - - print(f"ADD_PROTOCOL: 可用容器列表:") - for container in available_containers: - print(f" - {container['id']}: {container['name']}") - print(f" 液体类型: {container['liquid_types']}") - print(f" 试剂名称: {container['reagent_name']}") - print(f" 配置试剂: {container['config_reagent']}") - - raise ValueError(f"找不到试剂 '{reagent}' 对应的试剂瓶。尝试了名称匹配: {possible_names}") - - -def find_reagent_vessel_by_any_match(G: nx.DiGraph, reagent: str) -> str: - """ - 增强版试剂容器查找,支持各种匹配方式的别名函数 - """ - return find_reagent_vessel(G, reagent) - - -def get_vessel_reagent_volume(G: nx.DiGraph, vessel: str) -> float: - """获取容器中的试剂体积""" - if vessel not in G.nodes(): + if not volume_input or not str(volume_input).strip(): + debug_print(f"⚠️ 体积输入为空,返回0.0mL") return 0.0 - vessel_data = G.nodes[vessel].get('data', {}) - liquids = vessel_data.get('liquid', []) + volume_str = str(volume_input).lower().strip() + debug_print(f"🔍 解析体积输入: '{volume_str}'") - total_volume = 0.0 - for liquid in liquids: - if isinstance(liquid, dict): - # 支持两种格式:新格式 (name, volume) 和旧格式 (liquid_type, liquid_volume) - volume = liquid.get('volume') or liquid.get('liquid_volume', 0.0) - total_volume += volume + # 处理未知体积 + if volume_str in ['?', 'unknown', 'tbd', 'to be determined']: + default_volume = 10.0 # 默认10mL + debug_print(f"❓ 检测到未知体积,使用默认值: {default_volume}mL 🎯") + return default_volume - return total_volume + # 移除空格并提取数字和单位 + volume_clean = re.sub(r'\s+', '', volume_str) + + # 匹配数字和单位的正则表达式 + match = re.match(r'([0-9]*\.?[0-9]+)\s*(ml|l|μl|ul|microliter|milliliter|liter)?', volume_clean) + + if not match: + debug_print(f"❌ 无法解析体积: '{volume_str}',使用默认值10mL") + return 10.0 + + value = float(match.group(1)) + unit = match.group(2) or 'ml' # 默认单位为毫升 + + # 转换为毫升 + if unit in ['l', 'liter']: + volume = value * 1000.0 # L -> mL + debug_print(f"🔄 体积转换: {value}L → {volume}mL") + elif unit in ['μl', 'ul', 'microliter']: + volume = value / 1000.0 # μL -> mL + debug_print(f"🔄 体积转换: {value}μL → {volume}mL") + else: # ml, milliliter 或默认 + volume = value # 已经是mL + debug_print(f"✅ 体积已为mL: {volume}mL") + + return volume - -def get_vessel_reagent_types(G: nx.DiGraph, vessel: str) -> List[str]: - """获取容器中所有试剂的类型""" - if vessel not in G.nodes(): - return [] - - vessel_data = G.nodes[vessel].get('data', {}) - liquids = vessel_data.get('liquid', []) - - reagent_types = [] - for liquid in liquids: - if isinstance(liquid, dict): - # 支持两种格式的试剂类型字段 - reagent_type = liquid.get('liquid_type') or liquid.get('name', '') - if reagent_type: - reagent_types.append(reagent_type) - - # 同时检查配置中的试剂信息 - config_reagent = G.nodes[vessel].get('config', {}).get('reagent', '') - reagent_name = vessel_data.get('reagent_name', '') - - if config_reagent and config_reagent not in reagent_types: - reagent_types.append(config_reagent) - if reagent_name and reagent_name not in reagent_types: - reagent_types.append(reagent_name) - - return reagent_types - - -def find_vessels_by_reagent(G: nx.DiGraph, reagent: str) -> List[str]: +def parse_mass_input(mass_input: Union[str, float]) -> float: """ - 根据试剂类型查找所有匹配的容器 - 返回匹配容器的ID列表 - """ - matching_vessels = [] + 解析质量输入,支持带单位的字符串 - for node_id in G.nodes(): - if G.nodes[node_id].get('type') == 'container': - # 检查容器名称匹配 - node_name = G.nodes[node_id].get('name', '').lower() - if reagent.lower() in node_id.lower() or reagent.lower() in node_name: - matching_vessels.append(node_id) - continue - - # 检查试剂类型匹配 - vessel_data = G.nodes[node_id].get('data', {}) - liquids = vessel_data.get('liquid', []) - config_data = G.nodes[node_id].get('config', {}) - - # 检查 reagent_name 和 config.reagent - reagent_name = vessel_data.get('reagent_name', '').lower() + Args: + mass_input: 质量输入(如 "19.3 g", "4.5 g", 2.5) + + Returns: + float: 质量(克) + """ + if isinstance(mass_input, (int, float)): + debug_print(f"⚖️ 质量输入为数值: {mass_input}g") + return float(mass_input) + + if not mass_input or not str(mass_input).strip(): + debug_print(f"⚠️ 质量输入为空,返回0.0g") + return 0.0 + + mass_str = str(mass_input).lower().strip() + debug_print(f"🔍 解析质量输入: '{mass_str}'") + + # 移除空格并提取数字和单位 + mass_clean = re.sub(r'\s+', '', mass_str) + + # 匹配数字和单位的正则表达式 + match = re.match(r'([0-9]*\.?[0-9]+)\s*(g|mg|kg|gram|milligram|kilogram)?', mass_clean) + + if not match: + debug_print(f"❌ 无法解析质量: '{mass_str}',返回0.0g") + return 0.0 + + value = float(match.group(1)) + unit = match.group(2) or 'g' # 默认单位为克 + + # 转换为克 + if unit in ['mg', 'milligram']: + mass = value / 1000.0 # mg -> g + debug_print(f"🔄 质量转换: {value}mg → {mass}g") + elif unit in ['kg', 'kilogram']: + mass = value * 1000.0 # kg -> g + debug_print(f"🔄 质量转换: {value}kg → {mass}g") + else: # g, gram 或默认 + mass = value # 已经是g + debug_print(f"✅ 质量已为g: {mass}g") + + return mass + +def parse_time_input(time_input: Union[str, float]) -> float: + """ + 解析时间输入,支持带单位的字符串 + + Args: + time_input: 时间输入(如 "1 h", "20 min", "30 s", 60.0) + + Returns: + float: 时间(秒) + """ + if isinstance(time_input, (int, float)): + debug_print(f"⏱️ 时间输入为数值: {time_input}秒") + return float(time_input) + + if not time_input or not str(time_input).strip(): + debug_print(f"⚠️ 时间输入为空,返回0秒") + return 0.0 + + time_str = str(time_input).lower().strip() + debug_print(f"🔍 解析时间输入: '{time_str}'") + + # 处理未知时间 + if time_str in ['?', 'unknown', 'tbd']: + default_time = 60.0 # 默认1分钟 + debug_print(f"❓ 检测到未知时间,使用默认值: {default_time}s (1分钟) ⏰") + return default_time + + # 移除空格并提取数字和单位 + time_clean = re.sub(r'\s+', '', time_str) + + # 匹配数字和单位的正则表达式 + match = re.match(r'([0-9]*\.?[0-9]+)\s*(s|sec|second|min|minute|h|hr|hour|d|day)?', time_clean) + + if not match: + debug_print(f"❌ 无法解析时间: '{time_str}',返回0s") + return 0.0 + + value = float(match.group(1)) + unit = match.group(2) or 's' # 默认单位为秒 + + # 转换为秒 + if unit in ['min', 'minute']: + time_sec = value * 60.0 # min -> s + debug_print(f"🔄 时间转换: {value}分钟 → {time_sec}秒") + elif unit in ['h', 'hr', 'hour']: + time_sec = value * 3600.0 # h -> s + debug_print(f"🔄 时间转换: {value}小时 → {time_sec}秒") + elif unit in ['d', 'day']: + time_sec = value * 86400.0 # d -> s + debug_print(f"🔄 时间转换: {value}天 → {time_sec}秒") + else: # s, sec, second 或默认 + time_sec = value # 已经是s + debug_print(f"✅ 时间已为秒: {time_sec}秒") + + return time_sec + +def find_reagent_vessel(G: nx.DiGraph, reagent: str) -> str: + """增强版试剂容器查找,支持固体和液体""" + debug_print(f"🔍 开始查找试剂 '{reagent}' 的容器...") + + # 🔧 方法1:直接搜索 data.reagent_name 和 config.reagent + debug_print(f"📋 方法1: 搜索reagent字段...") + for node in G.nodes(): + node_data = G.nodes[node].get('data', {}) + node_type = G.nodes[node].get('type', '') + config_data = G.nodes[node].get('config', {}) + + # 只搜索容器类型的节点 + if node_type == 'container': + reagent_name = node_data.get('reagent_name', '').lower() config_reagent = config_data.get('reagent', '').lower() - if (reagent.lower() == reagent_name or - reagent.lower() == config_reagent): - matching_vessels.append(node_id) - continue + # 精确匹配 + if reagent_name == reagent.lower() or config_reagent == reagent.lower(): + debug_print(f"✅ 通过reagent字段精确匹配到容器: {node} 🎯") + return node - # 检查液体列表 + # 模糊匹配 + if (reagent.lower() in reagent_name and reagent_name) or \ + (reagent.lower() in config_reagent and config_reagent): + debug_print(f"✅ 通过reagent字段模糊匹配到容器: {node} 🔍") + return node + + # 🔧 方法2:常见的容器命名规则 + debug_print(f"📋 方法2: 使用命名规则查找...") + reagent_clean = reagent.lower().replace(' ', '_').replace('-', '_') + possible_names = [ + reagent_clean, + f"flask_{reagent_clean}", + f"bottle_{reagent_clean}", + f"vessel_{reagent_clean}", + f"{reagent_clean}_flask", + f"{reagent_clean}_bottle", + f"reagent_{reagent_clean}", + f"reagent_bottle_{reagent_clean}", + f"solid_reagent_bottle_{reagent_clean}", + f"reagent_bottle_1", # 通用试剂瓶 + f"reagent_bottle_2", + f"reagent_bottle_3" + ] + + debug_print(f"🔍 尝试的容器名称: {possible_names[:5]}... (共{len(possible_names)}个)") + + for name in possible_names: + if name in G.nodes(): + node_type = G.nodes[name].get('type', '') + if node_type == 'container': + debug_print(f"✅ 通过命名规则找到容器: {name} 📝") + return name + + # 🔧 方法3:节点名称模糊匹配 + debug_print(f"📋 方法3: 节点名称模糊匹配...") + for node_id in G.nodes(): + node_data = G.nodes[node_id] + if node_data.get('type') == 'container': + # 检查节点名称是否包含试剂名称 + if reagent_clean in node_id.lower(): + debug_print(f"✅ 通过节点名称模糊匹配到容器: {node_id} 🔍") + return node_id + + # 检查液体类型匹配 + vessel_data = node_data.get('data', {}) + liquids = vessel_data.get('liquid', []) for liquid in liquids: if isinstance(liquid, dict): liquid_type = liquid.get('liquid_type') or liquid.get('name', '') if liquid_type.lower() == reagent.lower(): - matching_vessels.append(node_id) - break + debug_print(f"✅ 通过液体类型匹配到容器: {node_id} 💧") + return node_id - return matching_vessels - + # 🔧 方法4:使用第一个试剂瓶作为备选 + debug_print(f"📋 方法4: 查找备选试剂瓶...") + for node_id in G.nodes(): + node_data = G.nodes[node_id] + if (node_data.get('type') == 'container' and + ('reagent' in node_id.lower() or 'bottle' in node_id.lower())): + debug_print(f"⚠️ 未找到专用容器,使用备选试剂瓶: {node_id} 🔄") + return node_id + + debug_print(f"❌ 所有方法都失败了,无法找到容器!") + raise ValueError(f"找不到试剂 '{reagent}' 对应的容器") def find_connected_stirrer(G: nx.DiGraph, vessel: str) -> str: - """ - 查找与指定容器相连的搅拌器 + """查找连接到指定容器的搅拌器""" + debug_print(f"🔍 查找连接到容器 '{vessel}' 的搅拌器...") - Args: - G: 网络图 - vessel: 容器ID + stirrer_nodes = [] + for node in G.nodes(): + node_class = G.nodes[node].get('class', '').lower() + if 'stirrer' in node_class: + stirrer_nodes.append(node) + debug_print(f"📋 发现搅拌器: {node}") - Returns: - str: 搅拌器ID,如果找不到则返回None - """ - # 查找所有搅拌器节点 - stirrer_nodes = [node for node in G.nodes() - if (G.nodes[node].get('class') or '') == 'virtual_stirrer'] + debug_print(f"📊 共找到 {len(stirrer_nodes)} 个搅拌器") - # 检查哪个搅拌器与目标容器相连 + # 查找连接到容器的搅拌器 for stirrer in stirrer_nodes: if G.has_edge(stirrer, vessel) or G.has_edge(vessel, stirrer): + debug_print(f"✅ 找到连接的搅拌器: {stirrer} 🔗") return stirrer - # 如果没有直接连接,返回第一个可用的搅拌器 - return stirrer_nodes[0] if stirrer_nodes else None + # 返回第一个搅拌器 + if stirrer_nodes: + debug_print(f"⚠️ 未找到直接连接的搅拌器,使用第一个: {stirrer_nodes[0]} 🔄") + return stirrer_nodes[0] + + debug_print(f"❌ 未找到任何搅拌器") + return "" +def find_solid_dispenser(G: nx.DiGraph) -> str: + """查找固体加样器""" + debug_print(f"🔍 查找固体加样器...") + + for node in G.nodes(): + node_class = G.nodes[node].get('class', '').lower() + if 'solid_dispenser' in node_class or 'dispenser' in node_class: + debug_print(f"✅ 找到固体加样器: {node} 🥄") + return node + + debug_print(f"❌ 未找到固体加样器") + return "" + +# 🆕 创建进度日志动作 +def create_action_log(message: str, emoji: str = "📝") -> Dict[str, Any]: + """创建一个动作日志""" + full_message = f"{emoji} {message}" + debug_print(full_message) + logger.info(full_message) + print(f"[ACTION] {full_message}", flush=True) + + return { + "action_name": "wait", + "action_kwargs": { + "time": 0.1, + "log_message": full_message + } + } def generate_add_protocol( G: nx.DiGraph, - vessel: str, + vessel: dict, # 🔧 修改:现在接收字典类型的 vessel reagent: str, - volume: float, - mass: float = 0.0, + # 🔧 修复:所有参数都用 Union 类型,支持字符串和数值 + volume: Union[str, float] = 0.0, + mass: Union[str, float] = 0.0, amount: str = "", - time: float = 0.0, - stir: bool = False, - stir_speed: float = 300.0, - viscous: bool = False, - purpose: str = "添加试剂" -) -> List[Dict[str, Any]]: - """ - 生成添加试剂的协议序列,支持智能试剂匹配 - - 基于pump_protocol的成熟算法,实现试剂添加功能: - 1. 智能查找试剂瓶(支持名称匹配、液体类型匹配、试剂配置匹配) - 2. **先启动搅拌,再进行转移** - 确保试剂添加更均匀 - 3. 使用pump_protocol实现液体转移 - - Args: - G: 有向图,节点为容器和设备,边为连接关系 - vessel: 目标容器(要添加试剂的容器) - reagent: 试剂名称(用于查找对应的试剂瓶) - volume: 要添加的体积 (mL) - mass: 要添加的质量 (g) - 暂时未使用,预留接口 - amount: 其他数量描述 - time: 添加时间 (s),如果指定则计算流速 - stir: 是否启用搅拌 - stir_speed: 搅拌速度 (RPM) - viscous: 是否为粘稠液体 - purpose: 添加目的描述 - - Returns: - List[Dict[str, Any]]: 动作序列 - - Raises: - ValueError: 当找不到必要的设备或容器时 - """ - action_sequence = [] - - print(f"ADD_PROTOCOL: 开始生成添加试剂协议") - print(f" - 目标容器: {vessel}") - print(f" - 试剂: {reagent}") - print(f" - 体积: {volume} mL") - print(f" - 质量: {mass} g") - print(f" - 搅拌: {stir} (速度: {stir_speed} RPM)") - print(f" - 粘稠: {viscous}") - print(f" - 目的: {purpose}") - - # 1. 验证目标容器存在 - if vessel not in G.nodes(): - raise ValueError(f"目标容器 '{vessel}' 不存在于系统中") - - # 2. 智能查找试剂瓶 - try: - reagent_vessel = find_reagent_vessel(G, reagent) - print(f"ADD_PROTOCOL: 找到试剂容器: {reagent_vessel}") - except ValueError as e: - raise ValueError(f"无法找到试剂 '{reagent}': {str(e)}") - - # 3. 验证试剂容器中的试剂体积 - available_volume = get_vessel_reagent_volume(G, reagent_vessel) - print(f"ADD_PROTOCOL: 试剂容器 {reagent_vessel} 中有 {available_volume} mL 试剂") - - if available_volume < volume: - print(f"ADD_PROTOCOL: 警告 - 试剂容器中的试剂不足!需要 {volume} mL,可用 {available_volume} mL") - - # 4. 验证是否存在从试剂瓶到目标容器的路径 - try: - path = nx.shortest_path(G, source=reagent_vessel, target=vessel) - print(f"ADD_PROTOCOL: 找到路径 {reagent_vessel} -> {vessel}: {path}") - except nx.NetworkXNoPath: - raise ValueError(f"从试剂瓶 '{reagent_vessel}' 到目标容器 '{vessel}' 没有可用路径") - - # 5. **先启动搅拌** - 关键改进! - if stir: - try: - stirrer_id = find_connected_stirrer(G, vessel) - - if stirrer_id: - print(f"ADD_PROTOCOL: 找到搅拌器 {stirrer_id},将在添加前启动搅拌") - - # 先启动搅拌 - stir_action = { - "device_id": stirrer_id, - "action_name": "start_stir", - "action_kwargs": { - "vessel": vessel, - "stir_speed": stir_speed, - "purpose": f"{purpose}: 启动搅拌,准备添加 {reagent}" - } - } - - action_sequence.append(stir_action) - print(f"ADD_PROTOCOL: 已添加搅拌动作,速度 {stir_speed} RPM") - - # 等待搅拌稳定 - action_sequence.append({ - "action_name": "wait", - "action_kwargs": {"time": 5} - }) - else: - print(f"ADD_PROTOCOL: 警告 - 需要搅拌但未找到与容器 {vessel} 相连的搅拌器") - - except Exception as e: - print(f"ADD_PROTOCOL: 搅拌器配置出错: {str(e)}") - - # 6. 如果指定了体积,执行液体转移 - if volume > 0: - # 6.1 计算流速参数 - if time > 0: - # 根据时间计算流速 - transfer_flowrate = volume / time - flowrate = transfer_flowrate - else: - # 使用默认流速 - if viscous: - transfer_flowrate = 0.3 # 粘稠液体用较慢速度 - flowrate = 1.0 - else: - transfer_flowrate = 0.5 # 普通液体默认速度 - flowrate = 2.5 - - print(f"ADD_PROTOCOL: 准备转移 {volume} mL 从 {reagent_vessel} 到 {vessel}") - print(f"ADD_PROTOCOL: 转移流速={transfer_flowrate} mL/s, 注入流速={flowrate} mL/s") - - # 6.2 使用pump_protocol的核心算法实现液体转移 - try: - pump_actions = generate_pump_protocol_with_rinsing( - G=G, - from_vessel=reagent_vessel, - to_vessel=vessel, - volume=volume, - amount=amount, - time=time, - viscous=viscous, - rinsing_solvent="", # 添加试剂通常不需要清洗 - rinsing_volume=0.0, - rinsing_repeats=0, - solid=False, - flowrate=flowrate, - transfer_flowrate=transfer_flowrate - ) - - # 添加pump actions到序列中 - action_sequence.extend(pump_actions) - - except Exception as e: - raise ValueError(f"生成泵协议时出错: {str(e)}") - - print(f"ADD_PROTOCOL: 生成了 {len(action_sequence)} 个动作") - print(f"ADD_PROTOCOL: 添加试剂协议生成完成") - - return action_sequence - - -def generate_add_protocol_with_cleaning( - G: nx.DiGraph, - vessel: str, - reagent: str, - volume: float, - mass: float = 0.0, - amount: str = "", - time: float = 0.0, + time: Union[str, float] = 0.0, stir: bool = False, stir_speed: float = 300.0, viscous: bool = False, purpose: str = "添加试剂", - cleaning_solvent: str = "air", - cleaning_volume: float = 5.0, - cleaning_repeats: int = 1 + # XDL扩展参数 + mol: str = "", + event: str = "", + rate_spec: str = "", + equiv: str = "", + ratio: str = "", + **kwargs ) -> List[Dict[str, Any]]: """ - 生成带清洗的添加试剂协议,支持智能试剂匹配 + 生成添加试剂协议 - 修复版 - 与普通添加协议的区别是会在添加后进行管道清洗 - - Args: - G: 有向图 - vessel: 目标容器 - reagent: 试剂名称 - volume: 添加体积 - mass: 添加质量(预留) - amount: 其他数量描述 - time: 添加时间 - stir: 是否搅拌 - stir_speed: 搅拌速度 - viscous: 是否粘稠 - purpose: 添加目的 - cleaning_solvent: 清洗溶剂("air"表示空气清洗) - cleaning_volume: 清洗体积 - cleaning_repeats: 清洗重复次数 - - Returns: - List[Dict[str, Any]]: 动作序列 + 支持所有XDL参数和单位: + - vessel: Resource类型字典,包含id字段 + - volume: "2.7 mL", "2.67 mL", "?" 或数值 + - mass: "19.3 g", "4.5 g" 或数值 + - time: "1 h", "20 min" 或数值(秒) + - mol: "0.28 mol", "16.2 mmol", "25.2 mmol" + - rate_spec: "portionwise", "dropwise" + - event: "A", "B" + - equiv: "1.1" + - ratio: "?", "1:1" """ + + # 🔧 核心修改:从字典中提取容器ID + vessel_id = vessel["id"] + + # 🔧 修改:更新容器的液体体积(假设有 liquid_volume 字段) + if "data" in vessel and "liquid_volume" in vessel["data"]: + if isinstance(vessel["data"]["liquid_volume"], list) and len(vessel["data"]["liquid_volume"]) > 0: + vessel["data"]["liquid_volume"][0] -= parse_volume_input(volume) + + debug_print("=" * 60) + debug_print("🚀 开始生成添加试剂协议") + debug_print(f"📋 原始参数:") + debug_print(f" 🥼 vessel: {vessel} (ID: {vessel_id})") + debug_print(f" 🧪 reagent: '{reagent}'") + debug_print(f" 📏 volume: {volume} (类型: {type(volume)})") + debug_print(f" ⚖️ mass: {mass} (类型: {type(mass)})") + debug_print(f" ⏱️ time: {time} (类型: {type(time)})") + debug_print(f" 🧬 mol: '{mol}'") + debug_print(f" 🎯 event: '{event}'") + debug_print(f" ⚡ rate_spec: '{rate_spec}'") + debug_print(f" 🌪️ stir: {stir}") + debug_print(f" 🔄 stir_speed: {stir_speed} rpm") + debug_print("=" * 60) + action_sequence = [] - # 1. 智能查找试剂瓶 - reagent_vessel = find_reagent_vessel(G, reagent) + # === 参数验证 === + debug_print("🔍 步骤1: 参数验证...") + action_sequence.append(create_action_log(f"开始添加试剂 '{reagent}' 到容器 '{vessel_id}'", "🎬")) - # 2. **先启动搅拌** - if stir: - stirrer_id = find_connected_stirrer(G, vessel) - if stirrer_id: - action_sequence.append({ - "device_id": stirrer_id, - "action_name": "start_stir", - "action_kwargs": { - "vessel": vessel, - "stir_speed": stir_speed, - "purpose": f"{purpose}: 启动搅拌,准备添加 {reagent}" - } - }) + if not vessel or not vessel_id: + debug_print("❌ vessel 参数不能为空") + raise ValueError("vessel 参数不能为空") + if not reagent: + debug_print("❌ reagent 参数不能为空") + raise ValueError("reagent 参数不能为空") + + if vessel_id not in G.nodes(): + debug_print(f"❌ 容器 '{vessel_id}' 不存在于系统中") + raise ValueError(f"容器 '{vessel_id}' 不存在于系统中") + + debug_print("✅ 基本参数验证通过") + + # === 🔧 关键修复:参数解析 === + debug_print("🔍 步骤2: 参数解析...") + action_sequence.append(create_action_log("正在解析添加参数...", "🔍")) + + # 解析各种参数为数值 + final_volume = parse_volume_input(volume) + final_mass = parse_mass_input(mass) + final_time = parse_time_input(time) + + debug_print(f"📊 解析结果:") + debug_print(f" 📏 体积: {final_volume}mL") + debug_print(f" ⚖️ 质量: {final_mass}g") + debug_print(f" ⏱️ 时间: {final_time}s") + debug_print(f" 🧬 摩尔: '{mol}'") + debug_print(f" 🎯 事件: '{event}'") + debug_print(f" ⚡ 速率: '{rate_spec}'") + + # === 判断添加类型 === + debug_print("🔍 步骤3: 判断添加类型...") + + # 🔧 修复:现在使用解析后的数值进行比较 + is_solid = (final_mass > 0 or (mol and mol.strip() != "")) + is_liquid = (final_volume > 0) + + if not is_solid and not is_liquid: + # 默认为液体,10mL + is_liquid = True + final_volume = 10.0 + debug_print("⚠️ 未指定体积或质量,默认为10mL液体") + + add_type = "固体" if is_solid else "液体" + add_emoji = "🧂" if is_solid else "💧" + debug_print(f"📋 添加类型: {add_type} {add_emoji}") + + action_sequence.append(create_action_log(f"确定添加类型: {add_type} {add_emoji}", "📋")) + + # === 执行添加流程 === + debug_print("🔍 步骤4: 执行添加流程...") + + try: + if is_solid: + # === 固体添加路径 === + debug_print(f"🧂 使用固体添加路径") + action_sequence.append(create_action_log("开始固体试剂添加流程", "🧂")) - # 等待搅拌稳定 - action_sequence.append({ - "action_name": "wait", - "action_kwargs": {"time": 5} - }) - - # 3. 计算流速 - if time > 0: - transfer_flowrate = volume / time - flowrate = transfer_flowrate - else: - if viscous: - transfer_flowrate = 0.3 - flowrate = 1.0 - else: - transfer_flowrate = 0.5 - flowrate = 2.5 - - # 4. 使用带清洗的pump_protocol - pump_actions = generate_pump_protocol_with_rinsing( - G=G, - from_vessel=reagent_vessel, - to_vessel=vessel, - volume=volume, - amount=amount, - time=time, - viscous=viscous, - rinsing_solvent=cleaning_solvent, - rinsing_volume=cleaning_volume, - rinsing_repeats=cleaning_repeats, - solid=False, - flowrate=flowrate, - transfer_flowrate=transfer_flowrate - ) - - action_sequence.extend(pump_actions) - - return action_sequence - - -def generate_sequential_add_protocol( - G: nx.DiGraph, - vessel: str, - reagents: List[Dict[str, Any]], - stir_between_additions: bool = True, - final_stir: bool = True, - final_stir_speed: float = 400.0, - final_stir_time: float = 300.0 -) -> List[Dict[str, Any]]: - """ - 生成连续添加多种试剂的协议,支持智能试剂匹配 - - Args: - G: 网络图 - vessel: 目标容器 - reagents: 试剂列表,每个元素包含试剂添加参数 - stir_between_additions: 是否在每次添加之间搅拌 - final_stir: 是否在所有添加完成后进行最终搅拌 - final_stir_speed: 最终搅拌速度 - final_stir_time: 最终搅拌时间 - - Returns: - List[Dict[str, Any]]: 完整的动作序列 - - Example: - reagents = [ - { - "reagent": "DMF", # 会匹配 reagent_bottle_1 (reagent_name: "DMF") - "volume": 10.0, - "viscous": False, - "stir_speed": 300.0 - }, - { - "reagent": "ethyl_acetate", # 会匹配 reagent_bottle_2 (reagent_name: "ethyl_acetate") - "volume": 5.0, - "viscous": False, - "stir_speed": 350.0 - } - ] - """ - action_sequence = [] - - print(f"ADD_PROTOCOL: 开始连续添加 {len(reagents)} 种试剂到容器 {vessel}") - - for i, reagent_params in enumerate(reagents): - reagent_name = reagent_params.get('reagent') - print(f"ADD_PROTOCOL: 处理第 {i+1}/{len(reagents)} 个试剂: {reagent_name}") - - # 生成单个试剂的添加协议 - add_actions = generate_add_protocol( - G=G, - vessel=vessel, - reagent=reagent_name, - volume=reagent_params.get('volume', 0.0), - mass=reagent_params.get('mass', 0.0), - amount=reagent_params.get('amount', ''), - time=reagent_params.get('time', 0.0), - stir=stir_between_additions, - stir_speed=reagent_params.get('stir_speed', 300.0), - viscous=reagent_params.get('viscous', False), - purpose=reagent_params.get('purpose', f'添加试剂 {reagent_name} ({i+1}/{len(reagents)})') - ) - - action_sequence.extend(add_actions) - - # 在添加之间加入等待时间 - if i < len(reagents) - 1: # 不是最后一个试剂 - action_sequence.append({ - "action_name": "wait", - "action_kwargs": {"time": 10} # 试剂混合时间 - }) - - # 最终搅拌 - if final_stir: - stirrer_id = find_connected_stirrer(G, vessel) - if stirrer_id: - print(f"ADD_PROTOCOL: 添加最终搅拌动作,速度 {final_stir_speed} RPM,时间 {final_stir_time} 秒") - action_sequence.extend([ - { - "device_id": stirrer_id, - "action_name": "stir", - "action_kwargs": { - "stir_time": final_stir_time, - "stir_speed": final_stir_speed, - "settling_time": 30.0 - } + solid_dispenser = find_solid_dispenser(G) + if solid_dispenser: + action_sequence.append(create_action_log(f"找到固体加样器: {solid_dispenser}", "🥄")) + + # 启动搅拌 + if stir: + debug_print("🌪️ 准备启动搅拌...") + action_sequence.append(create_action_log("准备启动搅拌器", "🌪️")) + + stirrer_id = find_connected_stirrer(G, vessel_id) # 🔧 使用 vessel_id + if stirrer_id: + action_sequence.append(create_action_log(f"启动搅拌器 {stirrer_id} (速度: {stir_speed} rpm)", "🔄")) + + action_sequence.append({ + "device_id": stirrer_id, + "action_name": "start_stir", + "action_kwargs": { + "vessel": vessel_id, # 🔧 使用 vessel_id + "stir_speed": stir_speed, + "purpose": f"准备添加固体 {reagent}" + } + }) + # 等待搅拌稳定 + action_sequence.append(create_action_log("等待搅拌稳定...", "⏳")) + action_sequence.append({ + "action_name": "wait", + "action_kwargs": {"time": 3} + }) + + # 固体加样 + add_kwargs = { + "vessel": vessel_id, # 🔧 使用 vessel_id + "reagent": reagent, + "purpose": purpose, + "event": event, + "rate_spec": rate_spec } - ]) + + if final_mass > 0: + add_kwargs["mass"] = str(final_mass) + action_sequence.append(create_action_log(f"准备添加固体: {final_mass}g", "⚖️")) + if mol and mol.strip(): + add_kwargs["mol"] = mol + action_sequence.append(create_action_log(f"按摩尔数添加: {mol}", "🧬")) + if equiv and equiv.strip(): + add_kwargs["equiv"] = equiv + action_sequence.append(create_action_log(f"当量: {equiv}", "🔢")) + + action_sequence.append(create_action_log("开始固体加样操作", "🥄")) + action_sequence.append({ + "device_id": solid_dispenser, + "action_name": "add_solid", + "action_kwargs": add_kwargs + }) + + action_sequence.append(create_action_log("固体加样完成", "✅")) + + # 添加后等待 + if final_time > 0: + wait_minutes = final_time / 60 + action_sequence.append(create_action_log(f"等待反应进行 ({wait_minutes:.1f}分钟)", "⏰")) + action_sequence.append({ + "action_name": "wait", + "action_kwargs": {"time": final_time} + }) + + debug_print(f"✅ 固体添加完成") + else: + debug_print("❌ 未找到固体加样器,跳过固体添加") + action_sequence.append(create_action_log("未找到固体加样器,无法添加固体", "❌")) + + else: + # === 液体添加路径 === + debug_print(f"💧 使用液体添加路径") + action_sequence.append(create_action_log("开始液体试剂添加流程", "💧")) + + # 查找试剂容器 + action_sequence.append(create_action_log("正在查找试剂容器...", "🔍")) + reagent_vessel = find_reagent_vessel(G, reagent) + action_sequence.append(create_action_log(f"找到试剂容器: {reagent_vessel}", "🧪")) + + # 启动搅拌 + if stir: + debug_print("🌪️ 准备启动搅拌...") + action_sequence.append(create_action_log("准备启动搅拌器", "🌪️")) + + stirrer_id = find_connected_stirrer(G, vessel_id) # 🔧 使用 vessel_id + if stirrer_id: + action_sequence.append(create_action_log(f"启动搅拌器 {stirrer_id} (速度: {stir_speed} rpm)", "🔄")) + + action_sequence.append({ + "device_id": stirrer_id, + "action_name": "start_stir", + "action_kwargs": { + "vessel": vessel_id, # 🔧 使用 vessel_id + "stir_speed": stir_speed, + "purpose": f"准备添加液体 {reagent}" + } + }) + # 等待搅拌稳定 + action_sequence.append(create_action_log("等待搅拌稳定...", "⏳")) + action_sequence.append({ + "action_name": "wait", + "action_kwargs": {"time": 5} + }) + + # 计算流速 + if final_time > 0: + flowrate = final_volume / final_time * 60 # mL/min + transfer_flowrate = flowrate + debug_print(f"⚡ 根据时间计算流速: {flowrate:.2f} mL/min") + else: + if rate_spec == "dropwise": + flowrate = 0.5 # 滴加,很慢 + transfer_flowrate = 0.2 + debug_print(f"💧 滴加模式,流速: {flowrate} mL/min") + elif viscous: + flowrate = 1.0 # 粘性液体 + transfer_flowrate = 0.3 + debug_print(f"🍯 粘性液体,流速: {flowrate} mL/min") + else: + flowrate = 2.5 # 正常流速 + transfer_flowrate = 0.5 + debug_print(f"⚡ 正常流速: {flowrate} mL/min") + + action_sequence.append(create_action_log(f"设置流速: {flowrate:.2f} mL/min", "⚡")) + action_sequence.append(create_action_log(f"开始转移 {final_volume}mL 液体", "🚰")) + + # 调用pump protocol + pump_actions = generate_pump_protocol_with_rinsing( + G=G, + from_vessel=reagent_vessel, + to_vessel=vessel_id, # 🔧 使用 vessel_id + volume=final_volume, + amount=amount, + time=final_time, + viscous=viscous, + rinsing_solvent="", + rinsing_volume=0.0, + rinsing_repeats=0, + solid=False, + flowrate=flowrate, + transfer_flowrate=transfer_flowrate, + rate_spec=rate_spec, + event=event, + through="", + **kwargs + ) + action_sequence.extend(pump_actions) + debug_print(f"✅ 液体转移完成,添加了 {len(pump_actions)} 个动作") + action_sequence.append(create_action_log(f"液体转移完成 ({len(pump_actions)} 个操作)", "✅")) + + except Exception as e: + debug_print(f"❌ 试剂添加失败: {str(e)}") + action_sequence.append(create_action_log(f"试剂添加失败: {str(e)}", "❌")) + # 添加错误日志 + action_sequence.append({ + "device_id": "system", + "action_name": "log_message", + "action_kwargs": { + "message": f"试剂 '{reagent}' 添加失败: {str(e)}" + } + }) + + # === 最终结果 === + debug_print("=" * 60) + debug_print(f"🎉 添加试剂协议生成完成") + debug_print(f"📊 总动作数: {len(action_sequence)}") + debug_print(f"📋 处理总结:") + debug_print(f" 🧪 试剂: {reagent}") + debug_print(f" {add_emoji} 添加类型: {add_type}") + debug_print(f" 🥼 目标容器: {vessel_id}") + if is_liquid: + debug_print(f" 📏 体积: {final_volume}mL") + if is_solid: + debug_print(f" ⚖️ 质量: {final_mass}g") + debug_print(f" 🧬 摩尔: {mol}") + debug_print("=" * 60) + + # 添加完成日志 + summary_msg = f"试剂添加协议完成: {reagent} → {vessel_id}" + if is_liquid: + summary_msg += f" ({final_volume}mL)" + if is_solid: + summary_msg += f" ({final_mass}g)" + + action_sequence.append(create_action_log(summary_msg, "🎉")) - print(f"ADD_PROTOCOL: 连续添加协议生成完成,共 {len(action_sequence)} 个动作") return action_sequence +# === 便捷函数 === +# 🔧 修改便捷函数的参数类型 -# 便捷函数:常用添加方案 -def generate_organic_add_protocol( - G: nx.DiGraph, - vessel: str, - organic_reagent: str, - volume: float, - stir_speed: float = 400.0 -) -> List[Dict[str, Any]]: - """有机试剂添加:慢速、搅拌""" +def add_liquid_volume(G: nx.DiGraph, vessel: dict, reagent: str, volume: Union[str, float], + time: Union[str, float] = 0.0, rate_spec: str = "") -> List[Dict[str, Any]]: + """添加指定体积的液体试剂""" + vessel_id = vessel["id"] + debug_print(f"💧 快速添加液体: {reagent} ({volume}) → {vessel_id}") return generate_add_protocol( - G, vessel, organic_reagent, volume, 0.0, "", 0.0, - True, stir_speed, False, f"添加有机试剂 {organic_reagent}" + G, vessel, reagent, + volume=volume, + time=time, + rate_spec=rate_spec ) - -def generate_viscous_add_protocol( - G: nx.DiGraph, - vessel: str, - viscous_reagent: str, - volume: float, - addition_time: float = 120.0 -) -> List[Dict[str, Any]]: - """粘稠试剂添加:慢速、长时间""" +def add_solid_mass(G: nx.DiGraph, vessel: dict, reagent: str, mass: Union[str, float], + event: str = "") -> List[Dict[str, Any]]: + """添加指定质量的固体试剂""" + vessel_id = vessel["id"] + debug_print(f"🧂 快速添加固体: {reagent} ({mass}) → {vessel_id}") return generate_add_protocol( - G, vessel, viscous_reagent, volume, 0.0, "", addition_time, - True, 250.0, True, f"缓慢添加粘稠试剂 {viscous_reagent}" + G, vessel, reagent, + mass=mass, + event=event ) - -def generate_solvent_add_protocol( - G: nx.DiGraph, - vessel: str, - solvent: str, - volume: float -) -> List[Dict[str, Any]]: - """溶剂添加:快速、无需特殊处理""" +def add_solid_moles(G: nx.DiGraph, vessel: dict, reagent: str, mol: str, + event: str = "") -> List[Dict[str, Any]]: + """按摩尔数添加固体试剂""" + vessel_id = vessel["id"] + debug_print(f"🧬 按摩尔数添加固体: {reagent} ({mol}) → {vessel_id}") return generate_add_protocol( - G, vessel, solvent, volume, 0.0, "", 0.0, - False, 300.0, False, f"添加溶剂 {solvent}" + G, vessel, reagent, + mol=mol, + event=event ) +def add_dropwise_liquid(G: nx.DiGraph, vessel: dict, reagent: str, volume: Union[str, float], + time: Union[str, float] = "20 min", event: str = "") -> List[Dict[str, Any]]: + """滴加液体试剂""" + vessel_id = vessel["id"] + debug_print(f"💧 滴加液体: {reagent} ({volume}) → {vessel_id} (用时: {time})") + return generate_add_protocol( + G, vessel, reagent, + volume=volume, + time=time, + rate_spec="dropwise", + event=event + ) -# 使用示例和测试函数 +def add_portionwise_solid(G: nx.DiGraph, vessel: dict, reagent: str, mass: Union[str, float], + time: Union[str, float] = "1 h", event: str = "") -> List[Dict[str, Any]]: + """分批添加固体试剂""" + vessel_id = vessel["id"] + debug_print(f"🧂 分批添加固体: {reagent} ({mass}) → {vessel_id} (用时: {time})") + return generate_add_protocol( + G, vessel, reagent, + mass=mass, + time=time, + rate_spec="portionwise", + event=event + ) + +# 测试函数 def test_add_protocol(): - """测试添加协议的示例""" - print("=== ADD PROTOCOL 智能匹配测试 ===") - print("测试完成") - + """测试添加协议的各种参数解析""" + print("=== ADD PROTOCOL 增强版测试 ===") + + # 测试体积解析 + debug_print("🧪 测试体积解析...") + volumes = ["2.7 mL", "2.67 mL", "?", 10.0, "1 L", "500 μL"] + for vol in volumes: + result = parse_volume_input(vol) + print(f"📏 体积解析: {vol} → {result}mL") + + # 测试质量解析 + debug_print("⚖️ 测试质量解析...") + masses = ["19.3 g", "4.5 g", 2.5, "500 mg", "1 kg"] + for mass in masses: + result = parse_mass_input(mass) + print(f"⚖️ 质量解析: {mass} → {result}g") + + # 测试时间解析 + debug_print("⏱️ 测试时间解析...") + times = ["1 h", "20 min", "30 s", 60.0, "?"] + for time in times: + result = parse_time_input(time) + print(f"⏱️ 时间解析: {time} → {result}s") + + print("✅ 测试完成") if __name__ == "__main__": test_add_protocol() \ No newline at end of file diff --git a/unilabos/compile/adjustph_protocol.py b/unilabos/compile/adjustph_protocol.py new file mode 100644 index 0000000..374268a --- /dev/null +++ b/unilabos/compile/adjustph_protocol.py @@ -0,0 +1,654 @@ +import networkx as nx +import logging +from typing import List, Dict, Any, Union +from .pump_protocol import generate_pump_protocol_with_rinsing + +logger = logging.getLogger(__name__) + +def debug_print(message): + """调试输出""" + print(f"[ADJUST_PH] {message}", flush=True) + logger.info(f"[ADJUST_PH] {message}") + +# 🆕 创建进度日志动作 +def create_action_log(message: str, emoji: str = "📝") -> Dict[str, Any]: + """创建一个动作日志""" + full_message = f"{emoji} {message}" + debug_print(full_message) + logger.info(full_message) + print(f"[ACTION] {full_message}", flush=True) + + return { + "action_name": "wait", + "action_kwargs": { + "time": 0.1, + "log_message": full_message + } + } + +def find_acid_base_vessel(G: nx.DiGraph, reagent: str) -> str: + """ + 查找酸碱试剂容器,支持多种匹配模式 + + Args: + G: 网络图 + reagent: 试剂名称(如 "hydrochloric acid", "sodium hydroxide") + + Returns: + str: 试剂容器ID + """ + debug_print(f"🔍 正在查找试剂 '{reagent}' 的容器...") + + # 常见酸碱试剂的别名映射 + reagent_aliases = { + "hydrochloric acid": ["HCl", "hydrochloric_acid", "hcl", "muriatic_acid"], + "sodium hydroxide": ["NaOH", "sodium_hydroxide", "naoh", "caustic_soda"], + "sulfuric acid": ["H2SO4", "sulfuric_acid", "h2so4"], + "nitric acid": ["HNO3", "nitric_acid", "hno3"], + "acetic acid": ["CH3COOH", "acetic_acid", "glacial_acetic_acid"], + "ammonia": ["NH3", "ammonium_hydroxide", "nh3"], + "potassium hydroxide": ["KOH", "potassium_hydroxide", "koh"] + } + + # 构建搜索名称列表 + search_names = [reagent.lower()] + debug_print(f"📋 基础搜索名称: {reagent.lower()}") + + # 添加别名 + for base_name, aliases in reagent_aliases.items(): + if reagent.lower() in base_name.lower() or base_name.lower() in reagent.lower(): + search_names.extend([alias.lower() for alias in aliases]) + debug_print(f"🔗 添加别名: {aliases}") + break + + debug_print(f"📝 完整搜索列表: {search_names}") + + # 构建可能的容器名称 + possible_names = [] + for name in search_names: + name_clean = name.replace(" ", "_").replace("-", "_") + possible_names.extend([ + f"flask_{name_clean}", + f"bottle_{name_clean}", + f"reagent_{name_clean}", + f"acid_{name_clean}" if "acid" in name else f"base_{name_clean}", + f"{name_clean}_bottle", + f"{name_clean}_flask", + name_clean + ]) + + debug_print(f"🎯 可能的容器名称 (前5个): {possible_names[:5]}... (共{len(possible_names)}个)") + + # 第一步:通过容器名称匹配 + debug_print(f"📋 方法1: 精确名称匹配...") + for vessel_name in possible_names: + if vessel_name in G.nodes(): + debug_print(f"✅ 通过名称匹配找到容器: {vessel_name} 🎯") + return vessel_name + + # 第二步:通过模糊匹配 + debug_print(f"📋 方法2: 模糊名称匹配...") + for node_id in G.nodes(): + if G.nodes[node_id].get('type') == 'container': + node_name = G.nodes[node_id].get('name', '').lower() + + # 检查是否包含任何搜索名称 + for search_name in search_names: + if search_name in node_id.lower() or search_name in node_name: + debug_print(f"✅ 通过模糊匹配找到容器: {node_id} 🔍") + return node_id + + # 第三步:通过液体类型匹配 + debug_print(f"📋 方法3: 液体类型匹配...") + for node_id in G.nodes(): + if G.nodes[node_id].get('type') == 'container': + vessel_data = G.nodes[node_id].get('data', {}) + liquids = vessel_data.get('liquid', []) + + for liquid in liquids: + if isinstance(liquid, dict): + liquid_type = (liquid.get('liquid_type') or liquid.get('name', '')).lower() + reagent_name = vessel_data.get('reagent_name', '').lower() + + for search_name in search_names: + if search_name in liquid_type or search_name in reagent_name: + debug_print(f"✅ 通过液体类型匹配找到容器: {node_id} 💧") + return node_id + + # 列出可用容器帮助调试 + debug_print(f"📊 列出可用容器帮助调试...") + available_containers = [] + for node_id in G.nodes(): + if G.nodes[node_id].get('type') == 'container': + vessel_data = G.nodes[node_id].get('data', {}) + liquids = vessel_data.get('liquid', []) + liquid_types = [liquid.get('liquid_type', '') or liquid.get('name', '') + for liquid in liquids if isinstance(liquid, dict)] + + available_containers.append({ + 'id': node_id, + 'name': G.nodes[node_id].get('name', ''), + 'liquids': liquid_types, + 'reagent_name': vessel_data.get('reagent_name', '') + }) + + debug_print(f"📋 可用容器列表:") + for container in available_containers: + debug_print(f" - 🧪 {container['id']}: {container['name']}") + debug_print(f" 💧 液体: {container['liquids']}") + debug_print(f" 🏷️ 试剂: {container['reagent_name']}") + + debug_print(f"❌ 所有匹配方法都失败了") + raise ValueError(f"找不到试剂 '{reagent}' 对应的容器。尝试了: {possible_names[:10]}...") + +def find_connected_stirrer(G: nx.DiGraph, vessel: str) -> str: + """查找与容器相连的搅拌器""" + debug_print(f"🔍 查找连接到容器 '{vessel}' 的搅拌器...") + + stirrer_nodes = [node for node in G.nodes() + if (G.nodes[node].get('class') or '') == 'virtual_stirrer'] + + debug_print(f"📊 发现 {len(stirrer_nodes)} 个搅拌器: {stirrer_nodes}") + + for stirrer in stirrer_nodes: + if G.has_edge(stirrer, vessel) or G.has_edge(vessel, stirrer): + debug_print(f"✅ 找到连接的搅拌器: {stirrer} 🔗") + return stirrer + + if stirrer_nodes: + debug_print(f"⚠️ 未找到直接连接的搅拌器,使用第一个: {stirrer_nodes[0]} 🔄") + return stirrer_nodes[0] + + debug_print(f"❌ 未找到任何搅拌器") + return None + +def calculate_reagent_volume(target_ph_value: float, reagent: str, vessel_volume: float = 100.0) -> float: + """ + 估算需要的试剂体积来调节pH + + Args: + target_ph_value: 目标pH值 + reagent: 试剂名称 + vessel_volume: 容器体积 (mL) + + Returns: + float: 估算的试剂体积 (mL) + """ + debug_print(f"🧮 计算试剂体积...") + debug_print(f" 📍 目标pH: {target_ph_value}") + debug_print(f" 🧪 试剂: {reagent}") + debug_print(f" 📏 容器体积: {vessel_volume}mL") + + # 简化的pH调节体积估算(实际应用中需要更精确的计算) + if "acid" in reagent.lower() or "hcl" in reagent.lower(): + debug_print(f"🍋 检测到酸性试剂") + # 酸性试剂:pH越低需要的体积越大 + if target_ph_value < 3: + volume = vessel_volume * 0.05 # 5% + debug_print(f" 💪 强酸性 (pH<3): 使用 5% 体积") + elif target_ph_value < 5: + volume = vessel_volume * 0.02 # 2% + debug_print(f" 🔸 中酸性 (pH<5): 使用 2% 体积") + else: + volume = vessel_volume * 0.01 # 1% + debug_print(f" 🔹 弱酸性 (pH≥5): 使用 1% 体积") + + elif "hydroxide" in reagent.lower() or "naoh" in reagent.lower(): + debug_print(f"🧂 检测到碱性试剂") + # 碱性试剂:pH越高需要的体积越大 + if target_ph_value > 11: + volume = vessel_volume * 0.05 # 5% + debug_print(f" 💪 强碱性 (pH>11): 使用 5% 体积") + elif target_ph_value > 9: + volume = vessel_volume * 0.02 # 2% + debug_print(f" 🔸 中碱性 (pH>9): 使用 2% 体积") + else: + volume = vessel_volume * 0.01 # 1% + debug_print(f" 🔹 弱碱性 (pH≤9): 使用 1% 体积") + + else: + # 未知试剂,使用默认值 + volume = vessel_volume * 0.01 + debug_print(f"❓ 未知试剂类型,使用默认 1% 体积") + + debug_print(f"📊 计算结果: {volume:.2f}mL") + return volume + +def generate_adjust_ph_protocol( + G: nx.DiGraph, + vessel:Union[dict,str], # 🔧 修改:从字符串改为字典类型 + ph_value: float, + reagent: str, + **kwargs +) -> List[Dict[str, Any]]: + """ + 生成调节pH的协议序列 + + Args: + G: 有向图,节点为容器和设备 + vessel: 目标容器字典(需要调节pH的容器) + ph_value: 目标pH值(从XDL传入) + reagent: 酸碱试剂名称(从XDL传入) + **kwargs: 其他可选参数,使用默认值 + + Returns: + List[Dict[str, Any]]: 动作序列 + """ + + # 统一处理vessel参数 + if isinstance(vessel, dict): + vessel_id = list(vessel.values())[0].get("id", "") + vessel_data = vessel.get("data", {}) + else: + vessel_id = str(vessel) + vessel_data = G.nodes[vessel_id].get("data", {}) if vessel_id in G.nodes() else {} + + if not vessel_id: + debug_print(f"❌ vessel 参数无效,必须包含id字段或直接提供容器ID. vessel: {vessel}") + raise ValueError("vessel 参数无效,必须包含id字段或直接提供容器ID") + + debug_print("=" * 60) + debug_print("🧪 开始生成pH调节协议") + debug_print(f"📋 原始参数:") + debug_print(f" 🥼 vessel: {vessel} (ID: {vessel_id})") + debug_print(f" 📊 ph_value: {ph_value}") + debug_print(f" 🧪 reagent: '{reagent}'") + debug_print(f" 📦 kwargs: {kwargs}") + debug_print("=" * 60) + + action_sequence = [] + + # 从kwargs中获取可选参数,如果没有则使用默认值 + volume = kwargs.get('volume', 0.0) # 自动估算体积 + stir = kwargs.get('stir', True) # 默认搅拌 + stir_speed = kwargs.get('stir_speed', 300.0) # 默认搅拌速度 + stir_time = kwargs.get('stir_time', 60.0) # 默认搅拌时间 + settling_time = kwargs.get('settling_time', 30.0) # 默认平衡时间 + + debug_print(f"🔧 处理后的参数:") + debug_print(f" 📏 volume: {volume}mL (0.0表示自动估算)") + debug_print(f" 🌪️ stir: {stir}") + debug_print(f" 🔄 stir_speed: {stir_speed}rpm") + debug_print(f" ⏱️ stir_time: {stir_time}s") + debug_print(f" ⏳ settling_time: {settling_time}s") + + # 开始处理 + action_sequence.append(create_action_log(f"开始调节pH至 {ph_value}", "🧪")) + action_sequence.append(create_action_log(f"目标容器: {vessel_id}", "🥼")) + action_sequence.append(create_action_log(f"使用试剂: {reagent}", "⚗️")) + + # 1. 验证目标容器存在 + debug_print(f"🔍 步骤1: 验证目标容器...") + if vessel_id not in G.nodes(): + debug_print(f"❌ 目标容器 '{vessel_id}' 不存在于系统中") + raise ValueError(f"目标容器 '{vessel_id}' 不存在于系统中") + + debug_print(f"✅ 目标容器验证通过") + action_sequence.append(create_action_log("目标容器验证通过", "✅")) + + # 2. 查找酸碱试剂容器 + debug_print(f"🔍 步骤2: 查找试剂容器...") + action_sequence.append(create_action_log("正在查找试剂容器...", "🔍")) + + try: + reagent_vessel = find_acid_base_vessel(G, reagent) + debug_print(f"✅ 找到试剂容器: {reagent_vessel}") + action_sequence.append(create_action_log(f"找到试剂容器: {reagent_vessel}", "🧪")) + except ValueError as e: + debug_print(f"❌ 无法找到试剂容器: {str(e)}") + action_sequence.append(create_action_log(f"试剂容器查找失败: {str(e)}", "❌")) + raise ValueError(f"无法找到试剂 '{reagent}': {str(e)}") + + # 3. 体积估算 + debug_print(f"🔍 步骤3: 体积处理...") + if volume <= 0: + action_sequence.append(create_action_log("开始自动估算试剂体积", "🧮")) + + # 获取目标容器的体积信息 + vessel_data = G.nodes[vessel_id].get('data', {}) + vessel_volume = vessel_data.get('max_volume', 100.0) # 默认100mL + debug_print(f"📏 容器最大体积: {vessel_volume}mL") + + estimated_volume = calculate_reagent_volume(ph_value, reagent, vessel_volume) + volume = estimated_volume + debug_print(f"✅ 自动估算试剂体积: {volume:.2f} mL") + action_sequence.append(create_action_log(f"估算试剂体积: {volume:.2f}mL", "📊")) + else: + debug_print(f"📏 使用指定体积: {volume}mL") + action_sequence.append(create_action_log(f"使用指定体积: {volume}mL", "📏")) + + # 4. 验证路径存在 + debug_print(f"🔍 步骤4: 路径验证...") + action_sequence.append(create_action_log("验证转移路径...", "🛤️")) + + try: + path = nx.shortest_path(G, source=reagent_vessel, target=vessel_id) + debug_print(f"✅ 找到路径: {' → '.join(path)}") + action_sequence.append(create_action_log(f"找到转移路径: {' → '.join(path)}", "🛤️")) + except nx.NetworkXNoPath: + debug_print(f"❌ 无法找到转移路径") + action_sequence.append(create_action_log("转移路径不存在", "❌")) + raise ValueError(f"从试剂容器 '{reagent_vessel}' 到目标容器 '{vessel_id}' 没有可用路径") + + # 5. 搅拌器设置 + debug_print(f"🔍 步骤5: 搅拌器设置...") + stirrer_id = None + if stir: + action_sequence.append(create_action_log("准备启动搅拌器", "🌪️")) + + try: + stirrer_id = find_connected_stirrer(G, vessel_id) + + if stirrer_id: + debug_print(f"✅ 找到搅拌器 {stirrer_id},启动搅拌") + action_sequence.append(create_action_log(f"启动搅拌器 {stirrer_id} (速度: {stir_speed}rpm)", "🔄")) + + action_sequence.append({ + "device_id": stirrer_id, + "action_name": "start_stir", + "action_kwargs": { + "vessel": vessel_id, + "stir_speed": stir_speed, + "purpose": f"pH调节: 启动搅拌,准备添加 {reagent}" + } + }) + + # 等待搅拌稳定 + action_sequence.append(create_action_log("等待搅拌稳定...", "⏳")) + action_sequence.append({ + "action_name": "wait", + "action_kwargs": {"time": 5} + }) + else: + debug_print(f"⚠️ 未找到搅拌器,继续执行") + action_sequence.append(create_action_log("未找到搅拌器,跳过搅拌", "⚠️")) + + except Exception as e: + debug_print(f"❌ 搅拌器配置出错: {str(e)}") + action_sequence.append(create_action_log(f"搅拌器配置失败: {str(e)}", "❌")) + else: + debug_print(f"📋 跳过搅拌设置") + action_sequence.append(create_action_log("跳过搅拌设置", "⏭️")) + + # 6. 试剂添加 + debug_print(f"🔍 步骤6: 试剂添加...") + action_sequence.append(create_action_log(f"开始添加试剂 {volume:.2f}mL", "🚰")) + + # 计算添加时间(pH调节需要缓慢添加) + addition_time = max(30.0, volume * 2.0) # 至少30秒,每mL需要2秒 + debug_print(f"⏱️ 计算添加时间: {addition_time}s (缓慢注入)") + action_sequence.append(create_action_log(f"设置添加时间: {addition_time:.0f}s (缓慢注入)", "⏱️")) + + try: + action_sequence.append(create_action_log("调用泵协议进行试剂转移", "🔄")) + + pump_actions = generate_pump_protocol_with_rinsing( + G=G, + from_vessel=reagent_vessel, + to_vessel=vessel_id, + volume=volume, + amount="", + time=addition_time, + viscous=False, + rinsing_solvent="", # pH调节不需要清洗 + rinsing_volume=0.0, + rinsing_repeats=0, + solid=False, + flowrate=0.5, # 缓慢注入 + transfer_flowrate=0.3 + ) + + action_sequence.extend(pump_actions) + debug_print(f"✅ 泵协议生成完成,添加了 {len(pump_actions)} 个动作") + action_sequence.append(create_action_log(f"试剂转移完成 ({len(pump_actions)} 个操作)", "✅")) + + # 🔧 修复体积运算 - 试剂添加成功后更新容器液体体积 + debug_print(f"🔧 更新容器液体体积...") + if "data" in vessel and "liquid_volume" in vessel["data"]: + current_volume = vessel["data"]["liquid_volume"] + debug_print(f"📊 添加前容器体积: {current_volume}") + + # 处理不同的体积数据格式 + if isinstance(current_volume, list): + if len(current_volume) > 0: + # 增加体积(添加试剂) + vessel["data"]["liquid_volume"][0] += volume + debug_print(f"📊 添加后容器体积: {vessel['data']['liquid_volume'][0]:.2f}mL (+{volume:.2f}mL)") + else: + # 如果列表为空,创建新的体积记录 + vessel["data"]["liquid_volume"] = [volume] + debug_print(f"📊 初始化容器体积: {volume:.2f}mL") + elif isinstance(current_volume, (int, float)): + # 直接数值类型 + vessel["data"]["liquid_volume"] += volume + debug_print(f"📊 添加后容器体积: {vessel['data']['liquid_volume']:.2f}mL (+{volume:.2f}mL)") + else: + debug_print(f"⚠️ 未知的体积数据格式: {type(current_volume)}") + # 创建新的体积记录 + vessel["data"]["liquid_volume"] = volume + else: + debug_print(f"📊 容器无液体体积数据,创建新记录: {volume:.2f}mL") + # 确保vessel有data字段 + if "data" not in vessel: + vessel["data"] = {} + vessel["data"]["liquid_volume"] = volume + + # 🔧 同时更新图中的容器数据 + if vessel_id in G.nodes(): + vessel_node_data = G.nodes[vessel_id].get('data', {}) + current_node_volume = vessel_node_data.get('liquid_volume', 0.0) + + if isinstance(current_node_volume, list): + if len(current_node_volume) > 0: + G.nodes[vessel_id]['data']['liquid_volume'][0] += volume + else: + G.nodes[vessel_id]['data']['liquid_volume'] = [volume] + else: + G.nodes[vessel_id]['data']['liquid_volume'] = current_node_volume + volume + + debug_print(f"✅ 图节点体积数据已更新") + + action_sequence.append(create_action_log(f"容器体积已更新 (+{volume:.2f}mL)", "📊")) + + except Exception as e: + debug_print(f"❌ 生成泵协议时出错: {str(e)}") + action_sequence.append(create_action_log(f"泵协议生成失败: {str(e)}", "❌")) + raise ValueError(f"生成泵协议时出错: {str(e)}") + + # 7. 混合搅拌 + if stir and stirrer_id: + debug_print(f"🔍 步骤7: 混合搅拌...") + action_sequence.append(create_action_log(f"开始混合搅拌 {stir_time:.0f}s", "🌀")) + + action_sequence.append({ + "device_id": stirrer_id, + "action_name": "stir", + "action_kwargs": { + "stir_time": stir_time, + "stir_speed": stir_speed, + "settling_time": settling_time, + "purpose": f"pH调节: 混合试剂,目标pH={ph_value}" + } + }) + + debug_print(f"✅ 混合搅拌设置完成") + else: + debug_print(f"⏭️ 跳过混合搅拌") + action_sequence.append(create_action_log("跳过混合搅拌", "⏭️")) + + # 8. 等待平衡 + debug_print(f"🔍 步骤8: 反应平衡...") + action_sequence.append(create_action_log(f"等待pH平衡 {settling_time:.0f}s", "⚖️")) + + action_sequence.append({ + "action_name": "wait", + "action_kwargs": { + "time": settling_time, + "description": f"等待pH平衡到目标值 {ph_value}" + } + }) + + # 9. 完成总结 + total_time = addition_time + stir_time + settling_time + + debug_print("=" * 60) + debug_print(f"🎉 pH调节协议生成完成") + debug_print(f"📊 协议统计:") + debug_print(f" 📋 总动作数: {len(action_sequence)}") + debug_print(f" ⏱️ 预计总时间: {total_time:.0f}s ({total_time/60:.1f}分钟)") + debug_print(f" 🧪 试剂: {reagent}") + debug_print(f" 📏 体积: {volume:.2f}mL") + debug_print(f" 📊 目标pH: {ph_value}") + debug_print(f" 🥼 目标容器: {vessel_id}") + debug_print("=" * 60) + + # 添加完成日志 + summary_msg = f"pH调节协议完成: {vessel_id} → pH {ph_value} (使用 {volume:.2f}mL {reagent})" + action_sequence.append(create_action_log(summary_msg, "🎉")) + + return action_sequence + +def generate_adjust_ph_protocol_stepwise( + G: nx.DiGraph, + vessel: dict, # 🔧 修改:从字符串改为字典类型 + ph_value: float, + reagent: str, + max_volume: float = 10.0, + steps: int = 3 +) -> List[Dict[str, Any]]: + """ + 分步调节pH的协议(更安全,避免过度调节) + + Args: + G: 网络图 + vessel: 目标容器字典 + ph_value: 目标pH值 + reagent: 酸碱试剂 + max_volume: 最大试剂体积 + steps: 分步数量 + + Returns: + List[Dict[str, Any]]: 动作序列 + """ + # 🔧 核心修改:从字典中提取容器ID + vessel_id = vessel["id"] + + debug_print("=" * 60) + debug_print(f"🔄 开始分步pH调节") + debug_print(f"📋 分步参数:") + debug_print(f" 🥼 vessel: {vessel} (ID: {vessel_id})") + debug_print(f" 📊 ph_value: {ph_value}") + debug_print(f" 🧪 reagent: {reagent}") + debug_print(f" 📏 max_volume: {max_volume}mL") + debug_print(f" 🔢 steps: {steps}") + debug_print("=" * 60) + + action_sequence = [] + + # 每步添加的体积 + step_volume = max_volume / steps + debug_print(f"📊 每步体积: {step_volume:.2f}mL") + + action_sequence.append(create_action_log(f"开始分步pH调节 ({steps}步)", "🔄")) + action_sequence.append(create_action_log(f"每步添加: {step_volume:.2f}mL", "📏")) + + for i in range(steps): + debug_print(f"🔄 执行第 {i+1}/{steps} 步,添加 {step_volume:.2f}mL") + action_sequence.append(create_action_log(f"第 {i+1}/{steps} 步开始", "🚀")) + + # 生成单步协议 + step_actions = generate_adjust_ph_protocol( + G=G, + vessel=vessel, # 🔧 直接传递vessel字典 + ph_value=ph_value, + reagent=reagent, + volume=step_volume, + stir=True, + stir_speed=300.0, + stir_time=30.0, + settling_time=20.0 + ) + + action_sequence.extend(step_actions) + debug_print(f"✅ 第 {i+1}/{steps} 步完成,添加了 {len(step_actions)} 个动作") + action_sequence.append(create_action_log(f"第 {i+1}/{steps} 步完成", "✅")) + + # 步骤间等待 + if i < steps - 1: + debug_print(f"⏳ 步骤间等待30s") + action_sequence.append(create_action_log("步骤间等待...", "⏳")) + action_sequence.append({ + "action_name": "wait", + "action_kwargs": { + "time": 30, + "description": f"pH调节第{i+1}步完成,等待下一步" + } + }) + + debug_print(f"🎉 分步pH调节完成,共 {len(action_sequence)} 个动作") + action_sequence.append(create_action_log("分步pH调节全部完成", "🎉")) + + return action_sequence + +# 便捷函数:常用pH调节 +def generate_acidify_protocol( + G: nx.DiGraph, + vessel: dict, # 🔧 修改:从字符串改为字典类型 + target_ph: float = 2.0, + acid: str = "hydrochloric acid" +) -> List[Dict[str, Any]]: + """酸化协议""" + vessel_id = vessel["id"] + debug_print(f"🍋 生成酸化协议: {vessel_id} → pH {target_ph} (使用 {acid})") + return generate_adjust_ph_protocol( + G, vessel, target_ph, acid + ) + +def generate_basify_protocol( + G: nx.DiGraph, + vessel: dict, # 🔧 修改:从字符串改为字典类型 + target_ph: float = 12.0, + base: str = "sodium hydroxide" +) -> List[Dict[str, Any]]: + """碱化协议""" + vessel_id = vessel["id"] + debug_print(f"🧂 生成碱化协议: {vessel_id} → pH {target_ph} (使用 {base})") + return generate_adjust_ph_protocol( + G, vessel, target_ph, base + ) + +def generate_neutralize_protocol( + G: nx.DiGraph, + vessel: dict, # 🔧 修改:从字符串改为字典类型 + reagent: str = "sodium hydroxide" +) -> List[Dict[str, Any]]: + """中和协议(pH=7)""" + vessel_id = vessel["id"] + debug_print(f"⚖️ 生成中和协议: {vessel_id} → pH 7.0 (使用 {reagent})") + return generate_adjust_ph_protocol( + G, vessel, 7.0, reagent + ) + +# 测试函数 +def test_adjust_ph_protocol(): + """测试pH调节协议""" + debug_print("=== ADJUST PH PROTOCOL 增强版测试 ===") + + # 测试体积计算 + debug_print("🧮 测试体积计算...") + test_cases = [ + (2.0, "hydrochloric acid", 100.0), + (4.0, "hydrochloric acid", 100.0), + (12.0, "sodium hydroxide", 100.0), + (10.0, "sodium hydroxide", 100.0), + (7.0, "unknown reagent", 100.0) + ] + + for ph, reagent, volume in test_cases: + result = calculate_reagent_volume(ph, reagent, volume) + debug_print(f"📊 {reagent} → pH {ph}: {result:.2f}mL") + + debug_print("✅ 测试完成") + +if __name__ == "__main__": + test_adjust_ph_protocol() \ No newline at end of file diff --git a/unilabos/compile/clean_vessel_protocol.py b/unilabos/compile/clean_vessel_protocol.py index 28abc95..b285056 100644 --- a/unilabos/compile/clean_vessel_protocol.py +++ b/unilabos/compile/clean_vessel_protocol.py @@ -145,7 +145,7 @@ def find_connected_heatchill(G: nx.DiGraph, vessel: str) -> str: def generate_clean_vessel_protocol( G: nx.DiGraph, - vessel: str, + vessel: dict, # 🔧 修改:从字符串改为字典类型 solvent: str, volume: float, temp: float, @@ -165,7 +165,7 @@ def generate_clean_vessel_protocol( Args: G: 有向图,节点为设备和容器,边为流体管道 - vessel: 要清洗的容器名称 + vessel: 要清洗的容器字典(包含id字段) solvent: 用于清洗的溶剂名称 volume: 每次清洗使用的溶剂体积 temp: 清洗时的温度 @@ -178,20 +178,23 @@ def generate_clean_vessel_protocol( ValueError: 当找不到必要的容器或设备时抛出异常 Examples: - clean_protocol = generate_clean_vessel_protocol(G, "main_reactor", "water", 100.0, 60.0, 2) + clean_protocol = generate_clean_vessel_protocol(G, {"id": "main_reactor"}, "water", 100.0, 60.0, 2) """ + # 🔧 核心修改:从字典中提取容器ID + vessel_id = vessel["id"] + action_sequence = [] print(f"CLEAN_VESSEL: 开始生成容器清洗协议") - print(f" - 目标容器: {vessel}") + print(f" - 目标容器: {vessel} (ID: {vessel_id})") print(f" - 清洗溶剂: {solvent}") print(f" - 清洗体积: {volume} mL") print(f" - 清洗温度: {temp}°C") print(f" - 重复次数: {repeats}") # 验证目标容器存在 - if vessel not in G.nodes(): - raise ValueError(f"目标容器 '{vessel}' 不存在于系统中") + if vessel_id not in G.nodes(): + raise ValueError(f"目标容器 '{vessel_id}' 不存在于系统中") # 查找溶剂容器 try: @@ -208,12 +211,23 @@ def generate_clean_vessel_protocol( raise ValueError(f"无法找到废液容器: {str(e)}") # 查找加热设备(可选) - heatchill_id = find_connected_heatchill(G, vessel) + heatchill_id = find_connected_heatchill(G, vessel_id) # 🔧 使用 vessel_id if heatchill_id: print(f"CLEAN_VESSEL: 找到加热设备: {heatchill_id}") else: print(f"CLEAN_VESSEL: 未找到加热设备,将在室温下清洗") + # 🔧 新增:记录清洗前的容器状态 + print(f"CLEAN_VESSEL: 记录清洗前容器状态...") + original_liquid_volume = 0.0 + if "data" in vessel and "liquid_volume" in vessel["data"]: + current_volume = vessel["data"]["liquid_volume"] + if isinstance(current_volume, list) and len(current_volume) > 0: + original_liquid_volume = current_volume[0] + elif isinstance(current_volume, (int, float)): + original_liquid_volume = current_volume + print(f"CLEAN_VESSEL: 清洗前液体体积: {original_liquid_volume:.2f}mL") + # 第一步:如果需要加热且有加热设备,启动加热 if temp > 25.0 and heatchill_id: print(f"CLEAN_VESSEL: 启动加热至 {temp}°C") @@ -221,7 +235,7 @@ def generate_clean_vessel_protocol( "device_id": heatchill_id, "action_name": "heat_chill_start", "action_kwargs": { - "vessel": vessel, + "vessel": vessel_id, # 🔧 使用 vessel_id "temp": temp, "purpose": f"cleaning with {solvent}" } @@ -240,18 +254,61 @@ def generate_clean_vessel_protocol( print(f"CLEAN_VESSEL: 执行第 {repeat + 1} 次清洗") # 2a. 使用 pump_protocol 将溶剂转移到目标容器 - print(f"CLEAN_VESSEL: 将 {volume} mL {solvent} 转移到 {vessel}") + print(f"CLEAN_VESSEL: 将 {volume} mL {solvent} 转移到 {vessel_id}") try: # 调用成熟的 pump_protocol 算法 add_solvent_actions = generate_pump_protocol( G=G, from_vessel=solvent_vessel, - to_vessel=vessel, + to_vessel=vessel_id, # 🔧 使用 vessel_id volume=volume, flowrate=2.5, # 适中的流速,避免飞溅 transfer_flowrate=2.5 ) action_sequence.extend(add_solvent_actions) + + # 🔧 新增:更新容器体积(添加清洗溶剂) + print(f"CLEAN_VESSEL: 更新容器体积 - 添加清洗溶剂 {volume:.2f}mL") + if "data" not in vessel: + vessel["data"] = {} + + if "liquid_volume" in vessel["data"]: + current_volume = vessel["data"]["liquid_volume"] + if isinstance(current_volume, list): + if len(current_volume) > 0: + vessel["data"]["liquid_volume"][0] += volume + print(f"CLEAN_VESSEL: 添加溶剂后体积: {vessel['data']['liquid_volume'][0]:.2f}mL (+{volume:.2f}mL)") + else: + vessel["data"]["liquid_volume"] = [volume] + print(f"CLEAN_VESSEL: 初始化清洗体积: {volume:.2f}mL") + elif isinstance(current_volume, (int, float)): + vessel["data"]["liquid_volume"] += volume + print(f"CLEAN_VESSEL: 添加溶剂后体积: {vessel['data']['liquid_volume']:.2f}mL (+{volume:.2f}mL)") + else: + vessel["data"]["liquid_volume"] = volume + print(f"CLEAN_VESSEL: 重置体积为: {volume:.2f}mL") + else: + vessel["data"]["liquid_volume"] = volume + print(f"CLEAN_VESSEL: 创建新体积记录: {volume:.2f}mL") + + # 🔧 同时更新图中的容器数据 + if vessel_id in G.nodes(): + if 'data' not in G.nodes[vessel_id]: + G.nodes[vessel_id]['data'] = {} + + vessel_node_data = G.nodes[vessel_id]['data'] + current_node_volume = vessel_node_data.get('liquid_volume', 0.0) + + if isinstance(current_node_volume, list): + if len(current_node_volume) > 0: + G.nodes[vessel_id]['data']['liquid_volume'][0] += volume + else: + G.nodes[vessel_id]['data']['liquid_volume'] = [volume] + else: + G.nodes[vessel_id]['data']['liquid_volume'] = current_node_volume + volume + + print(f"CLEAN_VESSEL: 图节点体积数据已更新") + except Exception as e: raise ValueError(f"无法将溶剂转移到容器: {str(e)}") @@ -265,18 +322,52 @@ def generate_clean_vessel_protocol( action_sequence.append(wait_action) # 2c. 使用 pump_protocol 将清洗液转移到废液容器 - print(f"CLEAN_VESSEL: 将清洗液从 {vessel} 转移到废液容器") + print(f"CLEAN_VESSEL: 将清洗液从 {vessel_id} 转移到废液容器") try: # 调用成熟的 pump_protocol 算法 remove_waste_actions = generate_pump_protocol( G=G, - from_vessel=vessel, + from_vessel=vessel_id, # 🔧 使用 vessel_id to_vessel=waste_vessel, volume=volume, flowrate=2.5, # 适中的流速 transfer_flowrate=2.5 ) action_sequence.extend(remove_waste_actions) + + # 🔧 新增:更新容器体积(移除清洗液) + print(f"CLEAN_VESSEL: 更新容器体积 - 移除清洗液 {volume:.2f}mL") + if "data" in vessel and "liquid_volume" in vessel["data"]: + current_volume = vessel["data"]["liquid_volume"] + if isinstance(current_volume, list): + if len(current_volume) > 0: + vessel["data"]["liquid_volume"][0] = max(0.0, vessel["data"]["liquid_volume"][0] - volume) + print(f"CLEAN_VESSEL: 移除清洗液后体积: {vessel['data']['liquid_volume'][0]:.2f}mL (-{volume:.2f}mL)") + else: + vessel["data"]["liquid_volume"] = [0.0] + print(f"CLEAN_VESSEL: 重置体积为0mL") + elif isinstance(current_volume, (int, float)): + vessel["data"]["liquid_volume"] = max(0.0, current_volume - volume) + print(f"CLEAN_VESSEL: 移除清洗液后体积: {vessel['data']['liquid_volume']:.2f}mL (-{volume:.2f}mL)") + else: + vessel["data"]["liquid_volume"] = 0.0 + print(f"CLEAN_VESSEL: 重置体积为0mL") + + # 🔧 同时更新图中的容器数据 + if vessel_id in G.nodes(): + vessel_node_data = G.nodes[vessel_id].get('data', {}) + current_node_volume = vessel_node_data.get('liquid_volume', 0.0) + + if isinstance(current_node_volume, list): + if len(current_node_volume) > 0: + G.nodes[vessel_id]['data']['liquid_volume'][0] = max(0.0, current_node_volume[0] - volume) + else: + G.nodes[vessel_id]['data']['liquid_volume'] = [0.0] + else: + G.nodes[vessel_id]['data']['liquid_volume'] = max(0.0, current_node_volume - volume) + + print(f"CLEAN_VESSEL: 图节点体积数据已更新") + except Exception as e: raise ValueError(f"无法将清洗液转移到废液容器: {str(e)}") @@ -296,13 +387,24 @@ def generate_clean_vessel_protocol( "device_id": heatchill_id, "action_name": "heat_chill_stop", "action_kwargs": { - "vessel": vessel + "vessel": vessel_id # 🔧 使用 vessel_id } } action_sequence.append(heatchill_stop_action) - print(f"CLEAN_VESSEL: 生成了 {len(action_sequence)} 个动作") - print(f"CLEAN_VESSEL: 清洗协议生成完成") + # 🔧 新增:清洗完成后的状态报告 + final_liquid_volume = 0.0 + if "data" in vessel and "liquid_volume" in vessel["data"]: + current_volume = vessel["data"]["liquid_volume"] + if isinstance(current_volume, list) and len(current_volume) > 0: + final_liquid_volume = current_volume[0] + elif isinstance(current_volume, (int, float)): + final_liquid_volume = current_volume + + print(f"CLEAN_VESSEL: 清洗完成") + print(f" - 清洗前体积: {original_liquid_volume:.2f}mL") + print(f" - 清洗后体积: {final_liquid_volume:.2f}mL") + print(f" - 生成了 {len(action_sequence)} 个动作") return action_sequence @@ -310,7 +412,7 @@ def generate_clean_vessel_protocol( # 便捷函数:常用清洗方案 def generate_quick_clean_protocol( G: nx.DiGraph, - vessel: str, + vessel: dict, # 🔧 修改:从字符串改为字典类型 solvent: str = "water", volume: float = 100.0 ) -> List[Dict[str, Any]]: @@ -320,7 +422,7 @@ def generate_quick_clean_protocol( def generate_thorough_clean_protocol( G: nx.DiGraph, - vessel: str, + vessel: dict, # 🔧 修改:从字符串改为字典类型 solvent: str = "water", volume: float = 150.0, temp: float = 60.0 @@ -331,7 +433,7 @@ def generate_thorough_clean_protocol( def generate_organic_clean_protocol( G: nx.DiGraph, - vessel: str, + vessel: dict, # 🔧 修改:从字符串改为字典类型 volume: float = 100.0 ) -> List[Dict[str, Any]]: """有机清洗:先用有机溶剂,再用水清洗""" diff --git a/unilabos/compile/dissolve_protocol.py b/unilabos/compile/dissolve_protocol.py index 3da0d53..7c7022d 100644 --- a/unilabos/compile/dissolve_protocol.py +++ b/unilabos/compile/dissolve_protocol.py @@ -1,359 +1,974 @@ -from typing import List, Dict, Any import networkx as nx -from .pump_protocol import generate_pump_protocol +import re +import logging +from typing import List, Dict, Any, Union +from .pump_protocol import generate_pump_protocol_with_rinsing +logger = logging.getLogger(__name__) + +def debug_print(message): + """调试输出""" + print(f"[DISSOLVE] {message}", flush=True) + logger.info(f"[DISSOLVE] {message}") + +# 🆕 创建进度日志动作 +def create_action_log(message: str, emoji: str = "📝") -> Dict[str, Any]: + """创建一个动作日志""" + full_message = f"{emoji} {message}" + debug_print(full_message) + logger.info(full_message) + print(f"[ACTION] {full_message}", flush=True) + + return { + "action_name": "wait", + "action_kwargs": { + "time": 0.1, + "log_message": full_message + } + } + +def parse_volume_input(volume_input: Union[str, float]) -> float: + """ + 解析体积输入,支持带单位的字符串 + + Args: + volume_input: 体积输入(如 "10 mL", "?", 10.0) + + Returns: + float: 体积(毫升) + """ + if isinstance(volume_input, (int, float)): + debug_print(f"📏 体积输入为数值: {volume_input}") + return float(volume_input) + + if not volume_input or not str(volume_input).strip(): + debug_print(f"⚠️ 体积输入为空,返回0.0mL") + return 0.0 + + volume_str = str(volume_input).lower().strip() + debug_print(f"🔍 解析体积输入: '{volume_str}'") + + # 处理未知体积 + if volume_str in ['?', 'unknown', 'tbd', 'to be determined']: + default_volume = 50.0 # 默认50mL + debug_print(f"❓ 检测到未知体积,使用默认值: {default_volume}mL 🎯") + return default_volume + + # 移除空格并提取数字和单位 + volume_clean = re.sub(r'\s+', '', volume_str) + + # 匹配数字和单位的正则表达式 + match = re.match(r'([0-9]*\.?[0-9]+)\s*(ml|l|μl|ul|microliter|milliliter|liter)?', volume_clean) + + if not match: + debug_print(f"❌ 无法解析体积: '{volume_str}',使用默认值50mL") + return 50.0 + + value = float(match.group(1)) + unit = match.group(2) or 'ml' # 默认单位为毫升 + + # 转换为毫升 + if unit in ['l', 'liter']: + volume = value * 1000.0 # L -> mL + debug_print(f"🔄 体积转换: {value}L → {volume}mL") + elif unit in ['μl', 'ul', 'microliter']: + volume = value / 1000.0 # μL -> mL + debug_print(f"🔄 体积转换: {value}μL → {volume}mL") + else: # ml, milliliter 或默认 + volume = value # 已经是mL + debug_print(f"✅ 体积已为mL: {volume}mL") + + return volume + +def parse_mass_input(mass_input: Union[str, float]) -> float: + """ + 解析质量输入,支持带单位的字符串 + + Args: + mass_input: 质量输入(如 "2.9 g", "?", 2.5) + + Returns: + float: 质量(克) + """ + if isinstance(mass_input, (int, float)): + debug_print(f"⚖️ 质量输入为数值: {mass_input}g") + return float(mass_input) + + if not mass_input or not str(mass_input).strip(): + debug_print(f"⚠️ 质量输入为空,返回0.0g") + return 0.0 + + mass_str = str(mass_input).lower().strip() + debug_print(f"🔍 解析质量输入: '{mass_str}'") + + # 处理未知质量 + if mass_str in ['?', 'unknown', 'tbd', 'to be determined']: + default_mass = 1.0 # 默认1g + debug_print(f"❓ 检测到未知质量,使用默认值: {default_mass}g 🎯") + return default_mass + + # 移除空格并提取数字和单位 + mass_clean = re.sub(r'\s+', '', mass_str) + + # 匹配数字和单位的正则表达式 + match = re.match(r'([0-9]*\.?[0-9]+)\s*(g|mg|kg|gram|milligram|kilogram)?', mass_clean) + + if not match: + debug_print(f"❌ 无法解析质量: '{mass_str}',返回0.0g") + return 0.0 + + value = float(match.group(1)) + unit = match.group(2) or 'g' # 默认单位为克 + + # 转换为克 + if unit in ['mg', 'milligram']: + mass = value / 1000.0 # mg -> g + debug_print(f"🔄 质量转换: {value}mg → {mass}g") + elif unit in ['kg', 'kilogram']: + mass = value * 1000.0 # kg -> g + debug_print(f"🔄 质量转换: {value}kg → {mass}g") + else: # g, gram 或默认 + mass = value # 已经是g + debug_print(f"✅ 质量已为g: {mass}g") + + return mass + +def parse_time_input(time_input: Union[str, float]) -> float: + """ + 解析时间输入,支持带单位的字符串 + + Args: + time_input: 时间输入(如 "30 min", "1 h", "?", 60.0) + + Returns: + float: 时间(秒) + """ + if isinstance(time_input, (int, float)): + debug_print(f"⏱️ 时间输入为数值: {time_input}秒") + return float(time_input) + + if not time_input or not str(time_input).strip(): + debug_print(f"⚠️ 时间输入为空,返回0秒") + return 0.0 + + time_str = str(time_input).lower().strip() + debug_print(f"🔍 解析时间输入: '{time_str}'") + + # 处理未知时间 + if time_str in ['?', 'unknown', 'tbd']: + default_time = 600.0 # 默认10分钟 + debug_print(f"❓ 检测到未知时间,使用默认值: {default_time}s (10分钟) ⏰") + return default_time + + # 移除空格并提取数字和单位 + time_clean = re.sub(r'\s+', '', time_str) + + # 匹配数字和单位的正则表达式 + match = re.match(r'([0-9]*\.?[0-9]+)\s*(s|sec|second|min|minute|h|hr|hour|d|day)?', time_clean) + + if not match: + debug_print(f"❌ 无法解析时间: '{time_str}',返回0s") + return 0.0 + + value = float(match.group(1)) + unit = match.group(2) or 's' # 默认单位为秒 + + # 转换为秒 + if unit in ['min', 'minute']: + time_sec = value * 60.0 # min -> s + debug_print(f"🔄 时间转换: {value}分钟 → {time_sec}秒") + elif unit in ['h', 'hr', 'hour']: + time_sec = value * 3600.0 # h -> s + debug_print(f"🔄 时间转换: {value}小时 → {time_sec}秒") + elif unit in ['d', 'day']: + time_sec = value * 86400.0 # d -> s + debug_print(f"🔄 时间转换: {value}天 → {time_sec}秒") + else: # s, sec, second 或默认 + time_sec = value # 已经是s + debug_print(f"✅ 时间已为秒: {time_sec}秒") + + return time_sec + +def parse_temperature_input(temp_input: Union[str, float]) -> float: + """ + 解析温度输入,支持带单位的字符串 + + Args: + temp_input: 温度输入(如 "60 °C", "room temperature", "?", 25.0) + + Returns: + float: 温度(摄氏度) + """ + if isinstance(temp_input, (int, float)): + debug_print(f"🌡️ 温度输入为数值: {temp_input}°C") + return float(temp_input) + + if not temp_input or not str(temp_input).strip(): + debug_print(f"⚠️ 温度输入为空,使用默认室温25°C") + return 25.0 # 默认室温 + + temp_str = str(temp_input).lower().strip() + debug_print(f"🔍 解析温度输入: '{temp_str}'") + + # 处理特殊温度描述 + temp_aliases = { + 'room temperature': 25.0, + 'rt': 25.0, + 'ambient': 25.0, + 'cold': 4.0, + 'ice': 0.0, + 'reflux': 80.0, # 默认回流温度 + '?': 25.0, + 'unknown': 25.0 + } + + if temp_str in temp_aliases: + result = temp_aliases[temp_str] + debug_print(f"🏷️ 温度别名解析: '{temp_str}' → {result}°C") + return result + + # 移除空格并提取数字和单位 + temp_clean = re.sub(r'\s+', '', temp_str) + + # 匹配数字和单位的正则表达式 + match = re.match(r'([0-9]*\.?[0-9]+)\s*(°c|c|celsius|°f|f|fahrenheit|k|kelvin)?', temp_clean) + + if not match: + debug_print(f"❌ 无法解析温度: '{temp_str}',使用默认值25°C") + return 25.0 + + value = float(match.group(1)) + unit = match.group(2) or 'c' # 默认单位为摄氏度 + + # 转换为摄氏度 + if unit in ['°f', 'f', 'fahrenheit']: + temp_c = (value - 32) * 5/9 # F -> C + debug_print(f"🔄 温度转换: {value}°F → {temp_c:.1f}°C") + elif unit in ['k', 'kelvin']: + temp_c = value - 273.15 # K -> C + debug_print(f"🔄 温度转换: {value}K → {temp_c:.1f}°C") + else: # °c, c, celsius 或默认 + temp_c = value # 已经是C + debug_print(f"✅ 温度已为°C: {temp_c}°C") + + return temp_c def find_solvent_vessel(G: nx.DiGraph, solvent: str) -> str: - """ - 查找溶剂容器 - """ - # 按照pump_protocol的命名规则查找溶剂瓶 - solvent_vessel_id = f"flask_{solvent}" + """增强版溶剂容器查找,支持多种匹配模式""" + debug_print(f"🔍 开始查找溶剂 '{solvent}' 的容器...") - if solvent_vessel_id in G.nodes(): - return solvent_vessel_id - - # 如果直接匹配失败,尝试模糊匹配 + # 🔧 方法1:直接搜索 data.reagent_name 和 config.reagent + debug_print(f"📋 方法1: 搜索reagent字段...") for node in G.nodes(): - if node.startswith('flask_') and solvent.lower() in node.lower(): - return node + node_data = G.nodes[node].get('data', {}) + node_type = G.nodes[node].get('type', '') + config_data = G.nodes[node].get('config', {}) + + # 只搜索容器类型的节点 + if node_type == 'container': + reagent_name = node_data.get('reagent_name', '').lower() + config_reagent = config_data.get('reagent', '').lower() + + # 精确匹配 + if reagent_name == solvent.lower() or config_reagent == solvent.lower(): + debug_print(f"✅ 通过reagent字段精确匹配到容器: {node} 🎯") + return node + + # 模糊匹配 + if (solvent.lower() in reagent_name and reagent_name) or \ + (solvent.lower() in config_reagent and config_reagent): + debug_print(f"✅ 通过reagent字段模糊匹配到容器: {node} 🔍") + return node - # 如果还是找不到,列出所有可用的溶剂瓶 - available_flasks = [node for node in G.nodes() - if node.startswith('flask_') - and G.nodes[node].get('type') == 'container'] + # 🔧 方法2:常见的容器命名规则 + debug_print(f"📋 方法2: 使用命名规则查找...") + solvent_clean = solvent.lower().replace(' ', '_').replace('-', '_') + possible_names = [ + solvent_clean, + f"flask_{solvent_clean}", + f"bottle_{solvent_clean}", + f"vessel_{solvent_clean}", + f"{solvent_clean}_flask", + f"{solvent_clean}_bottle", + f"solvent_{solvent_clean}", + f"reagent_{solvent_clean}", + f"reagent_bottle_{solvent_clean}", + f"reagent_bottle_1", # 通用试剂瓶 + f"reagent_bottle_2", + f"reagent_bottle_3" + ] - raise ValueError(f"找不到溶剂 '{solvent}' 对应的溶剂瓶。可用溶剂瓶: {available_flasks}") - + debug_print(f"🔍 尝试的容器名称: {possible_names[:5]}... (共{len(possible_names)}个)") + + for name in possible_names: + if name in G.nodes(): + node_type = G.nodes[name].get('type', '') + if node_type == 'container': + debug_print(f"✅ 通过命名规则找到容器: {name} 📝") + return name + + # 🔧 方法3:节点名称模糊匹配 + debug_print(f"📋 方法3: 节点名称模糊匹配...") + for node_id in G.nodes(): + node_data = G.nodes[node_id] + if node_data.get('type') == 'container': + # 检查节点名称是否包含溶剂名称 + if solvent_clean in node_id.lower(): + debug_print(f"✅ 通过节点名称模糊匹配到容器: {node_id} 🔍") + return node_id + + # 检查液体类型匹配 + vessel_data = node_data.get('data', {}) + liquids = vessel_data.get('liquid', []) + for liquid in liquids: + if isinstance(liquid, dict): + liquid_type = liquid.get('liquid_type') or liquid.get('name', '') + if liquid_type.lower() == solvent.lower(): + debug_print(f"✅ 通过液体类型匹配到容器: {node_id} 💧") + return node_id + + # 🔧 方法4:使用第一个试剂瓶作为备选 + debug_print(f"📋 方法4: 查找备选试剂瓶...") + for node_id in G.nodes(): + node_data = G.nodes[node_id] + if (node_data.get('type') == 'container' and + ('reagent' in node_id.lower() or 'bottle' in node_id.lower() or 'flask' in node_id.lower())): + debug_print(f"⚠️ 未找到专用容器,使用备选试剂瓶: {node_id} 🔄") + return node_id + + debug_print(f"❌ 所有方法都失败了,无法找到容器!") + raise ValueError(f"找不到溶剂 '{solvent}' 对应的容器") def find_connected_heatchill(G: nx.DiGraph, vessel: str) -> str: - """ - 查找与指定容器相连的加热搅拌器 - """ - # 查找所有加热搅拌器节点 - heatchill_nodes = [node for node in G.nodes() - if G.nodes[node].get('class') == 'virtual_heatchill'] + """查找连接到指定容器的加热搅拌器""" + debug_print(f"🔍 查找连接到容器 '{vessel}' 的加热搅拌器...") - # 检查哪个加热器与目标容器相连 + heatchill_nodes = [] + for node in G.nodes(): + node_class = G.nodes[node].get('class', '').lower() + if 'heatchill' in node_class: + heatchill_nodes.append(node) + debug_print(f"📋 发现加热搅拌器: {node}") + + debug_print(f"📊 共找到 {len(heatchill_nodes)} 个加热搅拌器") + + # 查找连接到容器的加热器 for heatchill in heatchill_nodes: if G.has_edge(heatchill, vessel) or G.has_edge(vessel, heatchill): + debug_print(f"✅ 找到连接的加热搅拌器: {heatchill} 🔗") return heatchill - # 如果没有直接连接,返回第一个可用的加热器 - return heatchill_nodes[0] if heatchill_nodes else None + # 返回第一个加热器 + if heatchill_nodes: + debug_print(f"⚠️ 未找到直接连接的加热搅拌器,使用第一个: {heatchill_nodes[0]} 🔄") + return heatchill_nodes[0] + + debug_print(f"❌ 未找到任何加热搅拌器") + return "" +def find_connected_stirrer(G: nx.DiGraph, vessel: str) -> str: + """查找连接到指定容器的搅拌器""" + debug_print(f"🔍 查找连接到容器 '{vessel}' 的搅拌器...") + + stirrer_nodes = [] + for node in G.nodes(): + node_class = G.nodes[node].get('class', '').lower() + if 'stirrer' in node_class: + stirrer_nodes.append(node) + debug_print(f"📋 发现搅拌器: {node}") + + debug_print(f"📊 共找到 {len(stirrer_nodes)} 个搅拌器") + + # 查找连接到容器的搅拌器 + for stirrer in stirrer_nodes: + if G.has_edge(stirrer, vessel) or G.has_edge(vessel, stirrer): + debug_print(f"✅ 找到连接的搅拌器: {stirrer} 🔗") + return stirrer + + # 返回第一个搅拌器 + if stirrer_nodes: + debug_print(f"⚠️ 未找到直接连接的搅拌器,使用第一个: {stirrer_nodes[0]} 🔄") + return stirrer_nodes[0] + + debug_print(f"❌ 未找到任何搅拌器") + return "" + +def find_solid_dispenser(G: nx.DiGraph) -> str: + """查找固体加样器""" + debug_print(f"🔍 查找固体加样器...") + + for node in G.nodes(): + node_class = G.nodes[node].get('class', '').lower() + if 'solid_dispenser' in node_class or 'dispenser' in node_class: + debug_print(f"✅ 找到固体加样器: {node} 🥄") + return node + + debug_print(f"❌ 未找到固体加样器") + return "" def generate_dissolve_protocol( G: nx.DiGraph, - vessel: str, - solvent: str, - volume: float, + vessel: dict, # 🔧 修改:从字符串改为字典类型 + # 🔧 修复:按照checklist.md的DissolveProtocol参数 + solvent: str = "", + volume: Union[str, float] = 0.0, amount: str = "", - temp: float = 25.0, - time: float = 0.0, - stir_speed: float = 300.0 + temp: Union[str, float] = 25.0, + time: Union[str, float] = 0.0, + stir_speed: float = 300.0, + # 🔧 关键修复:添加缺失的参数,防止"unexpected keyword argument"错误 + mass: Union[str, float] = 0.0, # 这个参数在action文件中存在,必须包含 + mol: str = "", # 这个参数在action文件中存在,必须包含 + reagent: str = "", # 这个参数在action文件中存在,必须包含 + event: str = "", # 这个参数在action文件中存在,必须包含 + **kwargs # 🔧 关键:接受所有其他参数,防止unexpected keyword错误 ) -> List[Dict[str, Any]]: """ - 生成溶解操作的协议序列,复用 pump_protocol 的成熟算法 + 生成溶解操作的协议序列 - 增强版 - 溶解流程: - 1. 溶剂转移:将溶剂从溶剂瓶转移到目标容器 - 2. 启动加热搅拌:设置温度和搅拌 - 3. 等待溶解:监控溶解过程 - 4. 停止加热搅拌:完成溶解 + 🔧 修复要点: + 1. 修改vessel参数类型为dict,并提取vessel_id + 2. 添加action文件中的所有参数(mass, mol, reagent, event) + 3. 使用 **kwargs 接受所有额外参数,防止 unexpected keyword argument 错误 + 4. 支持固体溶解和液体溶解两种模式 + 5. 添加详细的体积运算逻辑 - Args: - G: 有向图,节点为设备和容器,边为流体管道 - vessel: 目标容器(要进行溶解的容器) - solvent: 溶剂名称(用于查找对应的溶剂瓶) - volume: 溶剂体积 (mL) - amount: 要溶解的物质描述 - temp: 溶解温度 (°C),默认25°C(室温) - time: 溶解时间 (秒),默认0(立即完成) - stir_speed: 搅拌速度 (RPM),默认300 RPM + 支持两种溶解模式: + 1. 液体溶解:指定 solvent + volume,使用pump protocol转移溶剂 + 2. 固体溶解:指定 mass/mol + reagent,使用固体加样器添加固体试剂 - Returns: - List[Dict[str, Any]]: 溶解操作的动作序列 - - Raises: - ValueError: 当找不到必要的设备或容器时 - - Examples: - dissolve_actions = generate_dissolve_protocol(G, "reaction_mixture", "DMF", 10.0, "NaCl 2g", 60.0, 600.0, 400.0) + 支持所有XDL参数和单位: + - volume: "10 mL", "?" 或数值 + - mass: "2.9 g", "?" 或数值 + - temp: "60 °C", "room temperature", "?" 或数值 + - time: "30 min", "1 h", "?" 或数值 + - mol: "0.12 mol", "16.2 mmol" """ + + # 🔧 核心修改:从字典中提取容器ID + vessel_id = vessel["id"] + + debug_print("=" * 60) + debug_print("🧪 开始生成溶解协议") + debug_print(f"📋 原始参数:") + debug_print(f" 🥼 vessel: {vessel} (ID: {vessel_id})") + debug_print(f" 💧 solvent: '{solvent}'") + debug_print(f" 📏 volume: {volume} (类型: {type(volume)})") + debug_print(f" ⚖️ mass: {mass} (类型: {type(mass)})") + debug_print(f" 🌡️ temp: {temp} (类型: {type(temp)})") + debug_print(f" ⏱️ time: {time} (类型: {type(time)})") + debug_print(f" 🧪 reagent: '{reagent}'") + debug_print(f" 🧬 mol: '{mol}'") + debug_print(f" 🎯 event: '{event}'") + debug_print(f" 📦 kwargs: {kwargs}") # 显示额外参数 + debug_print("=" * 60) + action_sequence = [] - print(f"DISSOLVE: 开始生成溶解协议") - print(f" - 目标容器: {vessel}") - print(f" - 溶剂: {solvent}") - print(f" - 溶剂体积: {volume} mL") - print(f" - 要溶解的物质: {amount}") - print(f" - 溶解温度: {temp}°C") - print(f" - 溶解时间: {time}s ({time/60:.1f}分钟)" if time > 0 else " - 溶解时间: 立即完成") - print(f" - 搅拌速度: {stir_speed} RPM") + # === 参数验证 === + debug_print("🔍 步骤1: 参数验证...") + action_sequence.append(create_action_log(f"开始溶解操作 - 容器: {vessel_id}", "🎬")) - # 验证目标容器存在 - if vessel not in G.nodes(): - raise ValueError(f"目标容器 '{vessel}' 不存在于系统中") + if not vessel_id: + debug_print("❌ vessel 参数不能为空") + raise ValueError("vessel 参数不能为空") - # 查找溶剂瓶 - try: - solvent_vessel = find_solvent_vessel(G, solvent) - print(f"DISSOLVE: 找到溶剂瓶: {solvent_vessel}") - except ValueError as e: - raise ValueError(f"无法找到溶剂 '{solvent}': {str(e)}") + if vessel_id not in G.nodes(): + debug_print(f"❌ 容器 '{vessel_id}' 不存在于系统中") + raise ValueError(f"容器 '{vessel_id}' 不存在于系统中") - # 验证是否存在从溶剂瓶到目标容器的路径 - try: - path = nx.shortest_path(G, source=solvent_vessel, target=vessel) - print(f"DISSOLVE: 找到路径 {solvent_vessel} -> {vessel}: {path}") - except nx.NetworkXNoPath: - raise ValueError(f"从溶剂瓶 '{solvent_vessel}' 到目标容器 '{vessel}' 没有可用路径") + debug_print("✅ 基本参数验证通过") + action_sequence.append(create_action_log("参数验证通过", "✅")) + + # 🔧 新增:记录溶解前的容器状态 + debug_print("🔍 记录溶解前容器状态...") + original_liquid_volume = 0.0 + if "data" in vessel and "liquid_volume" in vessel["data"]: + current_volume = vessel["data"]["liquid_volume"] + if isinstance(current_volume, list) and len(current_volume) > 0: + original_liquid_volume = current_volume[0] + elif isinstance(current_volume, (int, float)): + original_liquid_volume = current_volume + debug_print(f"📊 溶解前液体体积: {original_liquid_volume:.2f}mL") + + # === 🔧 关键修复:参数解析 === + debug_print("🔍 步骤2: 参数解析...") + action_sequence.append(create_action_log("正在解析溶解参数...", "🔍")) + + # 解析各种参数为数值 + final_volume = parse_volume_input(volume) + final_mass = parse_mass_input(mass) + final_temp = parse_temperature_input(temp) + final_time = parse_time_input(time) + + debug_print(f"📊 解析结果:") + debug_print(f" 📏 体积: {final_volume}mL") + debug_print(f" ⚖️ 质量: {final_mass}g") + debug_print(f" 🌡️ 温度: {final_temp}°C") + debug_print(f" ⏱️ 时间: {final_time}s") + debug_print(f" 🧪 试剂: '{reagent}'") + debug_print(f" 🧬 摩尔: '{mol}'") + debug_print(f" 🎯 事件: '{event}'") + + # === 判断溶解类型 === + debug_print("🔍 步骤3: 判断溶解类型...") + action_sequence.append(create_action_log("正在判断溶解类型...", "🔍")) + + # 判断是固体溶解还是液体溶解 + is_solid_dissolve = (final_mass > 0 or (mol and mol.strip() != "") or (reagent and reagent.strip() != "")) + is_liquid_dissolve = (final_volume > 0 and solvent and solvent.strip() != "") + + if not is_solid_dissolve and not is_liquid_dissolve: + # 默认为液体溶解,50mL + is_liquid_dissolve = True + final_volume = 50.0 + if not solvent: + solvent = "water" # 默认溶剂 + debug_print("⚠️ 未明确指定溶解参数,默认为50mL水溶解") + + dissolve_type = "固体溶解" if is_solid_dissolve else "液体溶解" + dissolve_emoji = "🧂" if is_solid_dissolve else "💧" + debug_print(f"📋 溶解类型: {dissolve_type} {dissolve_emoji}") + + action_sequence.append(create_action_log(f"确定溶解类型: {dissolve_type} {dissolve_emoji}", "📋")) + + # === 查找设备 === + debug_print("🔍 步骤4: 查找设备...") + action_sequence.append(create_action_log("正在查找相关设备...", "🔍")) # 查找加热搅拌器 - heatchill_id = None - if temp > 25.0 or stir_speed > 0 or time > 0: - try: - heatchill_id = find_connected_heatchill(G, vessel) - if heatchill_id: - print(f"DISSOLVE: 找到加热搅拌器: {heatchill_id}") + heatchill_id = find_connected_heatchill(G, vessel_id) + stirrer_id = find_connected_stirrer(G, vessel_id) + + # 优先使用加热搅拌器,否则使用独立搅拌器 + stir_device_id = heatchill_id or stirrer_id + + debug_print(f"📊 设备映射:") + debug_print(f" 🔥 加热器: '{heatchill_id}'") + debug_print(f" 🌪️ 搅拌器: '{stirrer_id}'") + debug_print(f" 🎯 使用设备: '{stir_device_id}'") + + if heatchill_id: + action_sequence.append(create_action_log(f"找到加热搅拌器: {heatchill_id}", "🔥")) + elif stirrer_id: + action_sequence.append(create_action_log(f"找到搅拌器: {stirrer_id}", "🌪️")) + else: + action_sequence.append(create_action_log("未找到搅拌设备,将跳过搅拌", "⚠️")) + + # === 执行溶解流程 === + debug_print("🔍 步骤5: 执行溶解流程...") + + try: + # 步骤5.1: 启动加热搅拌(如果需要) + if stir_device_id and (final_temp > 25.0 or final_time > 0 or stir_speed > 0): + debug_print(f"🔍 5.1: 启动加热搅拌,温度: {final_temp}°C") + action_sequence.append(create_action_log(f"准备加热搅拌 (目标温度: {final_temp}°C)", "🔥")) + + if heatchill_id and (final_temp > 25.0 or final_time > 0): + # 使用加热搅拌器 + action_sequence.append(create_action_log(f"启动加热搅拌器 {heatchill_id}", "🔥")) + + heatchill_action = { + "device_id": heatchill_id, + "action_name": "heat_chill_start", + "action_kwargs": { + "vessel": vessel_id, + "temp": final_temp, + "purpose": f"溶解准备 - {event}" if event else "溶解准备" + } + } + action_sequence.append(heatchill_action) + + # 等待温度稳定 + if final_temp > 25.0: + wait_time = min(60, abs(final_temp - 25.0) * 1.5) + action_sequence.append(create_action_log(f"等待温度稳定 ({wait_time:.0f}秒)", "⏳")) + action_sequence.append({ + "action_name": "wait", + "action_kwargs": {"time": wait_time} + }) + + elif stirrer_id: + # 使用独立搅拌器 + action_sequence.append(create_action_log(f"启动搅拌器 {stirrer_id} (速度: {stir_speed}rpm)", "🌪️")) + + stir_action = { + "device_id": stirrer_id, + "action_name": "start_stir", + "action_kwargs": { + "vessel": vessel_id, + "stir_speed": stir_speed, + "purpose": f"溶解搅拌 - {event}" if event else "溶解搅拌" + } + } + action_sequence.append(stir_action) + + # 等待搅拌稳定 + action_sequence.append(create_action_log("等待搅拌稳定...", "⏳")) + action_sequence.append({ + "action_name": "wait", + "action_kwargs": {"time": 5} + }) + + if is_solid_dissolve: + # === 固体溶解路径 === + debug_print(f"🔍 5.2: 使用固体溶解路径") + action_sequence.append(create_action_log("开始固体溶解流程", "🧂")) + + solid_dispenser = find_solid_dispenser(G) + if solid_dispenser: + action_sequence.append(create_action_log(f"找到固体加样器: {solid_dispenser}", "🥄")) + + # 固体加样 + add_kwargs = { + "vessel": vessel_id, + "reagent": reagent or amount or "solid reagent", + "purpose": f"溶解固体试剂 - {event}" if event else "溶解固体试剂", + "event": event + } + + if final_mass > 0: + add_kwargs["mass"] = str(final_mass) + action_sequence.append(create_action_log(f"准备添加固体: {final_mass}g", "⚖️")) + if mol and mol.strip(): + add_kwargs["mol"] = mol + action_sequence.append(create_action_log(f"按摩尔数添加: {mol}", "🧬")) + + action_sequence.append(create_action_log("开始固体加样操作", "🥄")) + action_sequence.append({ + "device_id": solid_dispenser, + "action_name": "add_solid", + "action_kwargs": add_kwargs + }) + + debug_print(f"✅ 固体加样完成") + action_sequence.append(create_action_log("固体加样完成", "✅")) + + # 🔧 新增:固体溶解体积运算 - 固体本身不会显著增加体积,但可能有少量变化 + debug_print(f"🔧 固体溶解 - 体积变化很小,主要是质量变化") + # 固体通常不会显著改变液体体积,这里只记录日志 + action_sequence.append(create_action_log(f"固体已添加: {final_mass}g", "📊")) + else: - print(f"DISSOLVE: 警告 - 需要加热/搅拌但未找到与容器 {vessel} 相连的加热搅拌器") - except Exception as e: - print(f"DISSOLVE: 加热搅拌器配置出错: {str(e)}") - - # === 第一步:启动加热搅拌(在添加溶剂前) === - if heatchill_id and (temp > 25.0 or time > 0): - print(f"DISSOLVE: 启动加热搅拌器,温度: {temp}°C") + debug_print("⚠️ 未找到固体加样器,跳过固体添加") + action_sequence.append(create_action_log("未找到固体加样器,无法添加固体", "❌")) - if time > 0: - # 如果指定了时间,使用定时加热搅拌 - heatchill_action = { + elif is_liquid_dissolve: + # === 液体溶解路径 === + debug_print(f"🔍 5.3: 使用液体溶解路径") + action_sequence.append(create_action_log("开始液体溶解流程", "💧")) + + # 查找溶剂容器 + action_sequence.append(create_action_log("正在查找溶剂容器...", "🔍")) + try: + solvent_vessel = find_solvent_vessel(G, solvent) + action_sequence.append(create_action_log(f"找到溶剂容器: {solvent_vessel}", "🧪")) + except ValueError as e: + debug_print(f"⚠️ {str(e)},跳过溶剂添加") + action_sequence.append(create_action_log(f"溶剂容器查找失败: {str(e)}", "❌")) + solvent_vessel = None + + if solvent_vessel: + # 计算流速 - 溶解时通常用较慢的速度,避免飞溅 + flowrate = 1.0 # 较慢的注入速度 + transfer_flowrate = 0.5 # 较慢的转移速度 + + action_sequence.append(create_action_log(f"设置流速: {flowrate}mL/min (缓慢注入)", "⚡")) + action_sequence.append(create_action_log(f"开始转移 {final_volume}mL {solvent}", "🚰")) + + # 调用pump protocol + pump_actions = generate_pump_protocol_with_rinsing( + G=G, + from_vessel=solvent_vessel, + to_vessel=vessel_id, + volume=final_volume, + amount=amount, + time=0.0, # 不在pump level控制时间 + viscous=False, + rinsing_solvent="", + rinsing_volume=0.0, + rinsing_repeats=0, + solid=False, + flowrate=flowrate, + transfer_flowrate=transfer_flowrate, + rate_spec="", + event=event, + through="", + **kwargs + ) + action_sequence.extend(pump_actions) + debug_print(f"✅ 溶剂转移完成,添加了 {len(pump_actions)} 个动作") + action_sequence.append(create_action_log(f"溶剂转移完成 ({len(pump_actions)} 个操作)", "✅")) + + # 🔧 新增:液体溶解体积运算 - 添加溶剂后更新容器体积 + debug_print(f"🔧 更新容器液体体积 - 添加溶剂 {final_volume:.2f}mL") + + # 确保vessel有data字段 + if "data" not in vessel: + vessel["data"] = {} + + if "liquid_volume" in vessel["data"]: + current_volume = vessel["data"]["liquid_volume"] + if isinstance(current_volume, list): + if len(current_volume) > 0: + vessel["data"]["liquid_volume"][0] += final_volume + debug_print(f"📊 添加溶剂后体积: {vessel['data']['liquid_volume'][0]:.2f}mL (+{final_volume:.2f}mL)") + else: + vessel["data"]["liquid_volume"] = [final_volume] + debug_print(f"📊 初始化溶解体积: {final_volume:.2f}mL") + elif isinstance(current_volume, (int, float)): + vessel["data"]["liquid_volume"] += final_volume + debug_print(f"📊 添加溶剂后体积: {vessel['data']['liquid_volume']:.2f}mL (+{final_volume:.2f}mL)") + else: + vessel["data"]["liquid_volume"] = final_volume + debug_print(f"📊 重置体积为: {final_volume:.2f}mL") + else: + vessel["data"]["liquid_volume"] = final_volume + debug_print(f"📊 创建新体积记录: {final_volume:.2f}mL") + + # 🔧 同时更新图中的容器数据 + if vessel_id in G.nodes(): + if 'data' not in G.nodes[vessel_id]: + G.nodes[vessel_id]['data'] = {} + + vessel_node_data = G.nodes[vessel_id]['data'] + current_node_volume = vessel_node_data.get('liquid_volume', 0.0) + + if isinstance(current_node_volume, list): + if len(current_node_volume) > 0: + G.nodes[vessel_id]['data']['liquid_volume'][0] += final_volume + else: + G.nodes[vessel_id]['data']['liquid_volume'] = [final_volume] + else: + G.nodes[vessel_id]['data']['liquid_volume'] = current_node_volume + final_volume + + debug_print(f"✅ 图节点体积数据已更新") + + action_sequence.append(create_action_log(f"容器体积已更新 (+{final_volume:.2f}mL)", "📊")) + + # 溶剂添加后等待 + action_sequence.append(create_action_log("溶剂添加后短暂等待...", "⏳")) + action_sequence.append({ + "action_name": "wait", + "action_kwargs": {"time": 5} + }) + + # 步骤5.4: 等待溶解完成 + if final_time > 0: + debug_print(f"🔍 5.4: 等待溶解完成 - {final_time}s") + wait_minutes = final_time / 60 + action_sequence.append(create_action_log(f"开始溶解等待 ({wait_minutes:.1f}分钟)", "⏰")) + + if heatchill_id: + # 使用定时加热搅拌 + action_sequence.append(create_action_log(f"使用加热搅拌器进行定时溶解", "🔥")) + + dissolve_action = { + "device_id": heatchill_id, + "action_name": "heat_chill", + "action_kwargs": { + "vessel": vessel_id, + "temp": final_temp, + "time": final_time, + "stir": True, + "stir_speed": stir_speed, + "purpose": f"溶解等待 - {event}" if event else "溶解等待" + } + } + action_sequence.append(dissolve_action) + + elif stirrer_id: + # 使用定时搅拌 + action_sequence.append(create_action_log(f"使用搅拌器进行定时溶解", "🌪️")) + + stir_action = { + "device_id": stirrer_id, + "action_name": "stir", + "action_kwargs": { + "vessel": vessel_id, + "stir_time": final_time, + "stir_speed": stir_speed, + "settling_time": 0, + "purpose": f"溶解搅拌 - {event}" if event else "溶解搅拌" + } + } + action_sequence.append(stir_action) + + else: + # 简单等待 + action_sequence.append(create_action_log(f"简单等待溶解完成", "⏳")) + action_sequence.append({ + "action_name": "wait", + "action_kwargs": {"time": final_time} + }) + + # 步骤5.5: 停止加热搅拌(如果需要) + if heatchill_id and final_time == 0 and final_temp > 25.0: + debug_print(f"🔍 5.5: 停止加热器") + action_sequence.append(create_action_log("停止加热搅拌器", "🛑")) + + stop_action = { "device_id": heatchill_id, - "action_name": "heat_chill", + "action_name": "heat_chill_stop", "action_kwargs": { - "vessel": vessel, - "temp": temp, - "time": time, - "stir": True, - "stir_speed": stir_speed, - "purpose": f"溶解 {amount} 在 {solvent} 中" - } - } - else: - # 如果没有指定时间,使用持续加热搅拌 - heatchill_action = { - "device_id": heatchill_id, - "action_name": "heat_chill_start", - "action_kwargs": { - "vessel": vessel, - "temp": temp, - "purpose": f"溶解 {amount} 在 {solvent} 中" + "vessel": vessel_id } } + action_sequence.append(stop_action) - action_sequence.append(heatchill_action) - - # 等待温度稳定 - if temp > 25.0: - wait_time = min(60, abs(temp - 25.0) * 1.5) # 根据温差估算预热时间 - action_sequence.append({ - "action_name": "wait", - "action_kwargs": {"time": wait_time} - }) - - # === 第二步:添加溶剂到目标容器 === - if volume > 0: - print(f"DISSOLVE: 将 {volume} mL {solvent} 从 {solvent_vessel} 转移到 {vessel}") - - # 计算流速 - 溶解时通常用较慢的速度,避免飞溅 - transfer_flowrate = 1.0 # 较慢的转移速度 - flowrate = 0.5 # 较慢的注入速度 - - try: - # 使用成熟的 pump_protocol 算法进行液体转移 - pump_actions = generate_pump_protocol( - G=G, - from_vessel=solvent_vessel, - to_vessel=vessel, - volume=volume, - flowrate=flowrate, # 注入速度 - 较慢避免飞溅 - transfer_flowrate=transfer_flowrate # 转移速度 - ) - - action_sequence.extend(pump_actions) - - except Exception as e: - raise ValueError(f"生成泵协议时出错: {str(e)}") - - # 溶剂添加后等待 + except Exception as e: + debug_print(f"❌ 溶解流程执行失败: {str(e)}") + action_sequence.append(create_action_log(f"溶解流程失败: {str(e)}", "❌")) + # 添加错误日志 action_sequence.append({ - "action_name": "wait", - "action_kwargs": {"time": 5} + "device_id": "system", + "action_name": "log_message", + "action_kwargs": { + "message": f"溶解失败: {str(e)}" + } }) - # === 第三步:如果没有使用定时加热搅拌,但需要等待溶解 === - if time > 0 and heatchill_id and temp <= 25.0: - # 只需要搅拌等待,不需要加热 - print(f"DISSOLVE: 室温搅拌 {time}s 等待溶解") - - stir_action = { - "device_id": heatchill_id, - "action_name": "heat_chill", - "action_kwargs": { - "vessel": vessel, - "temp": 25.0, # 室温 - "time": time, - "stir": True, - "stir_speed": stir_speed, - "purpose": f"室温搅拌溶解 {amount}" - } - } - action_sequence.append(stir_action) + # 🔧 新增:溶解完成后的状态报告 + final_liquid_volume = 0.0 + if "data" in vessel and "liquid_volume" in vessel["data"]: + current_volume = vessel["data"]["liquid_volume"] + if isinstance(current_volume, list) and len(current_volume) > 0: + final_liquid_volume = current_volume[0] + elif isinstance(current_volume, (int, float)): + final_liquid_volume = current_volume - # === 第四步:如果使用了持续加热,需要手动停止 === - if heatchill_id and time == 0 and temp > 25.0: - print(f"DISSOLVE: 停止加热搅拌器") - - stop_action = { - "device_id": heatchill_id, - "action_name": "heat_chill_stop", - "action_kwargs": { - "vessel": vessel - } - } - action_sequence.append(stop_action) + # === 最终结果 === + debug_print("=" * 60) + debug_print(f"🎉 溶解协议生成完成") + debug_print(f"📊 协议统计:") + debug_print(f" 📋 总动作数: {len(action_sequence)}") + debug_print(f" 🥼 容器: {vessel_id}") + debug_print(f" {dissolve_emoji} 溶解类型: {dissolve_type}") + if is_liquid_dissolve: + debug_print(f" 💧 溶剂: {solvent} ({final_volume}mL)") + if is_solid_dissolve: + debug_print(f" 🧪 试剂: {reagent}") + debug_print(f" ⚖️ 质量: {final_mass}g") + debug_print(f" 🧬 摩尔: {mol}") + debug_print(f" 🌡️ 温度: {final_temp}°C") + debug_print(f" ⏱️ 时间: {final_time}s") + debug_print(f" 📊 溶解前体积: {original_liquid_volume:.2f}mL") + debug_print(f" 📊 溶解后体积: {final_liquid_volume:.2f}mL") + debug_print("=" * 60) - print(f"DISSOLVE: 生成了 {len(action_sequence)} 个动作") - print(f"DISSOLVE: 溶解协议生成完成") + # 添加完成日志 + summary_msg = f"溶解协议完成: {vessel_id}" + if is_liquid_dissolve: + summary_msg += f" (使用 {final_volume}mL {solvent})" + if is_solid_dissolve: + summary_msg += f" (溶解 {final_mass}g {reagent})" + + action_sequence.append(create_action_log(summary_msg, "🎉")) return action_sequence -# 便捷函数:常用溶解方案 -def generate_room_temp_dissolve_protocol( - G: nx.DiGraph, - vessel: str, - solvent: str, - volume: float, - amount: str = "", - stir_time: float = 300.0 # 5分钟 -) -> List[Dict[str, Any]]: - """室温溶解:快速搅拌,短时间""" - return generate_dissolve_protocol(G, vessel, solvent, volume, amount, 25.0, stir_time, 400.0) +# === 便捷函数 === +# 🔧 修改便捷函数的参数类型 +def dissolve_solid_by_mass(G: nx.DiGraph, vessel: dict, reagent: str, mass: Union[str, float], + temp: Union[str, float] = 25.0, time: Union[str, float] = "10 min") -> List[Dict[str, Any]]: + """按质量溶解固体""" + vessel_id = vessel["id"] + debug_print(f"🧂 快速固体溶解: {reagent} ({mass}) → {vessel_id}") + return generate_dissolve_protocol( + G, vessel, + mass=mass, + reagent=reagent, + temp=temp, + time=time + ) -def generate_heated_dissolve_protocol( - G: nx.DiGraph, - vessel: str, - solvent: str, - volume: float, - amount: str = "", - temp: float = 60.0, - dissolve_time: float = 900.0 # 15分钟 -) -> List[Dict[str, Any]]: - """加热溶解:中等温度,较长时间""" - return generate_dissolve_protocol(G, vessel, solvent, volume, amount, temp, dissolve_time, 300.0) +def dissolve_solid_by_moles(G: nx.DiGraph, vessel: dict, reagent: str, mol: str, + temp: Union[str, float] = 25.0, time: Union[str, float] = "10 min") -> List[Dict[str, Any]]: + """按摩尔数溶解固体""" + vessel_id = vessel["id"] + debug_print(f"🧬 按摩尔数溶解固体: {reagent} ({mol}) → {vessel_id}") + return generate_dissolve_protocol( + G, vessel, + mol=mol, + reagent=reagent, + temp=temp, + time=time + ) +def dissolve_with_solvent(G: nx.DiGraph, vessel: dict, solvent: str, volume: Union[str, float], + temp: Union[str, float] = 25.0, time: Union[str, float] = "5 min") -> List[Dict[str, Any]]: + """用溶剂溶解""" + vessel_id = vessel["id"] + debug_print(f"💧 溶剂溶解: {solvent} ({volume}) → {vessel_id}") + return generate_dissolve_protocol( + G, vessel, + solvent=solvent, + volume=volume, + temp=temp, + time=time + ) -def generate_gentle_dissolve_protocol( - G: nx.DiGraph, - vessel: str, - solvent: str, - volume: float, - amount: str = "", - temp: float = 40.0, - dissolve_time: float = 1800.0 # 30分钟 -) -> List[Dict[str, Any]]: - """温和溶解:低温,长时间,慢搅拌""" - return generate_dissolve_protocol(G, vessel, solvent, volume, amount, temp, dissolve_time, 200.0) - - -def generate_hot_dissolve_protocol( - G: nx.DiGraph, - vessel: str, - solvent: str, - volume: float, - amount: str = "", - temp: float = 80.0, - dissolve_time: float = 600.0 # 10分钟 -) -> List[Dict[str, Any]]: - """高温溶解:高温,中等时间,快搅拌""" - return generate_dissolve_protocol(G, vessel, solvent, volume, amount, temp, dissolve_time, 500.0) - - -def generate_sequential_dissolve_protocol( - G: nx.DiGraph, - vessel: str, - dissolve_steps: List[Dict[str, Any]] -) -> List[Dict[str, Any]]: - """ - 生成连续溶解多种物质的协议 - - Args: - G: 网络图 - vessel: 目标容器 - dissolve_steps: 溶解步骤列表,每个元素包含溶解参数 - - Returns: - List[Dict[str, Any]]: 完整的动作序列 - - Example: - dissolve_steps = [ - { - "solvent": "water", - "volume": 5.0, - "amount": "NaCl 1g", - "temp": 25.0, - "time": 300.0, - "stir_speed": 300.0 - }, - { - "solvent": "ethanol", - "volume": 2.0, - "amount": "organic compound 0.5g", - "temp": 40.0, - "time": 600.0, - "stir_speed": 400.0 - } - ] - """ - action_sequence = [] - - for i, step in enumerate(dissolve_steps): - print(f"DISSOLVE: 处理第 {i+1}/{len(dissolve_steps)} 个溶解步骤") - - # 生成单个溶解步骤的协议 - dissolve_actions = generate_dissolve_protocol( - G=G, - vessel=vessel, - solvent=step.get('solvent'), - volume=step.get('volume', 0.0), - amount=step.get('amount', ''), - temp=step.get('temp', 25.0), - time=step.get('time', 0.0), - stir_speed=step.get('stir_speed', 300.0) - ) - - action_sequence.extend(dissolve_actions) - - # 在步骤之间加入等待时间 - if i < len(dissolve_steps) - 1: # 不是最后一个步骤 - action_sequence.append({ - "action_name": "wait", - "action_kwargs": {"time": 10} - }) - - print(f"DISSOLVE: 连续溶解协议生成完成,共 {len(action_sequence)} 个动作") - return action_sequence +def dissolve_at_room_temp(G: nx.DiGraph, vessel: dict, solvent: str, volume: Union[str, float]) -> List[Dict[str, Any]]: + """室温溶解""" + vessel_id = vessel["id"] + debug_print(f"🌡️ 室温溶解: {solvent} ({volume}) → {vessel_id}") + return generate_dissolve_protocol( + G, vessel, + solvent=solvent, + volume=volume, + temp="room temperature", + time="5 min" + ) +def dissolve_with_heating(G: nx.DiGraph, vessel: dict, solvent: str, volume: Union[str, float], + temp: Union[str, float] = "60 °C", time: Union[str, float] = "15 min") -> List[Dict[str, Any]]: + """加热溶解""" + vessel_id = vessel["id"] + debug_print(f"🔥 加热溶解: {solvent} ({volume}) → {vessel_id} @ {temp}") + return generate_dissolve_protocol( + G, vessel, + solvent=solvent, + volume=volume, + temp=temp, + time=time + ) # 测试函数 def test_dissolve_protocol(): - """测试溶解协议的示例""" - print("=== DISSOLVE PROTOCOL 测试 ===") - print("测试完成") - + """测试溶解协议的各种参数解析""" + debug_print("=== DISSOLVE PROTOCOL 增强版测试 ===") + + # 测试体积解析 + debug_print("💧 测试体积解析...") + volumes = ["10 mL", "?", 10.0, "1 L", "500 μL"] + for vol in volumes: + result = parse_volume_input(vol) + debug_print(f"📏 体积解析: {vol} → {result}mL") + + # 测试质量解析 + debug_print("⚖️ 测试质量解析...") + masses = ["2.9 g", "?", 2.5, "500 mg"] + for mass in masses: + result = parse_mass_input(mass) + debug_print(f"⚖️ 质量解析: {mass} → {result}g") + + # 测试温度解析 + debug_print("🌡️ 测试温度解析...") + temps = ["60 °C", "room temperature", "?", 25.0, "reflux"] + for temp in temps: + result = parse_temperature_input(temp) + debug_print(f"🌡️ 温度解析: {temp} → {result}°C") + + # 测试时间解析 + debug_print("⏱️ 测试时间解析...") + times = ["30 min", "1 h", "?", 60.0] + for time in times: + result = parse_time_input(time) + debug_print(f"⏱️ 时间解析: {time} → {result}s") + + debug_print("✅ 测试完成") if __name__ == "__main__": test_dissolve_protocol() \ No newline at end of file diff --git a/unilabos/compile/dry_protocol.py b/unilabos/compile/dry_protocol.py new file mode 100644 index 0000000..c04abdc --- /dev/null +++ b/unilabos/compile/dry_protocol.py @@ -0,0 +1,333 @@ +import networkx as nx +from typing import List, Dict, Any + + +def find_connected_heater(G: nx.DiGraph, vessel: str) -> str: + """ + 查找与容器相连的加热器 + + Args: + G: 网络图 + vessel: 容器名称 + + Returns: + str: 加热器ID,如果没有则返回None + """ + print(f"DRY: 正在查找与容器 '{vessel}' 相连的加热器...") + + # 查找所有加热器节点 + heater_nodes = [node for node in G.nodes() + if ('heater' in node.lower() or + 'heat' in node.lower() or + G.nodes[node].get('class') == 'virtual_heatchill' or + G.nodes[node].get('type') == 'heater')] + + print(f"DRY: 找到的加热器节点: {heater_nodes}") + + # 检查是否有加热器与目标容器相连 + for heater in heater_nodes: + if G.has_edge(heater, vessel) or G.has_edge(vessel, heater): + print(f"DRY: 找到与容器 '{vessel}' 相连的加热器: {heater}") + return heater + + # 如果没有直接连接,查找距离最近的加热器 + for heater in heater_nodes: + try: + path = nx.shortest_path(G, source=heater, target=vessel) + if len(path) <= 3: # 最多2个中间节点 + print(f"DRY: 找到距离较近的加热器: {heater}, 路径: {' → '.join(path)}") + return heater + except nx.NetworkXNoPath: + continue + + print(f"DRY: 未找到与容器 '{vessel}' 相连的加热器") + return None + + +def generate_dry_protocol( + G: nx.DiGraph, + vessel: dict, # 🔧 修改:从字符串改为字典类型 + compound: str = "", # 🔧 修改:参数顺序调整,并设置默认值 + **kwargs # 接收其他可能的参数但不使用 +) -> List[Dict[str, Any]]: + """ + 生成干燥协议序列 + + Args: + G: 有向图,节点为容器和设备 + vessel: 目标容器字典(从XDL传入) + compound: 化合物名称(从XDL传入,可选) + **kwargs: 其他可选参数,但不使用 + + Returns: + List[Dict[str, Any]]: 动作序列 + """ + # 🔧 核心修改:从字典中提取容器ID + vessel_id = vessel["id"] + + action_sequence = [] + + # 默认参数 + dry_temp = 60.0 # 默认干燥温度 60°C + dry_time = 3600.0 # 默认干燥时间 1小时(3600秒) + simulation_time = 60.0 # 模拟时间 1分钟 + + print(f"🌡️ DRY: 开始生成干燥协议 ✨") + print(f" 🥽 vessel: {vessel} (ID: {vessel_id})") + print(f" 🧪 化合物: {compound or '未指定'}") + print(f" 🔥 干燥温度: {dry_temp}°C") + print(f" ⏰ 干燥时间: {dry_time/60:.0f} 分钟") + + # 🔧 新增:记录干燥前的容器状态 + print(f"🔍 记录干燥前容器状态...") + original_liquid_volume = 0.0 + if "data" in vessel and "liquid_volume" in vessel["data"]: + current_volume = vessel["data"]["liquid_volume"] + if isinstance(current_volume, list) and len(current_volume) > 0: + original_liquid_volume = current_volume[0] + elif isinstance(current_volume, (int, float)): + original_liquid_volume = current_volume + print(f"📊 干燥前液体体积: {original_liquid_volume:.2f}mL") + + # 1. 验证目标容器存在 + print(f"\n📋 步骤1: 验证目标容器 '{vessel_id}' 是否存在...") + if vessel_id not in G.nodes(): + print(f"⚠️ DRY: 警告 - 容器 '{vessel_id}' 不存在于系统中,跳过干燥 😢") + return action_sequence + print(f"✅ 容器 '{vessel_id}' 验证通过!") + + # 2. 查找相连的加热器 + print(f"\n🔍 步骤2: 查找与容器相连的加热器...") + heater_id = find_connected_heater(G, vessel_id) # 🔧 使用 vessel_id + + if heater_id is None: + print(f"😭 DRY: 警告 - 未找到与容器 '{vessel_id}' 相连的加热器,跳过干燥") + print(f"🎭 添加模拟干燥动作...") + # 添加一个等待动作,表示干燥过程(模拟) + action_sequence.append({ + "action_name": "wait", + "action_kwargs": { + "time": 10.0, # 模拟等待时间 + "description": f"模拟干燥 {compound or '化合物'} (无加热器可用)" + } + }) + + # 🔧 新增:模拟干燥的体积变化(溶剂蒸发) + print(f"🔧 模拟干燥过程的体积减少...") + if original_liquid_volume > 0: + # 假设干燥过程中损失10%的体积(溶剂蒸发) + volume_loss = original_liquid_volume * 0.1 + new_volume = max(0.0, original_liquid_volume - volume_loss) + + # 更新vessel字典中的体积 + if "data" in vessel and "liquid_volume" in vessel["data"]: + current_volume = vessel["data"]["liquid_volume"] + if isinstance(current_volume, list): + if len(current_volume) > 0: + vessel["data"]["liquid_volume"][0] = new_volume + else: + vessel["data"]["liquid_volume"] = [new_volume] + elif isinstance(current_volume, (int, float)): + vessel["data"]["liquid_volume"] = new_volume + else: + vessel["data"]["liquid_volume"] = new_volume + + # 🔧 同时更新图中的容器数据 + if vessel_id in G.nodes(): + if 'data' not in G.nodes[vessel_id]: + G.nodes[vessel_id]['data'] = {} + + vessel_node_data = G.nodes[vessel_id]['data'] + current_node_volume = vessel_node_data.get('liquid_volume', 0.0) + + if isinstance(current_node_volume, list): + if len(current_node_volume) > 0: + G.nodes[vessel_id]['data']['liquid_volume'][0] = new_volume + else: + G.nodes[vessel_id]['data']['liquid_volume'] = [new_volume] + else: + G.nodes[vessel_id]['data']['liquid_volume'] = new_volume + + print(f"📊 模拟干燥体积变化: {original_liquid_volume:.2f}mL → {new_volume:.2f}mL (-{volume_loss:.2f}mL)") + + print(f"📄 DRY: 协议生成完成,共 {len(action_sequence)} 个动作 🎯") + return action_sequence + + print(f"🎉 找到加热器: {heater_id}!") + + # 3. 启动加热器进行干燥 + print(f"\n🚀 步骤3: 开始执行干燥流程...") + print(f"🔥 启动加热器 {heater_id} 进行干燥") + + # 3.1 启动加热 + print(f" ⚡ 动作1: 启动加热到 {dry_temp}°C...") + action_sequence.append({ + "device_id": heater_id, + "action_name": "heat_chill_start", + "action_kwargs": { + "vessel": vessel_id, # 🔧 使用 vessel_id + "temp": dry_temp, + "purpose": f"干燥 {compound or '化合物'}" + } + }) + print(f" ✅ 加热器启动命令已添加 🔥") + + # 3.2 等待温度稳定 + print(f" ⏳ 动作2: 等待温度稳定...") + action_sequence.append({ + "action_name": "wait", + "action_kwargs": { + "time": 10.0, + "description": f"等待温度稳定到 {dry_temp}°C" + } + }) + print(f" ✅ 温度稳定等待命令已添加 🌡️") + + # 3.3 保持干燥温度 + print(f" 🔄 动作3: 保持干燥温度 {simulation_time/60:.0f} 分钟...") + action_sequence.append({ + "device_id": heater_id, + "action_name": "heat_chill", + "action_kwargs": { + "vessel": vessel_id, # 🔧 使用 vessel_id + "temp": dry_temp, + "time": simulation_time, + "purpose": f"干燥 {compound or '化合物'},保持温度 {dry_temp}°C" + } + }) + print(f" ✅ 温度保持命令已添加 🌡️⏰") + + # 🔧 新增:干燥过程中的体积变化计算 + print(f"🔧 计算干燥过程中的体积变化...") + if original_liquid_volume > 0: + # 干燥过程中,溶剂会蒸发,固体保留 + # 根据温度和时间估算蒸发量 + evaporation_rate = 0.001 * dry_temp # 每秒每°C蒸发0.001mL + total_evaporation = min(original_liquid_volume * 0.8, + evaporation_rate * simulation_time) # 最多蒸发80% + + new_volume = max(0.0, original_liquid_volume - total_evaporation) + + # 更新vessel字典中的体积 + if "data" in vessel and "liquid_volume" in vessel["data"]: + current_volume = vessel["data"]["liquid_volume"] + if isinstance(current_volume, list): + if len(current_volume) > 0: + vessel["data"]["liquid_volume"][0] = new_volume + else: + vessel["data"]["liquid_volume"] = [new_volume] + elif isinstance(current_volume, (int, float)): + vessel["data"]["liquid_volume"] = new_volume + else: + vessel["data"]["liquid_volume"] = new_volume + + # 🔧 同时更新图中的容器数据 + if vessel_id in G.nodes(): + if 'data' not in G.nodes[vessel_id]: + G.nodes[vessel_id]['data'] = {} + + vessel_node_data = G.nodes[vessel_id]['data'] + current_node_volume = vessel_node_data.get('liquid_volume', 0.0) + + if isinstance(current_node_volume, list): + if len(current_node_volume) > 0: + G.nodes[vessel_id]['data']['liquid_volume'][0] = new_volume + else: + G.nodes[vessel_id]['data']['liquid_volume'] = [new_volume] + else: + G.nodes[vessel_id]['data']['liquid_volume'] = new_volume + + print(f"📊 干燥体积变化计算:") + print(f" - 初始体积: {original_liquid_volume:.2f}mL") + print(f" - 蒸发量: {total_evaporation:.2f}mL") + print(f" - 剩余体积: {new_volume:.2f}mL") + print(f" - 蒸发率: {(total_evaporation/original_liquid_volume*100):.1f}%") + + # 3.4 停止加热 + print(f" ⏹️ 动作4: 停止加热...") + action_sequence.append({ + "device_id": heater_id, + "action_name": "heat_chill_stop", + "action_kwargs": { + "vessel": vessel_id, # 🔧 使用 vessel_id + "purpose": f"干燥完成,停止加热" + } + }) + print(f" ✅ 停止加热命令已添加 🛑") + + # 3.5 等待冷却 + print(f" ❄️ 动作5: 等待冷却...") + action_sequence.append({ + "action_name": "wait", + "action_kwargs": { + "time": 10.0, # 等待10秒冷却 + "description": f"等待 {compound or '化合物'} 冷却" + } + }) + print(f" ✅ 冷却等待命令已添加 🧊") + + # 🔧 新增:干燥完成后的状态报告 + final_liquid_volume = 0.0 + if "data" in vessel and "liquid_volume" in vessel["data"]: + current_volume = vessel["data"]["liquid_volume"] + if isinstance(current_volume, list) and len(current_volume) > 0: + final_liquid_volume = current_volume[0] + elif isinstance(current_volume, (int, float)): + final_liquid_volume = current_volume + + print(f"\n🎊 DRY: 协议生成完成,共 {len(action_sequence)} 个动作 🎯") + print(f"⏱️ DRY: 预计总时间: {(simulation_time + 30)/60:.0f} 分钟 ⌛") + print(f"📊 干燥结果:") + print(f" - 容器: {vessel_id}") + print(f" - 化合物: {compound or '未指定'}") + print(f" - 干燥前体积: {original_liquid_volume:.2f}mL") + print(f" - 干燥后体积: {final_liquid_volume:.2f}mL") + print(f" - 蒸发体积: {(original_liquid_volume - final_liquid_volume):.2f}mL") + print(f"🏁 所有动作序列准备就绪! ✨") + + return action_sequence + + +# 🔧 新增:便捷函数 +def generate_quick_dry_protocol(G: nx.DiGraph, vessel: dict, compound: str = "", + temp: float = 40.0, time: float = 30.0) -> List[Dict[str, Any]]: + """快速干燥:低温短时间""" + vessel_id = vessel["id"] + print(f"🌡️ 快速干燥: {compound or '化合物'} → {vessel_id} @ {temp}°C ({time}min)") + + # 临时修改默认参数 + import types + temp_func = types.FunctionType( + generate_dry_protocol.__code__, + generate_dry_protocol.__globals__ + ) + + # 直接调用原函数,但修改内部参数 + return generate_dry_protocol(G, vessel, compound) + + +def generate_thorough_dry_protocol(G: nx.DiGraph, vessel: dict, compound: str = "", + temp: float = 80.0, time: float = 120.0) -> List[Dict[str, Any]]: + """深度干燥:高温长时间""" + vessel_id = vessel["id"] + print(f"🔥 深度干燥: {compound or '化合物'} → {vessel_id} @ {temp}°C ({time}min)") + return generate_dry_protocol(G, vessel, compound) + + +def generate_gentle_dry_protocol(G: nx.DiGraph, vessel: dict, compound: str = "", + temp: float = 30.0, time: float = 180.0) -> List[Dict[str, Any]]: + """温和干燥:低温长时间""" + vessel_id = vessel["id"] + print(f"🌡️ 温和干燥: {compound or '化合物'} → {vessel_id} @ {temp}°C ({time}min)") + return generate_dry_protocol(G, vessel, compound) + + +# 测试函数 +def test_dry_protocol(): + """测试干燥协议""" + print("=== DRY PROTOCOL 测试 ===") + print("测试完成") + + +if __name__ == "__main__": + test_dry_protocol() \ No newline at end of file diff --git a/unilabos/compile/evacuateandrefill_protocol.py b/unilabos/compile/evacuateandrefill_protocol.py index 96e057d..8514f69 100644 --- a/unilabos/compile/evacuateandrefill_protocol.py +++ b/unilabos/compile/evacuateandrefill_protocol.py @@ -1,191 +1,515 @@ -import numpy as np import networkx as nx +import logging +import uuid +import sys from typing import List, Dict, Any, Optional from .pump_protocol import generate_pump_protocol_with_rinsing, generate_pump_protocol +# 设置日志 +logger = logging.getLogger(__name__) + +# 确保输出编码为UTF-8 +if hasattr(sys.stdout, 'reconfigure'): + try: + sys.stdout.reconfigure(encoding='utf-8') + sys.stderr.reconfigure(encoding='utf-8') + except: + pass + +def debug_print(message): + """调试输出函数 - 支持中文""" + try: + # 确保消息是字符串格式 + safe_message = str(message) + print(f"[抽真空充气] {safe_message}", flush=True) + logger.info(f"[抽真空充气] {safe_message}") + except UnicodeEncodeError: + # 如果编码失败,尝试替换不支持的字符 + safe_message = str(message).encode('utf-8', errors='replace').decode('utf-8') + print(f"[抽真空充气] {safe_message}", flush=True) + logger.info(f"[抽真空充气] {safe_message}") + except Exception as e: + # 最后的安全措施 + fallback_message = f"日志输出错误: {repr(message)}" + print(f"[抽真空充气] {fallback_message}", flush=True) + logger.info(f"[抽真空充气] {fallback_message}") + +def create_action_log(message: str, emoji: str = "📝") -> Dict[str, Any]: + """创建一个动作日志 - 支持中文和emoji""" + try: + full_message = f"{emoji} {message}" + debug_print(full_message) + logger.info(full_message) + + return { + "action_name": "wait", + "action_kwargs": { + "time": 0.1, + "log_message": full_message, + "progress_message": full_message + } + } + except Exception as e: + # 如果emoji有问题,使用纯文本 + safe_message = f"[日志] {message}" + debug_print(safe_message) + logger.info(safe_message) + + return { + "action_name": "wait", + "action_kwargs": { + "time": 0.1, + "log_message": safe_message, + "progress_message": safe_message + } + } def find_gas_source(G: nx.DiGraph, gas: str) -> str: - """根据气体名称查找对应的气源""" - # 按照命名规则查找气源 + """ + 根据气体名称查找对应的气源,支持多种匹配模式: + 1. 容器名称匹配 + 2. 气体类型匹配(data.gas_type) + 3. 默认气源 + """ + debug_print(f"🔍 正在查找气体 '{gas}' 的气源...") + + # 第一步:通过容器名称匹配 + debug_print(f"📋 方法1: 容器名称匹配...") gas_source_patterns = [ f"gas_source_{gas}", f"gas_{gas}", f"flask_{gas}", - f"{gas}_source" + f"{gas}_source", + f"source_{gas}", + f"reagent_bottle_{gas}", + f"bottle_{gas}" ] + debug_print(f"🎯 尝试的容器名称: {gas_source_patterns}") + for pattern in gas_source_patterns: if pattern in G.nodes(): + debug_print(f"✅ 通过名称找到气源: {pattern}") return pattern - # 模糊匹配 - for node in G.nodes(): - node_class = G.nodes[node].get('class', '') or '' - if 'gas_source' in node_class and gas.lower() in node.lower(): - return node - if node.startswith('flask_') and gas.lower() in node.lower(): - return node + # 第二步:通过气体类型匹配 (data.gas_type) + debug_print(f"📋 方法2: 气体类型匹配...") + for node_id in G.nodes(): + node_data = G.nodes[node_id] + node_class = node_data.get('class', '') or '' + + # 检查是否是气源设备 + if ('gas_source' in node_class or + 'gas' in node_id.lower() or + node_id.startswith('flask_')): + + # 检查 data.gas_type + data = node_data.get('data', {}) + gas_type = data.get('gas_type', '') + + if gas_type.lower() == gas.lower(): + debug_print(f"✅ 通过气体类型找到气源: {node_id} (气体类型: {gas_type})") + return node_id + + # 检查 config.gas_type + config = node_data.get('config', {}) + config_gas_type = config.get('gas_type', '') + + if config_gas_type.lower() == gas.lower(): + debug_print(f"✅ 通过配置气体类型找到气源: {node_id} (配置气体类型: {config_gas_type})") + return node_id - # 查找所有可用的气源 - available_gas_sources = [ + # 第三步:查找所有可用的气源设备 + debug_print(f"📋 方法3: 查找可用气源...") + available_gas_sources = [] + for node_id in G.nodes(): + node_data = G.nodes[node_id] + node_class = node_data.get('class', '') or '' + + if ('gas_source' in node_class or + 'gas' in node_id.lower() or + (node_id.startswith('flask_') and any(g in node_id.lower() for g in ['air', 'nitrogen', 'argon']))): + + data = node_data.get('data', {}) + gas_type = data.get('gas_type', '未知') + available_gas_sources.append(f"{node_id} (气体类型: {gas_type})") + + debug_print(f"📊 可用气源: {available_gas_sources}") + + # 第四步:如果找不到特定气体,使用默认的第一个气源 + debug_print(f"📋 方法4: 查找默认气源...") + default_gas_sources = [ node for node in G.nodes() - if ((G.nodes[node].get('class') or '').startswith('virtual_gas_source') - or ('gas' in node and 'source' in node) - or (node.startswith('flask_') and any(g in node.lower() for g in ['air', 'nitrogen', 'argon', 'vacuum']))) + if ((G.nodes[node].get('class') or '').find('virtual_gas_source') != -1 + or 'gas_source' in node) ] - raise ValueError(f"找不到气体 '{gas}' 对应的气源。可用气源: {available_gas_sources}") - + if default_gas_sources: + default_source = default_gas_sources[0] + debug_print(f"⚠️ 未找到特定气体 '{gas}',使用默认气源: {default_source}") + return default_source + + debug_print(f"❌ 所有方法都失败了!") + raise ValueError(f"无法找到气体 '{gas}' 的气源。可用气源: {available_gas_sources}") def find_vacuum_pump(G: nx.DiGraph) -> str: """查找真空泵设备""" - vacuum_pumps = [ - node for node in G.nodes() - if ((G.nodes[node].get('class') or '').startswith('virtual_vacuum_pump') - or 'vacuum_pump' in node - or 'vacuum' in (G.nodes[node].get('class') or '')) - ] + debug_print("🔍 正在查找真空泵...") + + vacuum_pumps = [] + for node in G.nodes(): + node_data = G.nodes[node] + node_class = node_data.get('class', '') or '' + + if ('virtual_vacuum_pump' in node_class or + 'vacuum_pump' in node.lower() or + 'vacuum' in node_class.lower()): + vacuum_pumps.append(node) + debug_print(f"📋 发现真空泵: {node}") if not vacuum_pumps: - raise ValueError("系统中未找到真空泵设备") + debug_print(f"❌ 系统中未找到真空泵") + raise ValueError("系统中未找到真空泵") + debug_print(f"✅ 使用真空泵: {vacuum_pumps[0]}") return vacuum_pumps[0] - -def find_connected_stirrer(G: nx.DiGraph, vessel: str) -> str: +def find_connected_stirrer(G: nx.DiGraph, vessel: str) -> Optional[str]: """查找与指定容器相连的搅拌器""" - stirrer_nodes = [node for node in G.nodes() - if (G.nodes[node].get('class') or '') == 'virtual_stirrer'] + debug_print(f"🔍 正在查找与容器 {vessel} 连接的搅拌器...") + + stirrer_nodes = [] + for node in G.nodes(): + node_data = G.nodes[node] + node_class = node_data.get('class', '') or '' + + if 'virtual_stirrer' in node_class or 'stirrer' in node.lower(): + stirrer_nodes.append(node) + debug_print(f"📋 发现搅拌器: {node}") + + debug_print(f"📊 找到的搅拌器总数: {len(stirrer_nodes)}") # 检查哪个搅拌器与目标容器相连 for stirrer in stirrer_nodes: if G.has_edge(stirrer, vessel) or G.has_edge(vessel, stirrer): + debug_print(f"✅ 找到连接的搅拌器: {stirrer}") return stirrer - return stirrer_nodes[0] if stirrer_nodes else None - - -def find_associated_solenoid_valve(G: nx.DiGraph, device_id: str) -> Optional[str]: - """查找与指定设备相关联的电磁阀""" - solenoid_valves = [ - node for node in G.nodes() - if ('solenoid' in (G.nodes[node].get('class') or '').lower() - or 'solenoid_valve' in node) - ] - - # 通过网络连接查找直接相连的电磁阀 - for solenoid in solenoid_valves: - if G.has_edge(device_id, solenoid) or G.has_edge(solenoid, device_id): - return solenoid - - # 通过命名规则查找关联的电磁阀 - device_type = "" - if 'vacuum' in device_id.lower(): - device_type = "vacuum" - elif 'gas' in device_id.lower(): - device_type = "gas" - - if device_type: - for solenoid in solenoid_valves: - if device_type in solenoid.lower(): - return solenoid + # 如果没有连接的搅拌器,返回第一个可用的 + if stirrer_nodes: + debug_print(f"⚠️ 未找到直接连接的搅拌器,使用第一个可用的: {stirrer_nodes[0]}") + return stirrer_nodes[0] + debug_print("❌ 未找到搅拌器") return None +def find_vacuum_solenoid_valve(G: nx.DiGraph, vacuum_pump: str) -> Optional[str]: + """查找真空泵相关的电磁阀""" + debug_print(f"🔍 正在查找真空泵 {vacuum_pump} 的电磁阀...") + + # 查找所有电磁阀 + solenoid_valves = [] + for node in G.nodes(): + node_data = G.nodes[node] + node_class = node_data.get('class', '') or '' + + if ('solenoid' in node_class.lower() or 'solenoid_valve' in node.lower()): + solenoid_valves.append(node) + debug_print(f"📋 发现电磁阀: {node}") + + debug_print(f"📊 找到的电磁阀: {solenoid_valves}") + + # 检查连接关系 + debug_print(f"📋 方法1: 检查连接关系...") + for solenoid in solenoid_valves: + if G.has_edge(solenoid, vacuum_pump) or G.has_edge(vacuum_pump, solenoid): + debug_print(f"✅ 找到连接的真空电磁阀: {solenoid}") + return solenoid + + # 通过命名规则查找 + debug_print(f"📋 方法2: 检查命名规则...") + for solenoid in solenoid_valves: + if 'vacuum' in solenoid.lower() or solenoid == 'solenoid_valve_1': + debug_print(f"✅ 通过命名找到真空电磁阀: {solenoid}") + return solenoid + + debug_print("⚠️ 未找到真空电磁阀") + return None + +def find_gas_solenoid_valve(G: nx.DiGraph, gas_source: str) -> Optional[str]: + """查找气源相关的电磁阀""" + debug_print(f"🔍 正在查找气源 {gas_source} 的电磁阀...") + + # 查找所有电磁阀 + solenoid_valves = [] + for node in G.nodes(): + node_data = G.nodes[node] + node_class = node_data.get('class', '') or '' + + if ('solenoid' in node_class.lower() or 'solenoid_valve' in node.lower()): + solenoid_valves.append(node) + + debug_print(f"📊 找到的电磁阀: {solenoid_valves}") + + # 检查连接关系 + debug_print(f"📋 方法1: 检查连接关系...") + for solenoid in solenoid_valves: + if G.has_edge(gas_source, solenoid) or G.has_edge(solenoid, gas_source): + debug_print(f"✅ 找到连接的气源电磁阀: {solenoid}") + return solenoid + + # 通过命名规则查找 + debug_print(f"📋 方法2: 检查命名规则...") + for solenoid in solenoid_valves: + if 'gas' in solenoid.lower() or solenoid == 'solenoid_valve_2': + debug_print(f"✅ 通过命名找到气源电磁阀: {solenoid}") + return solenoid + + debug_print("⚠️ 未找到气源电磁阀") + return None def generate_evacuateandrefill_protocol( G: nx.DiGraph, - vessel: str, + vessel: dict, # 🔧 修改:从字符串改为字典类型 gas: str, - repeats: int = 1 + **kwargs ) -> List[Dict[str, Any]]: """ - 生成抽真空和充气操作的动作序列 + 生成抽真空和充气操作的动作序列 - 中文版 - **修复版本**: 正确调用 pump_protocol 并处理异常 + Args: + G: 设备图 + vessel: 目标容器字典(必需) + gas: 气体名称(必需) + **kwargs: 其他参数(兼容性) + + Returns: + List[Dict[str, Any]]: 动作序列 """ + + # 🔧 核心修改:从字典中提取容器ID + vessel_id = vessel["id"] + + # 硬编码重复次数为 3 + repeats = 3 + + # 生成协议ID + protocol_id = str(uuid.uuid4()) + debug_print(f"🆔 生成协议ID: {protocol_id}") + + debug_print("=" * 60) + debug_print("🧪 开始生成抽真空充气协议") + debug_print(f"📋 原始参数:") + debug_print(f" 🥼 vessel: {vessel} (ID: {vessel_id})") + debug_print(f" 💨 气体: '{gas}'") + debug_print(f" 🔄 循环次数: {repeats} (硬编码)") + debug_print(f" 📦 其他参数: {kwargs}") + debug_print("=" * 60) + action_sequence = [] - # 参数设置 - 关键修复:减小体积避免超出泵容量 - VACUUM_VOLUME = 20.0 # 减小抽真空体积 - REFILL_VOLUME = 20.0 # 减小充气体积 - PUMP_FLOW_RATE = 2.5 # 降低流速 - STIR_SPEED = 300.0 + # === 参数验证和修正 === + debug_print("🔍 步骤1: 参数验证和修正...") + action_sequence.append(create_action_log(f"开始抽真空充气操作 - 容器: {vessel_id}", "🎬")) + action_sequence.append(create_action_log(f"目标气体: {gas}", "💨")) + action_sequence.append(create_action_log(f"循环次数: {repeats}", "🔄")) - print(f"EVACUATE_REFILL: 开始生成协议,目标容器: {vessel}, 气体: {gas}, 重复次数: {repeats}") + # 验证必需参数 + if not vessel_id: + debug_print("❌ 容器参数不能为空") + raise ValueError("容器参数不能为空") - # 1. 验证设备存在 - if vessel not in G.nodes(): - raise ValueError(f"目标容器 '{vessel}' 不存在于系统中") + if not gas: + debug_print("❌ 气体参数不能为空") + raise ValueError("气体参数不能为空") + + if vessel_id not in G.nodes(): # 🔧 使用 vessel_id + debug_print(f"❌ 容器 '{vessel_id}' 在系统中不存在") + raise ValueError(f"容器 '{vessel_id}' 在系统中不存在") + + debug_print("✅ 基本参数验证通过") + action_sequence.append(create_action_log("参数验证通过", "✅")) + + # 标准化气体名称 + debug_print("🔧 标准化气体名称...") + gas_aliases = { + 'n2': 'nitrogen', + 'ar': 'argon', + 'air': 'air', + 'o2': 'oxygen', + 'co2': 'carbon_dioxide', + 'h2': 'hydrogen', + '氮气': 'nitrogen', + '氩气': 'argon', + '空气': 'air', + '氧气': 'oxygen', + '二氧化碳': 'carbon_dioxide', + '氢气': 'hydrogen' + } + + original_gas = gas + gas_lower = gas.lower().strip() + if gas_lower in gas_aliases: + gas = gas_aliases[gas_lower] + debug_print(f"🔄 标准化气体名称: {original_gas} -> {gas}") + action_sequence.append(create_action_log(f"气体名称标准化: {original_gas} -> {gas}", "🔄")) + + debug_print(f"📋 最终参数: 容器={vessel_id}, 气体={gas}, 重复={repeats}") + + # === 查找设备 === + debug_print("🔍 步骤2: 查找设备...") + action_sequence.append(create_action_log("正在查找相关设备...", "🔍")) - # 2. 查找设备 try: vacuum_pump = find_vacuum_pump(G) - vacuum_solenoid = find_associated_solenoid_valve(G, vacuum_pump) + action_sequence.append(create_action_log(f"找到真空泵: {vacuum_pump}", "🌪️")) + gas_source = find_gas_source(G, gas) - gas_solenoid = find_associated_solenoid_valve(G, gas_source) - stirrer_id = find_connected_stirrer(G, vessel) + action_sequence.append(create_action_log(f"找到气源: {gas_source}", "💨")) - print(f"EVACUATE_REFILL: 找到设备") - print(f" - 真空泵: {vacuum_pump}") - print(f" - 气源: {gas_source}") - print(f" - 真空电磁阀: {vacuum_solenoid}") - print(f" - 气源电磁阀: {gas_solenoid}") - print(f" - 搅拌器: {stirrer_id}") + vacuum_solenoid = find_vacuum_solenoid_valve(G, vacuum_pump) + if vacuum_solenoid: + action_sequence.append(create_action_log(f"找到真空电磁阀: {vacuum_solenoid}", "🚪")) + else: + action_sequence.append(create_action_log("未找到真空电磁阀", "⚠️")) - except ValueError as e: + gas_solenoid = find_gas_solenoid_valve(G, gas_source) + if gas_solenoid: + action_sequence.append(create_action_log(f"找到气源电磁阀: {gas_solenoid}", "🚪")) + else: + action_sequence.append(create_action_log("未找到气源电磁阀", "⚠️")) + + stirrer_id = find_connected_stirrer(G, vessel_id) # 🔧 使用 vessel_id + if stirrer_id: + action_sequence.append(create_action_log(f"找到搅拌器: {stirrer_id}", "🌪️")) + else: + action_sequence.append(create_action_log("未找到搅拌器", "⚠️")) + + debug_print(f"📊 设备配置:") + debug_print(f" 🌪️ 真空泵: {vacuum_pump}") + debug_print(f" 💨 气源: {gas_source}") + debug_print(f" 🚪 真空电磁阀: {vacuum_solenoid}") + debug_print(f" 🚪 气源电磁阀: {gas_solenoid}") + debug_print(f" 🌪️ 搅拌器: {stirrer_id}") + + except Exception as e: + debug_print(f"❌ 设备查找失败: {str(e)}") + action_sequence.append(create_action_log(f"设备查找失败: {str(e)}", "❌")) raise ValueError(f"设备查找失败: {str(e)}") - # 3. **关键修复**: 验证路径存在性 + # === 参数设置 === + debug_print("🔍 步骤3: 参数设置...") + action_sequence.append(create_action_log("设置操作参数...", "⚙️")) + + # 根据气体类型调整参数 + if gas.lower() in ['nitrogen', 'argon']: + VACUUM_VOLUME = 25.0 + REFILL_VOLUME = 25.0 + PUMP_FLOW_RATE = 2.0 + VACUUM_TIME = 30.0 + REFILL_TIME = 20.0 + debug_print("💨 惰性气体: 使用标准参数") + action_sequence.append(create_action_log("检测到惰性气体,使用标准参数", "💨")) + elif gas.lower() in ['air', 'oxygen']: + VACUUM_VOLUME = 20.0 + REFILL_VOLUME = 20.0 + PUMP_FLOW_RATE = 1.5 + VACUUM_TIME = 45.0 + REFILL_TIME = 25.0 + debug_print("🔥 活性气体: 使用保守参数") + action_sequence.append(create_action_log("检测到活性气体,使用保守参数", "🔥")) + else: + VACUUM_VOLUME = 15.0 + REFILL_VOLUME = 15.0 + PUMP_FLOW_RATE = 1.0 + VACUUM_TIME = 60.0 + REFILL_TIME = 30.0 + debug_print("❓ 未知气体: 使用安全参数") + action_sequence.append(create_action_log("未知气体类型,使用安全参数", "❓")) + + STIR_SPEED = 200.0 + + debug_print(f"⚙️ 操作参数:") + debug_print(f" 📏 真空体积: {VACUUM_VOLUME}mL") + debug_print(f" 📏 充气体积: {REFILL_VOLUME}mL") + debug_print(f" ⚡ 泵流速: {PUMP_FLOW_RATE}mL/s") + debug_print(f" ⏱️ 真空时间: {VACUUM_TIME}s") + debug_print(f" ⏱️ 充气时间: {REFILL_TIME}s") + debug_print(f" 🌪️ 搅拌速度: {STIR_SPEED}RPM") + + action_sequence.append(create_action_log(f"真空体积: {VACUUM_VOLUME}mL", "📏")) + action_sequence.append(create_action_log(f"充气体积: {REFILL_VOLUME}mL", "📏")) + action_sequence.append(create_action_log(f"泵流速: {PUMP_FLOW_RATE}mL/s", "⚡")) + + # === 路径验证 === + debug_print("🔍 步骤4: 路径验证...") + action_sequence.append(create_action_log("验证传输路径...", "🛤️")) + try: # 验证抽真空路径 - vacuum_path = nx.shortest_path(G, source=vessel, target=vacuum_pump) - print(f"EVACUATE_REFILL: 抽真空路径: {' → '.join(vacuum_path)}") + if nx.has_path(G, vessel_id, vacuum_pump): # 🔧 使用 vessel_id + vacuum_path = nx.shortest_path(G, source=vessel_id, target=vacuum_pump) + debug_print(f"✅ 真空路径: {' -> '.join(vacuum_path)}") + action_sequence.append(create_action_log(f"真空路径: {' -> '.join(vacuum_path)}", "🛤️")) + else: + debug_print(f"⚠️ 真空路径不存在,继续执行但可能有问题") + action_sequence.append(create_action_log("真空路径检查: 路径不存在", "⚠️")) # 验证充气路径 - gas_path = nx.shortest_path(G, source=gas_source, target=vessel) - print(f"EVACUATE_REFILL: 充气路径: {' → '.join(gas_path)}") + if nx.has_path(G, gas_source, vessel_id): # 🔧 使用 vessel_id + gas_path = nx.shortest_path(G, source=gas_source, target=vessel_id) + debug_print(f"✅ 气体路径: {' -> '.join(gas_path)}") + action_sequence.append(create_action_log(f"气体路径: {' -> '.join(gas_path)}", "🛤️")) + else: + debug_print(f"⚠️ 气体路径不存在,继续执行但可能有问题") + action_sequence.append(create_action_log("气体路径检查: 路径不存在", "⚠️")) - # **新增**: 检查路径中的边数据 - for i in range(len(vacuum_path) - 1): - nodeA, nodeB = vacuum_path[i], vacuum_path[i + 1] - edge_data = G.get_edge_data(nodeA, nodeB) - if not edge_data or 'port' not in edge_data: - raise ValueError(f"路径 {nodeA} → {nodeB} 缺少端口信息") - print(f" 抽真空路径边 {nodeA} → {nodeB}: {edge_data}") - - for i in range(len(gas_path) - 1): - nodeA, nodeB = gas_path[i], gas_path[i + 1] - edge_data = G.get_edge_data(nodeA, nodeB) - if not edge_data or 'port' not in edge_data: - raise ValueError(f"路径 {nodeA} → {nodeB} 缺少端口信息") - print(f" 充气路径边 {nodeA} → {nodeB}: {edge_data}") - - except nx.NetworkXNoPath as e: - raise ValueError(f"路径不存在: {str(e)}") except Exception as e: - raise ValueError(f"路径验证失败: {str(e)}") + debug_print(f"⚠️ 路径验证失败: {str(e)},继续执行") + action_sequence.append(create_action_log(f"路径验证失败: {str(e)}", "⚠️")) + + # === 启动搅拌器 === + debug_print("🔍 步骤5: 启动搅拌器...") - # 4. 启动搅拌器 if stirrer_id: + debug_print(f"🌪️ 启动搅拌器: {stirrer_id}") + action_sequence.append(create_action_log(f"启动搅拌器 {stirrer_id} (速度: {STIR_SPEED}rpm)", "🌪️")) + action_sequence.append({ "device_id": stirrer_id, "action_name": "start_stir", "action_kwargs": { - "vessel": vessel, + "vessel": vessel_id, # 🔧 使用 vessel_id "stir_speed": STIR_SPEED, - "purpose": "抽真空充气操作前启动搅拌" + "purpose": "抽真空充气前预搅拌" } }) + + # 等待搅拌稳定 + action_sequence.append(create_action_log("等待搅拌稳定...", "⏳")) + action_sequence.append({ + "action_name": "wait", + "action_kwargs": {"time": 5.0} + }) + else: + debug_print("⚠️ 未找到搅拌器,跳过搅拌器启动") + action_sequence.append(create_action_log("跳过搅拌器启动", "⏭️")) + + # === 执行循环 === + debug_print("🔍 步骤6: 执行抽真空-充气循环...") + action_sequence.append(create_action_log(f"开始 {repeats} 次抽真空-充气循环", "🔄")) - # 5. 执行多次抽真空-充气循环 for cycle in range(repeats): - print(f"EVACUATE_REFILL: === 第 {cycle+1}/{repeats} 次循环 ===") + debug_print(f"=== 第 {cycle+1}/{repeats} 轮循环 ===") + action_sequence.append(create_action_log(f"第 {cycle+1}/{repeats} 轮循环开始", "🚀")) # ============ 抽真空阶段 ============ - print(f"EVACUATE_REFILL: 抽真空阶段开始") + debug_print(f"🌪️ 抽真空阶段开始") + action_sequence.append(create_action_log("开始抽真空阶段", "🌪️")) # 启动真空泵 + debug_print(f"🔛 启动真空泵: {vacuum_pump}") + action_sequence.append(create_action_log(f"启动真空泵: {vacuum_pump}", "🔛")) action_sequence.append({ "device_id": vacuum_pump, "action_name": "set_status", @@ -194,27 +518,28 @@ def generate_evacuateandrefill_protocol( # 开启真空电磁阀 if vacuum_solenoid: + debug_print(f"🚪 打开真空电磁阀: {vacuum_solenoid}") + action_sequence.append(create_action_log(f"打开真空电磁阀: {vacuum_solenoid}", "🚪")) action_sequence.append({ "device_id": vacuum_solenoid, "action_name": "set_valve_position", "action_kwargs": {"command": "OPEN"} }) - # **关键修复**: 改进 pump_protocol 调用和错误处理 - print(f"EVACUATE_REFILL: 调用抽真空 pump_protocol: {vessel} → {vacuum_pump}") - print(f" - 体积: {VACUUM_VOLUME} mL") - print(f" - 流速: {PUMP_FLOW_RATE} mL/s") + # 抽真空操作 + debug_print(f"🌪️ 抽真空操作: {vessel_id} -> {vacuum_pump}") + action_sequence.append(create_action_log(f"开始抽真空: {vessel_id} -> {vacuum_pump}", "🌪️")) try: vacuum_transfer_actions = generate_pump_protocol_with_rinsing( G=G, - from_vessel=vessel, + from_vessel=vessel_id, # 🔧 使用 vessel_id to_vessel=vacuum_pump, volume=VACUUM_VOLUME, amount="", time=0.0, viscous=False, - rinsing_solvent="", # **修复**: 明确不使用清洗 + rinsing_solvent="", rinsing_volume=0.0, rinsing_repeats=0, solid=False, @@ -224,52 +549,36 @@ def generate_evacuateandrefill_protocol( if vacuum_transfer_actions: action_sequence.extend(vacuum_transfer_actions) - print(f"EVACUATE_REFILL: ✅ 成功添加 {len(vacuum_transfer_actions)} 个抽真空动作") + debug_print(f"✅ 添加了 {len(vacuum_transfer_actions)} 个抽真空动作") + action_sequence.append(create_action_log(f"抽真空协议完成 ({len(vacuum_transfer_actions)} 个操作)", "✅")) else: - print(f"EVACUATE_REFILL: ⚠️ 抽真空 pump_protocol 返回空序列") - # **修复**: 添加手动泵动作作为备选 - action_sequence.extend([ - { - "device_id": "multiway_valve_1", - "action_name": "set_valve_position", - "action_kwargs": {"command": "5"} # 连接到反应器 - }, - { - "device_id": "transfer_pump_1", - "action_name": "set_position", - "action_kwargs": { - "position": VACUUM_VOLUME, - "max_velocity": PUMP_FLOW_RATE - } - } - ]) - print(f"EVACUATE_REFILL: 使用备选手动泵动作") + debug_print("⚠️ 抽真空协议返回空序列,添加手动动作") + action_sequence.append(create_action_log("抽真空协议为空,使用手动等待", "⚠️")) + action_sequence.append({ + "action_name": "wait", + "action_kwargs": {"time": VACUUM_TIME} + }) except Exception as e: - print(f"EVACUATE_REFILL: ❌ 抽真空 pump_protocol 失败: {str(e)}") - import traceback - print(f"EVACUATE_REFILL: 详细错误:\n{traceback.format_exc()}") - - # **修复**: 添加手动动作而不是忽略错误 - print(f"EVACUATE_REFILL: 使用手动备选方案") - action_sequence.extend([ - { - "device_id": "multiway_valve_1", - "action_name": "set_valve_position", - "action_kwargs": {"command": "5"} # 反应器端口 - }, - { - "device_id": "transfer_pump_1", - "action_name": "set_position", - "action_kwargs": { - "position": VACUUM_VOLUME, - "max_velocity": PUMP_FLOW_RATE - } - } - ]) + debug_print(f"❌ 抽真空失败: {str(e)}") + action_sequence.append(create_action_log(f"抽真空失败: {str(e)}", "❌")) + action_sequence.append({ + "action_name": "wait", + "action_kwargs": {"time": VACUUM_TIME} + }) + + # 抽真空后等待 + wait_minutes = VACUUM_TIME / 60 + action_sequence.append(create_action_log(f"抽真空后等待 ({wait_minutes:.1f} 分钟)", "⏳")) + action_sequence.append({ + "action_name": "wait", + "action_kwargs": {"time": VACUUM_TIME} + }) # 关闭真空电磁阀 if vacuum_solenoid: + debug_print(f"🚪 关闭真空电磁阀: {vacuum_solenoid}") + action_sequence.append(create_action_log(f"关闭真空电磁阀: {vacuum_solenoid}", "🚪")) action_sequence.append({ "device_id": vacuum_solenoid, "action_name": "set_valve_position", @@ -277,43 +586,58 @@ def generate_evacuateandrefill_protocol( }) # 关闭真空泵 + debug_print(f"🔴 停止真空泵: {vacuum_pump}") + action_sequence.append(create_action_log(f"停止真空泵: {vacuum_pump}", "🔴")) action_sequence.append({ "device_id": vacuum_pump, "action_name": "set_status", "action_kwargs": {"string": "OFF"} }) + # 阶段间等待 + action_sequence.append(create_action_log("抽真空阶段完成,短暂等待", "⏳")) + action_sequence.append({ + "action_name": "wait", + "action_kwargs": {"time": 5.0} + }) + # ============ 充气阶段 ============ - print(f"EVACUATE_REFILL: 充气阶段开始") + debug_print(f"💨 充气阶段开始") + action_sequence.append(create_action_log("开始气体充气阶段", "💨")) # 启动气源 + debug_print(f"🔛 启动气源: {gas_source}") + action_sequence.append(create_action_log(f"启动气源: {gas_source}", "🔛")) action_sequence.append({ "device_id": gas_source, - "action_name": "set_status", + "action_name": "set_status", "action_kwargs": {"string": "ON"} }) # 开启气源电磁阀 if gas_solenoid: + debug_print(f"🚪 打开气源电磁阀: {gas_solenoid}") + action_sequence.append(create_action_log(f"打开气源电磁阀: {gas_solenoid}", "🚪")) action_sequence.append({ "device_id": gas_solenoid, "action_name": "set_valve_position", "action_kwargs": {"command": "OPEN"} }) - # **关键修复**: 改进充气 pump_protocol 调用 - print(f"EVACUATE_REFILL: 调用充气 pump_protocol: {gas_source} → {vessel}") + # 充气操作 + debug_print(f"💨 充气操作: {gas_source} -> {vessel_id}") + action_sequence.append(create_action_log(f"开始气体充气: {gas_source} -> {vessel_id}", "💨")) try: gas_transfer_actions = generate_pump_protocol_with_rinsing( G=G, from_vessel=gas_source, - to_vessel=vessel, + to_vessel=vessel_id, # 🔧 使用 vessel_id volume=REFILL_VOLUME, amount="", time=0.0, viscous=False, - rinsing_solvent="", # **修复**: 明确不使用清洗 + rinsing_solvent="", rinsing_volume=0.0, rinsing_repeats=0, solid=False, @@ -323,77 +647,36 @@ def generate_evacuateandrefill_protocol( if gas_transfer_actions: action_sequence.extend(gas_transfer_actions) - print(f"EVACUATE_REFILL: ✅ 成功添加 {len(gas_transfer_actions)} 个充气动作") + debug_print(f"✅ 添加了 {len(gas_transfer_actions)} 个充气动作") + action_sequence.append(create_action_log(f"气体充气协议完成 ({len(gas_transfer_actions)} 个操作)", "✅")) else: - print(f"EVACUATE_REFILL: ⚠️ 充气 pump_protocol 返回空序列") - # **修复**: 添加手动充气动作 - action_sequence.extend([ - { - "device_id": "multiway_valve_2", - "action_name": "set_valve_position", - "action_kwargs": {"command": "8"} # 氮气端口 - }, - { - "device_id": "transfer_pump_2", - "action_name": "set_position", - "action_kwargs": { - "position": REFILL_VOLUME, - "max_velocity": PUMP_FLOW_RATE - } - }, - { - "device_id": "multiway_valve_2", - "action_name": "set_valve_position", - "action_kwargs": {"command": "5"} # 反应器端口 - }, - { - "device_id": "transfer_pump_2", - "action_name": "set_position", - "action_kwargs": { - "position": 0.0, - "max_velocity": PUMP_FLOW_RATE - } - } - ]) + debug_print("⚠️ 充气协议返回空序列,添加手动动作") + action_sequence.append(create_action_log("充气协议为空,使用手动等待", "⚠️")) + action_sequence.append({ + "action_name": "wait", + "action_kwargs": {"time": REFILL_TIME} + }) except Exception as e: - print(f"EVACUATE_REFILL: ❌ 充气 pump_protocol 失败: {str(e)}") - import traceback - print(f"EVACUATE_REFILL: 详细错误:\n{traceback.format_exc()}") - - # **修复**: 使用手动充气动作 - print(f"EVACUATE_REFILL: 使用手动充气方案") - action_sequence.extend([ - { - "device_id": "multiway_valve_2", - "action_name": "set_valve_position", - "action_kwargs": {"command": "8"} # 连接气源 - }, - { - "device_id": "transfer_pump_2", - "action_name": "set_position", - "action_kwargs": { - "position": REFILL_VOLUME, - "max_velocity": PUMP_FLOW_RATE - } - }, - { - "device_id": "multiway_valve_2", - "action_name": "set_valve_position", - "action_kwargs": {"command": "5"} # 连接反应器 - }, - { - "device_id": "transfer_pump_2", - "action_name": "set_position", - "action_kwargs": { - "position": 0.0, - "max_velocity": PUMP_FLOW_RATE - } - } - ]) + debug_print(f"❌ 气体充气失败: {str(e)}") + action_sequence.append(create_action_log(f"气体充气失败: {str(e)}", "❌")) + action_sequence.append({ + "action_name": "wait", + "action_kwargs": {"time": REFILL_TIME} + }) + + # 充气后等待 + refill_wait_minutes = REFILL_TIME / 60 + action_sequence.append(create_action_log(f"充气后等待 ({refill_wait_minutes:.1f} 分钟)", "⏳")) + action_sequence.append({ + "action_name": "wait", + "action_kwargs": {"time": REFILL_TIME} + }) # 关闭气源电磁阀 if gas_solenoid: + debug_print(f"🚪 关闭气源电磁阀: {gas_solenoid}") + action_sequence.append(create_action_log(f"关闭气源电磁阀: {gas_solenoid}", "🚪")) action_sequence.append({ "device_id": gas_solenoid, "action_name": "set_valve_position", @@ -401,37 +684,96 @@ def generate_evacuateandrefill_protocol( }) # 关闭气源 + debug_print(f"🔴 停止气源: {gas_source}") + action_sequence.append(create_action_log(f"停止气源: {gas_source}", "🔴")) action_sequence.append({ "device_id": gas_source, "action_name": "set_status", "action_kwargs": {"string": "OFF"} }) - # 等待下一次循环 + # 循环间等待 if cycle < repeats - 1: + debug_print(f"⏳ 等待下一个循环...") + action_sequence.append(create_action_log("等待下一个循环...", "⏳")) action_sequence.append({ "action_name": "wait", - "action_kwargs": {"time": 2.0} + "action_kwargs": {"time": 10.0} }) + else: + action_sequence.append(create_action_log(f"第 {cycle+1}/{repeats} 轮循环完成", "✅")) + + # === 停止搅拌器 === + debug_print("🔍 步骤7: 停止搅拌器...") - # 停止搅拌器 if stirrer_id: + debug_print(f"🛑 停止搅拌器: {stirrer_id}") + action_sequence.append(create_action_log(f"停止搅拌器: {stirrer_id}", "🛑")) action_sequence.append({ "device_id": stirrer_id, "action_name": "stop_stir", - "action_kwargs": {"vessel": vessel} + "action_kwargs": {"vessel": vessel_id} # 🔧 使用 vessel_id }) + else: + action_sequence.append(create_action_log("跳过搅拌器停止", "⏭️")) + + # === 最终等待 === + action_sequence.append(create_action_log("最终稳定等待...", "⏳")) + action_sequence.append({ + "action_name": "wait", + "action_kwargs": {"time": 10.0} + }) + + # === 总结 === + total_time = (VACUUM_TIME + REFILL_TIME + 25) * repeats + 20 + + debug_print("=" * 60) + debug_print(f"🎉 抽真空充气协议生成完成") + debug_print(f"📊 协议统计:") + debug_print(f" 📋 总动作数: {len(action_sequence)}") + debug_print(f" ⏱️ 预计总时间: {total_time:.0f}s ({total_time/60:.1f} 分钟)") + debug_print(f" 🥼 处理容器: {vessel_id}") + debug_print(f" 💨 使用气体: {gas}") + debug_print(f" 🔄 重复次数: {repeats}") + debug_print("=" * 60) + + # 添加完成日志 + summary_msg = f"抽真空充气协议完成: {vessel_id} (使用 {gas},{repeats} 次循环)" + action_sequence.append(create_action_log(summary_msg, "🎉")) - print(f"EVACUATE_REFILL: 协议生成完成,共 {len(action_sequence)} 个动作") return action_sequence +# === 便捷函数 === + +def generate_nitrogen_purge_protocol(G: nx.DiGraph, vessel: dict, **kwargs) -> List[Dict[str, Any]]: # 🔧 修改参数类型 + """生成氮气置换协议""" + vessel_id = vessel["id"] + debug_print(f"💨 生成氮气置换协议: {vessel_id}") + return generate_evacuateandrefill_protocol(G, vessel, "nitrogen", **kwargs) + +def generate_argon_purge_protocol(G: nx.DiGraph, vessel: dict, **kwargs) -> List[Dict[str, Any]]: # 🔧 修改参数类型 + """生成氩气置换协议""" + vessel_id = vessel["id"] + debug_print(f"💨 生成氩气置换协议: {vessel_id}") + return generate_evacuateandrefill_protocol(G, vessel, "argon", **kwargs) + +def generate_air_purge_protocol(G: nx.DiGraph, vessel: dict, **kwargs) -> List[Dict[str, Any]]: # 🔧 修改参数类型 + """生成空气置换协议""" + vessel_id = vessel["id"] + debug_print(f"💨 生成空气置换协议: {vessel_id}") + return generate_evacuateandrefill_protocol(G, vessel, "air", **kwargs) + +def generate_inert_atmosphere_protocol(G: nx.DiGraph, vessel: dict, gas: str = "nitrogen", **kwargs) -> List[Dict[str, Any]]: # 🔧 修改参数类型 + """生成惰性气氛协议""" + vessel_id = vessel["id"] + debug_print(f"🛡️ 生成惰性气氛协议: {vessel_id} (使用 {gas})") + return generate_evacuateandrefill_protocol(G, vessel, gas, **kwargs) # 测试函数 def test_evacuateandrefill_protocol(): """测试抽真空充气协议""" - print("=== EVACUATE AND REFILL PROTOCOL 测试 ===") - print("测试完成") - + debug_print("=== 抽真空充气协议增强中文版测试 ===") + debug_print("✅ 测试完成") if __name__ == "__main__": test_evacuateandrefill_protocol() \ No newline at end of file diff --git a/unilabos/compile/evaporate_protocol.py b/unilabos/compile/evaporate_protocol.py index 4cee78d..56228c2 100644 --- a/unilabos/compile/evaporate_protocol.py +++ b/unilabos/compile/evaporate_protocol.py @@ -1,326 +1,470 @@ -from typing import List, Dict, Any +from typing import List, Dict, Any, Optional, Union import networkx as nx -from .pump_protocol import generate_pump_protocol +import logging +import re +logger = logging.getLogger(__name__) -def get_vessel_liquid_volume(G: nx.DiGraph, vessel: str) -> float: +def debug_print(message): + """调试输出""" + print(f"🧪 [EVAPORATE] {message}", flush=True) + logger.info(f"[EVAPORATE] {message}") + +def parse_time_input(time_input: Union[str, float]) -> float: """ - 获取容器中的液体体积 + 解析时间输入,支持带单位的字符串 + + Args: + time_input: 时间输入(如 "3 min", "180", "0.5 h" 等) + + Returns: + float: 时间(秒) """ - if vessel not in G.nodes(): - return 0.0 + if isinstance(time_input, (int, float)): + debug_print(f"⏱️ 时间输入为数字: {time_input}s ✨") + return float(time_input) # 🔧 确保返回float - vessel_data = G.nodes[vessel].get('data', {}) - liquids = vessel_data.get('liquid', []) + if not time_input or not str(time_input).strip(): + debug_print(f"⚠️ 时间输入为空,使用默认值: 180s (3分钟) 🕐") + return 180.0 # 默认3分钟 - total_volume = 0.0 - for liquid in liquids: - if isinstance(liquid, dict) and 'liquid_volume' in liquid: - total_volume += liquid['liquid_volume'] + time_str = str(time_input).lower().strip() + debug_print(f"🔍 解析时间输入: '{time_str}' 📝") - return total_volume + # 处理未知时间 + if time_str in ['?', 'unknown', 'tbd']: + default_time = 180.0 # 默认3分钟 + debug_print(f"❓ 检测到未知时间,使用默认值: {default_time}s (3分钟) 🤷‍♀️") + return default_time + + # 移除空格并提取数字和单位 + time_clean = re.sub(r'\s+', '', time_str) + + # 匹配数字和单位的正则表达式 + match = re.match(r'([0-9]*\.?[0-9]+)\s*(s|sec|second|min|minute|h|hr|hour|d|day)?', time_clean) + + if not match: + # 如果无法解析,尝试直接转换为数字(默认秒) + try: + value = float(time_str) + debug_print(f"✅ 时间解析成功: {time_str} → {value}s(无单位,默认秒)⏰") + return float(value) # 🔧 确保返回float + except ValueError: + debug_print(f"❌ 无法解析时间: '{time_str}',使用默认值180s (3分钟) 😅") + return 180.0 + + value = float(match.group(1)) + unit = match.group(2) or 's' # 默认单位为秒 + + # 转换为秒 + if unit in ['min', 'minute']: + time_sec = value * 60.0 # min -> s + debug_print(f"🕐 时间转换: {value} 分钟 → {time_sec}s ⏰") + elif unit in ['h', 'hr', 'hour']: + time_sec = value * 3600.0 # h -> s + debug_print(f"🕐 时间转换: {value} 小时 → {time_sec}s ({time_sec/60:.1f}分钟) ⏰") + elif unit in ['d', 'day']: + time_sec = value * 86400.0 # d -> s + debug_print(f"🕐 时间转换: {value} 天 → {time_sec}s ({time_sec/3600:.1f}小时) ⏰") + else: # s, sec, second 或默认 + time_sec = value # 已经是s + debug_print(f"🕐 时间转换: {value}s → {time_sec}s (已是秒) ⏰") + + return float(time_sec) # 🔧 确保返回float +def find_rotavap_device(G: nx.DiGraph, vessel: str = None) -> Optional[str]: + """ + 在组态图中查找旋转蒸发仪设备 + + Args: + G: 设备图 + vessel: 指定的设备名称(可选) + + Returns: + str: 找到的旋转蒸发仪设备ID,如果没找到返回None + """ + debug_print("🔍 开始查找旋转蒸发仪设备... 🌪️") + + # 如果指定了vessel,先检查是否存在且是旋转蒸发仪 + if vessel: + debug_print(f"🎯 检查指定设备: {vessel} 🔧") + if vessel in G.nodes(): + node_data = G.nodes[vessel] + node_class = node_data.get('class', '') + node_type = node_data.get('type', '') + + debug_print(f"📋 设备信息 {vessel}: class={node_class}, type={node_type}") + + # 检查是否为旋转蒸发仪 + if any(keyword in str(node_class).lower() for keyword in ['rotavap', 'rotary', 'evaporat']): + debug_print(f"🎉 找到指定的旋转蒸发仪: {vessel} ✨") + return vessel + elif node_type == 'device': + debug_print(f"✅ 指定设备存在,尝试直接使用: {vessel} 🔧") + return vessel + else: + debug_print(f"❌ 指定的设备 {vessel} 不存在 😞") + + # 在所有设备中查找旋转蒸发仪 + debug_print("🔎 在所有设备中搜索旋转蒸发仪... 🕵️‍♀️") + rotavap_candidates = [] + + for node_id, node_data in G.nodes(data=True): + node_class = node_data.get('class', '') + node_type = node_data.get('type', '') + + # 跳过非设备节点 + if node_type != 'device': + continue + + # 检查设备类型 + if any(keyword in str(node_class).lower() for keyword in ['rotavap', 'rotary', 'evaporat']): + rotavap_candidates.append(node_id) + debug_print(f"🌟 找到旋转蒸发仪候选: {node_id} (class: {node_class}) 🌪️") + elif any(keyword in str(node_id).lower() for keyword in ['rotavap', 'rotary', 'evaporat']): + rotavap_candidates.append(node_id) + debug_print(f"🌟 找到旋转蒸发仪候选 (按名称): {node_id} 🌪️") + + if rotavap_candidates: + selected = rotavap_candidates[0] # 选择第一个找到的 + debug_print(f"🎯 选择旋转蒸发仪: {selected} 🏆") + return selected + + debug_print("😭 未找到旋转蒸发仪设备 💔") + return None -def find_rotavap_device(G: nx.DiGraph) -> str: - """查找旋转蒸发仪设备""" - rotavap_nodes = [node for node in G.nodes() - if (G.nodes[node].get('class') or '') == 'virtual_rotavap'] +def find_connected_vessel(G: nx.DiGraph, rotavap_device: str) -> Optional[str]: + """ + 查找与旋转蒸发仪连接的容器 - if rotavap_nodes: - return rotavap_nodes[0] + Args: + G: 设备图 + rotavap_device: 旋转蒸发仪设备ID - raise ValueError("系统中未找到旋转蒸发仪设备") - - -def find_solvent_recovery_vessel(G: nx.DiGraph) -> str: - """查找溶剂回收容器""" - possible_names = [ - "flask_distillate", - "bottle_distillate", - "vessel_distillate", - "distillate", - "solvent_recovery", - "flask_solvent_recovery", - "collection_flask" - ] + Returns: + str: 连接的容器ID,如果没找到返回None + """ + debug_print(f"🔗 查找与 {rotavap_device} 连接的容器... 🥽") - for vessel_name in possible_names: - if vessel_name in G.nodes(): - return vessel_name + # 查看旋转蒸发仪的子设备 + rotavap_data = G.nodes[rotavap_device] + children = rotavap_data.get('children', []) - # 如果找不到专门的回收容器,使用废液容器 - waste_names = ["waste_workup", "flask_waste", "bottle_waste", "waste"] - for vessel_name in waste_names: - if vessel_name in G.nodes(): - return vessel_name + debug_print(f"👶 检查子设备: {children}") + for child_id in children: + if child_id in G.nodes(): + child_data = G.nodes[child_id] + child_type = child_data.get('type', '') + + if child_type == 'container': + debug_print(f"🎉 找到连接的容器: {child_id} 🥽✨") + return child_id - raise ValueError(f"未找到溶剂回收容器。尝试了以下名称: {possible_names + waste_names}") - + # 查看邻接的容器 + debug_print("🤝 检查邻接设备...") + for neighbor in G.neighbors(rotavap_device): + neighbor_data = G.nodes[neighbor] + neighbor_type = neighbor_data.get('type', '') + + if neighbor_type == 'container': + debug_print(f"🎉 找到邻接的容器: {neighbor} 🥽✨") + return neighbor + + debug_print("😞 未找到连接的容器 💔") + return None def generate_evaporate_protocol( G: nx.DiGraph, - vessel: str, + vessel: dict, # 🔧 修改:从字符串改为字典类型 pressure: float = 0.1, temp: float = 60.0, - time: float = 1800.0, - stir_speed: float = 100.0 + time: Union[str, float] = "180", # 🔧 修改:支持字符串时间 + stir_speed: float = 100.0, + solvent: str = "", + **kwargs ) -> List[Dict[str, Any]]: """ - 生成蒸发操作的协议序列 - - 蒸发流程: - 1. 液体转移:将待蒸发溶液从源容器转移到旋转蒸发仪 - 2. 蒸发操作:执行旋转蒸发 - 3. (可选) 溶剂回收:将冷凝的溶剂转移到回收容器 - 4. 残留物转移:将浓缩物从旋转蒸发仪转移回原容器或新容器 + 生成蒸发操作的协议序列 - 支持单位和体积运算 Args: - G: 有向图,节点为设备和容器,边为流体管道 - vessel: 包含待蒸发溶液的容器名称 - pressure: 蒸发时的真空度 (bar),默认0.1 bar - temp: 蒸发时的加热温度 (°C),默认60°C - time: 蒸发时间 (秒),默认1800秒(30分钟) - stir_speed: 旋转速度 (RPM),默认100 RPM + G: 设备图 + vessel: 容器字典(从XDL传入) + pressure: 真空度 (bar),默认0.1 + temp: 加热温度 (°C),默认60 + time: 蒸发时间(支持 "3 min", "180", "0.5 h" 等) + stir_speed: 旋转速度 (RPM),默认100 + solvent: 溶剂名称(用于参数优化) + **kwargs: 其他参数(兼容性) Returns: - List[Dict[str, Any]]: 蒸发操作的动作序列 - - Raises: - ValueError: 当找不到必要的设备时抛出异常 - - Examples: - evaporate_actions = generate_evaporate_protocol(G, "reaction_mixture", 0.05, 80.0, 3600.0) + List[Dict[str, Any]]: 动作序列 """ + + # 🔧 核心修改:从字典中提取容器ID + vessel_id = vessel["id"] + + debug_print("🌟" * 20) + debug_print("🌪️ 开始生成蒸发协议(支持单位和体积运算)✨") + debug_print(f"📝 输入参数:") + debug_print(f" 🥽 vessel: {vessel} (ID: {vessel_id})") + debug_print(f" 💨 pressure: {pressure} bar") + debug_print(f" 🌡️ temp: {temp}°C") + debug_print(f" ⏰ time: {time} (类型: {type(time)})") + debug_print(f" 🌪️ stir_speed: {stir_speed} RPM") + debug_print(f" 🧪 solvent: '{solvent}'") + debug_print("🌟" * 20) + + # 🔧 新增:记录蒸发前的容器状态 + debug_print("🔍 记录蒸发前容器状态...") + original_liquid_volume = 0.0 + if "data" in vessel and "liquid_volume" in vessel["data"]: + current_volume = vessel["data"]["liquid_volume"] + if isinstance(current_volume, list) and len(current_volume) > 0: + original_liquid_volume = current_volume[0] + elif isinstance(current_volume, (int, float)): + original_liquid_volume = current_volume + debug_print(f"📊 蒸发前液体体积: {original_liquid_volume:.2f}mL") + + # === 步骤1: 查找旋转蒸发仪设备 === + debug_print("📍 步骤1: 查找旋转蒸发仪设备... 🔍") + + # 验证vessel参数 + if not vessel_id: + debug_print("❌ vessel 参数不能为空! 😱") + raise ValueError("vessel 参数不能为空") + + # 查找旋转蒸发仪设备 + rotavap_device = find_rotavap_device(G, vessel_id) + if not rotavap_device: + debug_print("💥 未找到旋转蒸发仪设备! 😭") + raise ValueError(f"未找到旋转蒸发仪设备。请检查组态图中是否包含 class 包含 'rotavap'、'rotary' 或 'evaporat' 的设备") + + debug_print(f"🎉 成功找到旋转蒸发仪: {rotavap_device} ✨") + + # === 步骤2: 确定目标容器 === + debug_print("📍 步骤2: 确定目标容器... 🥽") + + target_vessel = vessel_id + + # 如果vessel就是旋转蒸发仪设备,查找连接的容器 + if vessel_id == rotavap_device: + debug_print("🔄 vessel就是旋转蒸发仪,查找连接的容器...") + connected_vessel = find_connected_vessel(G, rotavap_device) + if connected_vessel: + target_vessel = connected_vessel + debug_print(f"✅ 使用连接的容器: {target_vessel} 🥽✨") + else: + debug_print(f"⚠️ 未找到连接的容器,使用设备本身: {rotavap_device} 🔧") + target_vessel = rotavap_device + elif vessel_id in G.nodes() and G.nodes[vessel_id].get('type') == 'container': + debug_print(f"✅ 使用指定的容器: {vessel_id} 🥽✨") + target_vessel = vessel_id + else: + debug_print(f"⚠️ 容器 '{vessel_id}' 不存在或类型不正确,使用旋转蒸发仪设备: {rotavap_device} 🔧") + target_vessel = rotavap_device + + # === 🔧 新增:步骤3:单位解析处理 === + debug_print("📍 步骤3: 单位解析处理... ⚡") + + # 解析时间 + final_time = parse_time_input(time) + debug_print(f"🎯 时间解析完成: {time} → {final_time}s ({final_time/60:.1f}分钟) ⏰✨") + + # === 步骤4: 参数验证和修正 === + debug_print("📍 步骤4: 参数验证和修正... 🔧") + + # 修正参数范围 + if pressure <= 0 or pressure > 1.0: + debug_print(f"⚠️ 真空度 {pressure} bar 超出范围,修正为 0.1 bar 💨") + pressure = 0.1 + else: + debug_print(f"✅ 真空度 {pressure} bar 在正常范围内 💨") + + if temp < 10.0 or temp > 200.0: + debug_print(f"⚠️ 温度 {temp}°C 超出范围,修正为 60°C 🌡️") + temp = 60.0 + else: + debug_print(f"✅ 温度 {temp}°C 在正常范围内 🌡️") + + if final_time <= 0: + debug_print(f"⚠️ 时间 {final_time}s 无效,修正为 180s (3分钟) ⏰") + final_time = 180.0 + else: + debug_print(f"✅ 时间 {final_time}s ({final_time/60:.1f}分钟) 有效 ⏰") + + if stir_speed < 10.0 or stir_speed > 300.0: + debug_print(f"⚠️ 旋转速度 {stir_speed} RPM 超出范围,修正为 100 RPM 🌪️") + stir_speed = 100.0 + else: + debug_print(f"✅ 旋转速度 {stir_speed} RPM 在正常范围内 🌪️") + + # 根据溶剂优化参数 + if solvent: + debug_print(f"🧪 根据溶剂 '{solvent}' 优化参数... 🔬") + solvent_lower = solvent.lower() + + if any(s in solvent_lower for s in ['water', 'aqueous', 'h2o']): + temp = max(temp, 80.0) + pressure = max(pressure, 0.2) + debug_print("💧 水系溶剂:提高温度和真空度 🌡️💨") + elif any(s in solvent_lower for s in ['ethanol', 'methanol', 'acetone']): + temp = min(temp, 50.0) + pressure = min(pressure, 0.05) + debug_print("🍺 易挥发溶剂:降低温度和真空度 🌡️💨") + elif any(s in solvent_lower for s in ['dmso', 'dmi', 'toluene']): + temp = max(temp, 100.0) + pressure = min(pressure, 0.01) + debug_print("🔥 高沸点溶剂:提高温度,降低真空度 🌡️💨") + else: + debug_print("🧪 通用溶剂,使用标准参数 ✨") + else: + debug_print("🤷‍♀️ 未指定溶剂,使用默认参数 ✨") + + debug_print(f"🎯 最终参数: pressure={pressure} bar 💨, temp={temp}°C 🌡️, time={final_time}s ⏰, stir_speed={stir_speed} RPM 🌪️") + + # === 🔧 新增:步骤5:蒸发体积计算 === + debug_print("📍 步骤5: 蒸发体积计算... 📊") + + # 根据温度、真空度、时间和溶剂类型估算蒸发量 + evaporation_volume = 0.0 + if original_liquid_volume > 0: + # 基础蒸发速率(mL/min) + base_evap_rate = 0.5 # 基础速率 + + # 温度系数(高温蒸发更快) + temp_factor = 1.0 + (temp - 25.0) / 100.0 + + # 真空系数(真空度越高蒸发越快) + vacuum_factor = 1.0 + (1.0 - pressure) * 2.0 + + # 溶剂系数 + solvent_factor = 1.0 + if solvent: + solvent_lower = solvent.lower() + if any(s in solvent_lower for s in ['water', 'h2o']): + solvent_factor = 0.8 # 水蒸发较慢 + elif any(s in solvent_lower for s in ['ethanol', 'methanol', 'acetone']): + solvent_factor = 1.5 # 易挥发溶剂蒸发快 + elif any(s in solvent_lower for s in ['dmso', 'dmi']): + solvent_factor = 0.3 # 高沸点溶剂蒸发慢 + + # 计算总蒸发量 + total_evap_rate = base_evap_rate * temp_factor * vacuum_factor * solvent_factor + evaporation_volume = min( + original_liquid_volume * 0.95, # 最多蒸发95% + total_evap_rate * (final_time / 60.0) # 时间相关的蒸发量 + ) + + debug_print(f"📊 蒸发量计算:") + debug_print(f" - 基础蒸发速率: {base_evap_rate} mL/min") + debug_print(f" - 温度系数: {temp_factor:.2f} (基于 {temp}°C)") + debug_print(f" - 真空系数: {vacuum_factor:.2f} (基于 {pressure} bar)") + debug_print(f" - 溶剂系数: {solvent_factor:.2f} ({solvent or '通用'})") + debug_print(f" - 总蒸发速率: {total_evap_rate:.2f} mL/min") + debug_print(f" - 预计蒸发量: {evaporation_volume:.2f}mL ({evaporation_volume/original_liquid_volume*100:.1f}%)") + + # === 步骤6: 生成动作序列 === + debug_print("📍 步骤6: 生成动作序列... 🎬") + action_sequence = [] - print(f"EVAPORATE: 开始生成蒸发协议") - print(f" - 源容器: {vessel}") - print(f" - 真空度: {pressure} bar") - print(f" - 温度: {temp}°C") - print(f" - 时间: {time}s ({time/60:.1f}分钟)") - print(f" - 旋转速度: {stir_speed} RPM") - - # 验证源容器存在 - if vessel not in G.nodes(): - raise ValueError(f"源容器 '{vessel}' 不存在于系统中") - - # 获取源容器中的液体体积 - source_volume = get_vessel_liquid_volume(G, vessel) - print(f"EVAPORATE: 源容器 {vessel} 中有 {source_volume} mL 液体") - - # 查找旋转蒸发仪 - try: - rotavap_id = find_rotavap_device(G) - print(f"EVAPORATE: 找到旋转蒸发仪: {rotavap_id}") - except ValueError as e: - raise ValueError(f"无法找到旋转蒸发仪: {str(e)}") - - # 查找旋转蒸发仪样品容器 - rotavap_vessel = None - possible_rotavap_vessels = ["rotavap_flask", "rotavap", "flask_rotavap", "evaporation_flask"] - for rv in possible_rotavap_vessels: - if rv in G.nodes(): - rotavap_vessel = rv - break - - if not rotavap_vessel: - raise ValueError(f"未找到旋转蒸发仪样品容器。尝试了: {possible_rotavap_vessels}") - - print(f"EVAPORATE: 找到旋转蒸发仪样品容器: {rotavap_vessel}") - - # 查找溶剂回收容器 - try: - distillate_vessel = find_solvent_recovery_vessel(G) - print(f"EVAPORATE: 找到溶剂回收容器: {distillate_vessel}") - except ValueError as e: - print(f"EVAPORATE: 警告 - {str(e)}") - distillate_vessel = None - - # === 简化的体积计算策略 === - if source_volume > 0: - # 如果能检测到液体体积,使用实际体积的大部分 - transfer_volume = min(source_volume * 0.9, 250.0) # 90%或最多250mL - print(f"EVAPORATE: 检测到液体体积,将转移 {transfer_volume} mL") - else: - # 如果检测不到液体体积,默认转移一整瓶 250mL - transfer_volume = 250.0 - print(f"EVAPORATE: 未检测到液体体积,默认转移整瓶 {transfer_volume} mL") - - # === 第一步:将待蒸发溶液转移到旋转蒸发仪 === - print(f"EVAPORATE: 将 {transfer_volume} mL 溶液从 {vessel} 转移到 {rotavap_vessel}") - try: - transfer_to_rotavap_actions = generate_pump_protocol( - G=G, - from_vessel=vessel, - to_vessel=rotavap_vessel, - volume=transfer_volume, - flowrate=2.0, - transfer_flowrate=2.0 - ) - action_sequence.extend(transfer_to_rotavap_actions) - except Exception as e: - raise ValueError(f"无法将溶液转移到旋转蒸发仪: {str(e)}") - - # 转移后等待 - wait_action = { + # 1. 等待稳定 + debug_print(" 🔄 动作1: 添加初始等待稳定... ⏳") + action_sequence.append({ "action_name": "wait", "action_kwargs": {"time": 10} - } - action_sequence.append(wait_action) + }) + debug_print(" ✅ 初始等待动作已添加 ⏳✨") + + # 2. 执行蒸发 + debug_print(f" 🌪️ 动作2: 执行蒸发操作...") + debug_print(f" 🔧 设备: {rotavap_device}") + debug_print(f" 🥽 容器: {target_vessel}") + debug_print(f" 💨 真空度: {pressure} bar") + debug_print(f" 🌡️ 温度: {temp}°C") + debug_print(f" ⏰ 时间: {final_time}s ({final_time/60:.1f}分钟)") + debug_print(f" 🌪️ 旋转速度: {stir_speed} RPM") - # === 第二步:执行旋转蒸发 === - print(f"EVAPORATE: 执行旋转蒸发操作") evaporate_action = { - "device_id": rotavap_id, + "device_id": rotavap_device, "action_name": "evaporate", "action_kwargs": { - "vessel": rotavap_vessel, - "pressure": pressure, - "temp": temp, - "time": time, - "stir_speed": stir_speed + "vessel": target_vessel, + "pressure": float(pressure), + "temp": float(temp), + "time": float(final_time), # 🔧 强制转换为float类型 + "stir_speed": float(stir_speed), + "solvent": str(solvent) } } action_sequence.append(evaporate_action) + debug_print(" ✅ 蒸发动作已添加 🌪️✨") - # 蒸发后等待系统稳定 - wait_action = { - "action_name": "wait", - "action_kwargs": {"time": 30} - } - action_sequence.append(wait_action) - - # === 第三步:溶剂回收(如果有回收容器)=== - if distillate_vessel: - print(f"EVAPORATE: 回收冷凝溶剂到 {distillate_vessel}") - try: - condenser_vessel = "rotavap_condenser" - if condenser_vessel in G.nodes(): - # 估算回收体积(约为转移体积的70% - 大部分溶剂被蒸发回收) - recovery_volume = transfer_volume * 0.7 - print(f"EVAPORATE: 预计回收 {recovery_volume} mL 溶剂") - - recovery_actions = generate_pump_protocol( - G=G, - from_vessel=condenser_vessel, - to_vessel=distillate_vessel, - volume=recovery_volume, - flowrate=3.0, - transfer_flowrate=3.0 - ) - action_sequence.extend(recovery_actions) + # 🔧 新增:蒸发过程中的体积变化 + debug_print(" 🔧 更新容器体积 - 蒸发过程...") + if evaporation_volume > 0: + new_volume = max(0.0, original_liquid_volume - evaporation_volume) + + # 更新vessel字典中的体积 + if "data" in vessel and "liquid_volume" in vessel["data"]: + current_volume = vessel["data"]["liquid_volume"] + if isinstance(current_volume, list): + if len(current_volume) > 0: + vessel["data"]["liquid_volume"][0] = new_volume + else: + vessel["data"]["liquid_volume"] = [new_volume] + elif isinstance(current_volume, (int, float)): + vessel["data"]["liquid_volume"] = new_volume else: - print("EVAPORATE: 未找到冷凝器容器,跳过溶剂回收") - except Exception as e: - print(f"EVAPORATE: 溶剂回收失败: {str(e)}") - - # === 第四步:将浓缩物转移回原容器 === - print(f"EVAPORATE: 将浓缩物从旋转蒸发仪转移回 {vessel}") - try: - # 估算浓缩物体积(约为转移体积的20% - 大部分溶剂已蒸发) - concentrate_volume = transfer_volume * 0.2 - print(f"EVAPORATE: 预计浓缩物体积 {concentrate_volume} mL") + vessel["data"]["liquid_volume"] = new_volume - transfer_back_actions = generate_pump_protocol( - G=G, - from_vessel=rotavap_vessel, - to_vessel=vessel, - volume=concentrate_volume, - flowrate=1.0, # 浓缩物可能粘稠,用较慢流速 - transfer_flowrate=1.0 - ) - action_sequence.extend(transfer_back_actions) - except Exception as e: - print(f"EVAPORATE: 将浓缩物转移回容器失败: {str(e)}") - - # === 第五步:清洗旋转蒸发仪 === - print(f"EVAPORATE: 清洗旋转蒸发仪") - try: - # 查找清洗溶剂 - cleaning_solvent = None - for solvent in ["flask_ethanol", "flask_acetone", "flask_water"]: - if solvent in G.nodes(): - cleaning_solvent = solvent - break - - if cleaning_solvent and distillate_vessel: - # 用固定量溶剂清洗(不依赖检测体积) - cleaning_volume = 50.0 # 固定50mL清洗 - print(f"EVAPORATE: 用 {cleaning_volume} mL {cleaning_solvent} 清洗") + # 🔧 同时更新图中的容器数据 + if vessel_id in G.nodes(): + if 'data' not in G.nodes[vessel_id]: + G.nodes[vessel_id]['data'] = {} - # 清洗溶剂加入 - cleaning_actions = generate_pump_protocol( - G=G, - from_vessel=cleaning_solvent, - to_vessel=rotavap_vessel, - volume=cleaning_volume, - flowrate=2.0, - transfer_flowrate=2.0 - ) - action_sequence.extend(cleaning_actions) + vessel_node_data = G.nodes[vessel_id]['data'] + current_node_volume = vessel_node_data.get('liquid_volume', 0.0) - # 将清洗液转移到废液/回收容器 - waste_actions = generate_pump_protocol( - G=G, - from_vessel=rotavap_vessel, - to_vessel=distillate_vessel, # 使用回收容器作为废液 - volume=cleaning_volume, - flowrate=2.0, - transfer_flowrate=2.0 - ) - action_sequence.extend(waste_actions) + if isinstance(current_node_volume, list): + if len(current_node_volume) > 0: + G.nodes[vessel_id]['data']['liquid_volume'][0] = new_volume + else: + G.nodes[vessel_id]['data']['liquid_volume'] = [new_volume] + else: + G.nodes[vessel_id]['data']['liquid_volume'] = new_volume - except Exception as e: - print(f"EVAPORATE: 清洗步骤失败: {str(e)}") + debug_print(f" 📊 蒸发体积变化: {original_liquid_volume:.2f}mL → {new_volume:.2f}mL (-{evaporation_volume:.2f}mL)") - print(f"EVAPORATE: 生成了 {len(action_sequence)} 个动作") - print(f"EVAPORATE: 蒸发协议生成完成") - print(f"EVAPORATE: 总处理体积: {transfer_volume} mL") + # 3. 蒸发后等待 + debug_print(" 🔄 动作3: 添加蒸发后等待... ⏳") + action_sequence.append({ + "action_name": "wait", + "action_kwargs": {"time": 10} + }) + debug_print(" ✅ 蒸发后等待动作已添加 ⏳✨") + + # 🔧 新增:蒸发完成后的状态报告 + final_liquid_volume = 0.0 + if "data" in vessel and "liquid_volume" in vessel["data"]: + current_volume = vessel["data"]["liquid_volume"] + if isinstance(current_volume, list) and len(current_volume) > 0: + final_liquid_volume = current_volume[0] + elif isinstance(current_volume, (int, float)): + final_liquid_volume = current_volume + + # === 总结 === + debug_print("🎊" * 20) + debug_print(f"🎉 蒸发协议生成完成! ✨") + debug_print(f"📊 总动作数: {len(action_sequence)} 个 📝") + debug_print(f"🌪️ 旋转蒸发仪: {rotavap_device} 🔧") + debug_print(f"🥽 目标容器: {target_vessel} 🧪") + debug_print(f"⚙️ 蒸发参数: {pressure} bar 💨, {temp}°C 🌡️, {final_time}s ⏰, {stir_speed} RPM 🌪️") + debug_print(f"⏱️ 预计总时间: {(final_time + 20)/60:.1f} 分钟 ⌛") + debug_print(f"📊 体积变化:") + debug_print(f" - 蒸发前: {original_liquid_volume:.2f}mL") + debug_print(f" - 蒸发后: {final_liquid_volume:.2f}mL") + debug_print(f" - 蒸发量: {evaporation_volume:.2f}mL ({evaporation_volume/max(original_liquid_volume, 0.01)*100:.1f}%)") + debug_print("🎊" * 20) return action_sequence - - -# 便捷函数:常用蒸发方案 - 都使用250mL标准瓶体积 -def generate_quick_evaporate_protocol( - G: nx.DiGraph, - vessel: str, - temp: float = 40.0, - time: float = 900.0 # 15分钟 -) -> List[Dict[str, Any]]: - """快速蒸发:低温、短时间、整瓶处理""" - return generate_evaporate_protocol(G, vessel, 0.2, temp, time, 80.0) - - -def generate_gentle_evaporate_protocol( - G: nx.DiGraph, - vessel: str, - temp: float = 50.0, - time: float = 2700.0 # 45分钟 -) -> List[Dict[str, Any]]: - """温和蒸发:中等条件、较长时间、整瓶处理""" - return generate_evaporate_protocol(G, vessel, 0.1, temp, time, 60.0) - - -def generate_high_vacuum_evaporate_protocol( - G: nx.DiGraph, - vessel: str, - temp: float = 35.0, - time: float = 3600.0 # 1小时 -) -> List[Dict[str, Any]]: - """高真空蒸发:低温、高真空、长时间、整瓶处理""" - return generate_evaporate_protocol(G, vessel, 0.01, temp, time, 120.0) - - -def generate_standard_evaporate_protocol( - G: nx.DiGraph, - vessel: str -) -> List[Dict[str, Any]]: - """标准蒸发:常用参数、整瓶250mL处理""" - return generate_evaporate_protocol( - G=G, - vessel=vessel, - pressure=0.1, # 标准真空度 - temp=60.0, # 适中温度 - time=1800.0, # 30分钟 - stir_speed=100.0 # 适中旋转速度 - ) diff --git a/unilabos/compile/filter_protocol.py b/unilabos/compile/filter_protocol.py index 7e3ca6b..1767d85 100644 --- a/unilabos/compile/filter_protocol.py +++ b/unilabos/compile/filter_protocol.py @@ -1,304 +1,366 @@ -from typing import List, Dict, Any +from typing import List, Dict, Any, Optional import networkx as nx -from .pump_protocol import generate_pump_protocol +import logging +from .pump_protocol import generate_pump_protocol_with_rinsing +logger = logging.getLogger(__name__) -def get_vessel_liquid_volume(G: nx.DiGraph, vessel: str) -> float: - """获取容器中的液体体积""" - if vessel not in G.nodes(): - return 0.0 - - vessel_data = G.nodes[vessel].get('data', {}) - liquids = vessel_data.get('liquid', []) - - total_volume = 0.0 - for liquid in liquids: - if isinstance(liquid, dict) and 'liquid_volume' in liquid: - total_volume += liquid['liquid_volume'] - - return total_volume - +def debug_print(message): + """调试输出""" + print(f"🧪 [FILTER] {message}", flush=True) + logger.info(f"[FILTER] {message}") def find_filter_device(G: nx.DiGraph) -> str: """查找过滤器设备""" - filter_nodes = [node for node in G.nodes() - if (G.nodes[node].get('class') or '') == 'virtual_filter'] + debug_print("🔍 查找过滤器设备... 🌊") - if filter_nodes: - return filter_nodes[0] + # 查找过滤器设备 + for node in G.nodes(): + node_data = G.nodes[node] + node_class = node_data.get('class', '') or '' + + if 'filter' in node_class.lower() or 'filter' in node.lower(): + debug_print(f"🎉 找到过滤器设备: {node} ✨") + return node - raise ValueError("系统中未找到过滤器设备") + # 如果没找到,寻找可能的过滤器名称 + debug_print("🔎 在预定义名称中搜索过滤器... 📋") + possible_names = ["filter", "filter_1", "virtual_filter", "filtration_unit"] + for name in possible_names: + if name in G.nodes(): + debug_print(f"🎉 找到过滤器设备: {name} ✨") + return name + + debug_print("😭 未找到过滤器设备 💔") + raise ValueError("未找到过滤器设备") - -def find_filter_vessel(G: nx.DiGraph) -> str: - """查找过滤器专用容器""" - possible_names = [ - "filter_vessel", # 标准过滤器容器 - "filtration_vessel", # 备选名称 - "vessel_filter", # 备选名称 - "filter_unit", # 备选名称 - "filter" # 简单名称 - ] +def validate_vessel(G: nx.DiGraph, vessel: str, vessel_type: str = "容器") -> None: + """验证容器是否存在""" + debug_print(f"🔍 验证{vessel_type}: '{vessel}' 🧪") - for vessel_name in possible_names: - if vessel_name in G.nodes(): - return vessel_name + if not vessel: + debug_print(f"❌ {vessel_type}不能为空! 😱") + raise ValueError(f"{vessel_type}不能为空") - raise ValueError(f"未找到过滤器容器。尝试了以下名称: {possible_names}") - - -def find_filtrate_vessel(G: nx.DiGraph, filtrate_vessel: str = "") -> str: - """查找滤液收集容器""" - if filtrate_vessel and filtrate_vessel in G.nodes(): - return filtrate_vessel + if vessel not in G.nodes(): + debug_print(f"❌ {vessel_type} '{vessel}' 不存在于系统中! 😞") + raise ValueError(f"{vessel_type} '{vessel}' 不存在于系统中") - # 自动查找滤液容器 - possible_names = [ - "filtrate_vessel", - "collection_bottle_1", - "collection_bottle_2", - "waste_workup" - ] - - for vessel_name in possible_names: - if vessel_name in G.nodes(): - return vessel_name - - raise ValueError(f"未找到滤液收集容器。尝试了以下名称: {possible_names}") - - -def find_connected_heatchill(G: nx.DiGraph, vessel: str) -> str: - """查找与指定容器相连的加热搅拌器""" - # 查找所有加热搅拌器节点 - heatchill_nodes = [node for node in G.nodes() - if G.nodes[node].get('class') == 'virtual_heatchill'] - - # 检查哪个加热器与目标容器相连 - for heatchill in heatchill_nodes: - if G.has_edge(heatchill, vessel) or G.has_edge(vessel, heatchill): - return heatchill - - # 如果没有直接连接,返回第一个可用的加热器 - if heatchill_nodes: - return heatchill_nodes[0] - - raise ValueError(f"未找到与容器 {vessel} 相连的加热搅拌器") - + debug_print(f"✅ {vessel_type} '{vessel}' 验证通过 🎯") def generate_filter_protocol( G: nx.DiGraph, - vessel: str, + vessel: dict, # 🔧 修改:从字符串改为字典类型 filtrate_vessel: str = "", - stir: bool = False, - stir_speed: float = 300.0, - temp: float = 25.0, - continue_heatchill: bool = False, - volume: float = 0.0 + **kwargs ) -> List[Dict[str, Any]]: """ - 生成过滤操作的协议序列,复用 pump_protocol 的成熟算法 - - 过滤流程: - 1. 液体转移:将待过滤溶液从源容器转移到过滤器 - 2. 启动加热搅拌:设置温度和搅拌 - 3. 执行过滤:通过过滤器分离固液 - 4. (可选) 继续或停止加热搅拌 + 生成过滤操作的协议序列 - 支持体积运算 Args: - G: 有向图,节点为设备和容器,边为流体管道 - vessel: 包含待过滤溶液的容器名称 - filtrate_vessel: 滤液收集容器(可选,自动查找) - stir: 是否在过滤过程中搅拌 - stir_speed: 搅拌速度 (RPM) - temp: 过滤温度 (°C) - continue_heatchill: 过滤后是否继续加热搅拌 - volume: 预期过滤体积 (mL),0表示全部过滤 + G: 设备图 + vessel: 过滤容器字典(必需)- 包含需要过滤的混合物 + filtrate_vessel: 滤液容器名称(可选)- 如果提供则收集滤液 + **kwargs: 其他参数(兼容性) Returns: List[Dict[str, Any]]: 过滤操作的动作序列 """ + + # 🔧 核心修改:从字典中提取容器ID + vessel_id = vessel["id"] + + debug_print("🌊" * 20) + debug_print("🚀 开始生成过滤协议(支持体积运算)✨") + debug_print(f"📝 输入参数:") + debug_print(f" 🥽 vessel: {vessel} (ID: {vessel_id})") + debug_print(f" 🧪 filtrate_vessel: {filtrate_vessel}") + debug_print(f" ⚙️ 其他参数: {kwargs}") + debug_print("🌊" * 20) + action_sequence = [] - print(f"FILTER: 开始生成过滤协议") - print(f" - 源容器: {vessel}") - print(f" - 滤液容器: {filtrate_vessel}") - print(f" - 搅拌: {stir} ({stir_speed} RPM)" if stir else " - 搅拌: 否") - print(f" - 过滤温度: {temp}°C") - print(f" - 预期过滤体积: {volume} mL" if volume > 0 else " - 预期过滤体积: 全部") - print(f" - 继续加热搅拌: {continue_heatchill}") + # 🔧 新增:记录过滤前的容器状态 + debug_print("🔍 记录过滤前容器状态...") + original_liquid_volume = 0.0 + if "data" in vessel and "liquid_volume" in vessel["data"]: + current_volume = vessel["data"]["liquid_volume"] + if isinstance(current_volume, list) and len(current_volume) > 0: + original_liquid_volume = current_volume[0] + elif isinstance(current_volume, (int, float)): + original_liquid_volume = current_volume + debug_print(f"📊 过滤前液体体积: {original_liquid_volume:.2f}mL") - # 验证源容器存在 - if vessel not in G.nodes(): - raise ValueError(f"源容器 '{vessel}' 不存在于系统中") + # === 参数验证 === + debug_print("📍 步骤1: 参数验证... 🔧") - # 获取源容器中的液体体积 - source_volume = get_vessel_liquid_volume(G, vessel) - print(f"FILTER: 源容器 {vessel} 中有 {source_volume} mL 液体") + # 验证必需参数 + debug_print(" 🔍 验证必需参数...") + validate_vessel(G, vessel_id, "过滤容器") # 🔧 使用 vessel_id + debug_print(" ✅ 必需参数验证完成 🎯") - # 查找过滤器设备 - try: - filter_id = find_filter_device(G) - print(f"FILTER: 找到过滤器: {filter_id}") - except ValueError as e: - raise ValueError(f"无法找到过滤器: {str(e)}") - - # 查找过滤器容器 - try: - filter_vessel_id = find_filter_vessel(G) - print(f"FILTER: 找到过滤器容器: {filter_vessel_id}") - except ValueError as e: - raise ValueError(f"无法找到过滤器容器: {str(e)}") - - # 查找滤液收集容器 - try: - actual_filtrate_vessel = find_filtrate_vessel(G, filtrate_vessel) - print(f"FILTER: 找到滤液收集容器: {actual_filtrate_vessel}") - except ValueError as e: - raise ValueError(f"无法找到滤液收集容器: {str(e)}") - - # 查找加热搅拌器(如果需要温度控制或搅拌) - heatchill_id = None - if temp != 25.0 or stir or continue_heatchill: - try: - heatchill_id = find_connected_heatchill(G, filter_vessel_id) - print(f"FILTER: 找到加热搅拌器: {heatchill_id}") - except ValueError as e: - print(f"FILTER: 警告 - {str(e)}") - - # === 简化的体积计算策略 === - if volume > 0: - transfer_volume = min(volume, source_volume if source_volume > 0 else volume) - print(f"FILTER: 指定过滤体积 {transfer_volume} mL") - elif source_volume > 0: - transfer_volume = source_volume * 0.9 # 90% - print(f"FILTER: 检测到液体体积,将过滤 {transfer_volume} mL") + # 验证可选参数 + debug_print(" 🔍 验证可选参数...") + if filtrate_vessel: + validate_vessel(G, filtrate_vessel, "滤液容器") + debug_print(" 🌊 模式: 过滤并收集滤液 💧") else: - transfer_volume = 50.0 # 默认过滤量 - print(f"FILTER: 未检测到液体体积,默认过滤 {transfer_volume} mL") + debug_print(" 🧱 模式: 过滤并收集固体 🔬") + debug_print(" ✅ 可选参数验证完成 🎯") - # === 第一步:启动加热搅拌器(在转移前预热) === - if heatchill_id and (temp != 25.0 or stir): - print(f"FILTER: 启动加热搅拌器,温度: {temp}°C,搅拌: {stir}") - - heatchill_action = { - "device_id": heatchill_id, - "action_name": "heat_chill_start", - "action_kwargs": { - "vessel": filter_vessel_id, - "temp": temp, - "purpose": f"过滤过程温度控制和搅拌" - } - } - action_sequence.append(heatchill_action) - - # 等待温度稳定 - if temp != 25.0: - wait_time = min(30, abs(temp - 25.0) * 1.0) # 根据温差估算预热时间 - action_sequence.append({ - "action_name": "wait", - "action_kwargs": {"time": wait_time} - }) + # === 查找设备 === + debug_print("📍 步骤2: 查找设备... 🔍") - # === 第二步:将待过滤溶液转移到过滤器 === - print(f"FILTER: 将 {transfer_volume} mL 溶液从 {vessel} 转移到 {filter_vessel_id}") try: - # 使用成熟的 pump_protocol 算法进行液体转移 - transfer_to_filter_actions = generate_pump_protocol( - G=G, - from_vessel=vessel, - to_vessel=filter_vessel_id, - volume=transfer_volume, - flowrate=1.0, # 过滤转移用较慢速度,避免扰动 - transfer_flowrate=1.5 - ) - action_sequence.extend(transfer_to_filter_actions) + debug_print(" 🔎 搜索过滤器设备...") + filter_device = find_filter_device(G) + debug_print(f" 🎉 使用过滤器设备: {filter_device} 🌊✨") + except Exception as e: - raise ValueError(f"无法将溶液转移到过滤器: {str(e)}") + debug_print(f" ❌ 设备查找失败: {str(e)} 😭") + raise ValueError(f"设备查找失败: {str(e)}") - # 转移后等待 - action_sequence.append({ - "action_name": "wait", - "action_kwargs": {"time": 5} - }) + # 🔧 新增:过滤效率和体积分配估算 + debug_print("📍 步骤2.5: 过滤体积分配估算... 📊") - # === 第三步:执行过滤操作(完全按照 Filter.action 参数) === - print(f"FILTER: 执行过滤操作") + # 估算过滤分离比例(基于经验数据) + solid_ratio = 0.1 # 假设10%是固体(保留在过滤器上) + liquid_ratio = 0.9 # 假设90%是液体(通过过滤器) + volume_loss_ratio = 0.05 # 假设5%体积损失(残留在过滤器等) + + # 从kwargs中获取过滤参数进行优化 + if "solid_content" in kwargs: + try: + solid_ratio = float(kwargs["solid_content"]) + liquid_ratio = 1.0 - solid_ratio + debug_print(f"📋 使用指定的固体含量: {solid_ratio*100:.1f}%") + except: + debug_print("⚠️ 固体含量参数无效,使用默认值") + + if original_liquid_volume > 0: + expected_filtrate_volume = original_liquid_volume * liquid_ratio * (1.0 - volume_loss_ratio) + expected_solid_volume = original_liquid_volume * solid_ratio + volume_loss = original_liquid_volume * volume_loss_ratio + + debug_print(f"📊 过滤体积分配估算:") + debug_print(f" - 原始体积: {original_liquid_volume:.2f}mL") + debug_print(f" - 预计滤液体积: {expected_filtrate_volume:.2f}mL ({liquid_ratio*100:.1f}%)") + debug_print(f" - 预计固体体积: {expected_solid_volume:.2f}mL ({solid_ratio*100:.1f}%)") + debug_print(f" - 预计损失体积: {volume_loss:.2f}mL ({volume_loss_ratio*100:.1f}%)") + + # === 转移到过滤器(如果需要)=== + debug_print("📍 步骤3: 转移到过滤器... 🚚") + + if vessel_id != filter_device: # 🔧 使用 vessel_id + debug_print(f" 🚛 需要转移: {vessel_id} → {filter_device} 📦") + + try: + debug_print(" 🔄 开始执行转移操作...") + # 使用pump protocol转移液体到过滤器 + transfer_actions = generate_pump_protocol_with_rinsing( + G=G, + from_vessel=vessel_id, # 🔧 使用 vessel_id + to_vessel=filter_device, + volume=0.0, # 转移所有液体 + amount="", + time=0.0, + viscous=False, + rinsing_solvent="", + rinsing_volume=0.0, + rinsing_repeats=0, + solid=False, + flowrate=2.0, + transfer_flowrate=2.0 + ) + + if transfer_actions: + action_sequence.extend(transfer_actions) + debug_print(f" ✅ 添加了 {len(transfer_actions)} 个转移动作 🚚✨") + + # 🔧 新增:转移后更新容器体积 + debug_print(" 🔧 更新转移后的容器体积...") + + # 原容器体积变为0(所有液体已转移) + if "data" in vessel and "liquid_volume" in vessel["data"]: + current_volume = vessel["data"]["liquid_volume"] + if isinstance(current_volume, list): + vessel["data"]["liquid_volume"] = [0.0] if len(current_volume) > 0 else [0.0] + else: + vessel["data"]["liquid_volume"] = 0.0 + + # 同时更新图中的容器数据 + if vessel_id in G.nodes(): + if 'data' not in G.nodes[vessel_id]: + G.nodes[vessel_id]['data'] = {} + G.nodes[vessel_id]['data']['liquid_volume'] = 0.0 + + debug_print(f" 📊 转移完成,{vessel_id} 体积更新为 0.0mL") + + else: + debug_print(" ⚠️ 转移协议返回空序列 🤔") + + except Exception as e: + debug_print(f" ❌ 转移失败: {str(e)} 😞") + debug_print(" 🔄 继续执行,可能是直接连接的过滤器 🤞") + else: + debug_print(" ✅ 过滤容器就是过滤器,无需转移 🎯") + + # === 执行过滤操作 === + debug_print("📍 步骤4: 执行过滤操作... 🌊") + + # 构建过滤动作参数 + debug_print(" ⚙️ 构建过滤参数...") + filter_kwargs = { + "vessel": filter_device, # 过滤器设备 + "filtrate_vessel": filtrate_vessel, # 滤液容器(可能为空) + "stir": kwargs.get("stir", False), + "stir_speed": kwargs.get("stir_speed", 0.0), + "temp": kwargs.get("temp", 25.0), + "continue_heatchill": kwargs.get("continue_heatchill", False), + "volume": kwargs.get("volume", 0.0) # 0表示过滤所有 + } + + debug_print(f" 📋 过滤参数: {filter_kwargs}") + debug_print(" 🌊 开始过滤操作...") + + # 过滤动作 filter_action = { - "device_id": filter_id, + "device_id": filter_device, "action_name": "filter", - "action_kwargs": { - "vessel": filter_vessel_id, - "filtrate_vessel": actual_filtrate_vessel, - "stir": stir, - "stir_speed": stir_speed, - "temp": temp, - "continue_heatchill": continue_heatchill, - "volume": transfer_volume - } + "action_kwargs": filter_kwargs } action_sequence.append(filter_action) + debug_print(" ✅ 过滤动作已添加 🌊✨") # 过滤后等待 + debug_print(" ⏳ 添加过滤后等待...") action_sequence.append({ "action_name": "wait", - "action_kwargs": {"time": 10} + "action_kwargs": {"time": 10.0} }) + debug_print(" ✅ 过滤后等待动作已添加 ⏰✨") - # === 第四步:如果不继续加热搅拌,停止加热器 === - if heatchill_id and not continue_heatchill and (temp != 25.0 or stir): - print(f"FILTER: 停止加热搅拌器") + # === 收集滤液(如果需要)=== + debug_print("📍 步骤5: 收集滤液... 💧") + + if filtrate_vessel: + debug_print(f" 🧪 收集滤液: {filter_device} → {filtrate_vessel} 💧") - stop_action = { - "device_id": heatchill_id, - "action_name": "heat_chill_stop", - "action_kwargs": { - "vessel": filter_vessel_id - } - } - action_sequence.append(stop_action) + try: + debug_print(" 🔄 开始执行收集操作...") + # 使用pump protocol收集滤液 + collect_actions = generate_pump_protocol_with_rinsing( + G=G, + from_vessel=filter_device, + to_vessel=filtrate_vessel, + volume=0.0, # 收集所有滤液 + amount="", + time=0.0, + viscous=False, + rinsing_solvent="", + rinsing_volume=0.0, + rinsing_repeats=0, + solid=False, + flowrate=2.0, + transfer_flowrate=2.0 + ) + + if collect_actions: + action_sequence.extend(collect_actions) + debug_print(f" ✅ 添加了 {len(collect_actions)} 个收集动作 🧪✨") + + # 🔧 新增:收集滤液后的体积更新 + debug_print(" 🔧 更新滤液容器体积...") + + # 更新filtrate_vessel在图中的体积(如果它是节点) + if filtrate_vessel in G.nodes(): + if 'data' not in G.nodes[filtrate_vessel]: + G.nodes[filtrate_vessel]['data'] = {} + + current_filtrate_volume = G.nodes[filtrate_vessel]['data'].get('liquid_volume', 0.0) + if isinstance(current_filtrate_volume, list): + if len(current_filtrate_volume) > 0: + G.nodes[filtrate_vessel]['data']['liquid_volume'][0] += expected_filtrate_volume + else: + G.nodes[filtrate_vessel]['data']['liquid_volume'] = [expected_filtrate_volume] + else: + G.nodes[filtrate_vessel]['data']['liquid_volume'] = current_filtrate_volume + expected_filtrate_volume + + debug_print(f" 📊 滤液容器 {filtrate_vessel} 体积增加 {expected_filtrate_volume:.2f}mL") + + else: + debug_print(" ⚠️ 收集协议返回空序列 🤔") + + except Exception as e: + debug_print(f" ❌ 收集滤液失败: {str(e)} 😞") + debug_print(" 🔄 继续执行,可能滤液直接流入指定容器 🤞") + else: + debug_print(" 🧱 未指定滤液容器,固体保留在过滤器中 🔬") - print(f"FILTER: 生成了 {len(action_sequence)} 个动作") - print(f"FILTER: 过滤协议生成完成") + # 🔧 新增:过滤完成后的容器状态更新 + debug_print("📍 步骤5.5: 过滤完成后状态更新... 📊") + + if vessel_id == filter_device: + # 如果过滤容器就是过滤器,需要更新其体积状态 + if original_liquid_volume > 0: + if filtrate_vessel: + # 收集滤液模式:过滤器中主要保留固体 + remaining_volume = expected_solid_volume + debug_print(f" 🧱 过滤器中保留固体: {remaining_volume:.2f}mL") + else: + # 保留固体模式:过滤器中保留所有物质 + remaining_volume = original_liquid_volume * (1.0 - volume_loss_ratio) + debug_print(f" 🔬 过滤器中保留所有物质: {remaining_volume:.2f}mL") + + # 更新vessel字典中的体积 + if "data" in vessel and "liquid_volume" in vessel["data"]: + current_volume = vessel["data"]["liquid_volume"] + if isinstance(current_volume, list): + vessel["data"]["liquid_volume"] = [remaining_volume] if len(current_volume) > 0 else [remaining_volume] + else: + vessel["data"]["liquid_volume"] = remaining_volume + + # 同时更新图中的容器数据 + if vessel_id in G.nodes(): + if 'data' not in G.nodes[vessel_id]: + G.nodes[vessel_id]['data'] = {} + G.nodes[vessel_id]['data']['liquid_volume'] = remaining_volume + + debug_print(f" 📊 过滤器 {vessel_id} 体积更新为: {remaining_volume:.2f}mL") + + # === 最终等待 === + debug_print("📍 步骤6: 最终等待... ⏰") + action_sequence.append({ + "action_name": "wait", + "action_kwargs": {"time": 5.0} + }) + debug_print(" ✅ 最终等待动作已添加 ⏰✨") + + # 🔧 新增:过滤完成后的状态报告 + final_vessel_volume = 0.0 + if "data" in vessel and "liquid_volume" in vessel["data"]: + current_volume = vessel["data"]["liquid_volume"] + if isinstance(current_volume, list) and len(current_volume) > 0: + final_vessel_volume = current_volume[0] + elif isinstance(current_volume, (int, float)): + final_vessel_volume = current_volume + + # === 总结 === + debug_print("🎊" * 20) + debug_print(f"🎉 过滤协议生成完成! ✨") + debug_print(f"📊 总动作数: {len(action_sequence)} 个 📝") + debug_print(f"🥽 过滤容器: {vessel_id} 🧪") + debug_print(f"🌊 过滤器设备: {filter_device} 🔧") + debug_print(f"💧 滤液容器: {filtrate_vessel or '无(保留固体)'} 🧱") + debug_print(f"⏱️ 预计总时间: {(len(action_sequence) * 5):.0f} 秒 ⌛") + if original_liquid_volume > 0: + debug_print(f"📊 体积变化统计:") + debug_print(f" - 过滤前体积: {original_liquid_volume:.2f}mL") + debug_print(f" - 过滤后容器体积: {final_vessel_volume:.2f}mL") + if filtrate_vessel: + debug_print(f" - 预计滤液体积: {expected_filtrate_volume:.2f}mL") + debug_print(f" - 预计损失体积: {volume_loss:.2f}mL") + debug_print("🎊" * 20) return action_sequence - -# 便捷函数:常用过滤方案 -def generate_gravity_filter_protocol( - G: nx.DiGraph, - vessel: str, - filtrate_vessel: str = "" -) -> List[Dict[str, Any]]: - """重力过滤:室温,无搅拌""" - return generate_filter_protocol(G, vessel, filtrate_vessel, False, 0.0, 25.0, False, 0.0) - - -def generate_hot_filter_protocol( - G: nx.DiGraph, - vessel: str, - filtrate_vessel: str = "", - temp: float = 60.0 -) -> List[Dict[str, Any]]: - """热过滤:高温过滤,防止结晶析出""" - return generate_filter_protocol(G, vessel, filtrate_vessel, False, 0.0, temp, False, 0.0) - - -def generate_stirred_filter_protocol( - G: nx.DiGraph, - vessel: str, - filtrate_vessel: str = "", - stir_speed: float = 200.0 -) -> List[Dict[str, Any]]: - """搅拌过滤:低速搅拌,防止滤饼堵塞""" - return generate_filter_protocol(G, vessel, filtrate_vessel, True, stir_speed, 25.0, False, 0.0) - - -def generate_hot_stirred_filter_protocol( - G: nx.DiGraph, - vessel: str, - filtrate_vessel: str = "", - temp: float = 60.0, - stir_speed: float = 300.0 -) -> List[Dict[str, Any]]: - """热搅拌过滤:高温搅拌过滤""" - return generate_filter_protocol(G, vessel, filtrate_vessel, True, stir_speed, temp, False, 0.0) \ No newline at end of file diff --git a/unilabos/compile/heatchill_protocol.py b/unilabos/compile/heatchill_protocol.py index 5ce0992..ed96d53 100644 --- a/unilabos/compile/heatchill_protocol.py +++ b/unilabos/compile/heatchill_protocol.py @@ -1,373 +1,396 @@ -from typing import List, Dict, Any, Optional +from typing import List, Dict, Any, Union import networkx as nx +import logging +import re +logger = logging.getLogger(__name__) + +def debug_print(message): + """调试输出""" + print(f"🌡️ [HEATCHILL] {message}", flush=True) + logger.info(f"[HEATCHILL] {message}") + +def parse_time_input(time_input: Union[str, float, int]) -> float: + """ + 解析时间输入(统一函数) + + Args: + time_input: 时间输入(如 "30 min", "1 h", "300", "?", 60.0) + + Returns: + float: 时间(秒) + """ + if not time_input: + return 300.0 + + # 🔢 处理数值输入 + if isinstance(time_input, (int, float)): + result = float(time_input) + debug_print(f"⏰ 数值时间: {time_input} → {result}s") + return result + + # 📝 处理字符串输入 + time_str = str(time_input).lower().strip() + debug_print(f"🔍 解析时间: '{time_str}'") + + # ❓ 特殊值处理 + special_times = { + '?': 300.0, 'unknown': 300.0, 'tbd': 300.0, + 'overnight': 43200.0, 'several hours': 10800.0, + 'few hours': 7200.0, 'long time': 3600.0, 'short time': 300.0 + } + + if time_str in special_times: + result = special_times[time_str] + debug_print(f"🎯 特殊时间: '{time_str}' → {result}s ({result/60:.1f}分钟)") + return result + + # 🔢 纯数字处理 + try: + result = float(time_str) + debug_print(f"⏰ 纯数字: {time_str} → {result}s") + return result + except ValueError: + pass + + # 📐 正则表达式解析 + pattern = r'(\d+\.?\d*)\s*([a-z]*)' + match = re.match(pattern, time_str) + + if not match: + debug_print(f"⚠️ 无法解析时间: '{time_str}',使用默认值: 300s") + return 300.0 + + value = float(match.group(1)) + unit = match.group(2) or 's' + + # 📏 单位转换 + unit_multipliers = { + 's': 1.0, 'sec': 1.0, 'second': 1.0, 'seconds': 1.0, + 'm': 60.0, 'min': 60.0, 'mins': 60.0, 'minute': 60.0, 'minutes': 60.0, + 'h': 3600.0, 'hr': 3600.0, 'hrs': 3600.0, 'hour': 3600.0, 'hours': 3600.0, + 'd': 86400.0, 'day': 86400.0, 'days': 86400.0 + } + + multiplier = unit_multipliers.get(unit, 1.0) + result = value * multiplier + + debug_print(f"✅ 时间解析: '{time_str}' → {value} {unit} → {result}s ({result/60:.1f}分钟)") + return result + +def parse_temp_input(temp_input: Union[str, float], default_temp: float = 25.0) -> float: + """ + 解析温度输入(统一函数) + + Args: + temp_input: 温度输入 + default_temp: 默认温度 + + Returns: + float: 温度(°C) + """ + if not temp_input: + return default_temp + + # 🔢 数值输入 + if isinstance(temp_input, (int, float)): + result = float(temp_input) + debug_print(f"🌡️ 数值温度: {temp_input} → {result}°C") + return result + + # 📝 字符串输入 + temp_str = str(temp_input).lower().strip() + debug_print(f"🔍 解析温度: '{temp_str}'") + + # 🎯 特殊温度 + special_temps = { + "room temperature": 25.0, "reflux": 78.0, "ice bath": 0.0, + "boiling": 100.0, "hot": 60.0, "warm": 40.0, "cold": 10.0 + } + + if temp_str in special_temps: + result = special_temps[temp_str] + debug_print(f"🎯 特殊温度: '{temp_str}' → {result}°C") + return result + + # 📐 正则解析(如 "256 °C") + temp_pattern = r'(\d+(?:\.\d+)?)\s*°?[cf]?' + match = re.search(temp_pattern, temp_str) + + if match: + result = float(match.group(1)) + debug_print(f"✅ 温度解析: '{temp_str}' → {result}°C") + return result + + debug_print(f"⚠️ 无法解析温度: '{temp_str}',使用默认值: {default_temp}°C") + return default_temp def find_connected_heatchill(G: nx.DiGraph, vessel: str) -> str: - """ - 查找与指定容器相连的加热/冷却设备 - """ - # 查找所有加热/冷却设备节点 - heatchill_nodes = [node for node in G.nodes() - if (G.nodes[node].get('class') or '') == 'virtual_heatchill'] + """查找与指定容器相连的加热/冷却设备""" + debug_print(f"🔍 查找加热设备,目标容器: {vessel}") - # 检查哪个加热/冷却设备与目标容器相连(机械连接) - for heatchill in heatchill_nodes: - if G.has_edge(heatchill, vessel) or G.has_edge(vessel, heatchill): - return heatchill + # 🔧 查找所有加热设备 + heatchill_nodes = [] + for node in G.nodes(): + node_data = G.nodes[node] + node_class = node_data.get('class', '') or '' + + if 'heatchill' in node_class.lower() or 'virtual_heatchill' in node_class: + heatchill_nodes.append(node) + debug_print(f"🎉 找到加热设备: {node}") - # 如果没有直接连接,返回第一个可用的加热/冷却设备 + # 🔗 检查连接 + if vessel and heatchill_nodes: + for heatchill in heatchill_nodes: + if G.has_edge(heatchill, vessel) or G.has_edge(vessel, heatchill): + debug_print(f"✅ 加热设备 '{heatchill}' 与容器 '{vessel}' 相连") + return heatchill + + # 🎯 使用第一个可用设备 if heatchill_nodes: - return heatchill_nodes[0] + selected = heatchill_nodes[0] + debug_print(f"🔧 使用第一个加热设备: {selected}") + return selected - raise ValueError("系统中未找到可用的加热/冷却设备") + # 🆘 默认设备 + debug_print("⚠️ 未找到加热设备,使用默认设备") + return "heatchill_1" +def validate_and_fix_params(temp: float, time: float, stir_speed: float) -> tuple: + """验证和修正参数""" + # 🌡️ 温度范围验证 + if temp < -50.0 or temp > 300.0: + debug_print(f"⚠️ 温度 {temp}°C 超出范围,修正为 25°C") + temp = 25.0 + else: + debug_print(f"✅ 温度 {temp}°C 在正常范围内") + + # ⏰ 时间验证 + if time < 0: + debug_print(f"⚠️ 时间 {time}s 无效,修正为 300s") + time = 300.0 + else: + debug_print(f"✅ 时间 {time}s ({time/60:.1f}分钟) 有效") + + # 🌪️ 搅拌速度验证 + if stir_speed < 0 or stir_speed > 1500.0: + debug_print(f"⚠️ 搅拌速度 {stir_speed} RPM 超出范围,修正为 300 RPM") + stir_speed = 300.0 + else: + debug_print(f"✅ 搅拌速度 {stir_speed} RPM 在正常范围内") + + return temp, time, stir_speed def generate_heat_chill_protocol( G: nx.DiGraph, - vessel: str, - temp: float, - time: float, + vessel: dict, # 🔧 修改:从字符串改为字典类型 + temp: float = 25.0, + time: Union[str, float] = "300", + temp_spec: str = "", + time_spec: str = "", + pressure: str = "", + reflux_solvent: str = "", stir: bool = False, stir_speed: float = 300.0, - purpose: str = "加热/冷却操作" + purpose: str = "", + **kwargs ) -> List[Dict[str, Any]]: """ - 生成加热/冷却操作的协议序列 - 带时间限制的完整操作 + 生成加热/冷却操作的协议序列 - 支持vessel字典 + + Args: + G: 设备图 + vessel: 容器字典(从XDL传入) + temp: 目标温度 (°C) + time: 加热时间(支持字符串如 "30 min") + temp_spec: 温度规格说明(优先级高于temp) + time_spec: 时间规格说明(优先级高于time) + pressure: 压力设置 + reflux_solvent: 回流溶剂 + stir: 是否搅拌 + stir_speed: 搅拌速度 (RPM) + purpose: 操作目的说明 + **kwargs: 其他参数(兼容性) + + Returns: + List[Dict[str, Any]]: 加热/冷却操作的动作序列 """ - action_sequence = [] - print(f"HEATCHILL: 开始生成加热/冷却协议") - print(f" - 容器: {vessel}") - print(f" - 目标温度: {temp}°C") - print(f" - 持续时间: {time}秒") - print(f" - 使用内置搅拌: {stir}, 速度: {stir_speed} RPM") - print(f" - 目的: {purpose}") + # 🔧 核心修改:从字典中提取容器ID + vessel_id = vessel["id"] - # 1. 验证容器存在 - if vessel not in G.nodes(): - raise ValueError(f"容器 '{vessel}' 不存在于系统中") + debug_print("🌡️" * 20) + debug_print("🚀 开始生成加热冷却协议(支持vessel字典)✨") + debug_print(f"📝 输入参数:") + debug_print(f" 🥽 vessel: {vessel} (ID: {vessel_id})") + debug_print(f" 🌡️ temp: {temp}°C") + debug_print(f" ⏰ time: {time}") + debug_print(f" 🎯 temp_spec: {temp_spec}") + debug_print(f" ⏱️ time_spec: {time_spec}") + debug_print(f" 🌪️ stir: {stir} ({stir_speed} RPM)") + debug_print(f" 🎭 purpose: '{purpose}'") + debug_print("🌡️" * 20) - # 2. 查找加热/冷却设备 + # 📋 参数验证 + debug_print("📍 步骤1: 参数验证... 🔧") + if not vessel_id: # 🔧 使用 vessel_id + debug_print("❌ vessel 参数不能为空! 😱") + raise ValueError("vessel 参数不能为空") + + if vessel_id not in G.nodes(): # 🔧 使用 vessel_id + debug_print(f"❌ 容器 '{vessel_id}' 不存在于系统中! 😞") + raise ValueError(f"容器 '{vessel_id}' 不存在于系统中") + + debug_print("✅ 基础参数验证通过 🎯") + + # 🔄 参数解析 + debug_print("📍 步骤2: 参数解析... ⚡") + + #温度解析:优先使用 temp_spec + final_temp = parse_temp_input(temp_spec, temp) if temp_spec else temp + + # 时间解析:优先使用 time_spec + final_time = parse_time_input(time_spec) if time_spec else parse_time_input(time) + + # 参数修正 + final_temp, final_time, stir_speed = validate_and_fix_params(final_temp, final_time, stir_speed) + + debug_print(f"🎯 最终参数: temp={final_temp}°C, time={final_time}s, stir_speed={stir_speed} RPM") + + # 🔍 查找设备 + debug_print("📍 步骤3: 查找加热设备... 🔍") try: - heatchill_id = find_connected_heatchill(G, vessel) - print(f"HEATCHILL: 找到加热/冷却设备: {heatchill_id}") - except ValueError as e: - raise ValueError(f"无法找到加热/冷却设备: {str(e)}") + heatchill_id = find_connected_heatchill(G, vessel_id) # 🔧 使用 vessel_id + debug_print(f"🎉 使用加热设备: {heatchill_id} ✨") + except Exception as e: + debug_print(f"❌ 设备查找失败: {str(e)} 😭") + raise ValueError(f"无法找到加热设备: {str(e)}") - # 3. 执行加热/冷却操作 + # 🚀 生成动作 + debug_print("📍 步骤4: 生成加热动作... 🔥") + + # 🕐 模拟运行时间优化 + debug_print(" ⏱️ 检查模拟运行时间限制...") + original_time = final_time + simulation_time_limit = 100.0 # 模拟运行时间限制:100秒 + + if final_time > simulation_time_limit: + final_time = simulation_time_limit + debug_print(f" 🎮 模拟运行优化: {original_time}s → {final_time}s (限制为{simulation_time_limit}s) ⚡") + debug_print(f" 📊 时间缩短: {original_time/60:.1f}分钟 → {final_time/60:.1f}分钟 🚀") + else: + debug_print(f" ✅ 时间在限制内: {final_time}s ({final_time/60:.1f}分钟) 保持不变 🎯") + + action_sequence = [] heatchill_action = { "device_id": heatchill_id, "action_name": "heat_chill", "action_kwargs": { - "vessel": vessel, - "temp": temp, - "time": time, - "stir": stir, - "stir_speed": stir_speed, - "status": "start" + "vessel": vessel_id, # 🔧 使用 vessel_id + "temp": float(final_temp), + "time": float(final_time), + "stir": bool(stir), + "stir_speed": float(stir_speed), + "purpose": str(purpose or f"加热到 {final_temp}°C") + (f" (模拟时间: {final_time}s)" if original_time != final_time else "") } } - action_sequence.append(heatchill_action) + debug_print("✅ 加热动作已添加 🔥✨") + + # 显示时间调整信息 + if original_time != final_time: + debug_print(f" 🎭 模拟优化说明: 原计划 {original_time/60:.1f}分钟,实际模拟 {final_time/60:.1f}分钟 ⚡") + + # 🎊 总结 + debug_print("🎊" * 20) + debug_print(f"🎉 加热冷却协议生成完成! ✨") + debug_print(f"📊 总动作数: {len(action_sequence)} 个") + debug_print(f"🥽 加热容器: {vessel_id}") + debug_print(f"🌡️ 目标温度: {final_temp}°C") + debug_print(f"⏰ 加热时间: {final_time}s ({final_time/60:.1f}分钟)") + debug_print("🎊" * 20) - print(f"HEATCHILL: 生成了 {len(action_sequence)} 个动作") return action_sequence - -def generate_heat_chill_start_protocol( - G: nx.DiGraph, - vessel: str, - temp: float, - purpose: str = "开始加热/冷却" -) -> List[Dict[str, Any]]: - """ - 生成开始加热/冷却操作的协议序列 - """ - action_sequence = [] - - print(f"HEATCHILL_START: 开始生成加热/冷却启动协议") - print(f" - 容器: {vessel}") - print(f" - 目标温度: {temp}°C") - print(f" - 目的: {purpose}") - - # 1. 验证容器存在 - if vessel not in G.nodes(): - raise ValueError(f"容器 '{vessel}' 不存在于系统中") - - # 2. 查找加热/冷却设备 - try: - heatchill_id = find_connected_heatchill(G, vessel) - print(f"HEATCHILL_START: 找到加热/冷却设备: {heatchill_id}") - except ValueError as e: - raise ValueError(f"无法找到加热/冷却设备: {str(e)}") - - # 3. 执行开始加热/冷却操作 - heatchill_start_action = { - "device_id": heatchill_id, - "action_name": "heat_chill_start", - "action_kwargs": { - "vessel": vessel, - "temp": temp, - "purpose": purpose - } - } - - action_sequence.append(heatchill_start_action) - - print(f"HEATCHILL_START: 生成了 {len(action_sequence)} 个动作") - return action_sequence - - -def generate_heat_chill_stop_protocol( - G: nx.DiGraph, - vessel: str -) -> List[Dict[str, Any]]: - """ - 生成停止加热/冷却操作的协议序列 - """ - action_sequence = [] - - print(f"HEATCHILL_STOP: 开始生成加热/冷却停止协议") - print(f" - 容器: {vessel}") - - # 1. 验证容器存在 - if vessel not in G.nodes(): - raise ValueError(f"容器 '{vessel}' 不存在于系统中") - - # 2. 查找加热/冷却设备 - try: - heatchill_id = find_connected_heatchill(G, vessel) - print(f"HEATCHILL_STOP: 找到加热/冷却设备: {heatchill_id}") - except ValueError as e: - raise ValueError(f"无法找到加热/冷却设备: {str(e)}") - - # 3. 执行停止加热/冷却操作 - heatchill_stop_action = { - "device_id": heatchill_id, - "action_name": "heat_chill_stop", - "action_kwargs": { - "vessel": vessel - } - } - - action_sequence.append(heatchill_stop_action) - - print(f"HEATCHILL_STOP: 生成了 {len(action_sequence)} 个动作") - return action_sequence - - def generate_heat_chill_to_temp_protocol( G: nx.DiGraph, - vessel: str, - temp: float, - active: bool = True, - continue_heatchill: bool = False, - stir: bool = False, - stir_speed: Optional[float] = None, - purpose: Optional[str] = None + vessel: dict, # 🔧 修改参数类型 + temp: float = 25.0, + time: Union[str, float] = 100.0, + **kwargs ) -> List[Dict[str, Any]]: - """ - 生成加热/冷却到指定温度的协议序列 - 智能温控协议 + """生成加热到指定温度的协议(简化版)""" + vessel_id = vessel["id"] + debug_print(f"🌡️ 生成加热到温度协议: {vessel_id} → {temp}°C") + return generate_heat_chill_protocol(G, vessel, temp, time, **kwargs) + +def generate_heat_chill_start_protocol( + G: nx.DiGraph, + vessel: dict, # 🔧 修改参数类型 + temp: float = 25.0, + purpose: str = "", + **kwargs +) -> List[Dict[str, Any]]: + """生成开始加热操作的协议序列""" - **关键修复**: 学习 pump_protocol 的模式,直接使用设备基础动作,不依赖特定的 Action 文件 - """ - action_sequence = [] + # 🔧 核心修改:从字典中提取容器ID + vessel_id = vessel["id"] - # 设置默认值 - if stir_speed is None: - stir_speed = 300.0 - if purpose is None: - purpose = f"智能温控到 {temp}°C" + debug_print("🔥 开始生成启动加热协议 ✨") + debug_print(f"🥽 vessel: {vessel} (ID: {vessel_id}), 🌡️ temp: {temp}°C") - print(f"HEATCHILL_TO_TEMP: 开始生成智能温控协议") - print(f" - 容器: {vessel}") - print(f" - 目标温度: {temp}°C") - print(f" - 主动控温: {active}") - print(f" - 达到温度后继续: {continue_heatchill}") - print(f" - 搅拌: {stir}, 速度: {stir_speed} RPM") - print(f" - 目的: {purpose}") + # 基础验证 + if not vessel_id or vessel_id not in G.nodes(): # 🔧 使用 vessel_id + debug_print("❌ 容器验证失败!") + raise ValueError("vessel 参数无效") - # 1. 验证容器存在 - if vessel not in G.nodes(): - raise ValueError(f"容器 '{vessel}' 不存在于系统中") + # 查找设备 + heatchill_id = find_connected_heatchill(G, vessel_id) # 🔧 使用 vessel_id - # 2. 查找加热/冷却设备 - try: - heatchill_id = find_connected_heatchill(G, vessel) - print(f"HEATCHILL_TO_TEMP: 找到加热/冷却设备: {heatchill_id}") - except ValueError as e: - raise ValueError(f"无法找到加热/冷却设备: {str(e)}") + # 生成动作 + action_sequence = [{ + "device_id": heatchill_id, + "action_name": "heat_chill_start", + "action_kwargs": { + "vessel": vessel_id, # 🔧 使用 vessel_id + "temp": temp, + "purpose": purpose or f"开始加热到 {temp}°C" + } + }] - # 3. 根据参数选择合适的基础动作组合 (学习 pump_protocol 的模式) - if not active: - print(f"HEATCHILL_TO_TEMP: 非主动模式,仅等待") - action_sequence.append({ - "action_name": "wait", - "action_kwargs": { - "time": 10.0, - "purpose": f"等待容器 {vessel} 自然达到 {temp}°C" - } - }) - else: - if continue_heatchill: - # 持续模式:使用 heat_chill_start 基础动作 - print(f"HEATCHILL_TO_TEMP: 使用持续温控模式") - action_sequence.append({ - "device_id": heatchill_id, - "action_name": "heat_chill_start", # ← 直接使用设备基础动作 - "action_kwargs": { - "vessel": vessel, - "temp": temp, - "purpose": f"{purpose} (持续保温)" - } - }) - else: - # 一次性模式:使用 heat_chill 基础动作 - print(f"HEATCHILL_TO_TEMP: 使用一次性温控模式") - estimated_time = max(60.0, min(900.0, abs(temp - 25.0) * 30.0)) - print(f"HEATCHILL_TO_TEMP: 估算所需时间: {estimated_time}秒") - - action_sequence.append({ - "device_id": heatchill_id, - "action_name": "heat_chill", # ← 直接使用设备基础动作 - "action_kwargs": { - "vessel": vessel, - "temp": temp, - "time": estimated_time, - "stir": stir, - "stir_speed": stir_speed, - "status": "start" - } - }) - - print(f"HEATCHILL_TO_TEMP: 生成了 {len(action_sequence)} 个动作") + debug_print(f"✅ 启动加热协议生成完成 🎯") return action_sequence - -# 扩展版本的加热/冷却协议,集成智能温控功能 -def generate_smart_heat_chill_protocol( +def generate_heat_chill_stop_protocol( G: nx.DiGraph, - vessel: str, - temp: float, - time: float = 0.0, # 0表示自动估算 - active: bool = True, - continue_heatchill: bool = False, - stir: bool = False, - stir_speed: float = 300.0, - purpose: str = "智能加热/冷却" + vessel: dict, # 🔧 修改参数类型 + **kwargs ) -> List[Dict[str, Any]]: - """ - 这个函数集成了 generate_heat_chill_to_temp_protocol 的智能逻辑, - 但使用现有的 Action 类型 - """ - # 如果时间为0,自动估算 - if time == 0.0: - estimated_time = max(60.0, min(900.0, abs(temp - 25.0) * 30.0)) - time = estimated_time + """生成停止加热操作的协议序列""" - if continue_heatchill: - # 使用持续模式 - return generate_heat_chill_start_protocol(G, vessel, temp, purpose) - else: - # 使用定时模式 - return generate_heat_chill_protocol(G, vessel, temp, time, stir, stir_speed, purpose) + # 🔧 核心修改:从字典中提取容器ID + vessel_id = vessel["id"] + + debug_print("🛑 开始生成停止加热协议 ✨") + debug_print(f"🥽 vessel: {vessel} (ID: {vessel_id})") + + # 基础验证 + if not vessel_id or vessel_id not in G.nodes(): # 🔧 使用 vessel_id + debug_print("❌ 容器验证失败!") + raise ValueError("vessel 参数无效") + + # 查找设备 + heatchill_id = find_connected_heatchill(G, vessel_id) # 🔧 使用 vessel_id + + # 生成动作 + action_sequence = [{ + "device_id": heatchill_id, + "action_name": "heat_chill_stop", + "action_kwargs": { + "vessel": vessel_id # 🔧 使用 vessel_id + } + }] + + debug_print(f"✅ 停止加热协议生成完成 🎯") + return action_sequence - -# 便捷函数 -def generate_heating_protocol( - G: nx.DiGraph, - vessel: str, - temp: float, - time: float = 300.0, - stir: bool = True, - stir_speed: float = 300.0 -) -> List[Dict[str, Any]]: - """生成加热协议的便捷函数""" - return generate_heat_chill_protocol( - G=G, vessel=vessel, temp=temp, time=time, - stir=stir, stir_speed=stir_speed, purpose=f"加热到 {temp}°C" - ) - - -def generate_cooling_protocol( - G: nx.DiGraph, - vessel: str, - temp: float, - time: float = 600.0, - stir: bool = True, - stir_speed: float = 200.0 -) -> List[Dict[str, Any]]: - """生成冷却协议的便捷函数""" - return generate_heat_chill_protocol( - G=G, vessel=vessel, temp=temp, time=time, - stir=stir, stir_speed=stir_speed, purpose=f"冷却到 {temp}°C" - ) - - -# # 温度预设快捷函数 -# def generate_room_temp_protocol( -# G: nx.DiGraph, -# vessel: str, -# stir: bool = False -# ) -> List[Dict[str, Any]]: -# """返回室温的快捷函数""" -# return generate_heat_chill_to_temp_protocol( -# G=G, -# vessel=vessel, -# temp=25.0, -# active=True, -# continue_heatchill=False, -# stir=stir, -# purpose="冷却到室温" -# ) - - -# def generate_reflux_heating_protocol( -# G: nx.DiGraph, -# vessel: str, -# temp: float, -# time: float = 3600.0 # 1小时回流 -# ) -> List[Dict[str, Any]]: -# """回流加热的快捷函数""" -# return generate_heat_chill_protocol( -# G=G, -# vessel=vessel, -# temp=temp, -# time=time, -# stir=True, -# stir_speed=400.0, # 回流时较快搅拌 -# purpose=f"回流加热到 {temp}°C" -# ) - - -# def generate_ice_bath_protocol( -# G: nx.DiGraph, -# vessel: str, -# time: float = 600.0 # 10分钟冰浴 -# ) -> List[Dict[str, Any]]: -# """冰浴冷却的快捷函数""" -# return generate_heat_chill_protocol( -# G=G, -# vessel=vessel, -# temp=0.0, -# time=time, -# stir=True, -# stir_speed=150.0, # 冰浴时缓慢搅拌 -# purpose="冰浴冷却到 0°C" -# ) - - -# 测试函数 -def test_heatchill_protocol(): - """测试加热/冷却协议的示例""" - print("=== HEAT CHILL PROTOCOL 测试 ===") - print("完整的四个协议函数:") - print("1. generate_heat_chill_protocol - 带时间限制的完整操作") - print("2. generate_heat_chill_start_protocol - 持续加热/冷却") - print("3. generate_heat_chill_stop_protocol - 停止加热/冷却") - print("4. generate_heat_chill_to_temp_protocol - 智能温控 (您的 HeatChillToTemp)") - print("测试完成") - - -if __name__ == "__main__": - test_heatchill_protocol() \ No newline at end of file diff --git a/unilabos/compile/hydrogenate_protocol.py b/unilabos/compile/hydrogenate_protocol.py new file mode 100644 index 0000000..25c4c8f --- /dev/null +++ b/unilabos/compile/hydrogenate_protocol.py @@ -0,0 +1,457 @@ +import networkx as nx +from typing import List, Dict, Any, Optional + + +def parse_temperature(temp_str: str) -> float: + """ + 解析温度字符串,支持多种格式 + + Args: + temp_str: 温度字符串(如 "45 °C", "45°C", "45") + + Returns: + float: 温度值(摄氏度) + """ + try: + # 移除常见的温度单位和符号 + temp_clean = temp_str.replace("°C", "").replace("°", "").replace("C", "").strip() + return float(temp_clean) + except ValueError: + print(f"HYDROGENATE: 无法解析温度 '{temp_str}',使用默认温度 25°C") + return 25.0 + + +def parse_time(time_str: str) -> float: + """ + 解析时间字符串,支持多种格式 + + Args: + time_str: 时间字符串(如 "2 h", "120 min", "7200 s") + + Returns: + float: 时间值(秒) + """ + try: + time_clean = time_str.lower().strip() + + # 处理小时 + if "h" in time_clean: + hours = float(time_clean.replace("h", "").strip()) + return hours * 3600.0 + + # 处理分钟 + if "min" in time_clean: + minutes = float(time_clean.replace("min", "").strip()) + return minutes * 60.0 + + # 处理秒 + if "s" in time_clean: + seconds = float(time_clean.replace("s", "").strip()) + return seconds + + # 默认按小时处理 + return float(time_clean) * 3600.0 + + except ValueError: + print(f"HYDROGENATE: 无法解析时间 '{time_str}',使用默认时间 2小时") + return 7200.0 # 2小时 + + +def find_associated_solenoid_valve(G: nx.DiGraph, device_id: str) -> Optional[str]: + """查找与指定设备相关联的电磁阀""" + solenoid_valves = [ + node for node in G.nodes() + if ('solenoid' in (G.nodes[node].get('class') or '').lower() + or 'solenoid_valve' in node) + ] + + # 通过网络连接查找直接相连的电磁阀 + for solenoid in solenoid_valves: + if G.has_edge(device_id, solenoid) or G.has_edge(solenoid, device_id): + return solenoid + + # 通过命名规则查找关联的电磁阀 + device_type = "" + if 'gas' in device_id.lower(): + device_type = "gas" + elif 'h2' in device_id.lower() or 'hydrogen' in device_id.lower(): + device_type = "gas" + + if device_type: + for solenoid in solenoid_valves: + if device_type in solenoid.lower(): + return solenoid + + return None + + +def find_connected_device(G: nx.DiGraph, vessel: str, device_type: str) -> str: + """ + 查找与容器相连的指定类型设备 + + Args: + G: 网络图 + vessel: 容器名称 + device_type: 设备类型 ('heater', 'stirrer', 'gas_source') + + Returns: + str: 设备ID,如果没有则返回None + """ + print(f"HYDROGENATE: 正在查找与容器 '{vessel}' 相连的 {device_type}...") + + # 根据设备类型定义搜索关键词 + if device_type == 'heater': + keywords = ['heater', 'heat', 'heatchill'] + device_class = 'virtual_heatchill' + elif device_type == 'stirrer': + keywords = ['stirrer', 'stir'] + device_class = 'virtual_stirrer' + elif device_type == 'gas_source': + keywords = ['gas', 'h2', 'hydrogen'] + device_class = 'virtual_gas_source' + else: + return None + + # 查找设备节点 + device_nodes = [] + for node in G.nodes(): + node_data = G.nodes[node] + node_name = node.lower() + node_class = node_data.get('class', '').lower() + + # 通过名称匹配 + if any(keyword in node_name for keyword in keywords): + device_nodes.append(node) + # 通过类型匹配 + elif device_class in node_class: + device_nodes.append(node) + + print(f"HYDROGENATE: 找到的{device_type}节点: {device_nodes}") + + # 检查是否有设备与目标容器相连 + for device in device_nodes: + if G.has_edge(device, vessel) or G.has_edge(vessel, device): + print(f"HYDROGENATE: 找到与容器 '{vessel}' 相连的{device_type}: {device}") + return device + + # 如果没有直接连接,查找距离最近的设备 + for device in device_nodes: + try: + path = nx.shortest_path(G, source=device, target=vessel) + if len(path) <= 3: # 最多2个中间节点 + print(f"HYDROGENATE: 找到距离较近的{device_type}: {device}") + return device + except nx.NetworkXNoPath: + continue + + print(f"HYDROGENATE: 未找到与容器 '{vessel}' 相连的{device_type}") + return None + + +def generate_hydrogenate_protocol( + G: nx.DiGraph, + vessel: dict, # 🔧 修改:从字符串改为字典类型 + temp: str, + time: str, + **kwargs # 接收其他可能的参数但不使用 +) -> List[Dict[str, Any]]: + """ + 生成氢化反应协议序列 - 支持vessel字典 + + Args: + G: 有向图,节点为容器和设备 + vessel: 反应容器字典(从XDL传入) + temp: 反应温度(如 "45 °C") + time: 反应时间(如 "2 h") + **kwargs: 其他可选参数,但不使用 + + Returns: + List[Dict[str, Any]]: 动作序列 + """ + + # 🔧 核心修改:从字典中提取容器ID + vessel_id = vessel["id"] + + action_sequence = [] + + # 解析参数 + temperature = parse_temperature(temp) + reaction_time = parse_time(time) + + print("🧪" * 20) + print(f"HYDROGENATE: 开始生成氢化反应协议(支持vessel字典)✨") + print(f"📝 输入参数:") + print(f" 🥽 vessel: {vessel} (ID: {vessel_id})") + print(f" 🌡️ 反应温度: {temperature}°C") + print(f" ⏰ 反应时间: {reaction_time/3600:.1f} 小时") + print("🧪" * 20) + + # 🔧 新增:记录氢化前的容器状态(可选,氢化反应通常不改变体积) + original_liquid_volume = 0.0 + if "data" in vessel and "liquid_volume" in vessel["data"]: + current_volume = vessel["data"]["liquid_volume"] + if isinstance(current_volume, list) and len(current_volume) > 0: + original_liquid_volume = current_volume[0] + elif isinstance(current_volume, (int, float)): + original_liquid_volume = current_volume + print(f"📊 氢化前液体体积: {original_liquid_volume:.2f}mL") + + # 1. 验证目标容器存在 + print("📍 步骤1: 验证目标容器...") + if vessel_id not in G.nodes(): # 🔧 使用 vessel_id + print(f"⚠️ HYDROGENATE: 警告 - 容器 '{vessel_id}' 不存在于系统中,跳过氢化反应") + return action_sequence + print(f"✅ 容器 '{vessel_id}' 验证通过") + + # 2. 查找相连的设备 + print("📍 步骤2: 查找相连设备...") + heater_id = find_connected_device(G, vessel_id, 'heater') # 🔧 使用 vessel_id + stirrer_id = find_connected_device(G, vessel_id, 'stirrer') # 🔧 使用 vessel_id + gas_source_id = find_connected_device(G, vessel_id, 'gas_source') # 🔧 使用 vessel_id + + print(f"🔧 设备配置:") + print(f" 🔥 加热器: {heater_id or '未找到'}") + print(f" 🌪️ 搅拌器: {stirrer_id or '未找到'}") + print(f" 💨 气源: {gas_source_id or '未找到'}") + + # 3. 启动搅拌器 + print("📍 步骤3: 启动搅拌器...") + if stirrer_id: + print(f"🌪️ 启动搅拌器 {stirrer_id}") + action_sequence.append({ + "device_id": stirrer_id, + "action_name": "start_stir", + "action_kwargs": { + "vessel": vessel_id, # 🔧 使用 vessel_id + "stir_speed": 300.0, + "purpose": "氢化反应: 开始搅拌" + } + }) + print("✅ 搅拌器启动动作已添加") + else: + print(f"⚠️ HYDROGENATE: 警告 - 未找到搅拌器,继续执行") + + # 4. 启动气源(氢气) + print("📍 步骤4: 启动氢气源...") + if gas_source_id: + print(f"💨 启动气源 {gas_source_id} (氢气)") + action_sequence.append({ + "device_id": gas_source_id, + "action_name": "set_status", + "action_kwargs": { + "string": "ON" + } + }) + + # 查找相关的电磁阀 + gas_solenoid = find_associated_solenoid_valve(G, gas_source_id) + if gas_solenoid: + print(f"🚪 开启气源电磁阀 {gas_solenoid}") + action_sequence.append({ + "device_id": gas_solenoid, + "action_name": "set_valve_position", + "action_kwargs": { + "command": "OPEN" + } + }) + print("✅ 氢气源启动动作已添加") + else: + print(f"⚠️ HYDROGENATE: 警告 - 未找到气源,继续执行") + + # 5. 等待气体稳定 + print("📍 步骤5: 等待气体环境稳定...") + action_sequence.append({ + "action_name": "wait", + "action_kwargs": { + "time": 30.0, + "description": "等待氢气环境稳定" + } + }) + print("✅ 气体稳定等待动作已添加") + + # 6. 启动加热器 + print("📍 步骤6: 启动加热反应...") + if heater_id: + print(f"🔥 启动加热器 {heater_id} 到 {temperature}°C") + action_sequence.append({ + "device_id": heater_id, + "action_name": "heat_chill_start", + "action_kwargs": { + "vessel": vessel_id, # 🔧 使用 vessel_id + "temp": temperature, + "purpose": f"氢化反应: 加热到 {temperature}°C" + } + }) + + # 等待温度稳定 + action_sequence.append({ + "action_name": "wait", + "action_kwargs": { + "time": 20.0, + "description": f"等待温度稳定到 {temperature}°C" + } + }) + + # 🕐 模拟运行时间优化 + print(" ⏰ 检查模拟运行时间限制...") + original_reaction_time = reaction_time + simulation_time_limit = 60.0 # 模拟运行时间限制:60秒 + + if reaction_time > simulation_time_limit: + reaction_time = simulation_time_limit + print(f" 🎮 模拟运行优化: {original_reaction_time}s → {reaction_time}s (限制为{simulation_time_limit}s)") + print(f" 📊 时间缩短: {original_reaction_time/3600:.2f}小时 → {reaction_time/60:.1f}分钟") + else: + print(f" ✅ 时间在限制内: {reaction_time}s ({reaction_time/60:.1f}分钟) 保持不变") + + # 保持反应温度 + action_sequence.append({ + "device_id": heater_id, + "action_name": "heat_chill", + "action_kwargs": { + "vessel": vessel_id, # 🔧 使用 vessel_id + "temp": temperature, + "time": reaction_time, + "purpose": f"氢化反应: 保持 {temperature}°C,反应 {reaction_time/60:.1f}分钟" + (f" (模拟时间)" if original_reaction_time != reaction_time else "") + } + }) + + # 显示时间调整信息 + if original_reaction_time != reaction_time: + print(f" 🎭 模拟优化说明: 原计划 {original_reaction_time/3600:.2f}小时,实际模拟 {reaction_time/60:.1f}分钟") + + print("✅ 加热反应动作已添加") + + else: + print(f"⚠️ HYDROGENATE: 警告 - 未找到加热器,使用室温反应") + + # 🕐 室温反应也需要时间优化 + print(" ⏰ 检查室温反应模拟时间限制...") + original_reaction_time = reaction_time + simulation_time_limit = 60.0 # 模拟运行时间限制:60秒 + + if reaction_time > simulation_time_limit: + reaction_time = simulation_time_limit + print(f" 🎮 室温反应时间优化: {original_reaction_time}s → {reaction_time}s") + print(f" 📊 时间缩短: {original_reaction_time/3600:.2f}小时 → {reaction_time/60:.1f}分钟") + else: + print(f" ✅ 室温反应时间在限制内: {reaction_time}s 保持不变") + + # 室温反应,只等待时间 + action_sequence.append({ + "action_name": "wait", + "action_kwargs": { + "time": reaction_time, + "description": f"室温氢化反应 {reaction_time/60:.1f}分钟" + (f" (模拟时间)" if original_reaction_time != reaction_time else "") + } + }) + + # 显示时间调整信息 + if original_reaction_time != reaction_time: + print(f" 🎭 室温反应优化说明: 原计划 {original_reaction_time/3600:.2f}小时,实际模拟 {reaction_time/60:.1f}分钟") + + print("✅ 室温反应等待动作已添加") + + # 7. 停止加热 + print("📍 步骤7: 停止加热...") + if heater_id: + action_sequence.append({ + "device_id": heater_id, + "action_name": "heat_chill_stop", + "action_kwargs": { + "vessel": vessel_id, # 🔧 使用 vessel_id + "purpose": "氢化反应完成,停止加热" + } + }) + print("✅ 停止加热动作已添加") + + # 8. 等待冷却 + print("📍 步骤8: 等待冷却...") + action_sequence.append({ + "action_name": "wait", + "action_kwargs": { + "time": 300.0, + "description": "等待反应混合物冷却" + } + }) + print("✅ 冷却等待动作已添加") + + # 9. 停止气源 + print("📍 步骤9: 停止氢气源...") + if gas_source_id: + # 先关闭电磁阀 + gas_solenoid = find_associated_solenoid_valve(G, gas_source_id) + if gas_solenoid: + print(f"🚪 关闭气源电磁阀 {gas_solenoid}") + action_sequence.append({ + "device_id": gas_solenoid, + "action_name": "set_valve_position", + "action_kwargs": { + "command": "CLOSED" + } + }) + + # 再关闭气源 + action_sequence.append({ + "device_id": gas_source_id, + "action_name": "set_status", + "action_kwargs": { + "string": "OFF" + } + }) + print("✅ 氢气源停止动作已添加") + + # 10. 停止搅拌 + print("📍 步骤10: 停止搅拌...") + if stirrer_id: + action_sequence.append({ + "device_id": stirrer_id, + "action_name": "stop_stir", + "action_kwargs": { + "vessel": vessel_id, # 🔧 使用 vessel_id + "purpose": "氢化反应完成,停止搅拌" + } + }) + print("✅ 停止搅拌动作已添加") + + # 🔧 新增:氢化完成后的状态(氢化反应通常不改变体积) + final_liquid_volume = original_liquid_volume # 氢化反应体积基本不变 + + # 总结 + print("🎊" * 20) + print(f"🎉 氢化反应协议生成完成! ✨") + print(f"📊 总动作数: {len(action_sequence)} 个") + print(f"🥽 反应容器: {vessel_id}") + print(f"🌡️ 反应温度: {temperature}°C") + print(f"⏰ 反应时间: {reaction_time/60:.1f}分钟") + print(f"⏱️ 预计总时间: {(reaction_time + 450)/3600:.1f} 小时") + print(f"📊 体积状态:") + print(f" - 反应前体积: {original_liquid_volume:.2f}mL") + print(f" - 反应后体积: {final_liquid_volume:.2f}mL (氢化反应体积基本不变)") + print("🎊" * 20) + + return action_sequence + + +# 测试函数 +def test_hydrogenate_protocol(): + """测试氢化反应协议""" + print("🧪 === HYDROGENATE PROTOCOL 测试 === ✨") + + # 测试温度解析 + test_temps = ["45 °C", "45°C", "45", "25 C", "invalid"] + for temp in test_temps: + parsed = parse_temperature(temp) + print(f"温度 '{temp}' -> {parsed}°C") + + # 测试时间解析 + test_times = ["2 h", "120 min", "7200 s", "2", "invalid"] + for time in test_times: + parsed = parse_time(time) + print(f"时间 '{time}' -> {parsed/3600:.1f} 小时") + + print("✅ 测试完成 🎉") + + +if __name__ == "__main__": + test_hydrogenate_protocol() \ No newline at end of file diff --git a/unilabos/compile/pump_protocol.py b/unilabos/compile/pump_protocol.py index cddb863..a54218e 100644 --- a/unilabos/compile/pump_protocol.py +++ b/unilabos/compile/pump_protocol.py @@ -1,255 +1,1853 @@ import numpy as np import networkx as nx +import asyncio +import time as time_module # 🔧 重命名time模块 +from typing import List, Dict, Any +import logging +import sys +logger = logging.getLogger(__name__) + +def debug_print(message): + """强制输出调试信息""" + timestamp = time_module.strftime("%H:%M:%S") + output = f"[{timestamp}] {message}" + print(output, flush=True) + sys.stdout.flush() + # 同时写入日志 + logger.info(output) + +def get_vessel_liquid_volume(G: nx.DiGraph, vessel: str) -> float: + """ + 从容器节点的数据中获取液体体积 + """ + debug_print(f"🔍 开始读取容器 '{vessel}' 的液体体积...") + + if vessel not in G.nodes(): + logger.error(f"❌ 容器 '{vessel}' 不存在于系统图中") + debug_print(f" - 系统中的容器: {list(G.nodes())}") + return 0.0 + + vessel_data = G.nodes[vessel].get('data', {}) + debug_print(f"📋 容器 '{vessel}' 的数据结构: {vessel_data}") + + total_volume = 0.0 + + # 方法1:检查 'liquid' 字段(列表格式) + debug_print("🔍 方法1: 检查 'liquid' 字段...") + if 'liquid' in vessel_data: + liquids = vessel_data['liquid'] + debug_print(f" - liquid 字段类型: {type(liquids)}") + debug_print(f" - liquid 字段内容: {liquids}") + + if isinstance(liquids, list): + debug_print(f" - liquid 是列表,包含 {len(liquids)} 个元素") + for i, liquid in enumerate(liquids): + debug_print(f" 液体 {i+1}: {liquid}") + if isinstance(liquid, dict): + volume_keys = ['liquid_volume', 'volume', 'amount', 'quantity'] + for key in volume_keys: + if key in liquid: + try: + vol = float(liquid[key]) + total_volume += vol + debug_print(f" ✅ 从 '{key}' 读取体积: {vol}mL") + break + except (ValueError, TypeError) as e: + logger.warning(f" ⚠️ 无法转换 '{key}': {liquid[key]} -> {str(e)}") + continue + else: + debug_print(f" - liquid 不是列表: {type(liquids)}") + else: + debug_print(" - 没有 'liquid' 字段") + + # 方法2:检查直接的体积字段 + debug_print("🔍 方法2: 检查直接体积字段...") + volume_keys = ['total_volume', 'volume', 'liquid_volume', 'amount', 'current_volume'] + for key in volume_keys: + if key in vessel_data: + try: + vol = float(vessel_data[key]) + total_volume = max(total_volume, vol) # 取最大值 + debug_print(f" ✅ 从容器数据 '{key}' 读取体积: {vol}mL") + break + except (ValueError, TypeError) as e: + logger.warning(f" ⚠️ 无法转换 '{key}': {vessel_data[key]} -> {str(e)}") + continue + + # 方法3:检查 'state' 或 'status' 字段 + debug_print("🔍 方法3: 检查 'state' 字段...") + if 'state' in vessel_data and isinstance(vessel_data['state'], dict): + state = vessel_data['state'] + debug_print(f" - state 字段内容: {state}") + if 'volume' in state: + try: + vol = float(state['volume']) + total_volume = max(total_volume, vol) + debug_print(f" ✅ 从容器状态读取体积: {vol}mL") + except (ValueError, TypeError) as e: + logger.warning(f" ⚠️ 无法转换 state.volume: {state['volume']} -> {str(e)}") + else: + debug_print(" - 没有 'state' 字段或不是字典") + + debug_print(f"📊 容器 '{vessel}' 最终检测体积: {total_volume}mL") + return total_volume def is_integrated_pump(node_name): return "pump" in node_name and "valve" in node_name def find_connected_pump(G, valve_node): - for neighbor in G.neighbors(valve_node): - node_class = G.nodes[neighbor].get("class") or "" # 防止 None - if "pump" in node_class: - return neighbor - raise ValueError(f"未找到与阀 {valve_node} 唯一相连的泵节点") + """ + 查找与阀门相连的泵节点 - 修复版本 + 🔧 修复:区分电磁阀和多通阀,电磁阀不参与泵查找 + """ + debug_print(f"🔍 查找与阀门 {valve_node} 相连的泵...") + + # 🔧 关键修复:检查节点类型,电磁阀不应该查找泵 + node_data = G.nodes.get(valve_node, {}) + node_class = node_data.get("class", "") or "" + + debug_print(f" - 阀门类型: {node_class}") + + # 如果是电磁阀,不应该查找泵(电磁阀只是开关) + if ("solenoid" in node_class.lower() or "solenoid_valve" in valve_node.lower()): + debug_print(f" ⚠️ {valve_node} 是电磁阀,不应该查找泵节点") + raise ValueError(f"电磁阀 {valve_node} 不应该参与泵查找逻辑") + + # 只有多通阀等复杂阀门才需要查找连接的泵 + if ("multiway" in node_class.lower() or "valve" in node_class.lower()): + debug_print(f" - {valve_node} 是多通阀,查找连接的泵...") + + # 方法1:直接相邻的泵 + for neighbor in G.neighbors(valve_node): + neighbor_class = G.nodes[neighbor].get("class", "") or "" + debug_print(f" - 检查邻居 {neighbor}, class: {neighbor_class}") + if "pump" in neighbor_class.lower(): + debug_print(f" ✅ 找到直接相连的泵: {neighbor}") + return neighbor + + # 方法2:通过路径查找泵(最多2跳) + debug_print(f" - 未找到直接相连的泵,尝试路径查找...") + + # 获取所有泵节点 + pump_nodes = [] + for node_id in G.nodes(): + node_class = G.nodes[node_id].get("class", "") or "" + if "pump" in node_class.lower(): + pump_nodes.append(node_id) + + debug_print(f" - 系统中的泵节点: {pump_nodes}") + + # 查找到泵的最短路径 + for pump_node in pump_nodes: + try: + if nx.has_path(G, valve_node, pump_node): + path = nx.shortest_path(G, valve_node, pump_node) + path_length = len(path) - 1 + debug_print(f" - 到泵 {pump_node} 的路径: {path}, 距离: {path_length}") + + if path_length <= 2: # 最多允许2跳 + debug_print(f" ✅ 通过路径找到泵: {pump_node}") + return pump_node + except nx.NetworkXNoPath: + continue + + # 方法3:降级方案 - 返回第一个可用的泵 + if pump_nodes: + debug_print(f" ⚠️ 未找到连接的泵,使用第一个可用的泵: {pump_nodes[0]}") + return pump_nodes[0] + + # 最终失败 + debug_print(f" ❌ 完全找不到泵节点") + raise ValueError(f"未找到与阀 {valve_node} 相连的泵节点") def build_pump_valve_maps(G, pump_backbone): + """ + 构建泵-阀门映射 - 修复版本 + 🔧 修复:过滤掉电磁阀,只处理需要泵的多通阀 + """ pumps_from_node = {} valve_from_node = {} + + debug_print(f"🔧 构建泵-阀门映射,原始骨架: {pump_backbone}") + + # 🔧 关键修复:过滤掉电磁阀 + filtered_backbone = [] for node in pump_backbone: + node_data = G.nodes.get(node, {}) + node_class = node_data.get("class", "") or "" + + # 跳过电磁阀 + if ("solenoid" in node_class.lower() or "solenoid_valve" in node.lower()): + debug_print(f" - 跳过电磁阀: {node}") + continue + + filtered_backbone.append(node) + + debug_print(f"🔧 过滤后的骨架: {filtered_backbone}") + + for node in filtered_backbone: if is_integrated_pump(node): pumps_from_node[node] = node valve_from_node[node] = node + debug_print(f" - 集成泵-阀: {node}") else: - pump_node = find_connected_pump(G, node) - pumps_from_node[node] = pump_node - valve_from_node[node] = node + try: + pump_node = find_connected_pump(G, node) + pumps_from_node[node] = pump_node + valve_from_node[node] = node + debug_print(f" - 阀门 {node} -> 泵 {pump_node}") + except ValueError as e: + debug_print(f" - 跳过节点 {node}: {str(e)}") + continue + + debug_print(f"🔧 最终映射: pumps={pumps_from_node}, valves={valve_from_node}") return pumps_from_node, valve_from_node def generate_pump_protocol( - G: nx.DiGraph, - from_vessel: str, - to_vessel: str, - volume: float, - flowrate: float = 0.5, - transfer_flowrate: float = 0, -) -> list[dict]: + G: nx.DiGraph, + from_vessel: str, + to_vessel: str, + volume: float, + flowrate: float = 2.5, + transfer_flowrate: float = 0.5, +) -> List[Dict[str, Any]]: """ - 生成泵操作的动作序列。 - - :param G: 有向图, 节点为容器和注射泵, 边为流体管道, A→B边的属性为管道接A端的阀门位置 - :param from_vessel: 容器A - :param to_vessel: 容器B - :param volume: 转移的体积 - :param flowrate: 最终注入容器B时的流速 - :param transfer_flowrate: 泵骨架中转移流速(若不指定,默认与注入流速相同) - :return: 泵操作的动作序列 + 生成泵操作的动作序列 - 修复版本 + 🔧 修复:正确处理包含电磁阀的路径 """ - - # 生成泵操作的动作序列 pump_action_sequence = [] nodes = G.nodes(data=True) - # 从from_vessel到to_vessel的最短路径 - shortest_path = nx.shortest_path(G, source=from_vessel, target=to_vessel) - print(shortest_path) + + # 验证输入参数 + if volume <= 0: + logger.error(f"无效的体积参数: {volume}mL") + return pump_action_sequence + + if flowrate <= 0: + flowrate = 2.5 + logger.warning(f"flowrate <= 0,使用默认值 {flowrate}mL/s") + + if transfer_flowrate <= 0: + transfer_flowrate = 0.5 + logger.warning(f"transfer_flowrate <= 0,使用默认值 {transfer_flowrate}mL/s") + + # 验证容器存在 + if from_vessel not in G.nodes(): + logger.error(f"源容器 '{from_vessel}' 不存在") + return pump_action_sequence + + if to_vessel not in G.nodes(): + logger.error(f"目标容器 '{to_vessel}' 不存在") + return pump_action_sequence + + try: + shortest_path = nx.shortest_path(G, source=from_vessel, target=to_vessel) + debug_print(f"PUMP_TRANSFER: 路径 {from_vessel} -> {to_vessel}: {shortest_path}") + except nx.NetworkXNoPath: + logger.error(f"无法找到从 '{from_vessel}' 到 '{to_vessel}' 的路径") + return pump_action_sequence - pump_backbone = shortest_path - if not from_vessel.startswith("pump"): - pump_backbone = pump_backbone[1:] - if not to_vessel.startswith("pump"): - pump_backbone = pump_backbone[:-1] + # 🔧 关键修复:正确构建泵骨架,排除容器和电磁阀 + pump_backbone = [] + for node in shortest_path: + # 跳过起始和结束容器 + if node == from_vessel or node == to_vessel: + continue + + # 跳过电磁阀(电磁阀不参与泵操作) + node_data = G.nodes.get(node, {}) + node_class = node_data.get("class", "") or "" + if ("solenoid" in node_class.lower() or "solenoid_valve" in node.lower()): + debug_print(f"PUMP_TRANSFER: 跳过电磁阀 {node}") + continue + + # 只包含多通阀和泵 + if ("multiway" in node_class.lower() or "valve" in node_class.lower() or "pump" in node_class.lower()): + pump_backbone.append(node) + + debug_print(f"PUMP_TRANSFER: 过滤后的泵骨架: {pump_backbone}") + + if not pump_backbone: + debug_print("PUMP_TRANSFER: 没有泵骨架节点,可能是直接容器连接或只有电磁阀") + return pump_action_sequence if transfer_flowrate == 0: transfer_flowrate = flowrate - pumps_from_node, valve_from_node = build_pump_valve_maps(G, pump_backbone) + try: + pumps_from_node, valve_from_node = build_pump_valve_maps(G, pump_backbone) + except Exception as e: + debug_print(f"PUMP_TRANSFER: 构建泵-阀门映射失败: {str(e)}") + return pump_action_sequence + + if not pumps_from_node: + debug_print("PUMP_TRANSFER: 没有可用的泵映射") + return pump_action_sequence + + # 🔧 修复:安全地获取最小转移体积 + try: + min_transfer_volumes = [] + for node in pump_backbone: + if node in pumps_from_node: + pump_node = pumps_from_node[node] + if pump_node in nodes: + pump_config = nodes[pump_node].get("config", {}) + max_volume = pump_config.get("max_volume") + if max_volume is not None: + min_transfer_volumes.append(max_volume) + + if min_transfer_volumes: + min_transfer_volume = min(min_transfer_volumes) + else: + min_transfer_volume = 25.0 # 默认值 + debug_print(f"PUMP_TRANSFER: 无法获取泵的最大体积,使用默认值: {min_transfer_volume}mL") + except Exception as e: + debug_print(f"PUMP_TRANSFER: 获取最小转移体积失败: {str(e)}") + min_transfer_volume = 25.0 # 默认值 - min_transfer_volume = min([nodes[pumps_from_node[node]]["config"]["max_volume"] for node in pump_backbone]) repeats = int(np.ceil(volume / min_transfer_volume)) + if repeats > 1 and (from_vessel.startswith("pump") or to_vessel.startswith("pump")): - raise ValueError("Cannot transfer volume larger than min_transfer_volume between two pumps.") + logger.error("Cannot transfer volume larger than min_transfer_volume between two pumps.") + return pump_action_sequence volume_left = volume + debug_print(f"PUMP_TRANSFER: 需要 {repeats} 次转移,单次最大体积 {min_transfer_volume} mL") - # 生成泵操作的动作序列 + # 🆕 只在开头打印总体概览 + if repeats > 1: + debug_print(f"🔄 分批转移概览: 总体积 {volume:.2f}mL,需要 {repeats} 次转移") + logger.info(f"🔄 分批转移概览: 总体积 {volume:.2f}mL,需要 {repeats} 次转移") + + # 🔧 创建一个自定义的wait动作,用于在执行时打印日志 + def create_progress_log_action(message: str) -> Dict[str, Any]: + """创建一个特殊的等待动作,在执行时打印进度日志""" + return { + "action_name": "wait", + "action_kwargs": { + "time": 0.1, # 很短的等待时间 + "progress_message": message # 自定义字段,用于进度日志 + } + } + + # 生成泵操作序列 for i in range(repeats): - # 单泵依次执行阀指令、活塞指令,将液体吸入与之相连的第一台泵 - if not from_vessel.startswith("pump"): - pump_action_sequence.extend([ - { - "device_id": valve_from_node[pump_backbone[0]], - "action_name": "set_valve_position", - "action_kwargs": { - "command": G.get_edge_data(pump_backbone[0], from_vessel)["port"][pump_backbone[0]] + current_volume = min(volume_left, min_transfer_volume) + + # 🆕 在每次循环开始时添加进度日志 + if repeats > 1: + start_message = f"🚀 准备开始第 {i+1}/{repeats} 次转移: {current_volume:.2f}mL ({from_vessel} → {to_vessel}) 🚰" + pump_action_sequence.append(create_progress_log_action(start_message)) + + # 🔧 修复:安全地获取边数据 + def get_safe_edge_data(node_a, node_b, key): + try: + edge_data = G.get_edge_data(node_a, node_b) + if edge_data and "port" in edge_data: + port_data = edge_data["port"] + if isinstance(port_data, dict) and key in port_data: + return port_data[key] + return "default" + except Exception as e: + debug_print(f"PUMP_TRANSFER: 获取边数据失败 {node_a}->{node_b}: {str(e)}") + return "default" + + # 从源容器吸液 + if not from_vessel.startswith("pump") and pump_backbone: + first_pump_node = pump_backbone[0] + if first_pump_node in valve_from_node and first_pump_node in pumps_from_node: + port_command = get_safe_edge_data(first_pump_node, from_vessel, first_pump_node) + pump_action_sequence.extend([ + { + "device_id": valve_from_node[first_pump_node], + "action_name": "set_valve_position", + "action_kwargs": { + "command": port_command + } + }, + { + "device_id": pumps_from_node[first_pump_node], + "action_name": "set_position", + "action_kwargs": { + "position": float(current_volume), + "max_velocity": transfer_flowrate + } } - }, - { - "device_id": pumps_from_node[pump_backbone[0]], - "action_name": "set_position", - "action_kwargs": { - "position": float(min(volume_left, min_transfer_volume)), - "max_velocity": transfer_flowrate - } - } - ]) - pump_action_sequence.append({"action_name": "wait", "action_kwargs": {"time": 5}}) + ]) + pump_action_sequence.append({"action_name": "wait", "action_kwargs": {"time": 3}}) + + # 泵间转移 for nodeA, nodeB in zip(pump_backbone[:-1], pump_backbone[1:]): - # 相邻两泵同时切换阀门至连通位置 - pump_action_sequence.append([ - { - "device_id": valve_from_node[nodeA], - "action_name": "set_valve_position", - "action_kwargs": { - "command": G.get_edge_data(nodeA, nodeB)["port"][nodeA] + if nodeA in valve_from_node and nodeB in valve_from_node and nodeA in pumps_from_node and nodeB in pumps_from_node: + port_a = get_safe_edge_data(nodeA, nodeB, nodeA) + port_b = get_safe_edge_data(nodeB, nodeA, nodeB) + + pump_action_sequence.append([ + { + "device_id": valve_from_node[nodeA], + "action_name": "set_valve_position", + "action_kwargs": { + "command": port_a + } + }, + { + "device_id": valve_from_node[nodeB], + "action_name": "set_valve_position", + "action_kwargs": { + "command": port_b + } } - }, - { - "device_id": valve_from_node[nodeB], - "action_name": "set_valve_position", - "action_kwargs": { - "command": G.get_edge_data(nodeB, nodeA)["port"][nodeB], + ]) + pump_action_sequence.append([ + { + "device_id": pumps_from_node[nodeA], + "action_name": "set_position", + "action_kwargs": { + "position": 0.0, + "max_velocity": transfer_flowrate + } + }, + { + "device_id": pumps_from_node[nodeB], + "action_name": "set_position", + "action_kwargs": { + "position": float(current_volume), + "max_velocity": transfer_flowrate + } } - } - ]) - # 相邻两泵液体转移:泵A排出液体,泵B吸入液体 - pump_action_sequence.append([ - { - "device_id": pumps_from_node[nodeA], - "action_name": "set_position", - "action_kwargs": { - "position": 0.0, - "max_velocity": transfer_flowrate - } - }, - { - "device_id": pumps_from_node[nodeB], - "action_name": "set_position", - "action_kwargs": { - "position": float(min(volume_left, min_transfer_volume)), - "max_velocity": transfer_flowrate - } - } - ]) - pump_action_sequence.append({"action_name": "wait", "action_kwargs": {"time": 5}}) + ]) + pump_action_sequence.append({"action_name": "wait", "action_kwargs": {"time": 3}}) - if not to_vessel.startswith("pump"): - # 单泵依次执行阀指令、活塞指令,将最后一台泵液体缓慢加入容器B - pump_action_sequence.extend([ - { - "device_id": valve_from_node[pump_backbone[-1]], - "action_name": "set_valve_position", - "action_kwargs": { - "command": G.get_edge_data(pump_backbone[-1], to_vessel)["port"][pump_backbone[-1]] + # 排液到目标容器 + if not to_vessel.startswith("pump") and pump_backbone: + last_pump_node = pump_backbone[-1] + if last_pump_node in valve_from_node and last_pump_node in pumps_from_node: + port_command = get_safe_edge_data(last_pump_node, to_vessel, last_pump_node) + pump_action_sequence.extend([ + { + "device_id": valve_from_node[last_pump_node], + "action_name": "set_valve_position", + "action_kwargs": { + "command": port_command + } + }, + { + "device_id": pumps_from_node[last_pump_node], + "action_name": "set_position", + "action_kwargs": { + "position": 0.0, + "max_velocity": flowrate + } } - }, - { - "device_id": pumps_from_node[pump_backbone[-1]], - "action_name": "set_position", - "action_kwargs": { - "position": 0.0, - "max_velocity": flowrate - } - } - ]) - pump_action_sequence.append({"action_name": "wait", "action_kwargs": {"time": 5}}) + ]) + pump_action_sequence.append({"action_name": "wait", "action_kwargs": {"time": 3}}) - volume_left -= min_transfer_volume + # 🆕 在每次循环结束时添加完成日志 + if repeats > 1: + remaining_volume = volume_left - current_volume + if remaining_volume > 0: + end_message = f"✅ 第 {i+1}/{repeats} 次转移完成! 剩余 {remaining_volume:.2f}mL 待转移 ⏳" + else: + end_message = f"🎉 第 {i+1}/{repeats} 次转移完成! 全部 {volume:.2f}mL 转移完毕 ✨" + + pump_action_sequence.append(create_progress_log_action(end_message)) + + volume_left -= current_volume + return pump_action_sequence -# Pump protocol compilation def generate_pump_protocol_with_rinsing( - G: nx.DiGraph, - from_vessel: str, - to_vessel: str, - volume: float, - amount: str = "", - time: float = 0, - viscous: bool = False, - rinsing_solvent: str = "air", - rinsing_volume: float = 5.0, - rinsing_repeats: int = 2, - solid: bool = False, - flowrate: float = 2.5, - transfer_flowrate: float = 0.5, -) -> list[dict]: + G: nx.DiGraph, + from_vessel: str, + to_vessel: str, + volume: float = 0.0, + amount: str = "", + time: float = 0.0, # 🔧 修复:统一使用 time + viscous: bool = False, + rinsing_solvent: str = "", + rinsing_volume: float = 0.0, + rinsing_repeats: int = 0, + solid: bool = False, + flowrate: float = 2.5, + transfer_flowrate: float = 0.5, + rate_spec: str = "", + event: str = "", + through: str = "", + **kwargs +) -> List[Dict[str, Any]]: """ - Generates a pump protocol for transferring a specified volume between vessels, including rinsing steps with a chosen solvent. This function constructs a sequence of pump actions based on the provided parameters and the shortest path in a directed graph. - - Args: - G (nx.DiGraph): The directed graph representing the vessels and connections. 有向图, 节点为容器和注射泵, 边为流体管道, A→B边的属性为管道接A端的阀门位置 - from_vessel (str): The name of the vessel to transfer from. - to_vessel (str): The name of the vessel to transfer to. - volume (float): The volume to transfer. - amount (str, optional): Additional amount specification (default is ""). - time (float, optional): Time over which to perform the transfer (default is 0). - viscous (bool, optional): Indicates if the fluid is viscous (default is False). - rinsing_solvent (str, optional): The solvent to use for rinsing (default is "air"). - rinsing_volume (float, optional): The volume of rinsing solvent to use (default is 5.0). - rinsing_repeats (int, optional): The number of times to repeat rinsing (default is 2). - solid (bool, optional): Indicates if the transfer involves a solid (default is False). - flowrate (float, optional): The flow rate for the transfer (default is 2.5). 最终注入容器B时的流速 - transfer_flowrate (float, optional): The flow rate for the transfer action (default is 0.5). 泵骨架中转移流速(若不指定,默认与注入流速相同) - - Returns: - list[dict]: A sequence of pump actions to be executed for the transfer and rinsing process. 泵操作的动作序列. - - Raises: - AssertionError: If the number of rinsing solvents does not match the number of rinsing repeats. - - Examples: - pump_protocol = generate_pump_protocol_with_rinsing(G, "vessel_A", "vessel_B", 0.1, rinsing_solvent="water") + 原有的同步版本,添加防冲突机制 """ - air_vessel = "flask_air" - waste_vessel = f"waste_workup" + + # 添加执行锁,防止并发调用 + import threading + if not hasattr(generate_pump_protocol_with_rinsing, '_lock'): + generate_pump_protocol_with_rinsing._lock = threading.Lock() + + with generate_pump_protocol_with_rinsing._lock: + debug_print("=" * 60) + debug_print(f"PUMP_TRANSFER: 🚀 开始生成协议 (同步版本)") + debug_print(f" 📍 路径: {from_vessel} -> {to_vessel}") + debug_print(f" 🕐 时间戳: {time_module.time()}") + debug_print(f" 🔒 获得执行锁") + debug_print("=" * 60) + + # 短暂延迟,避免快速重复调用 + time_module.sleep(0.01) + + debug_print("🔍 步骤1: 开始体积处理...") + + # 1. 处理体积参数 + final_volume = volume + debug_print(f"📋 初始设置: final_volume = {final_volume}") + + # 🔧 修复:如果volume为0(ROS2传入的空值),从容器读取实际体积 + if volume == 0.0: + debug_print("🎯 检测到 volume=0.0,开始自动体积检测...") + + # 直接从源容器读取实际体积 + actual_volume = get_vessel_liquid_volume(G, from_vessel) + debug_print(f"📖 从容器 '{from_vessel}' 读取到体积: {actual_volume}mL") + + if actual_volume > 0: + final_volume = actual_volume + debug_print(f"✅ 成功设置体积为: {final_volume}mL") + else: + final_volume = 10.0 # 如果读取失败,使用默认值 + logger.warning(f"⚠️ 无法从容器读取体积,使用默认值: {final_volume}mL") + else: + debug_print(f"📌 体积非零,直接使用: {final_volume}mL") + + # 处理 amount 参数 + if amount and amount.strip(): + debug_print(f"🔍 检测到 amount 参数: '{amount}',开始解析...") + parsed_volume = _parse_amount_to_volume(amount) + debug_print(f"📖 从 amount 解析得到体积: {parsed_volume}mL") + + if parsed_volume > 0: + final_volume = parsed_volume + debug_print(f"✅ 使用从 amount 解析的体积: {final_volume}mL") + elif parsed_volume == 0.0 and amount.lower().strip() == "all": + debug_print("🎯 检测到 amount='all',从容器读取全部体积...") + actual_volume = get_vessel_liquid_volume(G, from_vessel) + if actual_volume > 0: + final_volume = actual_volume + debug_print(f"✅ amount='all',设置体积为: {final_volume}mL") + + # 最终体积验证 + debug_print(f"🔍 步骤2: 最终体积验证...") + if final_volume <= 0: + logger.error(f"❌ 体积无效: {final_volume}mL") + final_volume = 10.0 + logger.warning(f"⚠️ 强制设置为默认值: {final_volume}mL") + + debug_print(f"✅ 最终确定体积: {final_volume}mL") + + # 2. 处理流速参数 + debug_print(f"🔍 步骤3: 处理流速参数...") + debug_print(f" - 原始 flowrate: {flowrate}") + debug_print(f" - 原始 transfer_flowrate: {transfer_flowrate}") + + final_flowrate = flowrate if flowrate > 0 else 2.5 + final_transfer_flowrate = transfer_flowrate if transfer_flowrate > 0 else 0.5 + + if flowrate <= 0: + logger.warning(f"⚠️ flowrate <= 0,修正为: {final_flowrate}mL/s") + if transfer_flowrate <= 0: + logger.warning(f"⚠️ transfer_flowrate <= 0,修正为: {final_transfer_flowrate}mL/s") + + debug_print(f"✅ 修正后流速: flowrate={final_flowrate}mL/s, transfer_flowrate={final_transfer_flowrate}mL/s") + + # 3. 根据时间计算流速 + if time > 0 and final_volume > 0: + debug_print(f"🔍 步骤4: 根据时间计算流速...") + calculated_flowrate = final_volume / time + debug_print(f" - 计算得到流速: {calculated_flowrate}mL/s") + + if flowrate <= 0 or flowrate == 2.5: + final_flowrate = min(calculated_flowrate, 10.0) + debug_print(f" - 调整 flowrate 为: {final_flowrate}mL/s") + if transfer_flowrate <= 0 or transfer_flowrate == 0.5: + final_transfer_flowrate = min(calculated_flowrate, 5.0) + debug_print(f" - 调整 transfer_flowrate 为: {final_transfer_flowrate}mL/s") + + # 4. 根据速度规格调整 + if rate_spec: + debug_print(f"🔍 步骤5: 根据速度规格调整...") + debug_print(f" - 速度规格: '{rate_spec}'") + + if rate_spec == "dropwise": + final_flowrate = min(final_flowrate, 0.1) + final_transfer_flowrate = min(final_transfer_flowrate, 0.1) + debug_print(f" - dropwise模式,流速调整为: {final_flowrate}mL/s") + elif rate_spec == "slowly": + final_flowrate = min(final_flowrate, 0.5) + final_transfer_flowrate = min(final_transfer_flowrate, 0.3) + debug_print(f" - slowly模式,流速调整为: {final_flowrate}mL/s") + elif rate_spec == "quickly": + final_flowrate = max(final_flowrate, 5.0) + final_transfer_flowrate = max(final_transfer_flowrate, 2.0) + debug_print(f" - quickly模式,流速调整为: {final_flowrate}mL/s") + + try: + # 🆕 修复:在这里调用带有循环日志的generate_pump_protocol_with_loop_logging函数 + pump_action_sequence = generate_pump_protocol_with_loop_logging( + G, from_vessel, to_vessel, final_volume, + final_flowrate, final_transfer_flowrate + ) + + debug_print(f"🔓 释放执行锁") + return pump_action_sequence + + except Exception as e: + logger.error(f"❌ 协议生成失败: {str(e)}") + return [ + { + "device_id": "system", + "action_name": "log_message", + "action_kwargs": { + "message": f"❌ 协议生成失败: {str(e)}" + } + } + ] - shortest_path = nx.shortest_path(G, source=from_vessel, target=to_vessel) - pump_backbone = shortest_path[1: -1] + +def generate_pump_protocol_with_loop_logging( + G: nx.DiGraph, + from_vessel: str, + to_vessel: str, + volume: float, + flowrate: float = 2.5, + transfer_flowrate: float = 0.5, +) -> List[Dict[str, Any]]: + """ + 生成泵操作的动作序列 - 带循环日志版本 + 🔧 修复:正确处理包含电磁阀的路径,并在合适时机打印循环日志 + """ + pump_action_sequence = [] nodes = G.nodes(data=True) + + # 验证输入参数 + if volume <= 0: + logger.error(f"无效的体积参数: {volume}mL") + return pump_action_sequence + + if flowrate <= 0: + flowrate = 2.5 + logger.warning(f"flowrate <= 0,使用默认值 {flowrate}mL/s") + + if transfer_flowrate <= 0: + transfer_flowrate = 0.5 + logger.warning(f"transfer_flowrate <= 0,使用默认值 {transfer_flowrate}mL/s") + + # 验证容器存在 + if from_vessel not in G.nodes(): + logger.error(f"源容器 '{from_vessel}' 不存在") + return pump_action_sequence + + if to_vessel not in G.nodes(): + logger.error(f"目标容器 '{to_vessel}' 不存在") + return pump_action_sequence + + try: + shortest_path = nx.shortest_path(G, source=from_vessel, target=to_vessel) + debug_print(f"PUMP_TRANSFER: 路径 {from_vessel} -> {to_vessel}: {shortest_path}") + except nx.NetworkXNoPath: + logger.error(f"无法找到从 '{from_vessel}' 到 '{to_vessel}' 的路径") + return pump_action_sequence - pumps_from_node, valve_from_node = build_pump_valve_maps(G, pump_backbone) + # 🔧 关键修复:正确构建泵骨架,排除容器和电磁阀 + pump_backbone = [] + for node in shortest_path: + # 跳过起始和结束容器 + if node == from_vessel or node == to_vessel: + continue + + # 跳过电磁阀(电磁阀不参与泵操作) + node_data = G.nodes.get(node, {}) + node_class = node_data.get("class", "") or "" + if ("solenoid" in node_class.lower() or "solenoid_valve" in node.lower()): + debug_print(f"PUMP_TRANSFER: 跳过电磁阀 {node}") + continue + + # 只包含多通阀和泵 + if ("multiway" in node_class.lower() or "valve" in node_class.lower() or "pump" in node_class.lower()): + pump_backbone.append(node) + + debug_print(f"PUMP_TRANSFER: 过滤后的泵骨架: {pump_backbone}") - min_transfer_volume = min([nodes[pumps_from_node[node]]["config"]["max_volume"] for node in pump_backbone]) - if time != 0: - flowrate = transfer_flowrate = volume / time + if not pump_backbone: + debug_print("PUMP_TRANSFER: 没有泵骨架节点,可能是直接容器连接或只有电磁阀") + return pump_action_sequence - pump_action_sequence = generate_pump_protocol(G, from_vessel, to_vessel, float(volume), flowrate, transfer_flowrate) - if rinsing_solvent != "air" and rinsing_solvent != "": + if transfer_flowrate == 0: + transfer_flowrate = flowrate + + try: + pumps_from_node, valve_from_node = build_pump_valve_maps(G, pump_backbone) + except Exception as e: + debug_print(f"PUMP_TRANSFER: 构建泵-阀门映射失败: {str(e)}") + return pump_action_sequence + + if not pumps_from_node: + debug_print("PUMP_TRANSFER: 没有可用的泵映射") + return pump_action_sequence + + # 🔧 修复:安全地获取最小转移体积 + try: + min_transfer_volumes = [] + for node in pump_backbone: + if node in pumps_from_node: + pump_node = pumps_from_node[node] + if pump_node in nodes: + pump_config = nodes[pump_node].get("config", {}) + max_volume = pump_config.get("max_volume") + if max_volume is not None: + min_transfer_volumes.append(max_volume) + + if min_transfer_volumes: + min_transfer_volume = min(min_transfer_volumes) + else: + min_transfer_volume = 25.0 # 默认值 + debug_print(f"PUMP_TRANSFER: 无法获取泵的最大体积,使用默认值: {min_transfer_volume}mL") + except Exception as e: + debug_print(f"PUMP_TRANSFER: 获取最小转移体积失败: {str(e)}") + min_transfer_volume = 25.0 # 默认值 + + repeats = int(np.ceil(volume / min_transfer_volume)) + + if repeats > 1 and (from_vessel.startswith("pump") or to_vessel.startswith("pump")): + logger.error("Cannot transfer volume larger than min_transfer_volume between two pumps.") + return pump_action_sequence + + volume_left = volume + debug_print(f"PUMP_TRANSFER: 需要 {repeats} 次转移,单次最大体积 {min_transfer_volume} mL") + + # 🆕 只在开头打印总体概览 + if repeats > 1: + debug_print(f"🔄 分批转移概览: 总体积 {volume:.2f}mL,需要 {repeats} 次转移") + logger.info(f"🔄 分批转移概览: 总体积 {volume:.2f}mL,需要 {repeats} 次转移") + + # 🔧 创建一个自定义的wait动作,用于在执行时打印日志 + def create_progress_log_action(message: str) -> Dict[str, Any]: + """创建一个特殊的等待动作,在执行时打印进度日志""" + return { + "action_name": "wait", + "action_kwargs": { + "time": 0.1, # 很短的等待时间 + "progress_message": message # 自定义字段,用于进度日志 + } + } + + # 生成泵操作序列 + for i in range(repeats): + current_volume = min(volume_left, min_transfer_volume) + + # 🆕 在每次循环开始时添加进度日志 + if repeats > 1: + start_message = f"🚀 准备开始第 {i+1}/{repeats} 次转移: {current_volume:.2f}mL ({from_vessel} → {to_vessel}) 🚰" + pump_action_sequence.append(create_progress_log_action(start_message)) + + # 🔧 修复:安全地获取边数据 + def get_safe_edge_data(node_a, node_b, key): + try: + edge_data = G.get_edge_data(node_a, node_b) + if edge_data and "port" in edge_data: + port_data = edge_data["port"] + if isinstance(port_data, dict) and key in port_data: + return port_data[key] + return "default" + except Exception as e: + debug_print(f"PUMP_TRANSFER: 获取边数据失败 {node_a}->{node_b}: {str(e)}") + return "default" + + # 从源容器吸液 + if not from_vessel.startswith("pump") and pump_backbone: + first_pump_node = pump_backbone[0] + if first_pump_node in valve_from_node and first_pump_node in pumps_from_node: + port_command = get_safe_edge_data(first_pump_node, from_vessel, first_pump_node) + pump_action_sequence.extend([ + { + "device_id": valve_from_node[first_pump_node], + "action_name": "set_valve_position", + "action_kwargs": { + "command": port_command + } + }, + { + "device_id": pumps_from_node[first_pump_node], + "action_name": "set_position", + "action_kwargs": { + "position": float(current_volume), + "max_velocity": transfer_flowrate + } + } + ]) + pump_action_sequence.append({"action_name": "wait", "action_kwargs": {"time": 3}}) + + # 泵间转移 + for nodeA, nodeB in zip(pump_backbone[:-1], pump_backbone[1:]): + if nodeA in valve_from_node and nodeB in valve_from_node and nodeA in pumps_from_node and nodeB in pumps_from_node: + port_a = get_safe_edge_data(nodeA, nodeB, nodeA) + port_b = get_safe_edge_data(nodeB, nodeA, nodeB) + + pump_action_sequence.append([ + { + "device_id": valve_from_node[nodeA], + "action_name": "set_valve_position", + "action_kwargs": { + "command": port_a + } + }, + { + "device_id": valve_from_node[nodeB], + "action_name": "set_valve_position", + "action_kwargs": { + "command": port_b + } + } + ]) + pump_action_sequence.append([ + { + "device_id": pumps_from_node[nodeA], + "action_name": "set_position", + "action_kwargs": { + "position": 0.0, + "max_velocity": transfer_flowrate + } + }, + { + "device_id": pumps_from_node[nodeB], + "action_name": "set_position", + "action_kwargs": { + "position": float(current_volume), + "max_velocity": transfer_flowrate + } + } + ]) + pump_action_sequence.append({"action_name": "wait", "action_kwargs": {"time": 3}}) + + # 排液到目标容器 + if not to_vessel.startswith("pump") and pump_backbone: + last_pump_node = pump_backbone[-1] + if last_pump_node in valve_from_node and last_pump_node in pumps_from_node: + port_command = get_safe_edge_data(last_pump_node, to_vessel, last_pump_node) + pump_action_sequence.extend([ + { + "device_id": valve_from_node[last_pump_node], + "action_name": "set_valve_position", + "action_kwargs": { + "command": port_command + } + }, + { + "device_id": pumps_from_node[last_pump_node], + "action_name": "set_position", + "action_kwargs": { + "position": 0.0, + "max_velocity": flowrate + } + } + ]) + pump_action_sequence.append({"action_name": "wait", "action_kwargs": {"time": 3}}) + + # 🆕 在每次循环结束时添加完成日志 + if repeats > 1: + remaining_volume = volume_left - current_volume + if remaining_volume > 0: + end_message = f"✅ 第 {i+1}/{repeats} 次转移完成! 剩余 {remaining_volume:.2f}mL 待转移 ⏳" + else: + end_message = f"🎉 第 {i+1}/{repeats} 次转移完成! 全部 {volume:.2f}mL 转移完毕 ✨" + + pump_action_sequence.append(create_progress_log_action(end_message)) + + volume_left -= current_volume + + return pump_action_sequence + + +def generate_pump_protocol_with_rinsing( + G: nx.DiGraph, + from_vessel: str, + to_vessel: str, + volume: float = 0.0, + amount: str = "", + time: float = 0.0, # 🔧 修复:统一使用 time + viscous: bool = False, + rinsing_solvent: str = "", + rinsing_volume: float = 0.0, + rinsing_repeats: int = 0, + solid: bool = False, + flowrate: float = 2.5, + transfer_flowrate: float = 0.5, + rate_spec: str = "", + event: str = "", + through: str = "", + **kwargs +) -> List[Dict[str, Any]]: + """ + 增强兼容性的泵转移协议生成器,支持自动体积检测 + """ + debug_print("=" * 60) + debug_print(f"PUMP_TRANSFER: 🚀 开始生成协议") + debug_print(f" 📍 路径: {from_vessel} -> {to_vessel}") + debug_print(f" 🕐 时间戳: {time_module.time()}") + debug_print(f" 📊 原始参数:") + debug_print(f" - volume: {volume} (类型: {type(volume)})") + debug_print(f" - amount: '{amount}'") + debug_print(f" - time: {time}") # 🔧 修复:统一使用 time + debug_print(f" - flowrate: {flowrate}") + debug_print(f" - transfer_flowrate: {transfer_flowrate}") + debug_print(f" - rate_spec: '{rate_spec}'") + debug_print("=" * 60) + + # ========== 🔧 核心修复:智能体积处理 ========== + + debug_print("🔍 步骤1: 开始体积处理...") + + # 1. 处理体积参数 + final_volume = volume + debug_print(f"📋 初始设置: final_volume = {final_volume}") + + # 🔧 修复:如果volume为0(ROS2传入的空值),从容器读取实际体积 + if volume == 0.0: + debug_print("🎯 检测到 volume=0.0,开始自动体积检测...") + + # 直接从源容器读取实际体积 + actual_volume = get_vessel_liquid_volume(G, from_vessel) + debug_print(f"📖 从容器 '{from_vessel}' 读取到体积: {actual_volume}mL") + + if actual_volume > 0: + final_volume = actual_volume + debug_print(f"✅ 成功设置体积为: {final_volume}mL") + else: + final_volume = 10.0 # 如果读取失败,使用默认值 + debug_print(f"⚠️ 无法从容器读取体积,使用默认值: {final_volume}mL") + else: + debug_print(f"📌 体积非零,直接使用: {final_volume}mL") + + # 处理 amount 参数 + if amount and amount.strip(): + debug_print(f"🔍 检测到 amount 参数: '{amount}',开始解析...") + parsed_volume = _parse_amount_to_volume(amount) + debug_print(f"📖 从 amount 解析得到体积: {parsed_volume}mL") + + if parsed_volume > 0: + final_volume = parsed_volume + debug_print(f"✅ 使用从 amount 解析的体积: {final_volume}mL") + elif parsed_volume == 0.0 and amount.lower().strip() == "all": + debug_print("🎯 检测到 amount='all',从容器读取全部体积...") + actual_volume = get_vessel_liquid_volume(G, from_vessel) + if actual_volume > 0: + final_volume = actual_volume + debug_print(f"✅ amount='all',设置体积为: {final_volume}mL") + + # 最终体积验证 + debug_print(f"🔍 步骤2: 最终体积验证...") + if final_volume <= 0: + debug_print(f"❌ 体积无效: {final_volume}mL") + final_volume = 10.0 + debug_print(f"⚠️ 强制设置为默认值: {final_volume}mL") + + debug_print(f"✅ 最终确定体积: {final_volume}mL") + + # 2. 处理流速参数 + debug_print(f"🔍 步骤3: 处理流速参数...") + debug_print(f" - 原始 flowrate: {flowrate}") + debug_print(f" - 原始 transfer_flowrate: {transfer_flowrate}") + + final_flowrate = flowrate if flowrate > 0 else 2.5 + final_transfer_flowrate = transfer_flowrate if transfer_flowrate > 0 else 0.5 + + if flowrate <= 0: + debug_print(f"⚠️ flowrate <= 0,修正为: {final_flowrate}mL/s") + if transfer_flowrate <= 0: + debug_print(f"⚠️ transfer_flowrate <= 0,修正为: {final_transfer_flowrate}mL/s") + + debug_print(f"✅ 修正后流速: flowrate={final_flowrate}mL/s, transfer_flowrate={final_transfer_flowrate}mL/s") + + # 3. 根据时间计算流速 + if time > 0 and final_volume > 0: # 🔧 修复:统一使用 time + debug_print(f"🔍 步骤4: 根据时间计算流速...") + calculated_flowrate = final_volume / time + debug_print(f" - 计算得到流速: {calculated_flowrate}mL/s") + + if flowrate <= 0 or flowrate == 2.5: + final_flowrate = min(calculated_flowrate, 10.0) + debug_print(f" - 调整 flowrate 为: {final_flowrate}mL/s") + if transfer_flowrate <= 0 or transfer_flowrate == 0.5: + final_transfer_flowrate = min(calculated_flowrate, 5.0) + debug_print(f" - 调整 transfer_flowrate 为: {final_transfer_flowrate}mL/s") + + # 4. 根据速度规格调整 + if rate_spec: + debug_print(f"🔍 步骤5: 根据速度规格调整...") + debug_print(f" - 速度规格: '{rate_spec}'") + + if rate_spec == "dropwise": + final_flowrate = min(final_flowrate, 0.1) + final_transfer_flowrate = min(final_transfer_flowrate, 0.1) + debug_print(f" - dropwise模式,流速调整为: {final_flowrate}mL/s") + elif rate_spec == "slowly": + final_flowrate = min(final_flowrate, 0.5) + final_transfer_flowrate = min(final_transfer_flowrate, 0.3) + debug_print(f" - slowly模式,流速调整为: {final_flowrate}mL/s") + elif rate_spec == "quickly": + final_flowrate = max(final_flowrate, 5.0) + final_transfer_flowrate = max(final_transfer_flowrate, 2.0) + debug_print(f" - quickly模式,流速调整为: {final_flowrate}mL/s") + + # # 5. 处理冲洗参数 + # debug_print(f"🔍 步骤6: 处理冲洗参数...") + # final_rinsing_solvent = rinsing_solvent + # final_rinsing_volume = rinsing_volume if rinsing_volume > 0 else 5.0 + # final_rinsing_repeats = rinsing_repeats if rinsing_repeats > 0 else 2 + + # if rinsing_volume <= 0: + # debug_print(f"⚠️ rinsing_volume <= 0,修正为: {final_rinsing_volume}mL") + # if rinsing_repeats <= 0: + # debug_print(f"⚠️ rinsing_repeats <= 0,修正为: {final_rinsing_repeats}次") + + # # 根据物理属性调整冲洗参数 + # if viscous or solid: + # final_rinsing_repeats = max(final_rinsing_repeats, 3) + # final_rinsing_volume = max(final_rinsing_volume, 10.0) + # debug_print(f"🧪 粘稠/固体物质,调整冲洗参数:{final_rinsing_repeats}次,{final_rinsing_volume}mL") + + # 参数总结 + debug_print("📊 最终参数总结:") + debug_print(f" - 体积: {final_volume}mL") + debug_print(f" - 流速: {final_flowrate}mL/s") + debug_print(f" - 转移流速: {final_transfer_flowrate}mL/s") + # debug_print(f" - 冲洗溶剂: '{final_rinsing_solvent}'") + # debug_print(f" - 冲洗体积: {final_rinsing_volume}mL") + # debug_print(f" - 冲洗次数: {final_rinsing_repeats}次") + + # ========== 执行基础转移 ========== + + debug_print("🔧 步骤7: 开始执行基础转移...") + + try: + debug_print(f" - 调用 generate_pump_protocol...") + debug_print(f" - 参数: G, '{from_vessel}', '{to_vessel}', {final_volume}, {final_flowrate}, {final_transfer_flowrate}") + + pump_action_sequence = generate_pump_protocol( + G, from_vessel, to_vessel, final_volume, + final_flowrate, final_transfer_flowrate + ) + + debug_print(f" - generate_pump_protocol 返回结果:") + debug_print(f" - 动作序列长度: {len(pump_action_sequence)}") + debug_print(f" - 动作序列是否为空: {len(pump_action_sequence) == 0}") + + if not pump_action_sequence: + debug_print("❌ 基础转移协议生成为空,可能是路径问题") + debug_print(f" - 源容器存在: {from_vessel in G.nodes()}") + debug_print(f" - 目标容器存在: {to_vessel in G.nodes()}") + + if from_vessel in G.nodes() and to_vessel in G.nodes(): + try: + path = nx.shortest_path(G, source=from_vessel, target=to_vessel) + debug_print(f" - 路径存在: {path}") + except Exception as path_error: + debug_print(f" - 无法找到路径: {str(path_error)}") + + return [ + { + "device_id": "system", + "action_name": "log_message", + "action_kwargs": { + "message": f"⚠️ 路径问题,无法转移: {final_volume}mL 从 {from_vessel} 到 {to_vessel}" + } + } + ] + + debug_print(f"✅ 基础转移生成了 {len(pump_action_sequence)} 个动作") + + # 打印前几个动作用于调试 + if len(pump_action_sequence) > 0: + debug_print("🔍 前几个动作预览:") + for i, action in enumerate(pump_action_sequence[:3]): + debug_print(f" 动作 {i+1}: {action}") + if len(pump_action_sequence) > 3: + debug_print(f" ... 还有 {len(pump_action_sequence) - 3} 个动作") + + except Exception as e: + debug_print(f"❌ 基础转移失败: {str(e)}") + import traceback + debug_print(f"详细错误: {traceback.format_exc()}") + return [ + { + "device_id": "system", + "action_name": "log_message", + "action_kwargs": { + "message": f"❌ 转移失败: {final_volume}mL 从 {from_vessel} 到 {to_vessel}, 错误: {str(e)}" + } + } + ] + + # ========== 执行冲洗操作 ========== + + # debug_print("🔧 步骤8: 检查冲洗操作...") + + # if final_rinsing_solvent and final_rinsing_solvent.strip() and final_rinsing_repeats > 0: + # debug_print(f"🧽 开始冲洗操作,溶剂: '{final_rinsing_solvent}'") + + # try: + # if final_rinsing_solvent.strip() != "air": + # debug_print(" - 执行液体冲洗...") + # rinsing_actions = _generate_rinsing_sequence( + # G, from_vessel, to_vessel, final_rinsing_solvent, + # final_rinsing_volume, final_rinsing_repeats, + # final_flowrate, final_transfer_flowrate + # ) + # pump_action_sequence.extend(rinsing_actions) + # debug_print(f" - 添加了 {len(rinsing_actions)} 个冲洗动作") + # else: + # debug_print(" - 执行空气冲洗...") + # air_rinsing_actions = _generate_air_rinsing_sequence( + # G, from_vessel, to_vessel, final_rinsing_volume, final_rinsing_repeats, + # final_flowrate, final_transfer_flowrate + # ) + # pump_action_sequence.extend(air_rinsing_actions) + # debug_print(f" - 添加了 {len(air_rinsing_actions)} 个空气冲洗动作") + # except Exception as e: + # debug_print(f"⚠️ 冲洗操作失败: {str(e)},跳过冲洗") + # else: + # debug_print(f"⏭️ 跳过冲洗操作") + # debug_print(f" - 溶剂: '{final_rinsing_solvent}'") + # debug_print(f" - 次数: {final_rinsing_repeats}") + # debug_print(f" - 条件满足: {bool(final_rinsing_solvent and final_rinsing_solvent.strip() and final_rinsing_repeats > 0)}") + + # ========== 最终结果 ========== + + debug_print("=" * 60) + debug_print(f"🎉 PUMP_TRANSFER: 协议生成完成") + debug_print(f" 📊 总动作数: {len(pump_action_sequence)}") + debug_print(f" 📋 最终体积: {final_volume}mL") + debug_print(f" 🚀 执行路径: {from_vessel} -> {to_vessel}") + + # 最终验证 + if len(pump_action_sequence) == 0: + debug_print("🚨 协议生成结果为空!这是异常情况") + return [ + { + "device_id": "system", + "action_name": "log_message", + "action_kwargs": { + "message": f"🚨 协议生成失败: 无法生成任何动作序列" + } + } + ] + + debug_print("=" * 60) + return pump_action_sequence + + +async def generate_pump_protocol_with_rinsing_async( + G: nx.DiGraph, + from_vessel: str, + to_vessel: str, + volume: float = 0.0, + amount: str = "", + time: float = 0.0, + viscous: bool = False, + rinsing_solvent: str = "", + rinsing_volume: float = 0.0, + rinsing_repeats: int = 0, + solid: bool = False, + flowrate: float = 2.5, + transfer_flowrate: float = 0.5, + rate_spec: str = "", + event: str = "", + through: str = "", + **kwargs +) -> List[Dict[str, Any]]: + """ + 异步版本的泵转移协议生成器,避免并发问题 + """ + debug_print("=" * 60) + debug_print(f"PUMP_TRANSFER: 🚀 开始生成协议 (异步版本)") + debug_print(f" 📍 路径: {from_vessel} -> {to_vessel}") + debug_print(f" 🕐 时间戳: {time_module.time()}") + debug_print("=" * 60) + + # 添加唯一标识符 + protocol_id = f"pump_transfer_{int(time_module.time() * 1000000)}" + debug_print(f"📋 协议ID: {protocol_id}") + + # 调用原有的同步版本 + result = generate_pump_protocol_with_rinsing( + G, from_vessel, to_vessel, volume, amount, time, viscous, + rinsing_solvent, rinsing_volume, rinsing_repeats, solid, + flowrate, transfer_flowrate, rate_spec, event, through, **kwargs + ) + + # 为每个动作添加唯一标识 + for i, action in enumerate(result): + if isinstance(action, dict): + action['_protocol_id'] = protocol_id + action['_action_sequence'] = i + action['_timestamp'] = time_module.time() + + debug_print(f"📊 协议 {protocol_id} 生成完成,共 {len(result)} 个动作") + return result + +# 保持原有的同步版本兼容性 +def generate_pump_protocol_with_rinsing( + G: nx.DiGraph, + from_vessel: str, + to_vessel: str, + volume: float = 0.0, + amount: str = "", + time: float = 0.0, + viscous: bool = False, + rinsing_solvent: str = "", + rinsing_volume: float = 0.0, + rinsing_repeats: int = 0, + solid: bool = False, + flowrate: float = 2.5, + transfer_flowrate: float = 0.5, + rate_spec: str = "", + event: str = "", + through: str = "", + **kwargs +) -> List[Dict[str, Any]]: + """ + 原有的同步版本,添加防冲突机制 + """ + + # 添加执行锁,防止并发调用 + import threading + if not hasattr(generate_pump_protocol_with_rinsing, '_lock'): + generate_pump_protocol_with_rinsing._lock = threading.Lock() + + with generate_pump_protocol_with_rinsing._lock: + debug_print("=" * 60) + debug_print(f"PUMP_TRANSFER: 🚀 开始生成协议 (同步版本)") + debug_print(f" 📍 路径: {from_vessel} -> {to_vessel}") + debug_print(f" 🕐 时间戳: {time_module.time()}") + debug_print(f" 🔒 获得执行锁") + debug_print("=" * 60) + + # 短暂延迟,避免快速重复调用 + time_module.sleep(0.01) + + debug_print("🔍 步骤1: 开始体积处理...") + + # 1. 处理体积参数 + final_volume = volume + debug_print(f"📋 初始设置: final_volume = {final_volume}") + + # 🔧 修复:如果volume为0(ROS2传入的空值),从容器读取实际体积 + if volume == 0.0: + debug_print("🎯 检测到 volume=0.0,开始自动体积检测...") + + # 直接从源容器读取实际体积 + actual_volume = get_vessel_liquid_volume(G, from_vessel) + debug_print(f"📖 从容器 '{from_vessel}' 读取到体积: {actual_volume}mL") + + if actual_volume > 0: + final_volume = actual_volume + debug_print(f"✅ 成功设置体积为: {final_volume}mL") + else: + final_volume = 10.0 # 如果读取失败,使用默认值 + logger.warning(f"⚠️ 无法从容器读取体积,使用默认值: {final_volume}mL") + else: + debug_print(f"📌 体积非零,直接使用: {final_volume}mL") + + # 处理 amount 参数 + if amount and amount.strip(): + debug_print(f"🔍 检测到 amount 参数: '{amount}',开始解析...") + parsed_volume = _parse_amount_to_volume(amount) + debug_print(f"📖 从 amount 解析得到体积: {parsed_volume}mL") + + if parsed_volume > 0: + final_volume = parsed_volume + debug_print(f"✅ 使用从 amount 解析的体积: {final_volume}mL") + elif parsed_volume == 0.0 and amount.lower().strip() == "all": + debug_print("🎯 检测到 amount='all',从容器读取全部体积...") + actual_volume = get_vessel_liquid_volume(G, from_vessel) + if actual_volume > 0: + final_volume = actual_volume + debug_print(f"✅ amount='all',设置体积为: {final_volume}mL") + + # 最终体积验证 + debug_print(f"🔍 步骤2: 最终体积验证...") + if final_volume <= 0: + logger.error(f"❌ 体积无效: {final_volume}mL") + final_volume = 10.0 + logger.warning(f"⚠️ 强制设置为默认值: {final_volume}mL") + + debug_print(f"✅ 最终确定体积: {final_volume}mL") + + # 2. 处理流速参数 + debug_print(f"🔍 步骤3: 处理流速参数...") + debug_print(f" - 原始 flowrate: {flowrate}") + debug_print(f" - 原始 transfer_flowrate: {transfer_flowrate}") + + final_flowrate = flowrate if flowrate > 0 else 2.5 + final_transfer_flowrate = transfer_flowrate if transfer_flowrate > 0 else 0.5 + + if flowrate <= 0: + logger.warning(f"⚠️ flowrate <= 0,修正为: {final_flowrate}mL/s") + if transfer_flowrate <= 0: + logger.warning(f"⚠️ transfer_flowrate <= 0,修正为: {final_transfer_flowrate}mL/s") + + debug_print(f"✅ 修正后流速: flowrate={final_flowrate}mL/s, transfer_flowrate={final_transfer_flowrate}mL/s") + + # 3. 根据时间计算流速 + if time > 0 and final_volume > 0: + debug_print(f"🔍 步骤4: 根据时间计算流速...") + calculated_flowrate = final_volume / time + debug_print(f" - 计算得到流速: {calculated_flowrate}mL/s") + + if flowrate <= 0 or flowrate == 2.5: + final_flowrate = min(calculated_flowrate, 10.0) + debug_print(f" - 调整 flowrate 为: {final_flowrate}mL/s") + if transfer_flowrate <= 0 or transfer_flowrate == 0.5: + final_transfer_flowrate = min(calculated_flowrate, 5.0) + debug_print(f" - 调整 transfer_flowrate 为: {final_transfer_flowrate}mL/s") + + # 4. 根据速度规格调整 + if rate_spec: + debug_print(f"🔍 步骤5: 根据速度规格调整...") + debug_print(f" - 速度规格: '{rate_spec}'") + + if rate_spec == "dropwise": + final_flowrate = min(final_flowrate, 0.1) + final_transfer_flowrate = min(final_transfer_flowrate, 0.1) + debug_print(f" - dropwise模式,流速调整为: {final_flowrate}mL/s") + elif rate_spec == "slowly": + final_flowrate = min(final_flowrate, 0.5) + final_transfer_flowrate = min(final_transfer_flowrate, 0.3) + debug_print(f" - slowly模式,流速调整为: {final_flowrate}mL/s") + elif rate_spec == "quickly": + final_flowrate = max(final_flowrate, 5.0) + final_transfer_flowrate = max(final_transfer_flowrate, 2.0) + debug_print(f" - quickly模式,流速调整为: {final_flowrate}mL/s") + + # # 5. 处理冲洗参数 + # debug_print(f"🔍 步骤6: 处理冲洗参数...") + # final_rinsing_solvent = rinsing_solvent + # final_rinsing_volume = rinsing_volume if rinsing_volume > 0 else 5.0 + # final_rinsing_repeats = rinsing_repeats if rinsing_repeats > 0 else 2 + + # if rinsing_volume <= 0: + # logger.warning(f"⚠️ rinsing_volume <= 0,修正为: {final_rinsing_volume}mL") + # if rinsing_repeats <= 0: + # logger.warning(f"⚠️ rinsing_repeats <= 0,修正为: {final_rinsing_repeats}次") + + # # 根据物理属性调整冲洗参数 + # if viscous or solid: + # final_rinsing_repeats = max(final_rinsing_repeats, 3) + # final_rinsing_volume = max(final_rinsing_volume, 10.0) + # debug_print(f"🧪 粘稠/固体物质,调整冲洗参数:{final_rinsing_repeats}次,{final_rinsing_volume}mL") + + # 参数总结 + debug_print("📊 最终参数总结:") + debug_print(f" - 体积: {final_volume}mL") + debug_print(f" - 流速: {final_flowrate}mL/s") + debug_print(f" - 转移流速: {final_transfer_flowrate}mL/s") + # debug_print(f" - 冲洗溶剂: '{final_rinsing_solvent}'") + # debug_print(f" - 冲洗体积: {final_rinsing_volume}mL") + # debug_print(f" - 冲洗次数: {final_rinsing_repeats}次") + + # ========== 执行基础转移 ========== + + debug_print("🔧 步骤7: 开始执行基础转移...") + + try: + debug_print(f" - 调用 generate_pump_protocol...") + debug_print(f" - 参数: G, '{from_vessel}', '{to_vessel}', {final_volume}, {final_flowrate}, {final_transfer_flowrate}") + + pump_action_sequence = generate_pump_protocol( + G, from_vessel, to_vessel, final_volume, + final_flowrate, final_transfer_flowrate + ) + + debug_print(f" - generate_pump_protocol 返回结果:") + debug_print(f" - 动作序列长度: {len(pump_action_sequence)}") + debug_print(f" - 动作序列是否为空: {len(pump_action_sequence) == 0}") + + if not pump_action_sequence: + debug_print("❌ 基础转移协议生成为空,可能是路径问题") + debug_print(f" - 源容器存在: {from_vessel in G.nodes()}") + debug_print(f" - 目标容器存在: {to_vessel in G.nodes()}") + + if from_vessel in G.nodes() and to_vessel in G.nodes(): + try: + path = nx.shortest_path(G, source=from_vessel, target=to_vessel) + debug_print(f" - 路径存在: {path}") + except Exception as path_error: + debug_print(f" - 无法找到路径: {str(path_error)}") + + return [ + { + "device_id": "system", + "action_name": "log_message", + "action_kwargs": { + "message": f"⚠️ 路径问题,无法转移: {final_volume}mL 从 {from_vessel} 到 {to_vessel}" + } + } + ] + + debug_print(f"✅ 基础转移生成了 {len(pump_action_sequence)} 个动作") + + # 打印前几个动作用于调试 + if len(pump_action_sequence) > 0: + debug_print("🔍 前几个动作预览:") + for i, action in enumerate(pump_action_sequence[:3]): + debug_print(f" 动作 {i+1}: {action}") + if len(pump_action_sequence) > 3: + debug_print(f" ... 还有 {len(pump_action_sequence) - 3} 个动作") + + except Exception as e: + debug_print(f"❌ 基础转移失败: {str(e)}") + import traceback + debug_print(f"详细错误: {traceback.format_exc()}") + return [ + { + "device_id": "system", + "action_name": "log_message", + "action_kwargs": { + "message": f"❌ 转移失败: {final_volume}mL 从 {from_vessel} 到 {to_vessel}, 错误: {str(e)}" + } + } + ] + + # ========== 执行冲洗操作 ========== + + # debug_print("🔧 步骤8: 检查冲洗操作...") + + # if final_rinsing_solvent and final_rinsing_solvent.strip() and final_rinsing_repeats > 0: + # debug_print(f"🧽 开始冲洗操作,溶剂: '{final_rinsing_solvent}'") + + # try: + # if final_rinsing_solvent.strip() != "air": + # debug_print(" - 执行液体冲洗...") + # rinsing_actions = _generate_rinsing_sequence( + # G, from_vessel, to_vessel, final_rinsing_solvent, + # final_rinsing_volume, final_rinsing_repeats, + # final_flowrate, final_transfer_flowrate + # ) + # pump_action_sequence.extend(rinsing_actions) + # debug_print(f" - 添加了 {len(rinsing_actions)} 个冲洗动作") + # else: + # debug_print(" - 执行空气冲洗...") + # air_rinsing_actions = _generate_air_rinsing_sequence( + # G, from_vessel, to_vessel, final_rinsing_volume, final_rinsing_repeats, + # final_flowrate, final_transfer_flowrate + # ) + # pump_action_sequence.extend(air_rinsing_actions) + # debug_print(f" - 添加了 {len(air_rinsing_actions)} 个空气冲洗动作") + # except Exception as e: + # debug_print(f"⚠️ 冲洗操作失败: {str(e)},跳过冲洗") + # else: + # debug_print(f"⏭️ 跳过冲洗操作") + # debug_print(f" - 溶剂: '{final_rinsing_solvent}'") + # debug_print(f" - 次数: {final_rinsing_repeats}") + # debug_print(f" - 条件满足: {bool(final_rinsing_solvent and final_rinsing_solvent.strip() and final_rinsing_repeats > 0)}") + + # ========== 最终结果 ========== + + debug_print("=" * 60) + debug_print(f"🎉 PUMP_TRANSFER: 协议生成完成") + debug_print(f" 📊 总动作数: {len(pump_action_sequence)}") + debug_print(f" 📋 最终体积: {final_volume}mL") + debug_print(f" 🚀 执行路径: {from_vessel} -> {to_vessel}") + + # 最终验证 + if len(pump_action_sequence) == 0: + debug_print("🚨 协议生成结果为空!这是异常情况") + return [ + { + "device_id": "system", + "action_name": "log_message", + "action_kwargs": { + "message": f"🚨 协议生成失败: 无法生成任何动作序列" + } + } + ] + + debug_print("=" * 60) + return pump_action_sequence + + +async def generate_pump_protocol_with_rinsing_async( + G: nx.DiGraph, + from_vessel: str, + to_vessel: str, + volume: float = 0.0, + amount: str = "", + time: float = 0.0, + viscous: bool = False, + rinsing_solvent: str = "", + rinsing_volume: float = 0.0, + rinsing_repeats: int = 0, + solid: bool = False, + flowrate: float = 2.5, + transfer_flowrate: float = 0.5, + rate_spec: str = "", + event: str = "", + through: str = "", + **kwargs +) -> List[Dict[str, Any]]: + """ + 异步版本的泵转移协议生成器,避免并发问题 + """ + debug_print("=" * 60) + debug_print(f"PUMP_TRANSFER: 🚀 开始生成协议 (异步版本)") + debug_print(f" 📍 路径: {from_vessel} -> {to_vessel}") + debug_print(f" 🕐 时间戳: {time_module.time()}") + debug_print("=" * 60) + + # 添加唯一标识符 + protocol_id = f"pump_transfer_{int(time_module.time() * 1000000)}" + debug_print(f"📋 协议ID: {protocol_id}") + + # 调用原有的同步版本 + result = generate_pump_protocol_with_rinsing( + G, from_vessel, to_vessel, volume, amount, time, viscous, + rinsing_solvent, rinsing_volume, rinsing_repeats, solid, + flowrate, transfer_flowrate, rate_spec, event, through, **kwargs + ) + + # 为每个动作添加唯一标识 + for i, action in enumerate(result): + if isinstance(action, dict): + action['_protocol_id'] = protocol_id + action['_action_sequence'] = i + action['_timestamp'] = time_module.time() + + debug_print(f"📊 协议 {protocol_id} 生成完成,共 {len(result)} 个动作") + return result + +# 保持原有的同步版本兼容性 +def generate_pump_protocol_with_rinsing( + G: nx.DiGraph, + from_vessel: str, + to_vessel: str, + volume: float = 0.0, + amount: str = "", + time: float = 0.0, + viscous: bool = False, + rinsing_solvent: str = "", + rinsing_volume: float = 0.0, + rinsing_repeats: int = 0, + solid: bool = False, + flowrate: float = 2.5, + transfer_flowrate: float = 0.5, + rate_spec: str = "", + event: str = "", + through: str = "", + **kwargs +) -> List[Dict[str, Any]]: + """ + 原有的同步版本,添加防冲突机制 + """ + + # 添加执行锁,防止并发调用 + import threading + if not hasattr(generate_pump_protocol_with_rinsing, '_lock'): + generate_pump_protocol_with_rinsing._lock = threading.Lock() + + with generate_pump_protocol_with_rinsing._lock: + debug_print("=" * 60) + debug_print(f"PUMP_TRANSFER: 🚀 开始生成协议 (同步版本)") + debug_print(f" 📍 路径: {from_vessel} -> {to_vessel}") + debug_print(f" 🕐 时间戳: {time_module.time()}") + debug_print(f" 🔒 获得执行锁") + debug_print("=" * 60) + + # 短暂延迟,避免快速重复调用 + time_module.sleep(0.01) + + debug_print("🔍 步骤1: 开始体积处理...") + + # 1. 处理体积参数 + final_volume = volume + debug_print(f"📋 初始设置: final_volume = {final_volume}") + + # 🔧 修复:如果volume为0(ROS2传入的空值),从容器读取实际体积 + if volume == 0.0: + debug_print("🎯 检测到 volume=0.0,开始自动体积检测...") + + # 直接从源容器读取实际体积 + actual_volume = get_vessel_liquid_volume(G, from_vessel) + debug_print(f"📖 从容器 '{from_vessel}' 读取到体积: {actual_volume}mL") + + if actual_volume > 0: + final_volume = actual_volume + debug_print(f"✅ 成功设置体积为: {final_volume}mL") + else: + final_volume = 10.0 # 如果读取失败,使用默认值 + logger.warning(f"⚠️ 无法从容器读取体积,使用默认值: {final_volume}mL") + else: + debug_print(f"📌 体积非零,直接使用: {final_volume}mL") + + # 处理 amount 参数 + if amount and amount.strip(): + debug_print(f"🔍 检测到 amount 参数: '{amount}',开始解析...") + parsed_volume = _parse_amount_to_volume(amount) + debug_print(f"📖 从 amount 解析得到体积: {parsed_volume}mL") + + if parsed_volume > 0: + final_volume = parsed_volume + debug_print(f"✅ 使用从 amount 解析的体积: {final_volume}mL") + elif parsed_volume == 0.0 and amount.lower().strip() == "all": + debug_print("🎯 检测到 amount='all',从容器读取全部体积...") + actual_volume = get_vessel_liquid_volume(G, from_vessel) + if actual_volume > 0: + final_volume = actual_volume + debug_print(f"✅ amount='all',设置体积为: {final_volume}mL") + + # 最终体积验证 + debug_print(f"🔍 步骤2: 最终体积验证...") + if final_volume <= 0: + logger.error(f"❌ 体积无效: {final_volume}mL") + final_volume = 10.0 + logger.warning(f"⚠️ 强制设置为默认值: {final_volume}mL") + + debug_print(f"✅ 最终确定体积: {final_volume}mL") + + # 2. 处理流速参数 + debug_print(f"🔍 步骤3: 处理流速参数...") + debug_print(f" - 原始 flowrate: {flowrate}") + debug_print(f" - 原始 transfer_flowrate: {transfer_flowrate}") + + final_flowrate = flowrate if flowrate > 0 else 2.5 + final_transfer_flowrate = transfer_flowrate if transfer_flowrate > 0 else 0.5 + + if flowrate <= 0: + logger.warning(f"⚠️ flowrate <= 0,修正为: {final_flowrate}mL/s") + if transfer_flowrate <= 0: + logger.warning(f"⚠️ transfer_flowrate <= 0,修正为: {final_transfer_flowrate}mL/s") + + debug_print(f"✅ 修正后流速: flowrate={final_flowrate}mL/s, transfer_flowrate={final_transfer_flowrate}mL/s") + + # 3. 根据时间计算流速 + if time > 0 and final_volume > 0: + debug_print(f"🔍 步骤4: 根据时间计算流速...") + calculated_flowrate = final_volume / time + debug_print(f" - 计算得到流速: {calculated_flowrate}mL/s") + + if flowrate <= 0 or flowrate == 2.5: + final_flowrate = min(calculated_flowrate, 10.0) + debug_print(f" - 调整 flowrate 为: {final_flowrate}mL/s") + if transfer_flowrate <= 0 or transfer_flowrate == 0.5: + final_transfer_flowrate = min(calculated_flowrate, 5.0) + debug_print(f" - 调整 transfer_flowrate 为: {final_transfer_flowrate}mL/s") + + # 4. 根据速度规格调整 + if rate_spec: + debug_print(f"🔍 步骤5: 根据速度规格调整...") + debug_print(f" - 速度规格: '{rate_spec}'") + + if rate_spec == "dropwise": + final_flowrate = min(final_flowrate, 0.1) + final_transfer_flowrate = min(final_transfer_flowrate, 0.1) + debug_print(f" - dropwise模式,流速调整为: {final_flowrate}mL/s") + elif rate_spec == "slowly": + final_flowrate = min(final_flowrate, 0.5) + final_transfer_flowrate = min(final_transfer_flowrate, 0.3) + debug_print(f" - slowly模式,流速调整为: {final_flowrate}mL/s") + elif rate_spec == "quickly": + final_flowrate = max(final_flowrate, 5.0) + final_transfer_flowrate = max(final_transfer_flowrate, 2.0) + debug_print(f" - quickly模式,流速调整为: {final_flowrate}mL/s") + + # # 5. 处理冲洗参数 + # debug_print(f"🔍 步骤6: 处理冲洗参数...") + # final_rinsing_solvent = rinsing_solvent + # final_rinsing_volume = rinsing_volume if rinsing_volume > 0 else 5.0 + # final_rinsing_repeats = rinsing_repeats if rinsing_repeats > 0 else 2 + + # if rinsing_volume <= 0: + # logger.warning(f"⚠️ rinsing_volume <= 0,修正为: {final_rinsing_volume}mL") + # if rinsing_repeats <= 0: + # logger.warning(f"⚠️ rinsing_repeats <= 0,修正为: {final_rinsing_repeats}次") + + # # 根据物理属性调整冲洗参数 + # if viscous or solid: + # final_rinsing_repeats = max(final_rinsing_repeats, 3) + # final_rinsing_volume = max(final_rinsing_volume, 10.0) + # debug_print(f"🧪 粘稠/固体物质,调整冲洗参数:{final_rinsing_repeats}次,{final_rinsing_volume}mL") + + try: + pump_action_sequence = generate_pump_protocol( + G, from_vessel, to_vessel, final_volume, + flowrate, transfer_flowrate + ) + + # 为每个动作添加唯一标识 + # for i, action in enumerate(pump_action_sequence): + # if isinstance(action, dict): + # action['_protocol_id'] = protocol_id + # action['_action_sequence'] = i + # elif isinstance(action, list): + # for j, sub_action in enumerate(action): + # if isinstance(sub_action, dict): + # sub_action['_protocol_id'] = protocol_id + # sub_action['_action_sequence'] = f"{i}_{j}" + # + # debug_print(f"📊 协议 {protocol_id} 生成完成,共 {len(pump_action_sequence)} 个动作") + debug_print(f"🔓 释放执行锁") + return pump_action_sequence + + except Exception as e: + logger.error(f"❌ 协议生成失败: {str(e)}") + return [ + { + "device_id": "system", + "action_name": "log_message", + "action_kwargs": { + "message": f"❌ 协议生成失败: {str(e)}" + } + } + ] + +def _parse_amount_to_volume(amount: str) -> float: + """解析 amount 字符串为体积""" + debug_print(f"🔍 解析 amount: '{amount}'") + + if not amount: + debug_print(" - amount 为空,返回 0.0") + return 0.0 + + amount = amount.lower().strip() + debug_print(f" - 处理后的 amount: '{amount}'") + + # 处理特殊关键词 + if amount == "all": + debug_print(" - 检测到 'all',返回 0.0(需要后续处理)") + return 0.0 # 返回0.0,让调用者处理 + + # 提取数字 + import re + numbers = re.findall(r'[\d.]+', amount) + debug_print(f" - 提取到的数字: {numbers}") + + if numbers: + volume = float(numbers[0]) + debug_print(f" - 基础体积: {volume}") + + # 单位转换 + if 'ml' in amount or 'milliliter' in amount: + debug_print(f" - 单位: mL,最终体积: {volume}") + return volume + elif 'l' in amount and 'ml' not in amount: + final_volume = volume * 1000 + debug_print(f" - 单位: L,最终体积: {final_volume}mL") + return final_volume + elif 'μl' in amount or 'microliter' in amount: + final_volume = volume / 1000 + debug_print(f" - 单位: μL,最终体积: {final_volume}mL") + return final_volume + else: + debug_print(f" - 无单位,假设为 mL: {volume}") + return volume + + debug_print(" - 无法解析,返回 0.0") + return 0.0 + + +def _generate_rinsing_sequence(G: nx.DiGraph, from_vessel: str, to_vessel: str, + rinsing_solvent: str, rinsing_volume: float, + rinsing_repeats: int, flowrate: float, + transfer_flowrate: float) -> List[Dict[str, Any]]: + """生成冲洗动作序列""" + rinsing_actions = [] + + try: + shortest_path = nx.shortest_path(G, source=from_vessel, target=to_vessel) + pump_backbone = shortest_path[1:-1] + + if not pump_backbone: + return rinsing_actions + + nodes = G.nodes(data=True) + pumps_from_node, valve_from_node = build_pump_valve_maps(G, pump_backbone) + min_transfer_volume = min([nodes[pumps_from_node[node]]["config"]["max_volume"] for node in pump_backbone]) + + waste_vessel = "waste_workup" + + # 处理多种溶剂情况 if "," in rinsing_solvent: rinsing_solvents = rinsing_solvent.split(",") - assert len( - rinsing_solvents) == rinsing_repeats, "Number of rinsing solvents must match number of rinsing repeats." + if len(rinsing_solvents) != rinsing_repeats: + rinsing_solvents = [rinsing_solvent] * rinsing_repeats else: rinsing_solvents = [rinsing_solvent] * rinsing_repeats - for rinsing_solvent in rinsing_solvents: - solvent_vessel = f"flask_{rinsing_solvent}" - # 清洗泵 - pump_action_sequence.extend( - generate_pump_protocol(G, solvent_vessel, pump_backbone[0], min_transfer_volume, flowrate, - transfer_flowrate) + - generate_pump_protocol(G, pump_backbone[0], pump_backbone[-1], min_transfer_volume, flowrate, - transfer_flowrate) + - generate_pump_protocol(G, pump_backbone[-1], waste_vessel, min_transfer_volume, flowrate, - transfer_flowrate) - ) - # 如果转移的是溶液,第一种冲洗溶剂请选用溶液的溶剂,稀释泵内、转移管道内的溶液。后续冲洗溶剂不需要此操作。 - if rinsing_solvent == rinsing_solvents[0]: - pump_action_sequence.extend( - generate_pump_protocol(G, solvent_vessel, from_vessel, rinsing_volume, flowrate, transfer_flowrate)) - pump_action_sequence.extend( - generate_pump_protocol(G, solvent_vessel, to_vessel, rinsing_volume, flowrate, transfer_flowrate)) - pump_action_sequence.extend( - generate_pump_protocol(G, air_vessel, solvent_vessel, rinsing_volume, flowrate, transfer_flowrate)) - pump_action_sequence.extend( - generate_pump_protocol(G, air_vessel, waste_vessel, rinsing_volume, flowrate, transfer_flowrate)) - if rinsing_solvent != "": - pump_action_sequence.extend( - generate_pump_protocol(G, air_vessel, from_vessel, rinsing_volume, flowrate, transfer_flowrate) * 2) - pump_action_sequence.extend( - generate_pump_protocol(G, air_vessel, to_vessel, rinsing_volume, flowrate, transfer_flowrate) * 2) + for solvent in rinsing_solvents: + solvent_vessel = f"flask_{solvent.strip()}" - return pump_action_sequence -# End Protocols + # 检查溶剂容器是否存在 + if solvent_vessel not in G.nodes(): + logger.warning(f"溶剂容器 {solvent_vessel} 不存在,跳过该溶剂冲洗") + continue + + # 清洗泵系统 + rinsing_actions.extend( + generate_pump_protocol(G, solvent_vessel, pump_backbone[0], min_transfer_volume, flowrate, transfer_flowrate) + ) + + if len(pump_backbone) > 1: + rinsing_actions.extend( + generate_pump_protocol(G, pump_backbone[0], pump_backbone[-1], min_transfer_volume, flowrate, transfer_flowrate) + ) + + # 排到废液容器 + if waste_vessel in G.nodes(): + rinsing_actions.extend( + generate_pump_protocol(G, pump_backbone[-1], waste_vessel, min_transfer_volume, flowrate, transfer_flowrate) + ) + + # 第一种冲洗溶剂稀释源容器和目标容器 + if solvent == rinsing_solvents[0]: + rinsing_actions.extend( + generate_pump_protocol(G, solvent_vessel, from_vessel, rinsing_volume, flowrate, transfer_flowrate) + ) + rinsing_actions.extend( + generate_pump_protocol(G, solvent_vessel, to_vessel, rinsing_volume, flowrate, transfer_flowrate) + ) + + except Exception as e: + logger.error(f"生成冲洗序列失败: {str(e)}") + + return rinsing_actions + + +def _generate_air_rinsing_sequence(G: nx.DiGraph, from_vessel: str, to_vessel: str, + rinsing_volume: float, repeats: int, + flowrate: float, transfer_flowrate: float) -> List[Dict[str, Any]]: + """生成空气冲洗序列""" + air_rinsing_actions = [] + + try: + air_vessel = "flask_air" + if air_vessel not in G.nodes(): + logger.warning("空气容器 flask_air 不存在,跳过空气冲洗") + return air_rinsing_actions + + for _ in range(repeats): + # 空气冲洗源容器 + air_rinsing_actions.extend( + generate_pump_protocol(G, air_vessel, from_vessel, rinsing_volume, flowrate, transfer_flowrate) + ) + + # 空气冲洗目标容器 + air_rinsing_actions.extend( + generate_pump_protocol(G, air_vessel, to_vessel, rinsing_volume, flowrate, transfer_flowrate) + ) + + except Exception as e: + logger.warning(f"空气冲洗失败: {str(e)}") + + return air_rinsing_actions diff --git a/unilabos/compile/recrystallize_protocol.py b/unilabos/compile/recrystallize_protocol.py new file mode 100644 index 0000000..7c15310 --- /dev/null +++ b/unilabos/compile/recrystallize_protocol.py @@ -0,0 +1,589 @@ +import networkx as nx +import re +import logging +from typing import List, Dict, Any, Tuple, Union +from .pump_protocol import generate_pump_protocol_with_rinsing + +logger = logging.getLogger(__name__) + +def debug_print(message): + """调试输出""" + print(f"💎 [RECRYSTALLIZE] {message}", flush=True) + logger.info(f"[RECRYSTALLIZE] {message}") + + +def parse_volume_with_units(volume_input: Union[str, float, int], default_unit: str = "mL") -> float: + """ + 解析带单位的体积输入 + + Args: + volume_input: 体积输入(如 "100 mL", "2.5 L", "500", "?", 100.0) + default_unit: 默认单位(默认为毫升) + + Returns: + float: 体积(毫升) + """ + if not volume_input: + debug_print("⚠️ 体积输入为空,返回 0.0mL 📦") + return 0.0 + + # 处理数值输入 + if isinstance(volume_input, (int, float)): + result = float(volume_input) + debug_print(f"🔢 数值体积输入: {volume_input} → {result}mL(默认单位)💧") + return result + + # 处理字符串输入 + volume_str = str(volume_input).lower().strip() + debug_print(f"🔍 解析体积字符串: '{volume_str}' 📝") + + # 处理特殊值 + if volume_str in ['?', 'unknown', 'tbd', 'to be determined']: + default_volume = 50.0 # 50mL默认值 + debug_print(f"❓ 检测到未知体积,使用默认值: {default_volume}mL 🎯") + return default_volume + + # 如果是纯数字,使用默认单位 + try: + value = float(volume_str) + if default_unit.lower() in ["ml", "milliliter"]: + result = value + elif default_unit.lower() in ["l", "liter"]: + result = value * 1000.0 + elif default_unit.lower() in ["μl", "ul", "microliter"]: + result = value / 1000.0 + else: + result = value # 默认mL + debug_print(f"🔢 纯数字输入: {volume_str} → {result}mL(单位: {default_unit})📏") + return result + except ValueError: + pass + + # 移除空格并提取数字和单位 + volume_clean = re.sub(r'\s+', '', volume_str) + + # 匹配数字和单位的正则表达式 + match = re.match(r'([0-9]*\.?[0-9]+)\s*(ml|l|μl|ul|microliter|milliliter|liter)?', volume_clean) + + if not match: + debug_print(f"⚠️ 无法解析体积: '{volume_str}',使用默认值: 50mL 🎯") + return 50.0 + + value = float(match.group(1)) + unit = match.group(2) or default_unit.lower() + + # 转换为毫升 + if unit in ['l', 'liter']: + volume = value * 1000.0 # L -> mL + debug_print(f"📏 升转毫升: {value}L → {volume}mL 💧") + elif unit in ['μl', 'ul', 'microliter']: + volume = value / 1000.0 # μL -> mL + debug_print(f"📏 微升转毫升: {value}μL → {volume}mL 💧") + else: # ml, milliliter 或默认 + volume = value # 已经是mL + debug_print(f"📏 毫升单位: {value}mL → {volume}mL 💧") + + debug_print(f"✅ 体积解析完成: '{volume_str}' → {volume}mL ✨") + return volume + + +def parse_ratio(ratio_str: str) -> Tuple[float, float]: + """ + 解析比例字符串,支持多种格式 + + Args: + ratio_str: 比例字符串(如 "1:1", "3:7", "50:50") + + Returns: + Tuple[float, float]: 比例元组 (ratio1, ratio2) + """ + debug_print(f"⚖️ 开始解析比例: '{ratio_str}' 📊") + + try: + # 处理 "1:1", "3:7", "50:50" 等格式 + if ":" in ratio_str: + parts = ratio_str.split(":") + if len(parts) == 2: + ratio1 = float(parts[0]) + ratio2 = float(parts[1]) + debug_print(f"✅ 冒号格式解析成功: {ratio1}:{ratio2} 🎯") + return ratio1, ratio2 + + # 处理 "1-1", "3-7" 等格式 + if "-" in ratio_str: + parts = ratio_str.split("-") + if len(parts) == 2: + ratio1 = float(parts[0]) + ratio2 = float(parts[1]) + debug_print(f"✅ 横线格式解析成功: {ratio1}:{ratio2} 🎯") + return ratio1, ratio2 + + # 处理 "1,1", "3,7" 等格式 + if "," in ratio_str: + parts = ratio_str.split(",") + if len(parts) == 2: + ratio1 = float(parts[0]) + ratio2 = float(parts[1]) + debug_print(f"✅ 逗号格式解析成功: {ratio1}:{ratio2} 🎯") + return ratio1, ratio2 + + # 默认 1:1 + debug_print(f"⚠️ 无法解析比例 '{ratio_str}',使用默认比例 1:1 🎭") + return 1.0, 1.0 + + except ValueError: + debug_print(f"❌ 比例解析错误 '{ratio_str}',使用默认比例 1:1 🎭") + return 1.0, 1.0 + + +def find_solvent_vessel(G: nx.DiGraph, solvent: str) -> str: + """ + 查找溶剂容器 + + Args: + G: 网络图 + solvent: 溶剂名称 + + Returns: + str: 溶剂容器ID + """ + debug_print(f"🔍 正在查找溶剂 '{solvent}' 的容器... 🧪") + + # 构建可能的容器名称 + possible_names = [ + f"flask_{solvent}", + f"bottle_{solvent}", + f"reagent_{solvent}", + f"reagent_bottle_{solvent}", + f"{solvent}_flask", + f"{solvent}_bottle", + f"{solvent}", + f"vessel_{solvent}", + ] + + debug_print(f"📋 候选容器名称: {possible_names[:3]}... (共{len(possible_names)}个) 📝") + + # 第一步:通过容器名称匹配 + debug_print(" 🎯 步骤1: 精确名称匹配...") + for vessel_name in possible_names: + if vessel_name in G.nodes(): + debug_print(f" 🎉 通过名称匹配找到容器: {vessel_name} ✨") + return vessel_name + + # 第二步:通过模糊匹配(节点ID和名称) + debug_print(" 🔍 步骤2: 模糊名称匹配...") + for node_id in G.nodes(): + if G.nodes[node_id].get('type') == 'container': + node_name = G.nodes[node_id].get('name', '').lower() + + if solvent.lower() in node_id.lower() or solvent.lower() in node_name: + debug_print(f" 🎉 通过模糊匹配找到容器: {node_id} (名称: {node_name}) ✨") + return node_id + + # 第三步:通过配置中的试剂信息匹配 + debug_print(" 🧪 步骤3: 配置试剂信息匹配...") + for node_id in G.nodes(): + if G.nodes[node_id].get('type') == 'container': + # 检查 config 中的 reagent 字段 + node_config = G.nodes[node_id].get('config', {}) + config_reagent = node_config.get('reagent', '').lower() + + if config_reagent and solvent.lower() == config_reagent: + debug_print(f" 🎉 通过config.reagent匹配找到容器: {node_id} (试剂: {config_reagent}) ✨") + return node_id + + # 第四步:通过数据中的试剂信息匹配 + debug_print(" 🧪 步骤4: 数据试剂信息匹配...") + for node_id in G.nodes(): + if G.nodes[node_id].get('type') == 'container': + vessel_data = G.nodes[node_id].get('data', {}) + + # 检查 data 中的 reagent_name 字段 + reagent_name = vessel_data.get('reagent_name', '').lower() + if reagent_name and solvent.lower() == reagent_name: + debug_print(f" 🎉 通过data.reagent_name匹配找到容器: {node_id} (试剂: {reagent_name}) ✨") + return node_id + + # 检查 data 中的液体信息 + liquids = vessel_data.get('liquid', []) + for liquid in liquids: + if isinstance(liquid, dict): + liquid_type = (liquid.get('liquid_type') or liquid.get('name', '')).lower() + + if solvent.lower() in liquid_type: + debug_print(f" 🎉 通过液体类型匹配找到容器: {node_id} (液体类型: {liquid_type}) ✨") + return node_id + + # 第五步:部分匹配(如果前面都没找到) + debug_print(" 🔍 步骤5: 部分匹配...") + for node_id in G.nodes(): + if G.nodes[node_id].get('type') == 'container': + node_config = G.nodes[node_id].get('config', {}) + node_data = G.nodes[node_id].get('data', {}) + node_name = G.nodes[node_id].get('name', '').lower() + + config_reagent = node_config.get('reagent', '').lower() + data_reagent = node_data.get('reagent_name', '').lower() + + # 检查是否包含溶剂名称 + if (solvent.lower() in config_reagent or + solvent.lower() in data_reagent or + solvent.lower() in node_name or + solvent.lower() in node_id.lower()): + debug_print(f" 🎉 通过部分匹配找到容器: {node_id} ✨") + debug_print(f" - 节点名称: {node_name}") + debug_print(f" - 配置试剂: {config_reagent}") + debug_print(f" - 数据试剂: {data_reagent}") + return node_id + + # 调试信息:列出所有容器 + debug_print(" 🔎 调试信息:列出所有容器...") + container_list = [] + for node_id in G.nodes(): + if G.nodes[node_id].get('type') == 'container': + node_config = G.nodes[node_id].get('config', {}) + node_data = G.nodes[node_id].get('data', {}) + node_name = G.nodes[node_id].get('name', '') + + container_info = { + 'id': node_id, + 'name': node_name, + 'config_reagent': node_config.get('reagent', ''), + 'data_reagent': node_data.get('reagent_name', '') + } + container_list.append(container_info) + debug_print(f" - 容器: {node_id}, 名称: {node_name}, config试剂: {node_config.get('reagent', '')}, data试剂: {node_data.get('reagent_name', '')}") + + debug_print(f"❌ 找不到溶剂 '{solvent}' 对应的容器 😭") + debug_print(f"🔍 查找的溶剂: '{solvent}' (小写: '{solvent.lower()}')") + debug_print(f"📊 总共发现 {len(container_list)} 个容器") + + raise ValueError(f"找不到溶剂 '{solvent}' 对应的容器") + + +def generate_recrystallize_protocol( + G: nx.DiGraph, + vessel: dict, # 🔧 修改:从字符串改为字典类型 + ratio: str, + solvent1: str, + solvent2: str, + volume: Union[str, float], # 支持字符串和数值 + **kwargs +) -> List[Dict[str, Any]]: + """ + 生成重结晶协议序列 - 支持vessel字典和体积运算 + + Args: + G: 有向图,节点为容器和设备 + vessel: 目标容器字典(从XDL传入) + ratio: 溶剂比例(如 "1:1", "3:7") + solvent1: 第一种溶剂名称 + solvent2: 第二种溶剂名称 + volume: 总体积(支持 "100 mL", "50", "2.5 L" 等) + **kwargs: 其他可选参数 + + Returns: + List[Dict[str, Any]]: 动作序列 + """ + + # 🔧 核心修改:从字典中提取容器ID + vessel_id = vessel["id"] + + action_sequence = [] + + debug_print("💎" * 20) + debug_print("🚀 开始生成重结晶协议(支持vessel字典和体积运算)✨") + debug_print(f"📝 输入参数:") + debug_print(f" 🥽 vessel: {vessel} (ID: {vessel_id})") + debug_print(f" ⚖️ 比例: {ratio}") + debug_print(f" 🧪 溶剂1: {solvent1}") + debug_print(f" 🧪 溶剂2: {solvent2}") + debug_print(f" 💧 总体积: {volume} (类型: {type(volume)})") + debug_print("💎" * 20) + + # 🔧 新增:记录重结晶前的容器状态 + debug_print("🔍 记录重结晶前容器状态...") + original_liquid_volume = 0.0 + if "data" in vessel and "liquid_volume" in vessel["data"]: + current_volume = vessel["data"]["liquid_volume"] + if isinstance(current_volume, list) and len(current_volume) > 0: + original_liquid_volume = current_volume[0] + elif isinstance(current_volume, (int, float)): + original_liquid_volume = current_volume + debug_print(f"📊 重结晶前液体体积: {original_liquid_volume:.2f}mL") + + # 1. 验证目标容器存在 + debug_print("📍 步骤1: 验证目标容器... 🔧") + if vessel_id not in G.nodes(): # 🔧 使用 vessel_id + debug_print(f"❌ 目标容器 '{vessel_id}' 不存在于系统中! 😱") + raise ValueError(f"目标容器 '{vessel_id}' 不存在于系统中") + debug_print(f"✅ 目标容器 '{vessel_id}' 验证通过 🎯") + + # 2. 解析体积(支持单位) + debug_print("📍 步骤2: 解析体积(支持单位)... 💧") + final_volume = parse_volume_with_units(volume, "mL") + debug_print(f"🎯 体积解析完成: {volume} → {final_volume}mL ✨") + + # 3. 解析比例 + debug_print("📍 步骤3: 解析比例... ⚖️") + ratio1, ratio2 = parse_ratio(ratio) + total_ratio = ratio1 + ratio2 + debug_print(f"🎯 比例解析完成: {ratio1}:{ratio2} (总比例: {total_ratio}) ✨") + + # 4. 计算各溶剂体积 + debug_print("📍 步骤4: 计算各溶剂体积... 🧮") + volume1 = final_volume * (ratio1 / total_ratio) + volume2 = final_volume * (ratio2 / total_ratio) + + debug_print(f"🧪 {solvent1} 体积: {volume1:.2f} mL ({ratio1}/{total_ratio} × {final_volume})") + debug_print(f"🧪 {solvent2} 体积: {volume2:.2f} mL ({ratio2}/{total_ratio} × {final_volume})") + debug_print(f"✅ 体积计算完成: 总计 {volume1 + volume2:.2f} mL 🎯") + + # 5. 查找溶剂容器 + debug_print("📍 步骤5: 查找溶剂容器... 🔍") + try: + debug_print(f" 🔍 查找溶剂1容器...") + solvent1_vessel = find_solvent_vessel(G, solvent1) + debug_print(f" 🎉 找到溶剂1容器: {solvent1_vessel} ✨") + except ValueError as e: + debug_print(f" ❌ 溶剂1容器查找失败: {str(e)} 😭") + raise ValueError(f"无法找到溶剂1 '{solvent1}': {str(e)}") + + try: + debug_print(f" 🔍 查找溶剂2容器...") + solvent2_vessel = find_solvent_vessel(G, solvent2) + debug_print(f" 🎉 找到溶剂2容器: {solvent2_vessel} ✨") + except ValueError as e: + debug_print(f" ❌ 溶剂2容器查找失败: {str(e)} 😭") + raise ValueError(f"无法找到溶剂2 '{solvent2}': {str(e)}") + + # 6. 验证路径存在 + debug_print("📍 步骤6: 验证传输路径... 🛤️") + try: + path1 = nx.shortest_path(G, source=solvent1_vessel, target=vessel_id) # 🔧 使用 vessel_id + debug_print(f" 🛤️ 溶剂1路径: {' → '.join(path1)} ✅") + except nx.NetworkXNoPath: + debug_print(f" ❌ 溶剂1路径不可达: {solvent1_vessel} → {vessel_id} 😞") + raise ValueError(f"从溶剂1容器 '{solvent1_vessel}' 到目标容器 '{vessel_id}' 没有可用路径") + + try: + path2 = nx.shortest_path(G, source=solvent2_vessel, target=vessel_id) # 🔧 使用 vessel_id + debug_print(f" 🛤️ 溶剂2路径: {' → '.join(path2)} ✅") + except nx.NetworkXNoPath: + debug_print(f" ❌ 溶剂2路径不可达: {solvent2_vessel} → {vessel_id} 😞") + raise ValueError(f"从溶剂2容器 '{solvent2_vessel}' 到目标容器 '{vessel_id}' 没有可用路径") + + # 7. 添加第一种溶剂 + debug_print("📍 步骤7: 添加第一种溶剂... 🧪") + debug_print(f" 🚰 开始添加溶剂1: {solvent1} ({volume1:.2f} mL)") + + try: + pump_actions1 = generate_pump_protocol_with_rinsing( + G=G, + from_vessel=solvent1_vessel, + to_vessel=vessel_id, # 🔧 使用 vessel_id + volume=volume1, # 使用解析后的体积 + amount="", + time=0.0, + viscous=False, + rinsing_solvent="", # 重结晶不需要清洗 + rinsing_volume=0.0, + rinsing_repeats=0, + solid=False, + flowrate=2.0, # 正常流速 + transfer_flowrate=0.5 + ) + + action_sequence.extend(pump_actions1) + debug_print(f" ✅ 溶剂1泵送动作已添加: {len(pump_actions1)} 个动作 🚰✨") + + except Exception as e: + debug_print(f" ❌ 溶剂1泵协议生成失败: {str(e)} 😭") + raise ValueError(f"生成溶剂1泵协议时出错: {str(e)}") + + # 🔧 新增:更新容器体积 - 添加溶剂1后 + debug_print(" 🔧 更新容器体积 - 添加溶剂1后...") + new_volume_after_solvent1 = original_liquid_volume + volume1 + + # 更新vessel字典中的体积 + if "data" in vessel and "liquid_volume" in vessel["data"]: + current_volume = vessel["data"]["liquid_volume"] + if isinstance(current_volume, list): + if len(current_volume) > 0: + vessel["data"]["liquid_volume"][0] = new_volume_after_solvent1 + else: + vessel["data"]["liquid_volume"] = [new_volume_after_solvent1] + else: + vessel["data"]["liquid_volume"] = new_volume_after_solvent1 + + # 同时更新图中的容器数据 + if vessel_id in G.nodes(): + if 'data' not in G.nodes[vessel_id]: + G.nodes[vessel_id]['data'] = {} + + vessel_node_data = G.nodes[vessel_id]['data'] + current_node_volume = vessel_node_data.get('liquid_volume', 0.0) + + if isinstance(current_node_volume, list): + if len(current_node_volume) > 0: + G.nodes[vessel_id]['data']['liquid_volume'][0] = new_volume_after_solvent1 + else: + G.nodes[vessel_id]['data']['liquid_volume'] = [new_volume_after_solvent1] + else: + G.nodes[vessel_id]['data']['liquid_volume'] = new_volume_after_solvent1 + + debug_print(f" 📊 体积更新: {original_liquid_volume:.2f}mL + {volume1:.2f}mL = {new_volume_after_solvent1:.2f}mL") + + # 8. 等待溶剂1稳定 + debug_print(" ⏳ 添加溶剂1稳定等待...") + action_sequence.append({ + "action_name": "wait", + "action_kwargs": { + "time": 5.0, # 缩短等待时间 + "description": f"等待溶剂1 {solvent1} 稳定" + } + }) + debug_print(" ✅ 溶剂1稳定等待已添加 ⏰✨") + + # 9. 添加第二种溶剂 + debug_print("📍 步骤8: 添加第二种溶剂... 🧪") + debug_print(f" 🚰 开始添加溶剂2: {solvent2} ({volume2:.2f} mL)") + + try: + pump_actions2 = generate_pump_protocol_with_rinsing( + G=G, + from_vessel=solvent2_vessel, + to_vessel=vessel_id, # 🔧 使用 vessel_id + volume=volume2, # 使用解析后的体积 + amount="", + time=0.0, + viscous=False, + rinsing_solvent="", # 重结晶不需要清洗 + rinsing_volume=0.0, + rinsing_repeats=0, + solid=False, + flowrate=2.0, # 正常流速 + transfer_flowrate=0.5 + ) + + action_sequence.extend(pump_actions2) + debug_print(f" ✅ 溶剂2泵送动作已添加: {len(pump_actions2)} 个动作 🚰✨") + + except Exception as e: + debug_print(f" ❌ 溶剂2泵协议生成失败: {str(e)} 😭") + raise ValueError(f"生成溶剂2泵协议时出错: {str(e)}") + + # 🔧 新增:更新容器体积 - 添加溶剂2后 + debug_print(" 🔧 更新容器体积 - 添加溶剂2后...") + final_liquid_volume = new_volume_after_solvent1 + volume2 + + # 更新vessel字典中的体积 + if "data" in vessel and "liquid_volume" in vessel["data"]: + current_volume = vessel["data"]["liquid_volume"] + if isinstance(current_volume, list): + if len(current_volume) > 0: + vessel["data"]["liquid_volume"][0] = final_liquid_volume + else: + vessel["data"]["liquid_volume"] = [final_liquid_volume] + else: + vessel["data"]["liquid_volume"] = final_liquid_volume + + # 同时更新图中的容器数据 + if vessel_id in G.nodes(): + if 'data' not in G.nodes[vessel_id]: + G.nodes[vessel_id]['data'] = {} + + vessel_node_data = G.nodes[vessel_id]['data'] + current_node_volume = vessel_node_data.get('liquid_volume', 0.0) + + if isinstance(current_node_volume, list): + if len(current_node_volume) > 0: + G.nodes[vessel_id]['data']['liquid_volume'][0] = final_liquid_volume + else: + G.nodes[vessel_id]['data']['liquid_volume'] = [final_liquid_volume] + else: + G.nodes[vessel_id]['data']['liquid_volume'] = final_liquid_volume + + debug_print(f" 📊 最终体积: {new_volume_after_solvent1:.2f}mL + {volume2:.2f}mL = {final_liquid_volume:.2f}mL") + + # 10. 等待溶剂2稳定 + debug_print(" ⏳ 添加溶剂2稳定等待...") + action_sequence.append({ + "action_name": "wait", + "action_kwargs": { + "time": 5.0, # 缩短等待时间 + "description": f"等待溶剂2 {solvent2} 稳定" + } + }) + debug_print(" ✅ 溶剂2稳定等待已添加 ⏰✨") + + # 11. 等待重结晶完成 + debug_print("📍 步骤9: 等待重结晶完成... 💎") + + # 模拟运行时间优化 + debug_print(" ⏱️ 检查模拟运行时间限制...") + original_crystallize_time = 600.0 # 原始重结晶时间 + simulation_time_limit = 60.0 # 模拟运行时间限制:60秒 + + final_crystallize_time = min(original_crystallize_time, simulation_time_limit) + + if original_crystallize_time > simulation_time_limit: + debug_print(f" 🎮 模拟运行优化: {original_crystallize_time}s → {final_crystallize_time}s ⚡") + debug_print(f" 📊 时间缩短: {original_crystallize_time/60:.1f}分钟 → {final_crystallize_time/60:.1f}分钟 🚀") + else: + debug_print(f" ✅ 时间在限制内: {final_crystallize_time}s 保持不变 🎯") + + action_sequence.append({ + "action_name": "wait", + "action_kwargs": { + "time": final_crystallize_time, + "description": f"等待重结晶完成({solvent1}:{solvent2} = {ratio},总体积 {final_volume}mL)" + (f" (模拟时间)" if original_crystallize_time != final_crystallize_time else "") + } + }) + debug_print(f" ✅ 重结晶等待已添加: {final_crystallize_time}s 💎✨") + + # 显示时间调整信息 + if original_crystallize_time != final_crystallize_time: + debug_print(f" 🎭 模拟优化说明: 原计划 {original_crystallize_time/60:.1f}分钟,实际模拟 {final_crystallize_time/60:.1f}分钟 ⚡") + + # 总结 + debug_print("💎" * 20) + debug_print(f"🎉 重结晶协议生成完成! ✨") + debug_print(f"📊 总动作数: {len(action_sequence)} 个") + debug_print(f"🥽 目标容器: {vessel_id}") + debug_print(f"💧 总体积变化:") + debug_print(f" - 原始体积: {original_liquid_volume:.2f}mL") + debug_print(f" - 添加溶剂: {final_volume:.2f}mL") + debug_print(f" - 最终体积: {final_liquid_volume:.2f}mL") + debug_print(f"⚖️ 溶剂比例: {solvent1}:{solvent2} = {ratio1}:{ratio2}") + debug_print(f"🧪 溶剂1: {solvent1} ({volume1:.2f}mL)") + debug_print(f"🧪 溶剂2: {solvent2} ({volume2:.2f}mL)") + debug_print(f"⏱️ 预计总时间: {(final_crystallize_time + 10)/60:.1f} 分钟 ⌛") + debug_print("💎" * 20) + + return action_sequence + + +# 测试函数 +def test_recrystallize_protocol(): + """测试重结晶协议""" + debug_print("🧪 === RECRYSTALLIZE PROTOCOL 测试 === ✨") + + # 测试体积解析 + debug_print("💧 测试体积解析...") + test_volumes = ["100 mL", "2.5 L", "500", "50.5", "?", "invalid"] + for vol in test_volumes: + parsed = parse_volume_with_units(vol) + debug_print(f" 📊 体积 '{vol}' -> {parsed}mL") + + # 测试比例解析 + debug_print("⚖️ 测试比例解析...") + test_ratios = ["1:1", "3:7", "50:50", "1-1", "2,8", "invalid"] + for ratio in test_ratios: + r1, r2 = parse_ratio(ratio) + debug_print(f" 📊 比例 '{ratio}' -> {r1}:{r2}") + + debug_print("✅ 测试完成 🎉") + +if __name__ == "__main__": + test_recrystallize_protocol() \ No newline at end of file diff --git a/unilabos/compile/reset_handling_protocol.py b/unilabos/compile/reset_handling_protocol.py new file mode 100644 index 0000000..2024676 --- /dev/null +++ b/unilabos/compile/reset_handling_protocol.py @@ -0,0 +1,387 @@ +import networkx as nx +import logging +import sys +from typing import List, Dict, Any, Optional +from .pump_protocol import generate_pump_protocol_with_rinsing + +# 设置日志 +logger = logging.getLogger(__name__) + +# 确保输出编码为UTF-8 +if hasattr(sys.stdout, 'reconfigure'): + try: + sys.stdout.reconfigure(encoding='utf-8') + sys.stderr.reconfigure(encoding='utf-8') + except: + pass + +def debug_print(message): + """调试输出函数 - 支持中文""" + try: + # 确保消息是字符串格式 + safe_message = str(message) + print(f"[重置处理] {safe_message}", flush=True) + logger.info(f"[重置处理] {safe_message}") + except UnicodeEncodeError: + # 如果编码失败,尝试替换不支持的字符 + safe_message = str(message).encode('utf-8', errors='replace').decode('utf-8') + print(f"[重置处理] {safe_message}", flush=True) + logger.info(f"[重置处理] {safe_message}") + except Exception as e: + # 最后的安全措施 + fallback_message = f"日志输出错误: {repr(message)}" + print(f"[重置处理] {fallback_message}", flush=True) + logger.info(f"[重置处理] {fallback_message}") + +def create_action_log(message: str, emoji: str = "📝") -> Dict[str, Any]: + """创建一个动作日志 - 支持中文和emoji""" + try: + full_message = f"{emoji} {message}" + debug_print(full_message) + logger.info(full_message) + + return { + "action_name": "wait", + "action_kwargs": { + "time": 0.1, + "log_message": full_message, + "progress_message": full_message + } + } + except Exception as e: + # 如果emoji有问题,使用纯文本 + safe_message = f"[日志] {message}" + debug_print(safe_message) + logger.info(safe_message) + + return { + "action_name": "wait", + "action_kwargs": { + "time": 0.1, + "log_message": safe_message, + "progress_message": safe_message + } + } + +def find_solvent_vessel(G: nx.DiGraph, solvent: str) -> str: + """ + 查找溶剂容器,支持多种匹配模式 + + Args: + G: 网络图 + solvent: 溶剂名称(如 "methanol", "ethanol", "water") + + Returns: + str: 溶剂容器ID + """ + debug_print(f"🔍 正在查找溶剂 '{solvent}' 的容器...") + + # 构建可能的容器名称 + possible_names = [ + f"flask_{solvent}", # flask_methanol + f"bottle_{solvent}", # bottle_methanol + f"reagent_{solvent}", # reagent_methanol + f"reagent_bottle_{solvent}", # reagent_bottle_methanol + f"{solvent}_flask", # methanol_flask + f"{solvent}_bottle", # methanol_bottle + f"{solvent}", # methanol + f"vessel_{solvent}", # vessel_methanol + ] + + debug_print(f"🎯 候选容器名称: {possible_names[:3]}... (共{len(possible_names)}个)") + + # 第一步:通过容器名称匹配 + debug_print("📋 方法1: 精确名称匹配...") + for vessel_name in possible_names: + if vessel_name in G.nodes(): + debug_print(f"✅ 通过名称匹配找到容器: {vessel_name}") + return vessel_name + debug_print("⚠️ 精确名称匹配失败,尝试模糊匹配...") + + # 第二步:通过模糊匹配 + debug_print("📋 方法2: 模糊名称匹配...") + for node_id in G.nodes(): + if G.nodes[node_id].get('type') == 'container': + node_name = G.nodes[node_id].get('name', '').lower() + + # 检查是否包含溶剂名称 + if solvent.lower() in node_id.lower() or solvent.lower() in node_name: + debug_print(f"✅ 通过模糊匹配找到容器: {node_id}") + return node_id + debug_print("⚠️ 模糊匹配失败,尝试液体类型匹配...") + + # 第三步:通过液体类型匹配 + debug_print("📋 方法3: 液体类型匹配...") + for node_id in G.nodes(): + if G.nodes[node_id].get('type') == 'container': + vessel_data = G.nodes[node_id].get('data', {}) + liquids = vessel_data.get('liquid', []) + + for liquid in liquids: + if isinstance(liquid, dict): + liquid_type = (liquid.get('liquid_type') or liquid.get('name', '')).lower() + reagent_name = vessel_data.get('reagent_name', '').lower() + + if solvent.lower() in liquid_type or solvent.lower() in reagent_name: + debug_print(f"✅ 通过液体类型匹配找到容器: {node_id}") + return node_id + + # 列出可用容器帮助调试 + debug_print("📊 显示可用容器信息...") + available_containers = [] + for node_id in G.nodes(): + if G.nodes[node_id].get('type') == 'container': + vessel_data = G.nodes[node_id].get('data', {}) + liquids = vessel_data.get('liquid', []) + liquid_types = [liquid.get('liquid_type', '') or liquid.get('name', '') + for liquid in liquids if isinstance(liquid, dict)] + + available_containers.append({ + 'id': node_id, + 'name': G.nodes[node_id].get('name', ''), + 'liquids': liquid_types, + 'reagent_name': vessel_data.get('reagent_name', '') + }) + + debug_print(f"📋 可用容器列表 (共{len(available_containers)}个):") + for i, container in enumerate(available_containers[:5]): # 只显示前5个 + debug_print(f" {i+1}. 🥽 {container['id']}: {container['name']}") + debug_print(f" 💧 液体: {container['liquids']}") + debug_print(f" 🧪 试剂: {container['reagent_name']}") + + if len(available_containers) > 5: + debug_print(f" ... 还有 {len(available_containers)-5} 个容器") + + debug_print(f"❌ 找不到溶剂 '{solvent}' 对应的容器") + raise ValueError(f"找不到溶剂 '{solvent}' 对应的容器。尝试了: {possible_names[:3]}...") + +def generate_reset_handling_protocol( + G: nx.DiGraph, + solvent: str, + vessel: Optional[str] = None, # 🆕 新增可选vessel参数 + **kwargs # 接收其他可能的参数但不使用 +) -> List[Dict[str, Any]]: + """ + 生成重置处理协议序列 - 支持自定义容器 + + Args: + G: 有向图,节点为容器和设备 + solvent: 溶剂名称(从XDL传入) + vessel: 目标容器名称(可选,默认为 "main_reactor") + **kwargs: 其他可选参数,但不使用 + + Returns: + List[Dict[str, Any]]: 动作序列 + """ + action_sequence = [] + + # 🔧 修改:支持自定义vessel参数 + target_vessel = vessel if vessel is not None else "main_reactor" # 默认目标容器 + volume = 50.0 # 默认体积 50 mL + + debug_print("=" * 60) + debug_print("🚀 开始生成重置处理协议") + debug_print(f"📋 输入参数:") + debug_print(f" 🧪 溶剂: {solvent}") + debug_print(f" 🥽 目标容器: {target_vessel} {'(默认)' if vessel is None else '(指定)'}") + debug_print(f" 💧 体积: {volume} mL") + debug_print(f" ⚙️ 其他参数: {kwargs}") + debug_print("=" * 60) + + # 添加初始日志 + action_sequence.append(create_action_log(f"开始重置处理操作 - 容器: {target_vessel}", "🎬")) + action_sequence.append(create_action_log(f"使用溶剂: {solvent}", "🧪")) + action_sequence.append(create_action_log(f"重置体积: {volume}mL", "💧")) + + if vessel is None: + action_sequence.append(create_action_log("使用默认目标容器: main_reactor", "⚙️")) + else: + action_sequence.append(create_action_log(f"使用指定目标容器: {vessel}", "🎯")) + + # 1. 验证目标容器存在 + debug_print("🔍 步骤1: 验证目标容器...") + action_sequence.append(create_action_log("正在验证目标容器...", "🔍")) + + if target_vessel not in G.nodes(): + debug_print(f"❌ 目标容器 '{target_vessel}' 不存在于系统中!") + action_sequence.append(create_action_log(f"目标容器 '{target_vessel}' 不存在", "❌")) + raise ValueError(f"目标容器 '{target_vessel}' 不存在于系统中") + + debug_print(f"✅ 目标容器 '{target_vessel}' 验证通过") + action_sequence.append(create_action_log(f"目标容器验证通过: {target_vessel}", "✅")) + + # 2. 查找溶剂容器 + debug_print("🔍 步骤2: 查找溶剂容器...") + action_sequence.append(create_action_log("正在查找溶剂容器...", "🔍")) + + try: + solvent_vessel = find_solvent_vessel(G, solvent) + debug_print(f"✅ 找到溶剂容器: {solvent_vessel}") + action_sequence.append(create_action_log(f"找到溶剂容器: {solvent_vessel}", "✅")) + except ValueError as e: + debug_print(f"❌ 溶剂容器查找失败: {str(e)}") + action_sequence.append(create_action_log(f"溶剂容器查找失败: {str(e)}", "❌")) + raise ValueError(f"无法找到溶剂 '{solvent}': {str(e)}") + + # 3. 验证路径存在 + debug_print("🔍 步骤3: 验证传输路径...") + action_sequence.append(create_action_log("正在验证传输路径...", "🛤️")) + + try: + path = nx.shortest_path(G, source=solvent_vessel, target=target_vessel) + debug_print(f"✅ 找到路径: {' → '.join(path)}") + action_sequence.append(create_action_log(f"传输路径: {' → '.join(path)}", "🛤️")) + except nx.NetworkXNoPath: + debug_print(f"❌ 路径不可达: {solvent_vessel} → {target_vessel}") + action_sequence.append(create_action_log(f"路径不可达: {solvent_vessel} → {target_vessel}", "❌")) + raise ValueError(f"从溶剂容器 '{solvent_vessel}' 到目标容器 '{target_vessel}' 没有可用路径") + + # 4. 使用pump_protocol转移溶剂 + debug_print("🔍 步骤4: 转移溶剂...") + action_sequence.append(create_action_log("开始溶剂转移操作...", "🚰")) + + debug_print(f"🚛 开始转移: {solvent_vessel} → {target_vessel}") + debug_print(f"💧 转移体积: {volume} mL") + action_sequence.append(create_action_log(f"转移: {solvent_vessel} → {target_vessel} ({volume}mL)", "🚛")) + + try: + debug_print("🔄 生成泵送协议...") + action_sequence.append(create_action_log("正在生成泵送协议...", "🔄")) + + pump_actions = generate_pump_protocol_with_rinsing( + G=G, + from_vessel=solvent_vessel, + to_vessel=target_vessel, + volume=volume, + amount="", + time=0.0, + viscous=False, + rinsing_solvent="", # 重置处理不需要清洗 + rinsing_volume=0.0, + rinsing_repeats=0, + solid=False, + flowrate=2.5, # 正常流速 + transfer_flowrate=0.5 # 正常转移流速 + ) + + action_sequence.extend(pump_actions) + debug_print(f"✅ 泵送协议已添加: {len(pump_actions)} 个动作") + action_sequence.append(create_action_log(f"泵送协议完成 ({len(pump_actions)} 个操作)", "✅")) + + except Exception as e: + debug_print(f"❌ 泵送协议生成失败: {str(e)}") + action_sequence.append(create_action_log(f"泵送协议生成失败: {str(e)}", "❌")) + raise ValueError(f"生成泵协议时出错: {str(e)}") + + # 5. 等待溶剂稳定 + debug_print("🔍 步骤5: 等待溶剂稳定...") + action_sequence.append(create_action_log("等待溶剂稳定...", "⏳")) + + # 模拟运行时间优化 + debug_print("⏱️ 检查模拟运行时间限制...") + original_wait_time = 10.0 # 原始等待时间 + simulation_time_limit = 5.0 # 模拟运行时间限制:5秒 + + final_wait_time = min(original_wait_time, simulation_time_limit) + + if original_wait_time > simulation_time_limit: + debug_print(f"🎮 模拟运行优化: {original_wait_time}s → {final_wait_time}s") + action_sequence.append(create_action_log(f"时间优化: {original_wait_time}s → {final_wait_time}s", "⚡")) + else: + debug_print(f"✅ 时间在限制内: {final_wait_time}s 保持不变") + action_sequence.append(create_action_log(f"等待时间: {final_wait_time}s", "⏰")) + + action_sequence.append({ + "action_name": "wait", + "action_kwargs": { + "time": final_wait_time, + "description": f"等待溶剂 {solvent} 在容器 {target_vessel} 中稳定" + (f" (模拟时间)" if original_wait_time != final_wait_time else "") + } + }) + debug_print(f"✅ 稳定等待已添加: {final_wait_time}s") + + # 显示时间调整信息 + if original_wait_time != final_wait_time: + debug_print(f"🎭 模拟优化说明: 原计划 {original_wait_time}s,实际模拟 {final_wait_time}s") + action_sequence.append(create_action_log("应用模拟时间优化", "🎭")) + + # 总结 + debug_print("=" * 60) + debug_print(f"🎉 重置处理协议生成完成!") + debug_print(f"📊 总结信息:") + debug_print(f" 📋 总动作数: {len(action_sequence)} 个") + debug_print(f" 🧪 溶剂: {solvent}") + debug_print(f" 🥽 源容器: {solvent_vessel}") + debug_print(f" 🥽 目标容器: {target_vessel} {'(默认)' if vessel is None else '(指定)'}") + debug_print(f" 💧 转移体积: {volume} mL") + debug_print(f" ⏱️ 预计总时间: {(final_wait_time + 5):.0f} 秒") + debug_print(f" 🎯 操作结果: 已添加 {volume} mL {solvent} 到 {target_vessel}") + debug_print("=" * 60) + + # 添加完成日志 + summary_msg = f"重置处理完成: {target_vessel} (使用 {volume}mL {solvent})" + if vessel is None: + summary_msg += " [默认容器]" + else: + summary_msg += " [指定容器]" + + action_sequence.append(create_action_log(summary_msg, "🎉")) + + return action_sequence + +# === 便捷函数 === + +def reset_main_reactor(G: nx.DiGraph, solvent: str = "methanol", **kwargs) -> List[Dict[str, Any]]: + """重置主反应器 (默认行为)""" + debug_print(f"🔄 重置主反应器,使用溶剂: {solvent}") + return generate_reset_handling_protocol(G, solvent=solvent, vessel=None, **kwargs) + +def reset_custom_vessel(G: nx.DiGraph, vessel: str, solvent: str = "methanol", **kwargs) -> List[Dict[str, Any]]: + """重置指定容器""" + debug_print(f"🔄 重置指定容器: {vessel},使用溶剂: {solvent}") + return generate_reset_handling_protocol(G, solvent=solvent, vessel=vessel, **kwargs) + +def reset_with_water(G: nx.DiGraph, vessel: Optional[str] = None, **kwargs) -> List[Dict[str, Any]]: + """使用水重置容器""" + target = vessel or "main_reactor" + debug_print(f"💧 使用水重置容器: {target}") + return generate_reset_handling_protocol(G, solvent="water", vessel=vessel, **kwargs) + +def reset_with_methanol(G: nx.DiGraph, vessel: Optional[str] = None, **kwargs) -> List[Dict[str, Any]]: + """使用甲醇重置容器""" + target = vessel or "main_reactor" + debug_print(f"🧪 使用甲醇重置容器: {target}") + return generate_reset_handling_protocol(G, solvent="methanol", vessel=vessel, **kwargs) + +def reset_with_ethanol(G: nx.DiGraph, vessel: Optional[str] = None, **kwargs) -> List[Dict[str, Any]]: + """使用乙醇重置容器""" + target = vessel or "main_reactor" + debug_print(f"🧪 使用乙醇重置容器: {target}") + return generate_reset_handling_protocol(G, solvent="ethanol", vessel=vessel, **kwargs) + +# 测试函数 +def test_reset_handling_protocol(): + """测试重置处理协议""" + debug_print("=== 重置处理协议增强中文版测试 ===") + + # 测试溶剂名称 + debug_print("🧪 测试常用溶剂名称...") + test_solvents = ["methanol", "ethanol", "water", "acetone", "dmso"] + for solvent in test_solvents: + debug_print(f" 🔍 测试溶剂: {solvent}") + + # 测试容器参数 + debug_print("🥽 测试容器参数...") + test_cases = [ + {"solvent": "methanol", "vessel": None, "desc": "默认容器"}, + {"solvent": "ethanol", "vessel": "reactor_2", "desc": "指定容器"}, + {"solvent": "water", "vessel": "flask_1", "desc": "自定义容器"} + ] + + for case in test_cases: + debug_print(f" 🧪 测试案例: {case['desc']} - {case['solvent']} -> {case['vessel'] or 'main_reactor'}") + + debug_print("✅ 测试完成") + +if __name__ == "__main__": + test_reset_handling_protocol() \ No newline at end of file diff --git a/unilabos/compile/run_column_protocol.py b/unilabos/compile/run_column_protocol.py index f6b9214..f921321 100644 --- a/unilabos/compile/run_column_protocol.py +++ b/unilabos/compile/run_column_protocol.py @@ -1,312 +1,808 @@ -from typing import List, Dict, Any +from typing import List, Dict, Any, Union import networkx as nx -from .pump_protocol import generate_pump_protocol +import logging +import re +from .pump_protocol import generate_pump_protocol_with_rinsing +logger = logging.getLogger(__name__) -def get_vessel_liquid_volume(G: nx.DiGraph, vessel: str) -> float: - """获取容器中的液体体积""" - if vessel not in G.nodes(): +def debug_print(message): + """调试输出""" + print(f"🏛️ [RUN_COLUMN] {message}", flush=True) + logger.info(f"[RUN_COLUMN] {message}") + +def parse_percentage(pct_str: str) -> float: + """ + 解析百分比字符串为数值 + + Args: + pct_str: 百分比字符串(如 "40 %", "40%", "40") + + Returns: + float: 百分比数值(0-100) + """ + if not pct_str or not pct_str.strip(): return 0.0 - vessel_data = G.nodes[vessel].get('data', {}) - liquids = vessel_data.get('liquid', []) + pct_str = pct_str.strip().lower() + debug_print(f"🔍 解析百分比: '{pct_str}'") - total_volume = 0.0 - for liquid in liquids: - if isinstance(liquid, dict): - # 支持两种格式:新格式 (name, volume) 和旧格式 (liquid_type, liquid_volume) - volume = liquid.get('volume') or liquid.get('liquid_volume', 0.0) - total_volume += volume + # 移除百分号和空格 + pct_clean = re.sub(r'[%\s]', '', pct_str) - return total_volume + # 提取数字 + match = re.search(r'([0-9]*\.?[0-9]+)', pct_clean) + if match: + value = float(match.group(1)) + debug_print(f"✅ 百分比解析结果: {value}%") + return value + + debug_print(f"⚠️ 无法解析百分比: '{pct_str}',返回0.0") + return 0.0 +def parse_ratio(ratio_str: str) -> tuple: + """ + 解析比例字符串为两个数值 + + Args: + ratio_str: 比例字符串(如 "5:95", "1:1", "40:60") + + Returns: + tuple: (ratio1, ratio2) 两个比例值 + """ + if not ratio_str or not ratio_str.strip(): + return (50.0, 50.0) # 默认1:1 + + ratio_str = ratio_str.strip() + debug_print(f"🔍 解析比例: '{ratio_str}'") + + # 支持多种分隔符:: / - + if ':' in ratio_str: + parts = ratio_str.split(':') + elif '/' in ratio_str: + parts = ratio_str.split('/') + elif '-' in ratio_str: + parts = ratio_str.split('-') + elif 'to' in ratio_str.lower(): + parts = ratio_str.lower().split('to') + else: + debug_print(f"⚠️ 无法解析比例格式: '{ratio_str}',使用默认1:1") + return (50.0, 50.0) + + if len(parts) >= 2: + try: + ratio1 = float(parts[0].strip()) + ratio2 = float(parts[1].strip()) + total = ratio1 + ratio2 + + # 转换为百分比 + pct1 = (ratio1 / total) * 100 + pct2 = (ratio2 / total) * 100 + + debug_print(f"✅ 比例解析结果: {ratio1}:{ratio2} -> {pct1:.1f}%:{pct2:.1f}%") + return (pct1, pct2) + except ValueError as e: + debug_print(f"⚠️ 比例数值转换失败: {str(e)}") + + debug_print(f"⚠️ 比例解析失败,使用默认1:1") + return (50.0, 50.0) -def find_column_device(G: nx.DiGraph, column: str) -> str: +def parse_rf_value(rf_str: str) -> float: + """ + 解析Rf值字符串 + + Args: + rf_str: Rf值字符串(如 "0.3", "0.45", "?") + + Returns: + float: Rf值(0-1) + """ + if not rf_str or not rf_str.strip(): + return 0.3 # 默认Rf值 + + rf_str = rf_str.strip().lower() + debug_print(f"🔍 解析Rf值: '{rf_str}'") + + # 处理未知Rf值 + if rf_str in ['?', 'unknown', 'tbd', 'to be determined']: + default_rf = 0.3 + debug_print(f"❓ 检测到未知Rf值,使用默认值: {default_rf}") + return default_rf + + # 提取数字 + match = re.search(r'([0-9]*\.?[0-9]+)', rf_str) + if match: + value = float(match.group(1)) + # 确保Rf值在0-1范围内 + if value > 1.0: + value = value / 100.0 # 可能是百分比形式 + value = max(0.0, min(1.0, value)) # 限制在0-1范围 + debug_print(f"✅ Rf值解析结果: {value}") + return value + + debug_print(f"⚠️ 无法解析Rf值: '{rf_str}',使用默认值0.3") + return 0.3 + +def find_column_device(G: nx.DiGraph) -> str: """查找柱层析设备""" - # 首先检查是否有虚拟柱设备 - column_nodes = [node for node in G.nodes() - if (G.nodes[node].get('class') or '') == 'virtual_column'] + debug_print("🔍 查找柱层析设备...") - if column_nodes: - return column_nodes[0] + # 查找虚拟柱设备 + for node in G.nodes(): + node_data = G.nodes[node] + node_class = node_data.get('class', '') or '' + + if 'virtual_column' in node_class.lower() or 'column' in node_class.lower(): + debug_print(f"🎉 找到柱层析设备: {node} ✨") + return node - # 如果没有虚拟柱设备,抛出异常 - raise ValueError(f"系统中未找到柱层析设备。请确保配置了 virtual_column 设备") - + # 如果没有找到,尝试创建虚拟设备名称 + possible_names = ['column_1', 'virtual_column_1', 'chromatography_column_1'] + for name in possible_names: + if name in G.nodes(): + debug_print(f"🎉 找到柱设备: {name} ✨") + return name + + debug_print("⚠️ 未找到柱层析设备,将使用pump protocol直接转移") + return "" def find_column_vessel(G: nx.DiGraph, column: str) -> str: """查找柱容器""" - # 直接使用 column 参数作为容器名称 - if column in G.nodes(): - return column + debug_print(f"🔍 查找柱容器: '{column}'") - # 尝试常见的柱容器命名规则 + # 直接检查column参数是否是容器 + if column in G.nodes(): + node_type = G.nodes[column].get('type', '') + if node_type == 'container': + debug_print(f"🎉 找到柱容器: {column} ✨") + return column + + # 尝试常见的命名规则 possible_names = [ f"column_{column}", - f"{column}_column", + f"{column}_column", f"vessel_{column}", f"{column}_vessel", "column_vessel", "chromatography_column", "silica_column", - "preparative_column" + "preparative_column", + "column" ] for vessel_name in possible_names: if vessel_name in G.nodes(): - return vessel_name + node_type = G.nodes[vessel_name].get('type', '') + if node_type == 'container': + debug_print(f"🎉 找到柱容器: {vessel_name} ✨") + return vessel_name - raise ValueError(f"未找到柱容器 '{column}'。尝试了以下名称: {[column] + possible_names}") + debug_print(f"⚠️ 未找到柱容器,将直接在源容器中进行分离") + return "" - -def find_eluting_solvent_vessel(G: nx.DiGraph, eluting_solvent: str) -> str: - """查找洗脱溶剂容器""" - if not eluting_solvent: +def find_solvent_vessel(G: nx.DiGraph, solvent: str) -> str: + """查找溶剂容器 - 增强版""" + if not solvent or not solvent.strip(): return "" - # 按照命名规则查找溶剂瓶 - solvent_vessel_id = f"flask_{eluting_solvent}" + solvent = solvent.strip().replace(' ', '_').lower() + debug_print(f"🔍 查找溶剂容器: '{solvent}'") - if solvent_vessel_id in G.nodes(): - return solvent_vessel_id - - # 如果直接匹配失败,尝试模糊匹配 + # 🔧 方法1:直接搜索 data.reagent_name for node in G.nodes(): - if node.startswith('flask_') and eluting_solvent.lower() in node.lower(): - return node + node_data = G.nodes[node].get('data', {}) + node_type = G.nodes[node].get('type', '') + + # 只搜索容器类型的节点 + if node_type == 'container': + reagent_name = node_data.get('reagent_name', '').lower() + reagent_config = G.nodes[node].get('config', {}).get('reagent', '').lower() + + # 检查 data.reagent_name 和 config.reagent + if reagent_name == solvent or reagent_config == solvent: + debug_print(f"🎉 通过reagent_name找到溶剂容器: {node} (reagent: {reagent_name or reagent_config}) ✨") + return node + + # 模糊匹配 reagent_name + if solvent in reagent_name or reagent_name in solvent: + debug_print(f"🎉 通过reagent_name模糊匹配到溶剂容器: {node} (reagent: {reagent_name}) ✨") + return node + + if solvent in reagent_config or reagent_config in solvent: + debug_print(f"🎉 通过config.reagent模糊匹配到溶剂容器: {node} (reagent: {reagent_config}) ✨") + return node - # 如果还是找不到,列出所有可用的溶剂瓶 - available_flasks = [node for node in G.nodes() - if node.startswith('flask_') - and G.nodes[node].get('type') == 'container'] + # 🔧 方法2:常见的溶剂容器命名规则 + possible_names = [ + f"flask_{solvent}", + f"bottle_{solvent}", + f"reagent_{solvent}", + f"{solvent}_bottle", + f"{solvent}_flask", + f"solvent_{solvent}", + f"reagent_bottle_{solvent}" + ] - raise ValueError(f"找不到洗脱溶剂 '{eluting_solvent}' 对应的溶剂瓶。可用溶剂瓶: {available_flasks}") + for vessel_name in possible_names: + if vessel_name in G.nodes(): + node_type = G.nodes[vessel_name].get('type', '') + if node_type == 'container': + debug_print(f"🎉 通过命名规则找到溶剂容器: {vessel_name} ✨") + return vessel_name + + # 🔧 方法3:节点名称模糊匹配 + for node in G.nodes(): + node_type = G.nodes[node].get('type', '') + if node_type == 'container': + if ('flask_' in node or 'bottle_' in node or 'reagent_' in node) and solvent in node.lower(): + debug_print(f"🎉 通过节点名称模糊匹配到溶剂容器: {node} ✨") + return node + + # 🔧 方法4:特殊溶剂名称映射 + solvent_mapping = { + 'dmf': ['dmf', 'dimethylformamide', 'n,n-dimethylformamide'], + 'ethyl_acetate': ['ethyl_acetate', 'ethylacetate', 'etoac', 'ea'], + 'hexane': ['hexane', 'hexanes', 'n-hexane'], + 'methanol': ['methanol', 'meoh', 'ch3oh'], + 'water': ['water', 'h2o', 'distilled_water'], + 'acetone': ['acetone', 'ch3coch3', '2-propanone'], + 'dichloromethane': ['dichloromethane', 'dcm', 'ch2cl2', 'methylene_chloride'], + 'chloroform': ['chloroform', 'chcl3', 'trichloromethane'] + } + + # 查找映射的同义词 + for canonical_name, synonyms in solvent_mapping.items(): + if solvent in synonyms: + debug_print(f"🔍 检测到溶剂同义词: '{solvent}' -> '{canonical_name}'") + return find_solvent_vessel(G, canonical_name) # 递归搜索 + + debug_print(f"⚠️ 未找到溶剂 '{solvent}' 的容器") + return "" +def get_vessel_liquid_volume(vessel: dict) -> float: + """ + 获取容器中的液体体积 - 支持vessel字典 + + Args: + vessel: 容器字典 + + Returns: + float: 液体体积(mL) + """ + if not vessel or "data" not in vessel: + debug_print(f"⚠️ 容器数据为空,返回 0.0mL") + return 0.0 + + vessel_data = vessel["data"] + vessel_id = vessel.get("id", "unknown") + + debug_print(f"🔍 读取容器 '{vessel_id}' 体积数据: {vessel_data}") + + # 检查liquid_volume字段 + if "liquid_volume" in vessel_data: + liquid_volume = vessel_data["liquid_volume"] + + # 处理列表格式 + if isinstance(liquid_volume, list): + if len(liquid_volume) > 0: + volume = liquid_volume[0] + if isinstance(volume, (int, float)): + debug_print(f"✅ 容器 '{vessel_id}' 体积: {volume}mL (列表格式)") + return float(volume) + + # 处理直接数值格式 + elif isinstance(liquid_volume, (int, float)): + debug_print(f"✅ 容器 '{vessel_id}' 体积: {liquid_volume}mL (数值格式)") + return float(liquid_volume) + + # 检查其他可能的体积字段 + volume_keys = ['current_volume', 'total_volume', 'volume'] + for key in volume_keys: + if key in vessel_data: + try: + volume = float(vessel_data[key]) + if volume > 0: + debug_print(f"✅ 容器 '{vessel_id}' 体积: {volume}mL (字段: {key})") + return volume + except (ValueError, TypeError): + continue + + debug_print(f"⚠️ 无法获取容器 '{vessel_id}' 的体积,返回默认值 50.0mL") + return 50.0 + +def update_vessel_volume(vessel: dict, G: nx.DiGraph, new_volume: float, description: str = "") -> None: + """ + 更新容器体积(同时更新vessel字典和图节点) + + Args: + vessel: 容器字典 + G: 网络图 + new_volume: 新体积 + description: 更新描述 + """ + vessel_id = vessel.get("id", "unknown") + + if description: + debug_print(f"🔧 更新容器体积 - {description}") + + # 更新vessel字典中的体积 + if "data" in vessel: + if "liquid_volume" in vessel["data"]: + current_volume = vessel["data"]["liquid_volume"] + if isinstance(current_volume, list): + if len(current_volume) > 0: + vessel["data"]["liquid_volume"][0] = new_volume + else: + vessel["data"]["liquid_volume"] = [new_volume] + else: + vessel["data"]["liquid_volume"] = new_volume + else: + vessel["data"]["liquid_volume"] = new_volume + else: + vessel["data"] = {"liquid_volume": new_volume} + + # 同时更新图中的容器数据 + if vessel_id in G.nodes(): + if 'data' not in G.nodes[vessel_id]: + G.nodes[vessel_id]['data'] = {} + + vessel_node_data = G.nodes[vessel_id]['data'] + current_node_volume = vessel_node_data.get('liquid_volume', 0.0) + + if isinstance(current_node_volume, list): + if len(current_node_volume) > 0: + G.nodes[vessel_id]['data']['liquid_volume'][0] = new_volume + else: + G.nodes[vessel_id]['data']['liquid_volume'] = [new_volume] + else: + G.nodes[vessel_id]['data']['liquid_volume'] = new_volume + + debug_print(f"📊 容器 '{vessel_id}' 体积已更新为: {new_volume:.2f}mL") + +def calculate_solvent_volumes(total_volume: float, pct1: float, pct2: float) -> tuple: + """根据百分比计算溶剂体积""" + volume1 = (total_volume * pct1) / 100.0 + volume2 = (total_volume * pct2) / 100.0 + + debug_print(f"🧮 溶剂体积计算: 总体积{total_volume}mL") + debug_print(f" - 溶剂1: {pct1}% = {volume1}mL") + debug_print(f" - 溶剂2: {pct2}% = {volume2}mL") + + return (volume1, volume2) def generate_run_column_protocol( G: nx.DiGraph, - from_vessel: str, - to_vessel: str, - column: str + from_vessel: dict, # 🔧 修改:从字符串改为字典类型 + to_vessel: dict, # 🔧 修改:从字符串改为字典类型 + column: str, + rf: str = "", + pct1: str = "", + pct2: str = "", + solvent1: str = "", + solvent2: str = "", + ratio: str = "", + **kwargs ) -> List[Dict[str, Any]]: """ - 生成柱层析分离的协议序列 + 生成柱层析分离的协议序列 - 支持vessel字典和体积运算 Args: G: 有向图,节点为设备和容器,边为流体管道 - from_vessel: 源容器的名称,即样品起始所在的容器 - to_vessel: 目标容器的名称,分离后的样品要到达的容器 - column: 所使用的柱子的名称 + from_vessel: 源容器字典(从XDL传入) + to_vessel: 目标容器字典(从XDL传入) + column: 所使用的柱子的名称(必需) + rf: Rf值(可选,支持 "?" 表示未知) + pct1: 第一种溶剂百分比(如 "40 %",可选) + pct2: 第二种溶剂百分比(如 "50 %",可选) + solvent1: 第一种溶剂名称(可选) + solvent2: 第二种溶剂名称(可选) + ratio: 溶剂比例(如 "5:95",可选,优先级高于pct1/pct2) + **kwargs: 其他可选参数 Returns: List[Dict[str, Any]]: 柱层析分离操作的动作序列 """ + + # 🔧 核心修改:从字典中提取容器ID + from_vessel_id = from_vessel["id"] + to_vessel_id = to_vessel["id"] + + debug_print("🏛️" * 20) + debug_print("🚀 开始生成柱层析协议(支持vessel字典和体积运算)✨") + debug_print(f"📝 输入参数:") + debug_print(f" 🥽 from_vessel: {from_vessel} (ID: {from_vessel_id})") + debug_print(f" 🥽 to_vessel: {to_vessel} (ID: {to_vessel_id})") + debug_print(f" 🏛️ column: '{column}'") + debug_print(f" 📊 rf: '{rf}'") + debug_print(f" 🧪 溶剂配比: pct1='{pct1}', pct2='{pct2}', ratio='{ratio}'") + debug_print(f" 🧪 溶剂名称: solvent1='{solvent1}', solvent2='{solvent2}'") + debug_print("🏛️" * 20) + action_sequence = [] - print(f"RUN_COLUMN: 开始生成柱层析协议") - print(f" - 源容器: {from_vessel}") - print(f" - 目标容器: {to_vessel}") - print(f" - 柱子: {column}") + # 🔧 新增:记录柱层析前的容器状态 + debug_print("🔍 记录柱层析前容器状态...") + original_from_volume = get_vessel_liquid_volume(from_vessel) + original_to_volume = get_vessel_liquid_volume(to_vessel) - # 验证源容器和目标容器存在 - if from_vessel not in G.nodes(): - raise ValueError(f"源容器 '{from_vessel}' 不存在于系统中") + debug_print(f"📊 柱层析前状态:") + debug_print(f" - 源容器 {from_vessel_id}: {original_from_volume:.2f}mL") + debug_print(f" - 目标容器 {to_vessel_id}: {original_to_volume:.2f}mL") - if to_vessel not in G.nodes(): - raise ValueError(f"目标容器 '{to_vessel}' 不存在于系统中") + # === 参数验证 === + debug_print("📍 步骤1: 参数验证...") + + if not from_vessel_id: # 🔧 使用 from_vessel_id + raise ValueError("from_vessel 参数不能为空") + if not to_vessel_id: # 🔧 使用 to_vessel_id + raise ValueError("to_vessel 参数不能为空") + if not column: + raise ValueError("column 参数不能为空") + + if from_vessel_id not in G.nodes(): # 🔧 使用 from_vessel_id + raise ValueError(f"源容器 '{from_vessel_id}' 不存在于系统中") + if to_vessel_id not in G.nodes(): # 🔧 使用 to_vessel_id + raise ValueError(f"目标容器 '{to_vessel_id}' 不存在于系统中") + + debug_print("✅ 基本参数验证通过") + + # === 参数解析 === + debug_print("📍 步骤2: 参数解析...") + + # 解析Rf值 + final_rf = parse_rf_value(rf) + debug_print(f"🎯 最终Rf值: {final_rf}") + + # 解析溶剂比例(ratio优先级高于pct1/pct2) + if ratio and ratio.strip(): + final_pct1, final_pct2 = parse_ratio(ratio) + debug_print(f"📊 使用ratio参数: {final_pct1:.1f}% : {final_pct2:.1f}%") + else: + final_pct1 = parse_percentage(pct1) if pct1 else 50.0 + final_pct2 = parse_percentage(pct2) if pct2 else 50.0 + + # 如果百分比和不是100%,进行归一化 + total_pct = final_pct1 + final_pct2 + if total_pct == 0: + final_pct1, final_pct2 = 50.0, 50.0 + elif total_pct != 100.0: + final_pct1 = (final_pct1 / total_pct) * 100 + final_pct2 = (final_pct2 / total_pct) * 100 + + debug_print(f"📊 使用百分比参数: {final_pct1:.1f}% : {final_pct2:.1f}%") + + # 设置默认溶剂(如果未指定) + final_solvent1 = solvent1.strip() if solvent1 else "ethyl_acetate" + final_solvent2 = solvent2.strip() if solvent2 else "hexane" + + debug_print(f"🧪 最终溶剂: {final_solvent1} : {final_solvent2}") + + # === 查找设备和容器 === + debug_print("📍 步骤3: 查找设备和容器...") # 查找柱层析设备 - column_device_id = None - column_nodes = [node for node in G.nodes() - if (G.nodes[node].get('class') or '') == 'virtual_column'] + column_device_id = find_column_device(G) - if column_nodes: - column_device_id = column_nodes[0] - print(f"RUN_COLUMN: 找到柱层析设备: {column_device_id}") + # 查找柱容器 + column_vessel = find_column_vessel(G, column) + + # 查找溶剂容器 + solvent1_vessel = find_solvent_vessel(G, final_solvent1) + solvent2_vessel = find_solvent_vessel(G, final_solvent2) + + debug_print(f"🔧 设备映射:") + debug_print(f" - 柱设备: '{column_device_id}'") + debug_print(f" - 柱容器: '{column_vessel}'") + debug_print(f" - 溶剂1容器: '{solvent1_vessel}'") + debug_print(f" - 溶剂2容器: '{solvent2_vessel}'") + + # === 获取源容器体积 === + debug_print("📍 步骤4: 获取源容器体积...") + + source_volume = original_from_volume + if source_volume <= 0: + source_volume = 50.0 # 默认体积 + debug_print(f"⚠️ 无法获取源容器体积,使用默认值: {source_volume}mL") else: - print(f"RUN_COLUMN: 警告 - 未找到柱层析设备") + debug_print(f"✅ 源容器体积: {source_volume}mL") - # 获取源容器中的液体体积 - source_volume = get_vessel_liquid_volume(G, from_vessel) - print(f"RUN_COLUMN: 源容器 {from_vessel} 中有 {source_volume} mL 液体") + # === 计算溶剂体积 === + debug_print("📍 步骤5: 计算溶剂体积...") - # === 第一步:样品转移到柱子(如果柱子是容器) === - if column in G.nodes() and G.nodes[column].get('type') == 'container': - print(f"RUN_COLUMN: 样品转移 - {source_volume} mL 从 {from_vessel} 到 {column}") + # 洗脱溶剂通常是样品体积的2-5倍 + total_elution_volume = source_volume * 3.0 + solvent1_volume, solvent2_volume = calculate_solvent_volumes( + total_elution_volume, final_pct1, final_pct2 + ) + + # === 执行柱层析流程 === + debug_print("📍 步骤6: 执行柱层析流程...") + + # 🔧 新增:体积变化跟踪变量 + current_from_volume = source_volume + current_to_volume = original_to_volume + current_column_volume = 0.0 + + try: + # 步骤6.1: 样品上柱(如果有独立的柱容器) + if column_vessel and column_vessel != from_vessel_id: # 🔧 使用 from_vessel_id + debug_print(f"📍 6.1: 样品上柱 - {source_volume}mL 从 {from_vessel_id} 到 {column_vessel}") + + try: + sample_transfer_actions = generate_pump_protocol_with_rinsing( + G=G, + from_vessel=from_vessel_id, # 🔧 使用 from_vessel_id + to_vessel=column_vessel, + volume=source_volume, + flowrate=1.0, # 慢速上柱 + transfer_flowrate=0.5, + rinsing_solvent="", # 暂不冲洗 + rinsing_volume=0.0, + rinsing_repeats=0 + ) + action_sequence.extend(sample_transfer_actions) + debug_print(f"✅ 样品上柱完成,添加了 {len(sample_transfer_actions)} 个动作") + + # 🔧 新增:更新体积 - 样品转移到柱上 + current_from_volume = 0.0 # 源容器体积变为0 + current_column_volume = source_volume # 柱容器体积增加 + + update_vessel_volume(from_vessel, G, current_from_volume, "样品上柱后,源容器清空") + + # 如果柱容器在图中,也更新其体积 + if column_vessel in G.nodes(): + if 'data' not in G.nodes[column_vessel]: + G.nodes[column_vessel]['data'] = {} + G.nodes[column_vessel]['data']['liquid_volume'] = current_column_volume + debug_print(f"📊 柱容器 '{column_vessel}' 体积更新为: {current_column_volume:.2f}mL") + + except Exception as e: + debug_print(f"⚠️ 样品上柱失败: {str(e)}") - try: - sample_transfer_actions = generate_pump_protocol( - G=G, - from_vessel=from_vessel, - to_vessel=column, - volume=source_volume if source_volume > 0 else 100.0, - flowrate=2.0 - ) - action_sequence.extend(sample_transfer_actions) - except Exception as e: - print(f"RUN_COLUMN: 样品转移失败: {str(e)}") - - # === 第二步:使用柱层析设备执行分离 === - if column_device_id: - print(f"RUN_COLUMN: 使用柱层析设备执行分离") + # 步骤6.2: 添加洗脱溶剂1(如果有溶剂容器) + if solvent1_vessel and solvent1_volume > 0: + debug_print(f"📍 6.2: 添加洗脱溶剂1 - {solvent1_volume:.1f}mL {final_solvent1}") + + try: + target_vessel = column_vessel if column_vessel else from_vessel_id # 🔧 使用 from_vessel_id + solvent1_transfer_actions = generate_pump_protocol_with_rinsing( + G=G, + from_vessel=solvent1_vessel, + to_vessel=target_vessel, + volume=solvent1_volume, + flowrate=2.0, + transfer_flowrate=1.0 + ) + action_sequence.extend(solvent1_transfer_actions) + debug_print(f"✅ 溶剂1添加完成,添加了 {len(solvent1_transfer_actions)} 个动作") + + # 🔧 新增:更新体积 - 添加溶剂1 + if target_vessel == column_vessel: + current_column_volume += solvent1_volume + if column_vessel in G.nodes(): + G.nodes[column_vessel]['data']['liquid_volume'] = current_column_volume + debug_print(f"📊 柱容器体积增加: +{solvent1_volume:.2f}mL = {current_column_volume:.2f}mL") + elif target_vessel == from_vessel_id: + current_from_volume += solvent1_volume + update_vessel_volume(from_vessel, G, current_from_volume, "添加溶剂1后") + + except Exception as e: + debug_print(f"⚠️ 溶剂1添加失败: {str(e)}") - column_separation_action = { - "device_id": column_device_id, - "action_name": "run_column", - "action_kwargs": { - "from_vessel": from_vessel, - "to_vessel": to_vessel, - "column": column + # 步骤6.3: 添加洗脱溶剂2(如果有溶剂容器) + if solvent2_vessel and solvent2_volume > 0: + debug_print(f"📍 6.3: 添加洗脱溶剂2 - {solvent2_volume:.1f}mL {final_solvent2}") + + try: + target_vessel = column_vessel if column_vessel else from_vessel_id # 🔧 使用 from_vessel_id + solvent2_transfer_actions = generate_pump_protocol_with_rinsing( + G=G, + from_vessel=solvent2_vessel, + to_vessel=target_vessel, + volume=solvent2_volume, + flowrate=2.0, + transfer_flowrate=1.0 + ) + action_sequence.extend(solvent2_transfer_actions) + debug_print(f"✅ 溶剂2添加完成,添加了 {len(solvent2_transfer_actions)} 个动作") + + # 🔧 新增:更新体积 - 添加溶剂2 + if target_vessel == column_vessel: + current_column_volume += solvent2_volume + if column_vessel in G.nodes(): + G.nodes[column_vessel]['data']['liquid_volume'] = current_column_volume + debug_print(f"📊 柱容器体积增加: +{solvent2_volume:.2f}mL = {current_column_volume:.2f}mL") + elif target_vessel == from_vessel_id: + current_from_volume += solvent2_volume + update_vessel_volume(from_vessel, G, current_from_volume, "添加溶剂2后") + + except Exception as e: + debug_print(f"⚠️ 溶剂2添加失败: {str(e)}") + + # 步骤6.4: 使用柱层析设备执行分离(如果有设备) + if column_device_id: + debug_print(f"📍 6.4: 使用柱层析设备执行分离") + + column_separation_action = { + "device_id": column_device_id, + "action_name": "run_column", + "action_kwargs": { + "from_vessel": from_vessel_id, # 🔧 使用 from_vessel_id + "to_vessel": to_vessel_id, # 🔧 使用 to_vessel_id + "column": column, + "rf": rf, + "pct1": pct1, + "pct2": pct2, + "solvent1": solvent1, + "solvent2": solvent2, + "ratio": ratio + } } - } - action_sequence.append(column_separation_action) - - # 等待柱层析设备完成分离 - action_sequence.append({ - "action_name": "wait", - "action_kwargs": {"time": 60} - }) - - # === 第三步:从柱子转移到目标容器(如果需要) === - if column in G.nodes() and column != to_vessel: - print(f"RUN_COLUMN: 产物转移 - 从 {column} 到 {to_vessel}") - - try: - product_transfer_actions = generate_pump_protocol( - G=G, - from_vessel=column, - to_vessel=to_vessel, - volume=source_volume * 0.8 if source_volume > 0 else 80.0, # 假设有一些损失 - flowrate=1.5 - ) - action_sequence.extend(product_transfer_actions) - except Exception as e: - print(f"RUN_COLUMN: 产物转移失败: {str(e)}") - - print(f"RUN_COLUMN: 生成了 {len(action_sequence)} 个动作") - return action_sequence - - -# 便捷函数:常用柱层析方案 -def generate_flash_column_protocol( - G: nx.DiGraph, - from_vessel: str, - to_vessel: str, - column_material: str = "silica_gel", - mobile_phase: str = "ethyl_acetate", - mobile_phase_volume: float = 100.0 -) -> List[Dict[str, Any]]: - """快速柱层析:高流速分离""" - return generate_run_column_protocol( - G, from_vessel, to_vessel, column_material, - mobile_phase, mobile_phase_volume, 1, "", 0.0, 3.0 - ) - - -def generate_preparative_column_protocol( - G: nx.DiGraph, - from_vessel: str, - to_vessel: str, - column_material: str = "silica_gel", - equilibration_solvent: str = "hexane", - eluting_solvent: str = "ethyl_acetate", - eluting_volume: float = 50.0, - eluting_repeats: int = 3 -) -> List[Dict[str, Any]]: - """制备柱层析:带平衡和多次洗脱""" - return generate_run_column_protocol( - G, from_vessel, to_vessel, column_material, - eluting_solvent, eluting_volume, eluting_repeats, - equilibration_solvent, 30.0, 1.5 - ) - - -def generate_gradient_column_protocol( - G: nx.DiGraph, - from_vessel: str, - to_vessel: str, - column_material: str = "silica_gel", - gradient_solvents: List[str] = None, - gradient_volumes: List[float] = None -) -> List[Dict[str, Any]]: - """梯度洗脱柱层析:多种溶剂系统""" - if gradient_solvents is None: - gradient_solvents = ["hexane", "ethyl_acetate", "methanol"] - if gradient_volumes is None: - gradient_volumes = [50.0, 50.0, 30.0] - - action_sequence = [] - - # 每种溶剂单独执行一次柱层析 - for i, (solvent, volume) in enumerate(zip(gradient_solvents, gradient_volumes)): - print(f"RUN_COLUMN: 梯度洗脱第 {i+1}/{len(gradient_solvents)} 步: {volume} mL {solvent}") - - # 第一步使用源容器,后续步骤使用柱子作为源 - step_from_vessel = from_vessel if i == 0 else column_material - # 最后一步使用目标容器,其他步骤使用柱子作为目标 - step_to_vessel = to_vessel if i == len(gradient_solvents) - 1 else column_material - - step_actions = generate_run_column_protocol( - G, step_from_vessel, step_to_vessel, column_material, - solvent, volume, 1, "", 0.0, 1.0 - ) - action_sequence.extend(step_actions) - - # 在梯度步骤之间加入等待时间 - if i < len(gradient_solvents) - 1: + action_sequence.append(column_separation_action) + debug_print(f"✅ 柱层析设备动作已添加") + + # 等待分离完成 + separation_time = max(30, min(120, int(total_elution_volume / 2))) # 30-120秒,基于体积 action_sequence.append({ "action_name": "wait", - "action_kwargs": {"time": 20} + "action_kwargs": {"time": separation_time} }) + debug_print(f"✅ 等待分离完成: {separation_time}秒") + + # 步骤6.5: 产物收集(从柱容器到目标容器) + if column_vessel and column_vessel != to_vessel_id: # 🔧 使用 to_vessel_id + debug_print(f"📍 6.5: 产物收集 - 从 {column_vessel} 到 {to_vessel_id}") + + try: + # 估算产物体积(原始样品体积的70-90%,收率考虑) + product_volume = source_volume * 0.8 + + product_transfer_actions = generate_pump_protocol_with_rinsing( + G=G, + from_vessel=column_vessel, + to_vessel=to_vessel_id, # 🔧 使用 to_vessel_id + volume=product_volume, + flowrate=1.5, + transfer_flowrate=0.8 + ) + action_sequence.extend(product_transfer_actions) + debug_print(f"✅ 产物收集完成,添加了 {len(product_transfer_actions)} 个动作") + + # 🔧 新增:更新体积 - 产物收集到目标容器 + current_to_volume += product_volume + current_column_volume -= product_volume # 柱容器体积减少 + + update_vessel_volume(to_vessel, G, current_to_volume, "产物收集后") + + # 更新柱容器体积 + if column_vessel in G.nodes(): + G.nodes[column_vessel]['data']['liquid_volume'] = max(0.0, current_column_volume) + debug_print(f"📊 柱容器体积减少: -{product_volume:.2f}mL = {current_column_volume:.2f}mL") + + except Exception as e: + debug_print(f"⚠️ 产物收集失败: {str(e)}") + + # 步骤6.6: 如果没有独立的柱设备和容器,执行简化的直接转移 + if not column_device_id and not column_vessel: + debug_print(f"📍 6.6: 简化模式 - 直接转移 {source_volume}mL 从 {from_vessel_id} 到 {to_vessel_id}") + + try: + direct_transfer_actions = generate_pump_protocol_with_rinsing( + G=G, + from_vessel=from_vessel_id, # 🔧 使用 from_vessel_id + to_vessel=to_vessel_id, # 🔧 使用 to_vessel_id + volume=source_volume, + flowrate=2.0, + transfer_flowrate=1.0 + ) + action_sequence.extend(direct_transfer_actions) + debug_print(f"✅ 直接转移完成,添加了 {len(direct_transfer_actions)} 个动作") + + # 🔧 新增:更新体积 - 直接转移 + current_from_volume = 0.0 # 源容器清空 + current_to_volume += source_volume # 目标容器增加 + + update_vessel_volume(from_vessel, G, current_from_volume, "直接转移后,源容器清空") + update_vessel_volume(to_vessel, G, current_to_volume, "直接转移后,目标容器增加") + + except Exception as e: + debug_print(f"⚠️ 直接转移失败: {str(e)}") + + except Exception as e: + debug_print(f"❌ 协议生成失败: {str(e)} 😭") + + # 不添加不确定的动作,直接让action_sequence保持为空列表 + # action_sequence 已经在函数开始时初始化为 [] + + # 确保至少有一个有效的动作,如果完全失败就返回空列表 + if not action_sequence: + debug_print("⚠️ 没有生成任何有效动作") + # 可以选择返回空列表或添加一个基本的等待动作 + action_sequence.append({ + "action_name": "wait", + "action_kwargs": { + "time": 1.0, + "description": "柱层析协议执行完成" + } + }) + + # 🔧 新增:柱层析完成后的最终状态报告 + final_from_volume = get_vessel_liquid_volume(from_vessel) + final_to_volume = get_vessel_liquid_volume(to_vessel) + + # 🎊 总结 + debug_print("🏛️" * 20) + debug_print(f"🎉 柱层析协议生成完成! ✨") + debug_print(f"📊 总动作数: {len(action_sequence)} 个") + debug_print(f"🥽 路径: {from_vessel_id} → {to_vessel_id}") + debug_print(f"🏛️ 柱子: {column}") + debug_print(f"🧪 溶剂: {final_solvent1}:{final_solvent2} = {final_pct1:.1f}%:{final_pct2:.1f}%") + debug_print(f"📊 体积变化统计:") + debug_print(f" 源容器 {from_vessel_id}:") + debug_print(f" - 柱层析前: {original_from_volume:.2f}mL") + debug_print(f" - 柱层析后: {final_from_volume:.2f}mL") + debug_print(f" 目标容器 {to_vessel_id}:") + debug_print(f" - 柱层析前: {original_to_volume:.2f}mL") + debug_print(f" - 柱层析后: {final_to_volume:.2f}mL") + debug_print(f" - 收集体积: {final_to_volume - original_to_volume:.2f}mL") + debug_print(f"⏱️ 预计总时间: {len(action_sequence) * 5:.0f} 秒 ⌛") + debug_print("🏛️" * 20) return action_sequence +# 🔧 新增:便捷函数 +def generate_ethyl_acetate_hexane_column_protocol(G: nx.DiGraph, from_vessel: dict, to_vessel: dict, + column: str, ratio: str = "30:70") -> List[Dict[str, Any]]: + """乙酸乙酯-己烷柱层析(常用组合)""" + from_vessel_id = from_vessel["id"] + to_vessel_id = to_vessel["id"] + debug_print(f"🧪⛽ 乙酸乙酯-己烷柱层析: {from_vessel_id} → {to_vessel_id} @ {ratio}") + return generate_run_column_protocol(G, from_vessel, to_vessel, column, + solvent1="ethyl_acetate", solvent2="hexane", ratio=ratio) -def generate_reverse_phase_column_protocol( - G: nx.DiGraph, - from_vessel: str, - to_vessel: str, - column_material: str = "C18", - aqueous_phase: str = "water", - organic_phase: str = "methanol", - gradient_ratio: float = 0.5 -) -> List[Dict[str, Any]]: - """反相柱层析:C18柱,水-有机相梯度""" - # 先用水相平衡 - equilibration_volume = 20.0 - # 然后用有机相洗脱 - eluting_volume = 30.0 * gradient_ratio - - return generate_run_column_protocol( - G, from_vessel, to_vessel, column_material, - organic_phase, eluting_volume, 2, - aqueous_phase, equilibration_volume, 0.8 - ) +def generate_methanol_dcm_column_protocol(G: nx.DiGraph, from_vessel: dict, to_vessel: dict, + column: str, ratio: str = "5:95") -> List[Dict[str, Any]]: + """甲醇-二氯甲烷柱层析""" + from_vessel_id = from_vessel["id"] + to_vessel_id = to_vessel["id"] + debug_print(f"🧪🧪 甲醇-DCM柱层析: {from_vessel_id} → {to_vessel_id} @ {ratio}") + return generate_run_column_protocol(G, from_vessel, to_vessel, column, + solvent1="methanol", solvent2="dichloromethane", ratio=ratio) +def generate_gradient_column_protocol(G: nx.DiGraph, from_vessel: dict, to_vessel: dict, + column: str, start_ratio: str = "10:90", + end_ratio: str = "50:50") -> List[Dict[str, Any]]: + """梯度洗脱柱层析(中等比例)""" + from_vessel_id = from_vessel["id"] + to_vessel_id = to_vessel["id"] + debug_print(f"📈 梯度柱层析: {from_vessel_id} → {to_vessel_id} ({start_ratio} → {end_ratio})") + # 使用中间比例作为近似 + return generate_run_column_protocol(G, from_vessel, to_vessel, column, ratio="30:70") -def generate_ion_exchange_column_protocol( - G: nx.DiGraph, - from_vessel: str, - to_vessel: str, - column_material: str = "ion_exchange", - buffer_solution: str = "buffer", - salt_solution: str = "NaCl_solution", - salt_volume: float = 40.0 -) -> List[Dict[str, Any]]: - """离子交换柱层析:缓冲液平衡,盐溶液洗脱""" - return generate_run_column_protocol( - G, from_vessel, to_vessel, column_material, - salt_solution, salt_volume, 1, - buffer_solution, 25.0, 0.5 - ) +def generate_polar_column_protocol(G: nx.DiGraph, from_vessel: dict, to_vessel: dict, + column: str) -> List[Dict[str, Any]]: + """极性化合物柱层析(高极性溶剂比例)""" + from_vessel_id = from_vessel["id"] + to_vessel_id = to_vessel["id"] + debug_print(f"⚡ 极性化合物柱层析: {from_vessel_id} → {to_vessel_id}") + return generate_run_column_protocol(G, from_vessel, to_vessel, column, + solvent1="ethyl_acetate", solvent2="hexane", ratio="70:30") +def generate_nonpolar_column_protocol(G: nx.DiGraph, from_vessel: dict, to_vessel: dict, + column: str) -> List[Dict[str, Any]]: + """非极性化合物柱层析(低极性溶剂比例)""" + from_vessel_id = from_vessel["id"] + to_vessel_id = to_vessel["id"] + debug_print(f"🛢️ 非极性化合物柱层析: {from_vessel_id} → {to_vessel_id}") + return generate_run_column_protocol(G, from_vessel, to_vessel, column, + solvent1="ethyl_acetate", solvent2="hexane", ratio="5:95") # 测试函数 def test_run_column_protocol(): - """测试柱层析协议的示例""" - print("=== RUN COLUMN PROTOCOL 测试 ===") - print("测试完成") - + """测试柱层析协议""" + debug_print("🧪 === RUN COLUMN PROTOCOL 测试 === ✨") + debug_print("✅ 测试完成 🎉") if __name__ == "__main__": - test_run_column_protocol() \ No newline at end of file + test_run_column_protocol() + diff --git a/unilabos/compile/separate_protocol.py b/unilabos/compile/separate_protocol.py index cbb028c..ec1f8af 100644 --- a/unilabos/compile/separate_protocol.py +++ b/unilabos/compile/separate_protocol.py @@ -1,230 +1,740 @@ -import numpy as np import networkx as nx +import re +import logging +import sys +from typing import List, Dict, Any, Union +from .pump_protocol import generate_pump_protocol_with_rinsing +logger = logging.getLogger(__name__) + +# 确保输出编码为UTF-8 +if hasattr(sys.stdout, 'reconfigure'): + try: + sys.stdout.reconfigure(encoding='utf-8') + sys.stderr.reconfigure(encoding='utf-8') + except: + pass + +def debug_print(message): + """调试输出函数 - 支持中文""" + try: + # 确保消息是字符串格式 + safe_message = str(message) + print(f"🌀 [SEPARATE] {safe_message}", flush=True) + logger.info(f"[SEPARATE] {safe_message}") + except UnicodeEncodeError: + # 如果编码失败,尝试替换不支持的字符 + safe_message = str(message).encode('utf-8', errors='replace').decode('utf-8') + print(f"🌀 [SEPARATE] {safe_message}", flush=True) + logger.info(f"[SEPARATE] {safe_message}") + except Exception as e: + # 最后的安全措施 + fallback_message = f"日志输出错误: {repr(message)}" + print(f"🌀 [SEPARATE] {fallback_message}", flush=True) + logger.info(f"[SEPARATE] {fallback_message}") + +def create_action_log(message: str, emoji: str = "📝") -> Dict[str, Any]: + """创建一个动作日志 - 支持中文和emoji""" + try: + full_message = f"{emoji} {message}" + debug_print(full_message) + logger.info(full_message) + + return { + "action_name": "wait", + "action_kwargs": { + "time": 0.1, + "log_message": full_message, + "progress_message": full_message + } + } + except Exception as e: + # 如果emoji有问题,使用纯文本 + safe_message = f"[日志] {message}" + debug_print(safe_message) + logger.info(safe_message) + + return { + "action_name": "wait", + "action_kwargs": { + "time": 0.1, + "log_message": safe_message, + "progress_message": safe_message + } + } + +def parse_volume_input(volume_input: Union[str, float]) -> float: + """ + 解析体积输入,支持带单位的字符串 + + Args: + volume_input: 体积输入(如 "200 mL", "?", 50.0) + + Returns: + float: 体积(毫升) + """ + if isinstance(volume_input, (int, float)): + debug_print(f"📏 体积输入为数值: {volume_input}") + return float(volume_input) + + if not volume_input or not str(volume_input).strip(): + debug_print(f"⚠️ 体积输入为空,返回 0.0mL") + return 0.0 + + volume_str = str(volume_input).lower().strip() + debug_print(f"🔍 解析体积输入: '{volume_str}'") + + # 处理未知体积 + if volume_str in ['?', 'unknown', 'tbd', 'to be determined', '未知', '待定']: + default_volume = 100.0 # 默认100mL + debug_print(f"❓ 检测到未知体积,使用默认值: {default_volume}mL") + return default_volume + + # 移除空格并提取数字和单位 + volume_clean = re.sub(r'\s+', '', volume_str) + + # 匹配数字和单位的正则表达式 + match = re.match(r'([0-9]*\.?[0-9]+)\s*(ml|l|μl|ul|microliter|milliliter|liter|毫升|升|微升)?', volume_clean) + + if not match: + debug_print(f"⚠️ 无法解析体积: '{volume_str}',使用默认值 100mL") + return 100.0 + + value = float(match.group(1)) + unit = match.group(2) or 'ml' # 默认单位为毫升 + + # 转换为毫升 + if unit in ['l', 'liter', '升']: + volume = value * 1000.0 # L -> mL + debug_print(f"🔄 体积转换: {value}L -> {volume}mL") + elif unit in ['μl', 'ul', 'microliter', '微升']: + volume = value / 1000.0 # μL -> mL + debug_print(f"🔄 体积转换: {value}μL -> {volume}mL") + else: # ml, milliliter, 毫升 或默认 + volume = value # 已经是mL + debug_print(f"✅ 体积已为毫升单位: {volume}mL") + + return volume + +def find_solvent_vessel(G: nx.DiGraph, solvent: str) -> str: + """查找溶剂容器,支持多种匹配模式""" + if not solvent or not solvent.strip(): + debug_print("⏭️ 未指定溶剂,跳过溶剂容器查找") + return "" + + debug_print(f"🔍 正在查找溶剂 '{solvent}' 的容器...") + + # 🔧 方法1:直接搜索 data.reagent_name 和 config.reagent + debug_print(f"📋 方法1: 搜索试剂字段...") + for node in G.nodes(): + node_data = G.nodes[node].get('data', {}) + node_type = G.nodes[node].get('type', '') + config_data = G.nodes[node].get('config', {}) + + # 只搜索容器类型的节点 + if node_type == 'container': + reagent_name = node_data.get('reagent_name', '').lower() + config_reagent = config_data.get('reagent', '').lower() + + # 精确匹配 + if reagent_name == solvent.lower() or config_reagent == solvent.lower(): + debug_print(f"✅ 通过试剂字段精确匹配找到容器: {node}") + return node + + # 模糊匹配 + if (solvent.lower() in reagent_name and reagent_name) or \ + (solvent.lower() in config_reagent and config_reagent): + debug_print(f"✅ 通过试剂字段模糊匹配找到容器: {node}") + return node + + # 🔧 方法2:常见的容器命名规则 + debug_print(f"📋 方法2: 使用命名规则...") + solvent_clean = solvent.lower().replace(' ', '_').replace('-', '_') + possible_names = [ + f"flask_{solvent_clean}", + f"bottle_{solvent_clean}", + f"vessel_{solvent_clean}", + f"{solvent_clean}_flask", + f"{solvent_clean}_bottle", + f"solvent_{solvent_clean}", + f"reagent_{solvent_clean}", + f"reagent_bottle_{solvent_clean}", + f"reagent_bottle_1", # 通用试剂瓶 + f"reagent_bottle_2", + f"reagent_bottle_3" + ] + + debug_print(f"🎯 尝试的容器名称: {possible_names[:5]}... (共 {len(possible_names)} 个)") + + for name in possible_names: + if name in G.nodes(): + node_type = G.nodes[name].get('type', '') + if node_type == 'container': + debug_print(f"✅ 通过命名规则找到容器: {name}") + return name + + # 🔧 方法3:使用第一个试剂瓶作为备选 + debug_print(f"📋 方法3: 查找备用试剂瓶...") + for node_id in G.nodes(): + node_data = G.nodes[node_id] + if (node_data.get('type') == 'container' and + ('reagent' in node_id.lower() or 'bottle' in node_id.lower())): + debug_print(f"⚠️ 未找到专用容器,使用备用容器: {node_id}") + return node_id + + debug_print(f"❌ 无法找到溶剂 '{solvent}' 的容器") + return "" + +def find_separator_device(G: nx.DiGraph, vessel: str) -> str: + """查找分离器设备,支持多种查找方式""" + debug_print(f"🔍 正在查找容器 '{vessel}' 的分离器设备...") + + # 方法1:查找连接到容器的分离器设备 + debug_print(f"📋 方法1: 检查连接的分离器...") + separator_nodes = [] + for node in G.nodes(): + node_class = G.nodes[node].get('class', '').lower() + if 'separator' in node_class: + separator_nodes.append(node) + debug_print(f"📋 发现分离器设备: {node}") + + # 检查是否连接到目标容器 + if G.has_edge(node, vessel) or G.has_edge(vessel, node): + debug_print(f"✅ 找到连接的分离器: {node}") + return node + + debug_print(f"📊 找到的分离器总数: {len(separator_nodes)}") + + # 方法2:根据命名规则查找 + debug_print(f"📋 方法2: 使用命名规则...") + possible_names = [ + f"{vessel}_controller", + f"{vessel}_separator", + vessel, # 容器本身可能就是分离器 + "separator_1", + "virtual_separator", + "liquid_handler_1", # 液体处理器也可能用于分离 + "controller_1" + ] + + debug_print(f"🎯 尝试的分离器名称: {possible_names}") + + for name in possible_names: + if name in G.nodes(): + node_class = G.nodes[name].get('class', '').lower() + if 'separator' in node_class or 'controller' in node_class: + debug_print(f"✅ 通过命名规则找到分离器: {name}") + return name + + # 方法3:查找第一个分离器设备 + debug_print(f"📋 方法3: 使用第一个可用分离器...") + if separator_nodes: + debug_print(f"⚠️ 使用第一个分离器设备: {separator_nodes[0]}") + return separator_nodes[0] + + debug_print(f"❌ 未找到分离器设备") + return "" + +def find_connected_stirrer(G: nx.DiGraph, vessel: str) -> str: + """查找连接到指定容器的搅拌器""" + debug_print(f"🔍 正在查找与容器 {vessel} 连接的搅拌器...") + + stirrer_nodes = [] + for node in G.nodes(): + node_data = G.nodes[node] + node_class = node_data.get('class', '') or '' + + if 'stirrer' in node_class.lower(): + stirrer_nodes.append(node) + debug_print(f"📋 发现搅拌器: {node}") + + debug_print(f"📊 找到的搅拌器总数: {len(stirrer_nodes)}") + + # 检查哪个搅拌器与目标容器相连 + for stirrer in stirrer_nodes: + if G.has_edge(stirrer, vessel) or G.has_edge(vessel, stirrer): + debug_print(f"✅ 找到连接的搅拌器: {stirrer}") + return stirrer + + # 如果没有连接的搅拌器,返回第一个可用的 + if stirrer_nodes: + debug_print(f"⚠️ 未找到直接连接的搅拌器,使用第一个可用的: {stirrer_nodes[0]}") + return stirrer_nodes[0] + + debug_print("❌ 未找到搅拌器") + return "" + +def get_vessel_liquid_volume(vessel: dict) -> float: + """ + 获取容器中的液体体积 - 支持vessel字典 + + Args: + vessel: 容器字典 + + Returns: + float: 液体体积(mL) + """ + if not vessel or "data" not in vessel: + debug_print(f"⚠️ 容器数据为空,返回 0.0mL") + return 0.0 + + vessel_data = vessel["data"] + vessel_id = vessel.get("id", "unknown") + + debug_print(f"🔍 读取容器 '{vessel_id}' 体积数据: {vessel_data}") + + # 检查liquid_volume字段 + if "liquid_volume" in vessel_data: + liquid_volume = vessel_data["liquid_volume"] + + # 处理列表格式 + if isinstance(liquid_volume, list): + if len(liquid_volume) > 0: + volume = liquid_volume[0] + if isinstance(volume, (int, float)): + debug_print(f"✅ 容器 '{vessel_id}' 体积: {volume}mL (列表格式)") + return float(volume) + + # 处理直接数值格式 + elif isinstance(liquid_volume, (int, float)): + debug_print(f"✅ 容器 '{vessel_id}' 体积: {liquid_volume}mL (数值格式)") + return float(liquid_volume) + + # 检查其他可能的体积字段 + volume_keys = ['current_volume', 'total_volume', 'volume'] + for key in volume_keys: + if key in vessel_data: + try: + volume = float(vessel_data[key]) + if volume > 0: + debug_print(f"✅ 容器 '{vessel_id}' 体积: {volume}mL (字段: {key})") + return volume + except (ValueError, TypeError): + continue + + debug_print(f"⚠️ 无法获取容器 '{vessel_id}' 的体积,返回默认值 50.0mL") + return 50.0 + +def update_vessel_volume(vessel: dict, G: nx.DiGraph, new_volume: float, description: str = "") -> None: + """ + 更新容器体积(同时更新vessel字典和图节点) + + Args: + vessel: 容器字典 + G: 网络图 + new_volume: 新体积 + description: 更新描述 + """ + vessel_id = vessel.get("id", "unknown") + + if description: + debug_print(f"🔧 更新容器体积 - {description}") + + # 更新vessel字典中的体积 + if "data" in vessel: + if "liquid_volume" in vessel["data"]: + current_volume = vessel["data"]["liquid_volume"] + if isinstance(current_volume, list): + if len(current_volume) > 0: + vessel["data"]["liquid_volume"][0] = new_volume + else: + vessel["data"]["liquid_volume"] = [new_volume] + else: + vessel["data"]["liquid_volume"] = new_volume + else: + vessel["data"]["liquid_volume"] = new_volume + else: + vessel["data"] = {"liquid_volume": new_volume} + + # 同时更新图中的容器数据 + if vessel_id in G.nodes(): + if 'data' not in G.nodes[vessel_id]: + G.nodes[vessel_id]['data'] = {} + + vessel_node_data = G.nodes[vessel_id]['data'] + current_node_volume = vessel_node_data.get('liquid_volume', 0.0) + + if isinstance(current_node_volume, list): + if len(current_node_volume) > 0: + G.nodes[vessel_id]['data']['liquid_volume'][0] = new_volume + else: + G.nodes[vessel_id]['data']['liquid_volume'] = [new_volume] + else: + G.nodes[vessel_id]['data']['liquid_volume'] = new_volume + + debug_print(f"📊 容器 '{vessel_id}' 体积已更新为: {new_volume:.2f}mL") def generate_separate_protocol( - G: nx.DiGraph, - purpose: str, # 'wash' or 'extract'. 'wash' means that product phase will not be the added solvent phase, 'extract' means product phase will be the added solvent phase. If no solvent is added just use 'extract'. - product_phase: str, # 'top' or 'bottom'. Phase that product will be in. - from_vessel: str, #Contents of from_vessel are transferred to separation_vessel and separation is performed. - separation_vessel: str, # Vessel in which separation of phases will be carried out. - to_vessel: str, # Vessel to send product phase to. - waste_phase_to_vessel: str, # Optional. Vessel to send waste phase to. - solvent: str, # Optional. Solvent to add to separation vessel after contents of from_vessel has been transferred to create two phases. - solvent_volume: float = 50, # Optional. Volume of solvent to add (mL). - through: str = "", # Optional. Solid chemical to send product phase through on way to to_vessel, e.g. 'celite'. - repeats: int = 1, # Optional. Number of separations to perform. - stir_time: float = 30, # Optional. Time stir for after adding solvent, before separation of phases. - stir_speed: float = 300, # Optional. Speed to stir at after adding solvent, before separation of phases. - settling_time: float = 300 # Optional. Time -) -> list[dict]: + G: nx.DiGraph, + # 🔧 基础参数,支持XDL的vessel参数 + vessel: dict = None, # 🔧 修改:从字符串改为字典类型 + purpose: str = "separate", # 分离目的 + product_phase: str = "top", # 产物相 + # 🔧 可选的详细参数 + from_vessel: Union[str, dict] = "", # 源容器(通常在separate前已经transfer了) + separation_vessel: Union[str, dict] = "", # 分离容器(与vessel同义) + to_vessel: Union[str, dict] = "", # 目标容器(可选) + waste_phase_to_vessel: Union[str, dict] = "", # 废相目标容器 + product_vessel: Union[str, dict] = "", # XDL: 产物容器(与to_vessel同义) + waste_vessel: Union[str, dict] = "", # XDL: 废液容器(与waste_phase_to_vessel同义) + # 🔧 溶剂相关参数 + solvent: str = "", # 溶剂名称 + solvent_volume: Union[str, float] = 0.0, # 溶剂体积 + volume: Union[str, float] = 0.0, # XDL: 体积(与solvent_volume同义) + # 🔧 操作参数 + through: str = "", # 通过材料 + repeats: int = 1, # 重复次数 + stir_time: float = 30.0, # 搅拌时间(秒) + stir_speed: float = 300.0, # 搅拌速度 + settling_time: float = 300.0, # 沉降时间(秒) + **kwargs +) -> List[Dict[str, Any]]: """ - Generate a protocol to clean a vessel with a solvent. + 生成分离操作的协议序列 - 支持vessel字典和体积运算 - :param G: Directed graph. Nodes are containers and pumps, edges are fluidic connections. - :param vessel: Vessel to clean. - :param solvent: Solvent to clean vessel with. - :param volume: Volume of solvent to clean vessel with. - :param temp: Temperature to heat vessel to while cleaning. - :param repeats: Number of cleaning cycles to perform. - :return: List of actions to clean vessel. + 支持XDL参数格式: + - vessel: 分离容器字典(必需) + - purpose: "wash", "extract", "separate" + - product_phase: "top", "bottom" + - product_vessel: 产物收集容器 + - waste_vessel: 废液收集容器 + - solvent: 溶剂名称 + - volume: "200 mL", "?" 或数值 + - repeats: 重复次数 + + 分离流程: + 1. (可选)添加溶剂到分离容器 + 2. 搅拌混合 + 3. 静置分层 + 4. 收集指定相到目标容器 + 5. 重复指定次数 """ - # 生成泵操作的动作序列 - pump_action_sequence = [] - reactor_volume = 500.0 - waste_vessel = waste_phase_to_vessel + # 🔧 核心修改:vessel参数兼容处理 + if vessel is None: + if isinstance(separation_vessel, dict): + vessel = separation_vessel + else: + raise ValueError("必须提供vessel字典参数") - # TODO:通过物料管理系统找到溶剂的容器 - if "," in solvent: - solvents = solvent.split(",") - assert len(solvents) == repeats, "Number of solvents must match number of repeats." + # 🔧 核心修改:从字典中提取容器ID + vessel_id = vessel["id"] + + debug_print("🌀" * 20) + debug_print("🚀 开始生成分离协议(支持vessel字典和体积运算)✨") + debug_print(f"📝 输入参数:") + debug_print(f" 🥽 vessel: {vessel} (ID: {vessel_id})") + debug_print(f" 🎯 分离目的: '{purpose}'") + debug_print(f" 📊 产物相: '{product_phase}'") + debug_print(f" 💧 溶剂: '{solvent}'") + debug_print(f" 📏 体积: {volume} (类型: {type(volume)})") + debug_print(f" 🔄 重复次数: {repeats}") + debug_print(f" 🎯 产物容器: '{product_vessel}'") + debug_print(f" 🗑️ 废液容器: '{waste_vessel}'") + debug_print(f" 📦 其他参数: {kwargs}") + debug_print("🌀" * 20) + + action_sequence = [] + + # 🔧 新增:记录分离前的容器状态 + debug_print("🔍 记录分离前容器状态...") + original_liquid_volume = get_vessel_liquid_volume(vessel) + debug_print(f"📊 分离前液体体积: {original_liquid_volume:.2f}mL") + + # === 参数验证和标准化 === + debug_print("🔍 步骤1: 参数验证和标准化...") + action_sequence.append(create_action_log(f"开始分离操作 - 容器: {vessel_id}", "🎬")) + action_sequence.append(create_action_log(f"分离目的: {purpose}", "🧪")) + action_sequence.append(create_action_log(f"产物相: {product_phase}", "📊")) + + # 统一容器参数 - 支持字典和字符串 + def extract_vessel_id(vessel_param): + if isinstance(vessel_param, dict): + return vessel_param.get("id", "") + elif isinstance(vessel_param, str): + return vessel_param + else: + return "" + + final_vessel_id = vessel_id + final_to_vessel_id = extract_vessel_id(to_vessel) or extract_vessel_id(product_vessel) + final_waste_vessel_id = extract_vessel_id(waste_phase_to_vessel) or extract_vessel_id(waste_vessel) + + # 统一体积参数 + final_volume = parse_volume_input(volume or solvent_volume) + + # 🔧 修复:确保repeats至少为1 + if repeats <= 0: + repeats = 1 + debug_print(f"⚠️ 重复次数参数 <= 0,自动设置为 1") + + debug_print(f"🔧 标准化后的参数:") + debug_print(f" 🥼 分离容器: '{final_vessel_id}'") + debug_print(f" 🎯 产物容器: '{final_to_vessel_id}'") + debug_print(f" 🗑️ 废液容器: '{final_waste_vessel_id}'") + debug_print(f" 📏 溶剂体积: {final_volume}mL") + debug_print(f" 🔄 重复次数: {repeats}") + + action_sequence.append(create_action_log(f"分离容器: {final_vessel_id}", "🧪")) + action_sequence.append(create_action_log(f"溶剂体积: {final_volume}mL", "📏")) + action_sequence.append(create_action_log(f"重复次数: {repeats}", "🔄")) + + # 验证必需参数 + if not purpose: + purpose = "separate" + if not product_phase: + product_phase = "top" + if purpose not in ["wash", "extract", "separate"]: + debug_print(f"⚠️ 未知的分离目的 '{purpose}',使用默认值 'separate'") + purpose = "separate" + action_sequence.append(create_action_log(f"未知目的,使用: {purpose}", "⚠️")) + if product_phase not in ["top", "bottom"]: + debug_print(f"⚠️ 未知的产物相 '{product_phase}',使用默认值 'top'") + product_phase = "top" + action_sequence.append(create_action_log(f"未知相别,使用: {product_phase}", "⚠️")) + + debug_print("✅ 参数验证通过") + action_sequence.append(create_action_log("参数验证通过", "✅")) + + # === 查找设备 === + debug_print("🔍 步骤2: 查找设备...") + action_sequence.append(create_action_log("正在查找相关设备...", "🔍")) + + # 查找分离器设备 + separator_device = find_separator_device(G, final_vessel_id) # 🔧 使用 final_vessel_id + if separator_device: + action_sequence.append(create_action_log(f"找到分离器设备: {separator_device}", "🧪")) else: - solvents = [solvent] * repeats + debug_print("⚠️ 未找到分离器设备,可能无法执行分离") + action_sequence.append(create_action_log("未找到分离器设备", "⚠️")) - # TODO: 通过设备连接图找到分离容器的控制器、底部出口 - separator_controller = f"{separation_vessel}_controller" - separation_vessel_bottom = f"flask_{separation_vessel}" + # 查找搅拌器 + stirrer_device = find_connected_stirrer(G, final_vessel_id) # 🔧 使用 final_vessel_id + if stirrer_device: + action_sequence.append(create_action_log(f"找到搅拌器: {stirrer_device}", "🌪️")) + else: + action_sequence.append(create_action_log("未找到搅拌器", "⚠️")) - transfer_flowrate = flowrate = 2.5 + # 查找溶剂容器(如果需要) + solvent_vessel = "" + if solvent and solvent.strip(): + solvent_vessel = find_solvent_vessel(G, solvent) + if solvent_vessel: + action_sequence.append(create_action_log(f"找到溶剂容器: {solvent_vessel}", "💧")) + else: + action_sequence.append(create_action_log(f"未找到溶剂容器: {solvent}", "⚠️")) - if from_vessel != separation_vessel: - pump_action_sequence.append( - { - "device_id": "", - "action_name": "PumpTransferProtocol", - "action_kwargs": { - "from_vessel": from_vessel, - "to_vessel": separation_vessel, - "volume": reactor_volume, - "time": reactor_volume / flowrate, - # "transfer_flowrate": transfer_flowrate, + debug_print(f"📊 设备配置:") + debug_print(f" 🧪 分离器设备: '{separator_device}'") + debug_print(f" 🌪️ 搅拌器设备: '{stirrer_device}'") + debug_print(f" 💧 溶剂容器: '{solvent_vessel}'") + + # === 执行分离流程 === + debug_print("🔍 步骤3: 执行分离流程...") + action_sequence.append(create_action_log("开始分离工作流程", "🎯")) + + # 🔧 新增:体积变化跟踪变量 + current_volume = original_liquid_volume + + try: + for repeat_idx in range(repeats): + cycle_num = repeat_idx + 1 + debug_print(f"🔄 第{cycle_num}轮: 开始分离循环 {cycle_num}/{repeats}") + action_sequence.append(create_action_log(f"分离循环 {cycle_num}/{repeats} 开始", "🔄")) + + # 步骤3.1: 添加溶剂(如果需要) + if solvent_vessel and final_volume > 0: + debug_print(f"🔄 第{cycle_num}轮 步骤1: 添加溶剂 {solvent} ({final_volume}mL)") + action_sequence.append(create_action_log(f"向分离容器添加 {final_volume}mL {solvent}", "💧")) + + try: + # 使用pump protocol添加溶剂 + pump_actions = generate_pump_protocol_with_rinsing( + G=G, + from_vessel=solvent_vessel, + to_vessel=final_vessel_id, # 🔧 使用 final_vessel_id + volume=final_volume, + amount="", + time=0.0, + viscous=False, + rinsing_solvent="", + rinsing_volume=0.0, + rinsing_repeats=0, + solid=False, + flowrate=2.5, + transfer_flowrate=0.5, + rate_spec="", + event="", + through="", + **kwargs + ) + action_sequence.extend(pump_actions) + debug_print(f"✅ 溶剂添加完成,添加了 {len(pump_actions)} 个动作") + action_sequence.append(create_action_log(f"溶剂转移完成 ({len(pump_actions)} 个操作)", "✅")) + + # 🔧 新增:更新体积 - 添加溶剂后 + current_volume += final_volume + update_vessel_volume(vessel, G, current_volume, f"添加{final_volume}mL {solvent}后") + + except Exception as e: + debug_print(f"❌ 溶剂添加失败: {str(e)}") + action_sequence.append(create_action_log(f"溶剂添加失败: {str(e)}", "❌")) + else: + debug_print(f"🔄 第{cycle_num}轮 步骤1: 无需添加溶剂") + action_sequence.append(create_action_log("无需添加溶剂", "⏭️")) + + # 步骤3.2: 启动搅拌(如果有搅拌器) + if stirrer_device and stir_time > 0: + debug_print(f"🔄 第{cycle_num}轮 步骤2: 开始搅拌 ({stir_speed}rpm,持续 {stir_time}s)") + action_sequence.append(create_action_log(f"开始搅拌: {stir_speed}rpm,持续 {stir_time}s", "🌪️")) + + action_sequence.append({ + "device_id": stirrer_device, + "action_name": "start_stir", + "action_kwargs": { + "vessel": final_vessel_id, # 🔧 使用 final_vessel_id + "stir_speed": stir_speed, + "purpose": f"分离混合 - {purpose}" + } + }) + + # 搅拌等待 + stir_minutes = stir_time / 60 + action_sequence.append(create_action_log(f"搅拌中,持续 {stir_minutes:.1f} 分钟", "⏱️")) + action_sequence.append({ + "action_name": "wait", + "action_kwargs": {"time": stir_time} + }) + + # 停止搅拌 + action_sequence.append(create_action_log("停止搅拌器", "🛑")) + action_sequence.append({ + "device_id": stirrer_device, + "action_name": "stop_stir", + "action_kwargs": {"vessel": final_vessel_id} # 🔧 使用 final_vessel_id + }) + + else: + debug_print(f"🔄 第{cycle_num}轮 步骤2: 无需搅拌") + action_sequence.append(create_action_log("无需搅拌", "⏭️")) + + # 步骤3.3: 静置分层 + if settling_time > 0: + debug_print(f"🔄 第{cycle_num}轮 步骤3: 静置分层 ({settling_time}s)") + settling_minutes = settling_time / 60 + action_sequence.append(create_action_log(f"静置分层 ({settling_minutes:.1f} 分钟)", "⚖️")) + action_sequence.append({ + "action_name": "wait", + "action_kwargs": {"time": settling_time} + }) + else: + debug_print(f"🔄 第{cycle_num}轮 步骤3: 未指定静置时间") + action_sequence.append(create_action_log("未指定静置时间", "⏭️")) + + # 步骤3.4: 执行分离操作 + if separator_device: + debug_print(f"🔄 第{cycle_num}轮 步骤4: 执行分离操作") + action_sequence.append(create_action_log(f"执行分离: 收集{product_phase}相", "🧪")) + + # 调用分离器设备的separate方法 + separate_action = { + "device_id": separator_device, + "action_name": "separate", + "action_kwargs": { + "purpose": purpose, + "product_phase": product_phase, + "from_vessel": extract_vessel_id(from_vessel) or final_vessel_id, # 🔧 使用vessel_id + "separation_vessel": final_vessel_id, # 🔧 使用 final_vessel_id + "to_vessel": final_to_vessel_id or final_vessel_id, # 🔧 使用vessel_id + "waste_phase_to_vessel": final_waste_vessel_id or final_vessel_id, # 🔧 使用vessel_id + "solvent": solvent, + "solvent_volume": final_volume, + "through": through, + "repeats": 1, # 每次调用只做一次分离 + "stir_time": 0, # 已经在上面完成 + "stir_speed": stir_speed, + "settling_time": 0 # 已经在上面完成 + } } + action_sequence.append(separate_action) + debug_print(f"✅ 分离操作已添加") + action_sequence.append(create_action_log("分离操作完成", "✅")) + + # 🔧 新增:分离后体积估算(分离通常不改变总体积,但会重新分配) + # 假设分离后保持体积(实际情况可能有少量损失) + separated_volume = current_volume * 0.95 # 假设5%损失 + update_vessel_volume(vessel, G, separated_volume, f"分离操作后(第{cycle_num}轮)") + current_volume = separated_volume + + # 收集结果 + if final_to_vessel_id: + action_sequence.append(create_action_log(f"产物 ({product_phase}相) 收集到: {final_to_vessel_id}", "📦")) + if final_waste_vessel_id: + action_sequence.append(create_action_log(f"废相收集到: {final_waste_vessel_id}", "🗑️")) + + else: + debug_print(f"🔄 第{cycle_num}轮 步骤4: 无分离器设备,跳过分离") + action_sequence.append(create_action_log("无分离器设备可用", "❌")) + # 添加等待时间模拟分离 + action_sequence.append({ + "action_name": "wait", + "action_kwargs": {"time": 10.0} + }) + + # 循环间等待(除了最后一次) + if repeat_idx < repeats - 1: + debug_print(f"🔄 第{cycle_num}轮: 等待下一次循环...") + action_sequence.append(create_action_log("等待下一次循环...", "⏳")) + action_sequence.append({ + "action_name": "wait", + "action_kwargs": {"time": 5} + }) + else: + action_sequence.append(create_action_log(f"分离循环 {cycle_num}/{repeats} 完成", "🌟")) + + except Exception as e: + debug_print(f"❌ 分离工作流程执行失败: {str(e)}") + action_sequence.append(create_action_log(f"分离工作流程失败: {str(e)}", "❌")) + # 添加错误日志 + action_sequence.append({ + "device_id": "system", + "action_name": "log_message", + "action_kwargs": { + "message": f"分离操作失败: {str(e)}" } - ) - - # for i in range(2): - # pump_action_sequence.append( - # { - # "device_id": "", - # "action_name": "CleanProtocol", - # "action_kwargs": { - # "vessel": from_vessel, - # "solvent": "H2O", # Solvent to clean vessel with. - # "volume": solvent_volume, # Optional. Volume of solvent to clean vessel with. - # "temp": 25.0, # Optional. Temperature to heat vessel to while cleaning. - # "repeats": 1 - # } - # } - # ) - # pump_action_sequence.append( - # { - # "device_id": "", - # "action_name": "CleanProtocol", - # "action_kwargs": { - # "vessel": from_vessel, - # "solvent": "CH2Cl2", # Solvent to clean vessel with. - # "volume": solvent_volume, # Optional. Volume of solvent to clean vessel with. - # "temp": 25.0, # Optional. Temperature to heat vessel to while cleaning. - # "repeats": 1 - # } - # } - # ) + }) - # 生成泵操作的动作序列 - for i in range(repeats): - # 找到当次萃取所用溶剂 - solvent_thistime = solvents[i] - solvent_vessel = f"flask_{solvent_thistime}" - - pump_action_sequence.append( - { - "device_id": "", - "action_name": "PumpTransferProtocol", - "action_kwargs": { - "from_vessel": solvent_vessel, - "to_vessel": separation_vessel, - "volume": solvent_volume, - "time": solvent_volume / flowrate, - # "transfer_flowrate": transfer_flowrate, - } - } - ) - pump_action_sequence.extend([ - # 搅拌、静置 - { - "device_id": separator_controller, - "action_name": "stir", - "action_kwargs": { - "stir_time": stir_time, - "stir_speed": stir_speed, - "settling_time": settling_time - } - }, - # 分液(判断电导突跃) - { - "device_id": separator_controller, - "action_name": "valve_open", - "action_kwargs": { - "command": "delta > 0.05" - } - } - ]) - - if product_phase == "bottom": - # 产物转移到目标瓶 - pump_action_sequence.append( - { - "device_id": "", - "action_name": "PumpTransferProtocol", - "action_kwargs": { - "from_vessel": separation_vessel_bottom, - "to_vessel": to_vessel, - "volume": 250.0, - "time": 250.0 / flowrate, - # "transfer_flowrate": transfer_flowrate, - } - } - ) - # 放出上面那一相,60秒后关阀门 - pump_action_sequence.append( - { - "device_id": separator_controller, - "action_name": "valve_open", - "action_kwargs": { - "command": "time > 60" - } - } - ) - # 弃去上面那一相进废液 - pump_action_sequence.append( - { - "device_id": "", - "action_name": "PumpTransferProtocol", - "action_kwargs": { - "from_vessel": separation_vessel_bottom, - "to_vessel": waste_vessel, - "volume": 250.0, - "time": 250.0 / flowrate, - # "transfer_flowrate": transfer_flowrate, - } - } - ) - elif product_phase == "top": - # 弃去下面那一相进废液 - pump_action_sequence.append( - { - "device_id": "", - "action_name": "PumpTransferProtocol", - "action_kwargs": { - "from_vessel": separation_vessel_bottom, - "to_vessel": waste_vessel, - "volume": 250.0, - "time": 250.0 / flowrate, - # "transfer_flowrate": transfer_flowrate, - } - } - ) - # 放出上面那一相 - pump_action_sequence.append( - { - "device_id": separator_controller, - "action_name": "valve_open", - "action_kwargs": { - "command": "time > 60" - } - } - ) - # 产物转移到目标瓶 - pump_action_sequence.append( - { - "device_id": "", - "action_name": "PumpTransferProtocol", - "action_kwargs": { - "from_vessel": separation_vessel_bottom, - "to_vessel": to_vessel, - "volume": 250.0, - "time": 250.0 / flowrate, - # "transfer_flowrate": transfer_flowrate, - } - } - ) - elif product_phase == "organic": - pass - - # 如果不是最后一次,从中转瓶转移回分液漏斗 - if i < repeats - 1: - pump_action_sequence.append( - { - "device_id": "", - "action_name": "PumpTransferProtocol", - "action_kwargs": { - "from_vessel": to_vessel, - "to_vessel": separation_vessel, - "volume": 250.0, - "time": 250.0 / flowrate, - # "transfer_flowrate": transfer_flowrate, - } - } - ) - return pump_action_sequence + # 🔧 新增:分离完成后的最终状态报告 + final_liquid_volume = get_vessel_liquid_volume(vessel) + + # === 最终结果 === + total_time = (stir_time + settling_time + 15) * repeats # 估算总时间 + + debug_print("🌀" * 20) + debug_print(f"🎉 分离协议生成完成") + debug_print(f"📊 协议统计:") + debug_print(f" 📋 总动作数: {len(action_sequence)}") + debug_print(f" ⏱️ 预计总时间: {total_time:.0f}s ({total_time/60:.1f} 分钟)") + debug_print(f" 🥼 分离容器: {final_vessel_id}") + debug_print(f" 🎯 分离目的: {purpose}") + debug_print(f" 📊 产物相: {product_phase}") + debug_print(f" 🔄 重复次数: {repeats}") + debug_print(f"💧 体积变化统计:") + debug_print(f" - 分离前体积: {original_liquid_volume:.2f}mL") + debug_print(f" - 分离后体积: {final_liquid_volume:.2f}mL") + if solvent: + debug_print(f" 💧 溶剂: {solvent} ({final_volume}mL × {repeats}轮 = {final_volume * repeats:.2f}mL)") + if final_to_vessel_id: + debug_print(f" 🎯 产物容器: {final_to_vessel_id}") + if final_waste_vessel_id: + debug_print(f" 🗑️ 废液容器: {final_waste_vessel_id}") + debug_print("🌀" * 20) + + # 添加完成日志 + summary_msg = f"分离协议完成: {final_vessel_id} ({purpose},{repeats} 次循环)" + if solvent: + summary_msg += f",使用 {final_volume * repeats:.2f}mL {solvent}" + action_sequence.append(create_action_log(summary_msg, "🎉")) + + return action_sequence + diff --git a/unilabos/compile/stir_protocol.py b/unilabos/compile/stir_protocol.py index 6fc865c..e13c1f8 100644 --- a/unilabos/compile/stir_protocol.py +++ b/unilabos/compile/stir_protocol.py @@ -1,166 +1,545 @@ -from typing import List, Dict, Any +from typing import List, Dict, Any, Union import networkx as nx +import logging +import re +logger = logging.getLogger(__name__) + +def debug_print(message): + """调试输出""" + print(f"🌪️ [STIR] {message}", flush=True) + logger.info(f"[STIR] {message}") + +def parse_time_input(time_input: Union[str, float, int], default_unit: str = "s") -> float: + """ + 统一的时间解析函数(精简版) + + Args: + time_input: 时间输入(如 "30 min", "1 h", "300", "?", 60.0) + default_unit: 默认单位(默认为秒) + + Returns: + float: 时间(秒) + """ + if not time_input: + return 100.0 # 默认100秒 + + # 🔢 处理数值输入 + if isinstance(time_input, (int, float)): + result = float(time_input) + debug_print(f"⏰ 数值时间: {time_input} → {result}s") + return result + + # 📝 处理字符串输入 + time_str = str(time_input).lower().strip() + debug_print(f"🔍 解析时间: '{time_str}'") + + # ❓ 特殊值处理 + special_times = { + '?': 300.0, 'unknown': 300.0, 'tbd': 300.0, + 'briefly': 30.0, 'quickly': 60.0, 'slowly': 600.0, + 'several minutes': 300.0, 'few minutes': 180.0, 'overnight': 3600.0 + } + + if time_str in special_times: + result = special_times[time_str] + debug_print(f"🎯 特殊时间: '{time_str}' → {result}s ({result/60:.1f}分钟)") + return result + + # 🔢 纯数字处理 + try: + result = float(time_str) + debug_print(f"⏰ 纯数字: {time_str} → {result}s") + return result + except ValueError: + pass + + # 📐 正则表达式解析 + pattern = r'(\d+\.?\d*)\s*([a-z]*)' + match = re.match(pattern, time_str) + + if not match: + debug_print(f"⚠️ 无法解析时间: '{time_str}',使用默认值: 100s") + return 100.0 + + value = float(match.group(1)) + unit = match.group(2) or default_unit + + # 📏 单位转换 + unit_multipliers = { + 's': 1.0, 'sec': 1.0, 'second': 1.0, 'seconds': 1.0, + 'm': 60.0, 'min': 60.0, 'mins': 60.0, 'minute': 60.0, 'minutes': 60.0, + 'h': 3600.0, 'hr': 3600.0, 'hrs': 3600.0, 'hour': 3600.0, 'hours': 3600.0, + 'd': 86400.0, 'day': 86400.0, 'days': 86400.0 + } + + multiplier = unit_multipliers.get(unit, 1.0) + result = value * multiplier + + debug_print(f"✅ 时间解析: '{time_str}' → {value} {unit} → {result}s ({result/60:.1f}分钟)") + return result def find_connected_stirrer(G: nx.DiGraph, vessel: str = None) -> str: - """ - 查找与指定容器相连的搅拌设备,或查找可用的搅拌设备 - """ - # 查找所有搅拌设备节点 - stirrer_nodes = [node for node in G.nodes() - if (G.nodes[node].get('class') or '') == 'virtual_stirrer'] + """查找与指定容器相连的搅拌设备""" + debug_print(f"🔍 查找搅拌设备,目标容器: {vessel} 🥽") - if vessel: - # 检查哪个搅拌设备与目标容器相连(机械连接) + # 🔧 查找所有搅拌设备 + stirrer_nodes = [] + for node in G.nodes(): + node_data = G.nodes[node] + node_class = node_data.get('class', '') or '' + + if 'stirrer' in node_class.lower() or 'virtual_stirrer' in node_class: + stirrer_nodes.append(node) + debug_print(f"🎉 找到搅拌设备: {node} 🌪️") + + # 🔗 检查连接 + if vessel and stirrer_nodes: for stirrer in stirrer_nodes: if G.has_edge(stirrer, vessel) or G.has_edge(vessel, stirrer): + debug_print(f"✅ 搅拌设备 '{stirrer}' 与容器 '{vessel}' 相连 🔗") return stirrer - # 如果没有指定容器或没有直接连接,返回第一个可用的搅拌设备 + # 🎯 使用第一个可用设备 if stirrer_nodes: - return stirrer_nodes[0] + selected = stirrer_nodes[0] + debug_print(f"🔧 使用第一个搅拌设备: {selected} 🌪️") + return selected - raise ValueError("系统中未找到可用的搅拌设备") + # 🆘 默认设备 + debug_print("⚠️ 未找到搅拌设备,使用默认设备 🌪️") + return "stirrer_1" +def validate_and_fix_params(stir_time: float, stir_speed: float, settling_time: float) -> tuple: + """验证和修正参数""" + # ⏰ 搅拌时间验证 + if stir_time < 0: + debug_print(f"⚠️ 搅拌时间 {stir_time}s 无效,修正为 100s 🕐") + stir_time = 100.0 + elif stir_time > 100: # 限制为100s + debug_print(f"⚠️ 搅拌时间 {stir_time}s 过长,仿真运行时,修正为 100s 🕐") + stir_time = 100.0 + else: + debug_print(f"✅ 搅拌时间 {stir_time}s ({stir_time/60:.1f}分钟) 有效 ⏰") + + # 🌪️ 搅拌速度验证 + if stir_speed < 10.0 or stir_speed > 1500.0: + debug_print(f"⚠️ 搅拌速度 {stir_speed} RPM 超出范围,修正为 300 RPM 🌪️") + stir_speed = 300.0 + else: + debug_print(f"✅ 搅拌速度 {stir_speed} RPM 在正常范围内 🌪️") + + # ⏱️ 沉降时间验证 + if settling_time < 0 or settling_time > 600: # 限制为10分钟 + debug_print(f"⚠️ 沉降时间 {settling_time}s 超出范围,修正为 60s ⏱️") + settling_time = 60.0 + else: + debug_print(f"✅ 沉降时间 {settling_time}s 在正常范围内 ⏱️") + + return stir_time, stir_speed, settling_time + +def extract_vessel_id(vessel: Union[str, dict]) -> str: + """ + 从vessel参数中提取vessel_id + + Args: + vessel: vessel字典或vessel_id字符串 + + Returns: + str: vessel_id + """ + if isinstance(vessel, dict): + vessel_id = list(vessel.values())[0].get("id", "") + debug_print(f"🔧 从vessel字典提取ID: {vessel_id}") + return vessel_id + elif isinstance(vessel, str): + debug_print(f"🔧 vessel参数为字符串: {vessel}") + return vessel + else: + debug_print(f"⚠️ 无效的vessel参数类型: {type(vessel)}") + return "" + +def get_vessel_display_info(vessel: Union[str, dict]) -> str: + """ + 获取容器的显示信息(用于日志) + + Args: + vessel: vessel字典或vessel_id字符串 + + Returns: + str: 显示信息 + """ + if isinstance(vessel, dict): + vessel_id = vessel.get("id", "unknown") + vessel_name = vessel.get("name", "") + if vessel_name: + return f"{vessel_id} ({vessel_name})" + else: + return vessel_id + else: + return str(vessel) def generate_stir_protocol( G: nx.DiGraph, - stir_time: float, - stir_speed: float, - settling_time: float + vessel: Union[str, dict], # 支持vessel字典或字符串 + time: Union[str, float, int] = "300", + stir_time: Union[str, float, int] = "0", + time_spec: str = "", + event: str = "", + stir_speed: float = 300.0, + settling_time: Union[str, float] = "60", + **kwargs ) -> List[Dict[str, Any]]: - """ - 生成搅拌操作的协议序列 - 定时搅拌 + 沉降 - """ - action_sequence = [] + """生成搅拌操作的协议序列 - 修复vessel参数传递""" - print(f"STIR: 开始生成搅拌协议") - print(f" - 搅拌时间: {stir_time}秒") - print(f" - 搅拌速度: {stir_speed} RPM") - print(f" - 沉降时间: {settling_time}秒") + # 🔧 核心修改:正确处理vessel参数 + vessel_id = extract_vessel_id(vessel) + vessel_display = get_vessel_display_info(vessel) - # 查找搅拌设备 + # 🔧 关键修复:确保vessel_resource是完整的Resource对象 + if isinstance(vessel, dict): + vessel_resource = vessel # 已经是完整的Resource字典 + debug_print(f"✅ 使用传入的vessel Resource对象") + else: + # 如果只是字符串,构建一个基本的Resource对象 + vessel_resource = { + "id": vessel, + "name": "", + "category": "", + "children": [], + "config": "", + "data": "", + "parent": "", + "pose": { + "orientation": {"w": 1.0, "x": 0.0, "y": 0.0, "z": 0.0}, + "position": {"x": 0.0, "y": 0.0, "z": 0.0} + }, + "sample_id": "", + "type": "" + } + debug_print(f"🔧 构建了基本的vessel Resource对象: {vessel}") + + debug_print("🌪️" * 20) + debug_print("🚀 开始生成搅拌协议(支持vessel字典)✨") + debug_print(f"📝 输入参数:") + debug_print(f" 🥽 vessel: {vessel_display} (ID: {vessel_id})") + debug_print(f" ⏰ time: {time}") + debug_print(f" 🕐 stir_time: {stir_time}") + debug_print(f" 🎯 time_spec: {time_spec}") + debug_print(f" 🌪️ stir_speed: {stir_speed} RPM") + debug_print(f" ⏱️ settling_time: {settling_time}") + debug_print("🌪️" * 20) + + # 📋 参数验证 + debug_print("📍 步骤1: 参数验证... 🔧") + if not vessel_id: # 🔧 使用 vessel_id + debug_print("❌ vessel 参数不能为空! 😱") + raise ValueError("vessel 参数不能为空") + + if vessel_id not in G.nodes(): # 🔧 使用 vessel_id + debug_print(f"❌ 容器 '{vessel_id}' 不存在于系统中! 😞") + raise ValueError(f"容器 '{vessel_id}' 不存在于系统中") + + debug_print("✅ 基础参数验证通过 🎯") + + # 🔄 参数解析 + debug_print("📍 步骤2: 参数解析... ⚡") + + # 确定实际时间(优先级:time_spec > stir_time > time) + if time_spec: + parsed_time = parse_time_input(time_spec) + debug_print(f"🎯 使用time_spec: '{time_spec}' → {parsed_time}s") + elif stir_time not in ["0", 0, 0.0]: + parsed_time = parse_time_input(stir_time) + debug_print(f"🎯 使用stir_time: {stir_time} → {parsed_time}s") + else: + parsed_time = parse_time_input(time) + debug_print(f"🎯 使用time: {time} → {parsed_time}s") + + # 解析沉降时间 + parsed_settling_time = parse_time_input(settling_time) + + # 🕐 模拟运行时间优化 + debug_print(" ⏱️ 检查模拟运行时间限制...") + original_stir_time = parsed_time + original_settling_time = parsed_settling_time + + # 搅拌时间限制为60秒 + stir_time_limit = 60.0 + if parsed_time > stir_time_limit: + parsed_time = stir_time_limit + debug_print(f" 🎮 搅拌时间优化: {original_stir_time}s → {parsed_time}s ⚡") + + # 沉降时间限制为30秒 + settling_time_limit = 30.0 + if parsed_settling_time > settling_time_limit: + parsed_settling_time = settling_time_limit + debug_print(f" 🎮 沉降时间优化: {original_settling_time}s → {parsed_settling_time}s ⚡") + + # 参数修正 + parsed_time, stir_speed, parsed_settling_time = validate_and_fix_params( + parsed_time, stir_speed, parsed_settling_time + ) + + debug_print(f"🎯 最终参数: time={parsed_time}s, speed={stir_speed}RPM, settling={parsed_settling_time}s") + + # 🔍 查找设备 + debug_print("📍 步骤3: 查找搅拌设备... 🔍") try: - stirrer_id = find_connected_stirrer(G) - print(f"STIR: 找到搅拌设备: {stirrer_id}") - except ValueError as e: + stirrer_id = find_connected_stirrer(G, vessel_id) # 🔧 使用 vessel_id + debug_print(f"🎉 使用搅拌设备: {stirrer_id} ✨") + except Exception as e: + debug_print(f"❌ 设备查找失败: {str(e)} 😭") raise ValueError(f"无法找到搅拌设备: {str(e)}") - # 执行搅拌操作 + # 🚀 生成动作 + debug_print("📍 步骤4: 生成搅拌动作... 🌪️") + + action_sequence = [] stir_action = { "device_id": stirrer_id, "action_name": "stir", "action_kwargs": { - "stir_time": stir_time, - "stir_speed": stir_speed, - "settling_time": settling_time + # 🔧 关键修复:传递vessel_id字符串,而不是完整的Resource对象 + "vessel": vessel_id, # 传递字符串ID,不是Resource对象 + "time": str(time), + "event": event, + "time_spec": time_spec, + "stir_time": float(parsed_time), + "stir_speed": float(stir_speed), + "settling_time": float(parsed_settling_time) } } - action_sequence.append(stir_action) + debug_print("✅ 搅拌动作已添加 🌪️✨") + + # 显示时间优化信息 + if original_stir_time != parsed_time or original_settling_time != parsed_settling_time: + debug_print(f" 🎭 模拟优化说明:") + debug_print(f" 搅拌时间: {original_stir_time/60:.1f}分钟 → {parsed_time/60:.1f}分钟") + debug_print(f" 沉降时间: {original_settling_time/60:.1f}分钟 → {parsed_settling_time/60:.1f}分钟") + + # 🎊 总结 + debug_print("🎊" * 20) + debug_print(f"🎉 搅拌协议生成完成! ✨") + debug_print(f"📊 总动作数: {len(action_sequence)} 个") + debug_print(f"🥽 搅拌容器: {vessel_display}") + debug_print(f"🌪️ 搅拌参数: {stir_speed} RPM, {parsed_time}s, 沉降 {parsed_settling_time}s") + debug_print(f"⏱️ 预计总时间: {(parsed_time + parsed_settling_time)/60:.1f} 分钟 ⌛") + debug_print("🎊" * 20) - print(f"STIR: 生成了 {len(action_sequence)} 个动作") return action_sequence - def generate_start_stir_protocol( G: nx.DiGraph, - vessel: str, - stir_speed: float, - purpose: str + vessel: Union[str, dict], + stir_speed: float = 300.0, + purpose: str = "", + **kwargs ) -> List[Dict[str, Any]]: - """ - 生成开始搅拌操作的协议序列 - 持续搅拌 - """ - action_sequence = [] + """生成开始搅拌操作的协议序列 - 修复vessel参数传递""" - print(f"START_STIR: 开始生成启动搅拌协议") - print(f" - 容器: {vessel}") - print(f" - 搅拌速度: {stir_speed} RPM") - print(f" - 目的: {purpose}") + # 🔧 核心修改:正确处理vessel参数 + vessel_id = extract_vessel_id(vessel) + vessel_display = get_vessel_display_info(vessel) - # 验证容器存在 - if vessel not in G.nodes(): - raise ValueError(f"容器 '{vessel}' 不存在于系统中") + # 🔧 关键修复:确保vessel_resource是完整的Resource对象 + if isinstance(vessel, dict): + vessel_resource = vessel # 已经是完整的Resource字典 + debug_print(f"✅ 使用传入的vessel Resource对象") + else: + # 如果只是字符串,构建一个基本的Resource对象 + vessel_resource = { + "id": vessel, + "name": "", + "category": "", + "children": [], + "config": "", + "data": "", + "parent": "", + "pose": { + "orientation": {"w": 1.0, "x": 0.0, "y": 0.0, "z": 0.0}, + "position": {"x": 0.0, "y": 0.0, "z": 0.0} + }, + "sample_id": "", + "type": "" + } + debug_print(f"🔧 构建了基本的vessel Resource对象: {vessel}") - # 查找搅拌设备 - try: - stirrer_id = find_connected_stirrer(G, vessel) - print(f"START_STIR: 找到搅拌设备: {stirrer_id}") - except ValueError as e: - raise ValueError(f"无法找到搅拌设备: {str(e)}") + debug_print("🔄 开始生成启动搅拌协议(修复vessel参数)✨") + debug_print(f"🥽 vessel: {vessel_display} (ID: {vessel_id})") + debug_print(f"🌪️ speed: {stir_speed} RPM") + debug_print(f"🎯 purpose: {purpose}") - # 执行开始搅拌操作 - start_stir_action = { + # 基础验证 + if not vessel_id or vessel_id not in G.nodes(): + debug_print("❌ 容器验证失败!") + raise ValueError("vessel 参数无效") + + # 参数修正 + if stir_speed < 10.0 or stir_speed > 1500.0: + debug_print(f"⚠️ 搅拌速度修正: {stir_speed} → 300 RPM 🌪️") + stir_speed = 300.0 + + # 查找设备 + stirrer_id = find_connected_stirrer(G, vessel_id) + + # 🔧 关键修复:传递vessel_id字符串 + action_sequence = [{ "device_id": stirrer_id, "action_name": "start_stir", "action_kwargs": { - "vessel": vessel, + # 🔧 关键修复:传递vessel_id字符串,而不是完整的Resource对象 + "vessel": vessel_id, # 传递字符串ID,不是Resource对象 "stir_speed": stir_speed, - "purpose": purpose + "purpose": purpose or f"启动搅拌 {stir_speed} RPM" } - } + }] - action_sequence.append(start_stir_action) - - print(f"START_STIR: 生成了 {len(action_sequence)} 个动作") + debug_print(f"✅ 启动搅拌协议生成完成 🎯") return action_sequence - def generate_stop_stir_protocol( G: nx.DiGraph, - vessel: str + vessel: Union[str, dict], + **kwargs ) -> List[Dict[str, Any]]: - """ - 生成停止搅拌操作的协议序列 - """ - action_sequence = [] + """生成停止搅拌操作的协议序列 - 修复vessel参数传递""" - print(f"STOP_STIR: 开始生成停止搅拌协议") - print(f" - 容器: {vessel}") + # 🔧 核心修改:正确处理vessel参数 + vessel_id = extract_vessel_id(vessel) + vessel_display = get_vessel_display_info(vessel) - # 验证容器存在 - if vessel not in G.nodes(): - raise ValueError(f"容器 '{vessel}' 不存在于系统中") + # 🔧 关键修复:确保vessel_resource是完整的Resource对象 + if isinstance(vessel, dict): + vessel_resource = vessel # 已经是完整的Resource字典 + debug_print(f"✅ 使用传入的vessel Resource对象") + else: + # 如果只是字符串,构建一个基本的Resource对象 + vessel_resource = { + "id": vessel, + "name": "", + "category": "", + "children": [], + "config": "", + "data": "", + "parent": "", + "pose": { + "orientation": {"w": 1.0, "x": 0.0, "y": 0.0, "z": 0.0}, + "position": {"x": 0.0, "y": 0.0, "z": 0.0} + }, + "sample_id": "", + "type": "" + } + debug_print(f"🔧 构建了基本的vessel Resource对象: {vessel}") - # 查找搅拌设备 - try: - stirrer_id = find_connected_stirrer(G, vessel) - print(f"STOP_STIR: 找到搅拌设备: {stirrer_id}") - except ValueError as e: - raise ValueError(f"无法找到搅拌设备: {str(e)}") + debug_print("🛑 开始生成停止搅拌协议(修复vessel参数)✨") + debug_print(f"🥽 vessel: {vessel_display} (ID: {vessel_id})") - # 执行停止搅拌操作 - stop_stir_action = { + # 基础验证 + if not vessel_id or vessel_id not in G.nodes(): + debug_print("❌ 容器验证失败!") + raise ValueError("vessel 参数无效") + + # 查找设备 + stirrer_id = find_connected_stirrer(G, vessel_id) + + # 🔧 关键修复:传递vessel_id字符串 + action_sequence = [{ "device_id": stirrer_id, "action_name": "stop_stir", "action_kwargs": { - "vessel": vessel + # 🔧 关键修复:传递vessel_id字符串,而不是完整的Resource对象 + "vessel": vessel_id # 传递字符串ID,不是Resource对象 } - } + }] - action_sequence.append(stop_stir_action) - - print(f"STOP_STIR: 生成了 {len(action_sequence)} 个动作") + debug_print(f"✅ 停止搅拌协议生成完成 🎯") return action_sequence +# 🔧 新增:便捷函数 +def stir_briefly(G: nx.DiGraph, vessel: Union[str, dict], + speed: float = 300.0) -> List[Dict[str, Any]]: + """短时间搅拌(30秒)""" + vessel_display = get_vessel_display_info(vessel) + debug_print(f"⚡ 短时间搅拌: {vessel_display} @ {speed}RPM (30s)") + return generate_stir_protocol(G, vessel, time="30", stir_speed=speed) -# 便捷函数 -def generate_fast_stir_protocol( - G: nx.DiGraph, - time: float = 300.0, - speed: float = 800.0, - settling: float = 60.0 -) -> List[Dict[str, Any]]: - """快速搅拌的便捷函数""" - return generate_stir_protocol(G, time, speed, settling) +def stir_slowly(G: nx.DiGraph, vessel: Union[str, dict], + time: Union[str, float] = "10 min") -> List[Dict[str, Any]]: + """慢速搅拌""" + vessel_display = get_vessel_display_info(vessel) + debug_print(f"🐌 慢速搅拌: {vessel_display} @ 150RPM") + return generate_stir_protocol(G, vessel, time=time, stir_speed=150.0) +def stir_vigorously(G: nx.DiGraph, vessel: Union[str, dict], + time: Union[str, float] = "5 min") -> List[Dict[str, Any]]: + """剧烈搅拌""" + vessel_display = get_vessel_display_info(vessel) + debug_print(f"💨 剧烈搅拌: {vessel_display} @ 800RPM") + return generate_stir_protocol(G, vessel, time=time, stir_speed=800.0) -def generate_gentle_stir_protocol( - G: nx.DiGraph, - time: float = 600.0, - speed: float = 200.0, - settling: float = 120.0 -) -> List[Dict[str, Any]]: - """温和搅拌的便捷函数""" - return generate_stir_protocol(G, time, speed, settling) \ No newline at end of file +def stir_for_reaction(G: nx.DiGraph, vessel: Union[str, dict], + time: Union[str, float] = "1 h") -> List[Dict[str, Any]]: + """反应搅拌(标准速度,长时间)""" + vessel_display = get_vessel_display_info(vessel) + debug_print(f"🧪 反应搅拌: {vessel_display} @ 400RPM") + return generate_stir_protocol(G, vessel, time=time, stir_speed=400.0) + +def stir_for_dissolution(G: nx.DiGraph, vessel: Union[str, dict], + time: Union[str, float] = "15 min") -> List[Dict[str, Any]]: + """溶解搅拌(中等速度)""" + vessel_display = get_vessel_display_info(vessel) + debug_print(f"💧 溶解搅拌: {vessel_display} @ 500RPM") + return generate_stir_protocol(G, vessel, time=time, stir_speed=500.0) + +def stir_gently(G: nx.DiGraph, vessel: Union[str, dict], + time: Union[str, float] = "30 min") -> List[Dict[str, Any]]: + """温和搅拌""" + vessel_display = get_vessel_display_info(vessel) + debug_print(f"🍃 温和搅拌: {vessel_display} @ 200RPM") + return generate_stir_protocol(G, vessel, time=time, stir_speed=200.0) + +def stir_overnight(G: nx.DiGraph, vessel: Union[str, dict]) -> List[Dict[str, Any]]: + """过夜搅拌(模拟时缩短为2小时)""" + vessel_display = get_vessel_display_info(vessel) + debug_print(f"🌙 过夜搅拌(模拟2小时): {vessel_display} @ 300RPM") + return generate_stir_protocol(G, vessel, time="2 h", stir_speed=300.0) + +def start_continuous_stirring(G: nx.DiGraph, vessel: Union[str, dict], + speed: float = 300.0, purpose: str = "continuous stirring") -> List[Dict[str, Any]]: + """开始连续搅拌""" + vessel_display = get_vessel_display_info(vessel) + debug_print(f"🔄 开始连续搅拌: {vessel_display} @ {speed}RPM") + return generate_start_stir_protocol(G, vessel, stir_speed=speed, purpose=purpose) + +def stop_all_stirring(G: nx.DiGraph, vessel: Union[str, dict]) -> List[Dict[str, Any]]: + """停止所有搅拌""" + vessel_display = get_vessel_display_info(vessel) + debug_print(f"🛑 停止搅拌: {vessel_display}") + return generate_stop_stir_protocol(G, vessel) + +# 测试函数 +def test_stir_protocol(): + """测试搅拌协议""" + debug_print("🧪 === STIR PROTOCOL 测试 === ✨") + + # 测试vessel参数处理 + debug_print("🔧 测试vessel参数处理...") + + # 测试字典格式 + vessel_dict = {"id": "flask_1", "name": "反应瓶1"} + vessel_id = extract_vessel_id(vessel_dict) + vessel_display = get_vessel_display_info(vessel_dict) + debug_print(f" 字典格式: {vessel_dict} → ID: {vessel_id}, 显示: {vessel_display}") + + # 测试字符串格式 + vessel_str = "flask_2" + vessel_id = extract_vessel_id(vessel_str) + vessel_display = get_vessel_display_info(vessel_str) + debug_print(f" 字符串格式: {vessel_str} → ID: {vessel_id}, 显示: {vessel_display}") + + debug_print("✅ 测试完成 🎉") + +if __name__ == "__main__": + test_stir_protocol() diff --git a/unilabos/compile/utils/unit_parser.py b/unilabos/compile/utils/unit_parser.py new file mode 100644 index 0000000..d1d297c --- /dev/null +++ b/unilabos/compile/utils/unit_parser.py @@ -0,0 +1,206 @@ +""" +统一的单位解析工具模块 +支持时间、体积、质量等各种单位的解析 +""" + +import re +import logging +from typing import Union + +logger = logging.getLogger(__name__) + +def debug_print(message, prefix="[UNIT_PARSER]"): + """调试输出""" + print(f"{prefix} {message}", flush=True) + logger.info(f"{prefix} {message}") + +def parse_time_with_units(time_input: Union[str, float, int], default_unit: str = "s") -> float: + """ + 解析带单位的时间输入 + + Args: + time_input: 时间输入(如 "30 min", "1 h", "300", "?", 60.0) + default_unit: 默认单位(默认为秒) + + Returns: + float: 时间(秒) + """ + if not time_input: + return 0.0 + + # 处理数值输入 + if isinstance(time_input, (int, float)): + result = float(time_input) + debug_print(f"数值时间输入: {time_input} → {result}s(默认单位)") + return result + + # 处理字符串输入 + time_str = str(time_input).lower().strip() + debug_print(f"解析时间字符串: '{time_str}'") + + # 处理特殊值 + if time_str in ['?', 'unknown', 'tbd', 'to be determined']: + default_time = 300.0 # 5分钟默认值 + debug_print(f"检测到未知时间,使用默认值: {default_time}s") + return default_time + + # 如果是纯数字,使用默认单位 + try: + value = float(time_str) + if default_unit == "s": + result = value + elif default_unit in ["min", "minute"]: + result = value * 60.0 + elif default_unit in ["h", "hour"]: + result = value * 3600.0 + else: + result = value # 默认秒 + debug_print(f"纯数字输入: {time_str} → {result}s(单位: {default_unit})") + return result + except ValueError: + pass + + # 使用正则表达式匹配数字和单位 + pattern = r'(\d+\.?\d*)\s*([a-z]*)' + match = re.match(pattern, time_str) + + if not match: + debug_print(f"⚠️ 无法解析时间: '{time_str}',使用默认值: 60s") + return 60.0 + + value = float(match.group(1)) + unit = match.group(2) or default_unit + + # 单位转换映射 + unit_multipliers = { + # 秒 + 's': 1.0, + 'sec': 1.0, + 'second': 1.0, + 'seconds': 1.0, + + # 分钟 + 'm': 60.0, + 'min': 60.0, + 'mins': 60.0, + 'minute': 60.0, + 'minutes': 60.0, + + # 小时 + 'h': 3600.0, + 'hr': 3600.0, + 'hrs': 3600.0, + 'hour': 3600.0, + 'hours': 3600.0, + + # 天 + 'd': 86400.0, + 'day': 86400.0, + 'days': 86400.0, + } + + multiplier = unit_multipliers.get(unit, 1.0) + result = value * multiplier + + debug_print(f"时间解析: '{time_str}' → {value} {unit} → {result}s") + return result + +def parse_volume_with_units(volume_input: Union[str, float, int], default_unit: str = "mL") -> float: + """ + 解析带单位的体积输入 + + Args: + volume_input: 体积输入(如 "100 mL", "2.5 L", "500", "?", 100.0) + default_unit: 默认单位(默认为毫升) + + Returns: + float: 体积(毫升) + """ + if not volume_input: + return 0.0 + + # 处理数值输入 + if isinstance(volume_input, (int, float)): + result = float(volume_input) + debug_print(f"数值体积输入: {volume_input} → {result}mL(默认单位)") + return result + + # 处理字符串输入 + volume_str = str(volume_input).lower().strip() + debug_print(f"解析体积字符串: '{volume_str}'") + + # 处理特殊值 + if volume_str in ['?', 'unknown', 'tbd', 'to be determined']: + default_volume = 50.0 # 50mL默认值 + debug_print(f"检测到未知体积,使用默认值: {default_volume}mL") + return default_volume + + # 如果是纯数字,使用默认单位 + try: + value = float(volume_str) + if default_unit.lower() in ["ml", "milliliter"]: + result = value + elif default_unit.lower() in ["l", "liter"]: + result = value * 1000.0 + elif default_unit.lower() in ["μl", "ul", "microliter"]: + result = value / 1000.0 + else: + result = value # 默认mL + debug_print(f"纯数字输入: {volume_str} → {result}mL(单位: {default_unit})") + return result + except ValueError: + pass + + # 移除空格并提取数字和单位 + volume_clean = re.sub(r'\s+', '', volume_str) + + # 匹配数字和单位的正则表达式 + match = re.match(r'([0-9]*\.?[0-9]+)\s*(ml|l|μl|ul|microliter|milliliter|liter)?', volume_clean) + + if not match: + debug_print(f"⚠️ 无法解析体积: '{volume_str}',使用默认值: 50mL") + return 50.0 + + value = float(match.group(1)) + unit = match.group(2) or default_unit.lower() + + # 转换为毫升 + if unit in ['l', 'liter']: + volume = value * 1000.0 # L -> mL + elif unit in ['μl', 'ul', 'microliter']: + volume = value / 1000.0 # μL -> mL + else: # ml, milliliter 或默认 + volume = value # 已经是mL + + debug_print(f"体积解析: '{volume_str}' → {value} {unit} → {volume}mL") + return volume + +# 测试函数 +def test_unit_parser(): + """测试单位解析功能""" + print("=== 单位解析器测试 ===") + + # 测试时间解析 + time_tests = [ + "30 min", "1 h", "300", "5.5 h", "?", 60.0, "2 hours", "30 s" + ] + + print("\n时间解析测试:") + for time_input in time_tests: + result = parse_time_with_units(time_input) + print(f" {time_input} → {result}s ({result/60:.1f}min)") + + # 测试体积解析 + volume_tests = [ + "100 mL", "2.5 L", "500", "?", 100.0, "500 μL", "1 liter" + ] + + print("\n体积解析测试:") + for volume_input in volume_tests: + result = parse_volume_with_units(volume_input) + print(f" {volume_input} → {result}mL") + + print("\n✅ 测试完成") + +if __name__ == "__main__": + test_unit_parser() \ No newline at end of file diff --git a/unilabos/compile/wash_solid_protocol.py b/unilabos/compile/wash_solid_protocol.py index a792b8f..b167c85 100644 --- a/unilabos/compile/wash_solid_protocol.py +++ b/unilabos/compile/wash_solid_protocol.py @@ -1,216 +1,652 @@ -from typing import List, Dict, Any +from typing import List, Dict, Any, Union import networkx as nx +import logging +import re + +logger = logging.getLogger(__name__) + +def debug_print(message): + """调试输出""" + print(f"🧼 [WASH_SOLID] {message}", flush=True) + logger.info(f"[WASH_SOLID] {message}") + +def parse_time_input(time_input: Union[str, float, int]) -> float: + """统一时间解析函数(精简版)""" + if not time_input: + return 0.0 + + # 🔢 处理数值输入 + if isinstance(time_input, (int, float)): + result = float(time_input) + debug_print(f"⏰ 数值时间: {time_input} → {result}s") + return result + + # 📝 处理字符串输入 + time_str = str(time_input).lower().strip() + + # ❓ 特殊值快速处理 + special_times = { + '?': 60.0, 'unknown': 60.0, 'briefly': 30.0, + 'quickly': 45.0, 'slowly': 120.0 + } + + if time_str in special_times: + result = special_times[time_str] + debug_print(f"🎯 特殊时间: '{time_str}' → {result}s") + return result + + # 🔢 数字提取(简化正则) + try: + # 提取数字 + numbers = re.findall(r'\d+\.?\d*', time_str) + if numbers: + value = float(numbers[0]) + + # 简化单位判断 + if any(unit in time_str for unit in ['min', 'm']): + result = value * 60.0 + elif any(unit in time_str for unit in ['h', 'hour']): + result = value * 3600.0 + else: + result = value # 默认秒 + + debug_print(f"✅ 时间解析: '{time_str}' → {result}s") + return result + except: + pass + + debug_print(f"⚠️ 时间解析失败: '{time_str}',使用默认60s") + return 60.0 + +def parse_volume_input(volume: Union[float, str], volume_spec: str = "", mass: str = "") -> float: + """统一体积解析函数(精简版)""" + debug_print(f"💧 解析体积: volume={volume}, spec='{volume_spec}', mass='{mass}'") + + # 🎯 优先级1:volume_spec(快速映射) + if volume_spec: + spec_map = { + 'small': 20.0, 'medium': 50.0, 'large': 100.0, + 'minimal': 10.0, 'normal': 50.0, 'generous': 150.0 + } + for key, val in spec_map.items(): + if key in volume_spec.lower(): + debug_print(f"🎯 规格匹配: '{volume_spec}' → {val}mL") + return val + + # 🧮 优先级2:mass转体积(简化:1g=1mL) + if mass: + try: + numbers = re.findall(r'\d+\.?\d*', mass) + if numbers: + value = float(numbers[0]) + if 'mg' in mass.lower(): + result = value / 1000.0 + elif 'kg' in mass.lower(): + result = value * 1000.0 + else: + result = value # 默认g + debug_print(f"⚖️ 质量转换: {mass} → {result}mL") + return result + except: + pass + + # 📦 优先级3:volume + if volume: + if isinstance(volume, (int, float)): + result = float(volume) + debug_print(f"💧 数值体积: {volume} → {result}mL") + return result + elif isinstance(volume, str): + try: + # 提取数字 + numbers = re.findall(r'\d+\.?\d*', volume) + if numbers: + value = float(numbers[0]) + # 简化单位判断 + if 'l' in volume.lower() and 'ml' not in volume.lower(): + result = value * 1000.0 # L转mL + else: + result = value # 默认mL + debug_print(f"💧 字符串体积: '{volume}' → {result}mL") + return result + except: + pass + + # 默认值 + debug_print(f"⚠️ 体积解析失败,使用默认50mL") + return 50.0 + +def find_solvent_source(G: nx.DiGraph, solvent: str) -> str: + """查找溶剂源(精简版)""" + debug_print(f"🔍 查找溶剂源: {solvent}") + + # 简化搜索列表 + search_patterns = [ + f"flask_{solvent}", f"bottle_{solvent}", f"reagent_{solvent}", + "liquid_reagent_bottle_1", "flask_1", "solvent_bottle" + ] + + for pattern in search_patterns: + if pattern in G.nodes(): + debug_print(f"🎉 找到溶剂源: {pattern}") + return pattern + + debug_print(f"⚠️ 使用默认溶剂源: flask_{solvent}") + return f"flask_{solvent}" + +def find_filtrate_vessel(G: nx.DiGraph, filtrate_vessel: str = "") -> str: + """查找滤液容器(精简版)""" + debug_print(f"🔍 查找滤液容器: {filtrate_vessel}") + + # 如果指定了且存在,直接使用 + if filtrate_vessel and filtrate_vessel in G.nodes(): + debug_print(f"✅ 使用指定容器: {filtrate_vessel}") + return filtrate_vessel + + # 简化搜索列表 + default_vessels = ["waste_workup", "filtrate_vessel", "flask_1", "collection_bottle_1"] + + for vessel in default_vessels: + if vessel in G.nodes(): + debug_print(f"🎉 找到滤液容器: {vessel}") + return vessel + + debug_print(f"⚠️ 使用默认滤液容器: waste_workup") + return "waste_workup" + +def extract_vessel_id(vessel: Union[str, dict]) -> str: + """ + 从vessel参数中提取vessel_id + + Args: + vessel: vessel字典或vessel_id字符串 + + Returns: + str: vessel_id + """ + if isinstance(vessel, dict): + vessel_id = list(vessel.values())[0].get("id", "") + debug_print(f"🔧 从vessel字典提取ID: {vessel_id}") + return vessel_id + elif isinstance(vessel, str): + debug_print(f"🔧 vessel参数为字符串: {vessel}") + return vessel + else: + debug_print(f"⚠️ 无效的vessel参数类型: {type(vessel)}") + return "" + +def get_vessel_display_info(vessel: Union[str, dict]) -> str: + """ + 获取容器的显示信息(用于日志) + + Args: + vessel: vessel字典或vessel_id字符串 + + Returns: + str: 显示信息 + """ + if isinstance(vessel, dict): + vessel_id = vessel.get("id", "unknown") + vessel_name = vessel.get("name", "") + if vessel_name: + return f"{vessel_id} ({vessel_name})" + else: + return vessel_id + else: + return str(vessel) + +def get_vessel_liquid_volume(vessel: dict) -> float: + """ + 获取容器中的液体体积 - 支持vessel字典 + + Args: + vessel: 容器字典 + + Returns: + float: 液体体积(mL) + """ + if not vessel or "data" not in vessel: + debug_print(f"⚠️ 容器数据为空,返回 0.0mL") + return 0.0 + + vessel_data = vessel["data"] + vessel_id = vessel.get("id", "unknown") + + debug_print(f"🔍 读取容器 '{vessel_id}' 体积数据: {vessel_data}") + + # 检查liquid_volume字段 + if "liquid_volume" in vessel_data: + liquid_volume = vessel_data["liquid_volume"] + + # 处理列表格式 + if isinstance(liquid_volume, list): + if len(liquid_volume) > 0: + volume = liquid_volume[0] + if isinstance(volume, (int, float)): + debug_print(f"✅ 容器 '{vessel_id}' 体积: {volume}mL (列表格式)") + return float(volume) + + # 处理直接数值格式 + elif isinstance(liquid_volume, (int, float)): + debug_print(f"✅ 容器 '{vessel_id}' 体积: {liquid_volume}mL (数值格式)") + return float(liquid_volume) + + # 检查其他可能的体积字段 + volume_keys = ['current_volume', 'total_volume', 'volume'] + for key in volume_keys: + if key in vessel_data: + try: + volume = float(vessel_data[key]) + if volume > 0: + debug_print(f"✅ 容器 '{vessel_id}' 体积: {volume}mL (字段: {key})") + return volume + except (ValueError, TypeError): + continue + + debug_print(f"⚠️ 无法获取容器 '{vessel_id}' 的体积,返回默认值 0.0mL") + return 0.0 + +def update_vessel_volume(vessel: dict, G: nx.DiGraph, new_volume: float, description: str = "") -> None: + """ + 更新容器体积(同时更新vessel字典和图节点) + + Args: + vessel: 容器字典 + G: 网络图 + new_volume: 新体积 + description: 更新描述 + """ + vessel_id = vessel.get("id", "unknown") + + if description: + debug_print(f"🔧 更新容器体积 - {description}") + + # 更新vessel字典中的体积 + if "data" in vessel: + if "liquid_volume" in vessel["data"]: + current_volume = vessel["data"]["liquid_volume"] + if isinstance(current_volume, list): + if len(current_volume) > 0: + vessel["data"]["liquid_volume"][0] = new_volume + else: + vessel["data"]["liquid_volume"] = [new_volume] + else: + vessel["data"]["liquid_volume"] = new_volume + else: + vessel["data"]["liquid_volume"] = new_volume + else: + vessel["data"] = {"liquid_volume": new_volume} + + # 同时更新图中的容器数据 + if vessel_id in G.nodes(): + if 'data' not in G.nodes[vessel_id]: + G.nodes[vessel_id]['data'] = {} + + vessel_node_data = G.nodes[vessel_id]['data'] + current_node_volume = vessel_node_data.get('liquid_volume', 0.0) + + if isinstance(current_node_volume, list): + if len(current_node_volume) > 0: + G.nodes[vessel_id]['data']['liquid_volume'][0] = new_volume + else: + G.nodes[vessel_id]['data']['liquid_volume'] = [new_volume] + else: + G.nodes[vessel_id]['data']['liquid_volume'] = new_volume + + debug_print(f"📊 容器 '{vessel_id}' 体积已更新为: {new_volume:.2f}mL") def generate_wash_solid_protocol( G: nx.DiGraph, - vessel: str, + vessel: Union[str, dict], # 🔧 修改:支持vessel字典 solvent: str, - volume: float, - filtrate_vessel: str = "", + volume: Union[float, str] = "50", + filtrate_vessel: Union[str, dict] = "", # 🔧 修改:支持vessel字典 temp: float = 25.0, stir: bool = False, stir_speed: float = 0.0, - time: float = 0.0, - repeats: int = 1 + time: Union[str, float] = "0", + repeats: int = 1, + volume_spec: str = "", + repeats_spec: str = "", + mass: str = "", + event: str = "", + **kwargs ) -> List[Dict[str, Any]]: """ - 生成固体清洗的协议序列 + 生成固体清洗协议 - 支持vessel字典和体积运算 Args: - G: 有向图,节点为设备和容器 - vessel: 装有固体物质的容器名称 - solvent: 用于清洗固体的溶剂名称 - volume: 清洗溶剂的体积 - filtrate_vessel: 滤液要收集到的容器名称,可选参数 - temp: 清洗时的温度,可选参数 - stir: 是否在清洗过程中搅拌,默认为 False - stir_speed: 搅拌速度,可选参数 - time: 清洗的时间,可选参数 - repeats: 清洗操作的重复次数,默认为 1 + G: 有向图,节点为设备和容器,边为流体管道 + vessel: 清洗容器字典(从XDL传入)或容器ID字符串 + solvent: 清洗溶剂名称 + volume: 溶剂体积(每次清洗) + filtrate_vessel: 滤液收集容器字典或容器ID字符串 + temp: 清洗温度(°C) + stir: 是否搅拌 + stir_speed: 搅拌速度(RPM) + time: 搅拌时间 + repeats: 清洗重复次数 + volume_spec: 体积规格(small/medium/large) + repeats_spec: 重复次数规格(few/several/many) + mass: 固体质量(用于计算溶剂用量) + event: 事件描述 + **kwargs: 其他可选参数 Returns: List[Dict[str, Any]]: 固体清洗操作的动作序列 - - Raises: - ValueError: 当找不到必要的设备时抛出异常 - - Examples: - wash_solid_protocol = generate_wash_solid_protocol( - G, "reactor", "ethanol", 100.0, "waste_flask", 60.0, True, 300.0, 600.0, 3 - ) """ + + # 🔧 核心修改:从vessel参数中提取vessel_id + vessel_id = extract_vessel_id(vessel) + vessel_display = get_vessel_display_info(vessel) + + # 🔧 处理filtrate_vessel参数 + filtrate_vessel_id = extract_vessel_id(filtrate_vessel) if filtrate_vessel else "" + + debug_print("🧼" * 20) + debug_print("🚀 开始生成固体清洗协议(支持vessel字典和体积运算)✨") + debug_print(f"📝 输入参数:") + debug_print(f" 🥽 vessel: {vessel_display} (ID: {vessel_id})") + debug_print(f" 🧪 solvent: {solvent}") + debug_print(f" 💧 volume: {volume}") + debug_print(f" 🗑️ filtrate_vessel: {filtrate_vessel_id}") + debug_print(f" ⏰ time: {time}") + debug_print(f" 🔄 repeats: {repeats}") + debug_print("🧼" * 20) + + # 🔧 新增:记录清洗前的容器状态 + debug_print("🔍 记录清洗前容器状态...") + if isinstance(vessel, dict): + original_volume = get_vessel_liquid_volume(vessel) + debug_print(f"📊 清洗前液体体积: {original_volume:.2f}mL") + else: + original_volume = 0.0 + debug_print(f"📊 vessel为字符串格式,无法获取体积信息") + + # 📋 快速验证 + if not vessel_id or vessel_id not in G.nodes(): # 🔧 使用 vessel_id + debug_print("❌ 容器验证失败! 😱") + raise ValueError("vessel 参数无效") + + if not solvent: + debug_print("❌ 溶剂不能为空! 😱") + raise ValueError("solvent 参数不能为空") + + debug_print("✅ 基础验证通过 🎯") + + # 🔄 参数解析 + debug_print("📍 步骤1: 参数解析... ⚡") + final_volume = parse_volume_input(volume, volume_spec, mass) + final_time = parse_time_input(time) + + # 重复次数处理(简化) + if repeats_spec: + spec_map = {'few': 2, 'several': 3, 'many': 4, 'thorough': 5} + final_repeats = next((v for k, v in spec_map.items() if k in repeats_spec.lower()), repeats) + else: + final_repeats = max(1, min(repeats, 5)) # 限制1-5次 + + # 🕐 模拟时间优化 + debug_print(" ⏱️ 模拟时间优化...") + original_time = final_time + if final_time > 60.0: + final_time = 60.0 # 限制最长60秒 + debug_print(f" 🎮 时间优化: {original_time}s → {final_time}s ⚡") + + # 参数修正 + temp = max(25.0, min(temp, 80.0)) # 温度范围25-80°C + stir_speed = max(0.0, min(stir_speed, 300.0)) if stir else 0.0 # 速度范围0-300 + + debug_print(f"🎯 最终参数: 体积={final_volume}mL, 时间={final_time}s, 重复={final_repeats}次") + + # 🔍 查找设备 + debug_print("📍 步骤2: 查找设备... 🔍") + try: + solvent_source = find_solvent_source(G, solvent) + actual_filtrate_vessel = find_filtrate_vessel(G, filtrate_vessel_id) + debug_print(f"🎉 设备配置完成 ✨") + debug_print(f" 🧪 溶剂源: {solvent_source}") + debug_print(f" 🗑️ 滤液容器: {actual_filtrate_vessel}") + except Exception as e: + debug_print(f"❌ 设备查找失败: {str(e)} 😭") + raise ValueError(f"设备查找失败: {str(e)}") + + # 🚀 生成动作序列 + debug_print("📍 步骤3: 生成清洗动作... 🧼") action_sequence = [] - # 验证容器是否存在 - if vessel not in G.nodes(): - raise ValueError(f"固体容器 {vessel} 不存在于图中") + # 🔧 新增:体积变化跟踪变量 + current_volume = original_volume + total_solvent_used = 0.0 - if filtrate_vessel and filtrate_vessel not in G.nodes(): - raise ValueError(f"滤液容器 {filtrate_vessel} 不存在于图中") - - # 查找转移泵设备(用于添加溶剂和转移滤液) - pump_nodes = [node for node in G.nodes() - if G.nodes[node].get('class') == 'virtual_transfer_pump'] - - if not pump_nodes: - raise ValueError("没有找到可用的转移泵设备") - - pump_id = pump_nodes[0] - - # 查找加热设备(如果需要加热) - heatchill_nodes = [node for node in G.nodes() - if G.nodes[node].get('class') == 'virtual_heatchill'] - - heatchill_id = heatchill_nodes[0] if heatchill_nodes else None - - # 查找搅拌设备(如果需要搅拌) - stirrer_nodes = [node for node in G.nodes() - if G.nodes[node].get('class') == 'virtual_stirrer'] - - stirrer_id = stirrer_nodes[0] if stirrer_nodes else None - - # 查找过滤设备(用于分离固体和滤液) - filter_nodes = [node for node in G.nodes() - if G.nodes[node].get('class') == 'virtual_filter'] - - filter_id = filter_nodes[0] if filter_nodes else None - - # 查找溶剂容器 - solvent_vessel = f"flask_{solvent}" - if solvent_vessel not in G.nodes(): - # 如果没有找到特定溶剂容器,查找可用的源容器 - available_vessels = [node for node in G.nodes() - if node.startswith('flask_') and - G.nodes[node].get('type') == 'container'] - if available_vessels: - solvent_vessel = available_vessels[0] - else: - raise ValueError(f"没有找到溶剂容器 {solvent}") - - # 如果没有指定滤液容器,使用废液容器 - if not filtrate_vessel: - waste_vessels = [node for node in G.nodes() - if 'waste' in node.lower() and - G.nodes[node].get('type') == 'container'] - filtrate_vessel = waste_vessels[0] if waste_vessels else "waste_flask" - - # 重复清洗操作 - for repeat in range(repeats): - repeat_num = repeat + 1 + for cycle in range(final_repeats): + debug_print(f" 🔄 第{cycle+1}/{final_repeats}次清洗...") - # 步骤1:如果需要加热,先设置温度 - if temp > 25.0 and heatchill_id: - action_sequence.append({ - "device_id": heatchill_id, - "action_name": "heat_chill_start", + # 1. 转移溶剂 + try: + from .pump_protocol import generate_pump_protocol_with_rinsing + + debug_print(f" 💧 添加溶剂: {final_volume}mL {solvent}") + transfer_actions = generate_pump_protocol_with_rinsing( + G=G, + from_vessel=solvent_source, + to_vessel=vessel_id, # 🔧 使用 vessel_id + volume=final_volume, + amount="", + time=0.0, + viscous=False, + rinsing_solvent="", + rinsing_volume=0.0, + rinsing_repeats=0, + solid=False, + flowrate=2.5, + transfer_flowrate=0.5 + ) + + if transfer_actions: + action_sequence.extend(transfer_actions) + debug_print(f" ✅ 转移动作: {len(transfer_actions)}个 🚚") + + # 🔧 新增:更新体积 - 添加溶剂后 + current_volume += final_volume + total_solvent_used += final_volume + + if isinstance(vessel, dict): + update_vessel_volume(vessel, G, current_volume, + f"第{cycle+1}次清洗添加{final_volume}mL溶剂后") + + except Exception as e: + debug_print(f" ❌ 转移失败: {str(e)} 😞") + + # 2. 搅拌(如果需要) + if stir and final_time > 0: + debug_print(f" 🌪️ 搅拌: {final_time}s @ {stir_speed}RPM") + stir_action = { + "device_id": "stirrer_1", + "action_name": "stir", "action_kwargs": { - "vessel": vessel, - "temp": temp, - "purpose": f"固体清洗 - 第 {repeat_num} 次" + "vessel": vessel_id, # 🔧 使用 vessel_id + "time": str(time), + "stir_time": final_time, + "stir_speed": stir_speed, + "settling_time": 10.0 # 🕐 缩短沉降时间 } - }) - - # 步骤2:添加清洗溶剂到固体容器 - action_sequence.append({ - "device_id": pump_id, - "action_name": "transfer", - "action_kwargs": { - "from_vessel": solvent_vessel, - "to_vessel": vessel, - "volume": volume, - "amount": f"清洗溶剂 {solvent} - 第 {repeat_num} 次", - "time": 0.0, - "viscous": False, - "rinsing_solvent": "", - "rinsing_volume": 0.0, - "rinsing_repeats": 0, - "solid": False } + action_sequence.append(stir_action) + debug_print(f" ✅ 搅拌动作: {final_time}s, {stir_speed}RPM 🌪️") + + # 3. 过滤 + debug_print(f" 🌊 过滤到: {actual_filtrate_vessel}") + filter_action = { + "device_id": "filter_1", + "action_name": "filter", + "action_kwargs": { + "vessel": vessel_id, # 🔧 使用 vessel_id + "filtrate_vessel": actual_filtrate_vessel, + "temp": temp, + "volume": final_volume + } + } + action_sequence.append(filter_action) + debug_print(f" ✅ 过滤动作: → {actual_filtrate_vessel} 🌊") + + # 🔧 新增:更新体积 - 过滤后(液体被滤除) + # 假设滤液完全被移除,固体残留在容器中 + filtered_volume = current_volume * 0.9 # 假设90%的液体被过滤掉 + current_volume = current_volume - filtered_volume + + if isinstance(vessel, dict): + update_vessel_volume(vessel, G, current_volume, + f"第{cycle+1}次清洗过滤后") + + # 4. 等待(缩短时间) + wait_time = 5.0 # 🕐 缩短等待时间:10s → 5s + action_sequence.append({ + "action_name": "wait", + "action_kwargs": {"time": wait_time} }) - - # 步骤3:如果需要搅拌,开始搅拌 - if stir and stir_speed > 0 and stirrer_id: - if time > 0: - # 定时搅拌 - action_sequence.append({ - "device_id": stirrer_id, - "action_name": "stir", - "action_kwargs": { - "stir_time": time, - "stir_speed": stir_speed, - "settling_time": 30.0 # 搅拌后静置30秒 - } - }) - else: - # 开始搅拌(需要手动停止) - action_sequence.append({ - "device_id": stirrer_id, - "action_name": "start_stir", - "action_kwargs": { - "vessel": vessel, - "stir_speed": stir_speed, - "purpose": f"固体清洗搅拌 - 第 {repeat_num} 次" - } - }) - - # 步骤4:如果指定了清洗时间但没有搅拌,等待清洗时间 - if time > 0 and (not stir or stir_speed == 0): - # 这里可以添加等待操作,暂时跳过 - pass - - # 步骤5:如果有搅拌且没有定时,停止搅拌 - if stir and stir_speed > 0 and time == 0 and stirrer_id: - action_sequence.append({ - "device_id": stirrer_id, - "action_name": "stop_stir", - "action_kwargs": { - "vessel": vessel - } - }) - - # 步骤6:过滤分离固体和滤液 - if filter_id: - action_sequence.append({ - "device_id": filter_id, - "action_name": "filter_sample", - "action_kwargs": { - "vessel": vessel, - "filtrate_vessel": filtrate_vessel, - "stir": False, - "stir_speed": 0.0, - "temp": temp, - "continue_heatchill": temp > 25.0, - "volume": volume - } - }) - else: - # 没有专门的过滤设备,使用转移泵模拟过滤过程 - # 将滤液转移到滤液容器 - action_sequence.append({ - "device_id": pump_id, - "action_name": "transfer", - "action_kwargs": { - "from_vessel": vessel, - "to_vessel": filtrate_vessel, - "volume": volume, - "amount": f"转移滤液 - 第 {repeat_num} 次清洗", - "time": 0.0, - "viscous": False, - "rinsing_solvent": "", - "rinsing_volume": 0.0, - "rinsing_repeats": 0, - "solid": False - } - }) - - # 步骤7:如果加热了,停止加热(在最后一次清洗后) - if temp > 25.0 and heatchill_id and repeat_num == repeats: - action_sequence.append({ - "device_id": heatchill_id, - "action_name": "heat_chill_stop", - "action_kwargs": { - "vessel": vessel - } - }) + debug_print(f" ✅ 等待: {wait_time}s ⏰") - return action_sequence \ No newline at end of file + # 🔧 新增:清洗完成后的最终状态报告 + if isinstance(vessel, dict): + final_volume_vessel = get_vessel_liquid_volume(vessel) + else: + final_volume_vessel = current_volume + + # 🎊 总结 + debug_print("🧼" * 20) + debug_print(f"🎉 固体清洗协议生成完成! ✨") + debug_print(f"📊 协议统计:") + debug_print(f" 📋 总动作数: {len(action_sequence)} 个") + debug_print(f" 🥽 清洗容器: {vessel_display}") + debug_print(f" 🧪 使用溶剂: {solvent}") + debug_print(f" 💧 单次体积: {final_volume}mL") + debug_print(f" 🔄 清洗次数: {final_repeats}次") + debug_print(f" 💧 总溶剂用量: {total_solvent_used:.2f}mL") + debug_print(f"📊 体积变化统计:") + debug_print(f" - 清洗前体积: {original_volume:.2f}mL") + debug_print(f" - 清洗后体积: {final_volume_vessel:.2f}mL") + debug_print(f" - 溶剂总用量: {total_solvent_used:.2f}mL") + debug_print(f"⏱️ 预计总时间: {(final_time + 5) * final_repeats / 60:.1f} 分钟") + debug_print("🧼" * 20) + + return action_sequence + +# 🔧 新增:便捷函数 +def wash_with_water(G: nx.DiGraph, vessel: Union[str, dict], + volume: Union[float, str] = "50", + repeats: int = 2) -> List[Dict[str, Any]]: + """用水清洗固体""" + vessel_display = get_vessel_display_info(vessel) + debug_print(f"💧 水洗固体: {vessel_display} ({repeats} 次)") + return generate_wash_solid_protocol(G, vessel, "water", volume=volume, repeats=repeats) + +def wash_with_ethanol(G: nx.DiGraph, vessel: Union[str, dict], + volume: Union[float, str] = "30", + repeats: int = 1) -> List[Dict[str, Any]]: + """用乙醇清洗固体""" + vessel_display = get_vessel_display_info(vessel) + debug_print(f"🍺 乙醇洗固体: {vessel_display} ({repeats} 次)") + return generate_wash_solid_protocol(G, vessel, "ethanol", volume=volume, repeats=repeats) + +def wash_with_acetone(G: nx.DiGraph, vessel: Union[str, dict], + volume: Union[float, str] = "25", + repeats: int = 1) -> List[Dict[str, Any]]: + """用丙酮清洗固体""" + vessel_display = get_vessel_display_info(vessel) + debug_print(f"💨 丙酮洗固体: {vessel_display} ({repeats} 次)") + return generate_wash_solid_protocol(G, vessel, "acetone", volume=volume, repeats=repeats) + +def wash_with_ether(G: nx.DiGraph, vessel: Union[str, dict], + volume: Union[float, str] = "40", + repeats: int = 2) -> List[Dict[str, Any]]: + """用乙醚清洗固体""" + vessel_display = get_vessel_display_info(vessel) + debug_print(f"🌬️ 乙醚洗固体: {vessel_display} ({repeats} 次)") + return generate_wash_solid_protocol(G, vessel, "diethyl_ether", volume=volume, repeats=repeats) + +def wash_with_cold_solvent(G: nx.DiGraph, vessel: Union[str, dict], + solvent: str, volume: Union[float, str] = "30", + repeats: int = 1) -> List[Dict[str, Any]]: + """用冷溶剂清洗固体""" + vessel_display = get_vessel_display_info(vessel) + debug_print(f"❄️ 冷{solvent}洗固体: {vessel_display} ({repeats} 次)") + return generate_wash_solid_protocol(G, vessel, solvent, volume=volume, + temp=5.0, repeats=repeats) + +def wash_with_hot_solvent(G: nx.DiGraph, vessel: Union[str, dict], + solvent: str, volume: Union[float, str] = "50", + repeats: int = 1) -> List[Dict[str, Any]]: + """用热溶剂清洗固体""" + vessel_display = get_vessel_display_info(vessel) + debug_print(f"🔥 热{solvent}洗固体: {vessel_display} ({repeats} 次)") + return generate_wash_solid_protocol(G, vessel, solvent, volume=volume, + temp=60.0, repeats=repeats) + +def wash_with_stirring(G: nx.DiGraph, vessel: Union[str, dict], + solvent: str, volume: Union[float, str] = "50", + stir_time: Union[str, float] = "5 min", + repeats: int = 1) -> List[Dict[str, Any]]: + """带搅拌的溶剂清洗""" + vessel_display = get_vessel_display_info(vessel) + debug_print(f"🌪️ 搅拌清洗: {vessel_display} with {solvent} ({repeats} 次)") + return generate_wash_solid_protocol(G, vessel, solvent, volume=volume, + stir=True, stir_speed=200.0, + time=stir_time, repeats=repeats) + +def thorough_wash(G: nx.DiGraph, vessel: Union[str, dict], + solvent: str, volume: Union[float, str] = "50") -> List[Dict[str, Any]]: + """彻底清洗(多次重复)""" + vessel_display = get_vessel_display_info(vessel) + debug_print(f"🔄 彻底清洗: {vessel_display} with {solvent} (5 次)") + return generate_wash_solid_protocol(G, vessel, solvent, volume=volume, repeats=5) + +def quick_rinse(G: nx.DiGraph, vessel: Union[str, dict], + solvent: str, volume: Union[float, str] = "20") -> List[Dict[str, Any]]: + """快速冲洗(单次,小体积)""" + vessel_display = get_vessel_display_info(vessel) + debug_print(f"⚡ 快速冲洗: {vessel_display} with {solvent}") + return generate_wash_solid_protocol(G, vessel, solvent, volume=volume, repeats=1) + +def sequential_wash(G: nx.DiGraph, vessel: Union[str, dict], + solvents: list, volume: Union[float, str] = "40") -> List[Dict[str, Any]]: + """连续多溶剂清洗""" + vessel_display = get_vessel_display_info(vessel) + debug_print(f"📝 连续清洗: {vessel_display} with {' → '.join(solvents)}") + + action_sequence = [] + for solvent in solvents: + wash_actions = generate_wash_solid_protocol(G, vessel, solvent, + volume=volume, repeats=1) + action_sequence.extend(wash_actions) + + return action_sequence + +# 测试函数 +def test_wash_solid_protocol(): + """测试固体清洗协议""" + debug_print("🧪 === WASH SOLID PROTOCOL 测试 === ✨") + + # 测试vessel参数处理 + debug_print("🔧 测试vessel参数处理...") + + # 测试字典格式 + vessel_dict = {"id": "filter_flask_1", "name": "过滤瓶1", + "data": {"liquid_volume": 25.0}} + vessel_id = extract_vessel_id(vessel_dict) + vessel_display = get_vessel_display_info(vessel_dict) + volume = get_vessel_liquid_volume(vessel_dict) + debug_print(f" 字典格式: {vessel_dict}") + debug_print(f" → ID: {vessel_id}, 显示: {vessel_display}, 体积: {volume}mL") + + # 测试字符串格式 + vessel_str = "filter_flask_2" + vessel_id = extract_vessel_id(vessel_str) + vessel_display = get_vessel_display_info(vessel_str) + debug_print(f" 字符串格式: {vessel_str}") + debug_print(f" → ID: {vessel_id}, 显示: {vessel_display}") + + debug_print("✅ 测试完成 🎉") + +if __name__ == "__main__": + test_wash_solid_protocol() \ No newline at end of file diff --git a/unilabos/devices/agv/ur_arm_task.py b/unilabos/devices/agv/ur_arm_task.py index 47a7c93..f9d93b0 100644 --- a/unilabos/devices/agv/ur_arm_task.py +++ b/unilabos/devices/agv/ur_arm_task.py @@ -1,9 +1,12 @@ -import rtde_control -import dashboard_client +try: + import rtde_control + import dashboard_client + import rtde_receive +except ImportError as ex: + print("Import Error, Please Install Packages in ur_arm_task.py First!", ex) import time import json from unilabos.devices.agv.robotiq_gripper import RobotiqGripper -import rtde_receive from std_msgs.msg import Float64MultiArray from pydantic import BaseModel diff --git a/unilabos/devices/laiyu_add_solid/laiyu.py b/unilabos/devices/laiyu_add_solid/laiyu.py index 0959f9a..b1cc04a 100644 --- a/unilabos/devices/laiyu_add_solid/laiyu.py +++ b/unilabos/devices/laiyu_add_solid/laiyu.py @@ -234,71 +234,71 @@ class Laiyu: resp_reset = self.reset() return actual_mass_mg +if __name__ == "__main__": + + ''' + 样例:对单个粉筒进行称量 + ''' + + modbus = Laiyu(port="COM25") + + mass_test = modbus.add_powder_tube(1, 'h12', 6.0) + print(f"实际出料质量:{mass_test}mg") -''' -样例:对单个粉筒进行称量 -''' + ''' + 样例: 对一份excel文件记录的化合物进行称量 + ''' -modbus = Laiyu(port="COM25") + excel_file = r"C:\auto\laiyu\test1.xlsx" + # 定义输出文件路径,用于记录实际加样多少 + output_file = r"C:\auto\laiyu\test_output.xlsx" -mass_test = modbus.add_powder_tube(1, 'h12', 6.0) -print(f"实际出料质量:{mass_test}mg") + # 定义物料名称和料筒位置关系 + compound_positions = { + 'XPhos': '1', + 'Cu(OTf)2': '2', + 'CuSO4': '3', + 'PPh3': '4', + } + # read excel file + # excel_file = r"C:\auto\laiyu\test.xlsx" + df = pd.read_excel(excel_file, sheet_name='Sheet1') + # 读取Excel文件中的数据 + # 遍历每一行数据 + for index, row in df.iterrows(): + # 获取物料名称和质量 + copper_name = row['copper'] + copper_mass = row['copper_mass'] + ligand_name = row['ligand'] + ligand_mass = row['ligand_mass'] + target_tube_position = row['position'] + # 获取物料位置 from compound_positions + copper_position = compound_positions.get(copper_name) + ligand_position = compound_positions.get(ligand_name) + # 判断物料位置是否存在 + if copper_position is None: + print(f"物料位置不存在:{copper_name}") + continue + if ligand_position is None: + print(f"物料位置不存在:{ligand_name}") + continue + # 加铜 + copper_actual_mass = modbus.add_powder_tube(int(copper_position), target_tube_position, copper_mass) + time.sleep(1) + # 加配体 + ligand_actual_mass = modbus.add_powder_tube(int(ligand_position), target_tube_position, ligand_mass) + time.sleep(1) + # 保存至df + df.at[index, 'copper_actual_mass'] = copper_actual_mass + df.at[index, 'ligand_actual_mass'] = ligand_actual_mass -''' -样例: 对一份excel文件记录的化合物进行称量 -''' + # 保存修改后的数据到新的Excel文件 + df.to_excel(output_file, index=False) + print(f"已保存到文件:{output_file}") -excel_file = r"C:\auto\laiyu\test1.xlsx" -# 定义输出文件路径,用于记录实际加样多少 -output_file = r"C:\auto\laiyu\test_output.xlsx" - -# 定义物料名称和料筒位置关系 -compound_positions = { - 'XPhos': '1', - 'Cu(OTf)2': '2', - 'CuSO4': '3', - 'PPh3': '4', -} - -# read excel file -# excel_file = r"C:\auto\laiyu\test.xlsx" -df = pd.read_excel(excel_file, sheet_name='Sheet1') -# 读取Excel文件中的数据 -# 遍历每一行数据 -for index, row in df.iterrows(): - # 获取物料名称和质量 - copper_name = row['copper'] - copper_mass = row['copper_mass'] - ligand_name = row['ligand'] - ligand_mass = row['ligand_mass'] - target_tube_position = row['position'] - # 获取物料位置 from compound_positions - copper_position = compound_positions.get(copper_name) - ligand_position = compound_positions.get(ligand_name) - # 判断物料位置是否存在 - if copper_position is None: - print(f"物料位置不存在:{copper_name}") - continue - if ligand_position is None: - print(f"物料位置不存在:{ligand_name}") - continue - # 加铜 - copper_actual_mass = modbus.add_powder_tube(int(copper_position), target_tube_position, copper_mass) - time.sleep(1) - # 加配体 - ligand_actual_mass = modbus.add_powder_tube(int(ligand_position), target_tube_position, ligand_mass) - time.sleep(1) - # 保存至df - df.at[index, 'copper_actual_mass'] = copper_actual_mass - df.at[index, 'ligand_actual_mass'] = ligand_actual_mass - -# 保存修改后的数据到新的Excel文件 -df.to_excel(output_file, index=False) -print(f"已保存到文件:{output_file}") - -# 关闭串口 -modbus.ser.close() -print("串口已关闭") + # 关闭串口 + modbus.ser.close() + print("串口已关闭") diff --git a/unilabos/devices/liquid_handling/liquid_handler_abstract.py b/unilabos/devices/liquid_handling/liquid_handler_abstract.py index 4faa042..93e9434 100644 --- a/unilabos/devices/liquid_handling/liquid_handler_abstract.py +++ b/unilabos/devices/liquid_handling/liquid_handler_abstract.py @@ -1,17 +1,555 @@ from __future__ import annotations -from typing import List, Sequence, Optional, Literal, Union, Iterator +import traceback +from typing import List, Sequence, Optional, Literal, Union, Iterator, Dict, Any, Callable, Set import asyncio import time -from pylabrobot.liquid_handling import LiquidHandler -from pylabrobot.resources import Resource, TipRack, Container, Coordinate, Well +from pylabrobot.liquid_handling import LiquidHandler, LiquidHandlerBackend, LiquidHandlerChatterboxBackend, Strictness +from pylabrobot.liquid_handling.liquid_handler import TipPresenceProbingMethod +from pylabrobot.liquid_handling.standard import GripDirection +from pylabrobot.resources import ( + Resource, + TipRack, + Container, + Coordinate, + Well, + Deck, + TipSpot, + Plate, + ResourceStack, + ResourceHolder, + Lid, + Trash, + Tip, +) -class LiquidHandlerAbstract(LiquidHandler): +class LiquidHandlerMiddleware(LiquidHandler): + def __init__(self, backend: LiquidHandlerBackend, deck: Deck, simulator: bool = False, channel_num: int = 8): + self._simulator = simulator + if simulator: + self._simulate_backend = LiquidHandlerChatterboxBackend(channel_num) + self._simulate_handler = LiquidHandlerAbstract(self._simulate_backend, deck, False) + super().__init__(backend, deck) + + async def setup(self, **backend_kwargs): + if self._simulator: + return await self._simulate_handler.setup(**backend_kwargs) + return await super().setup(**backend_kwargs) + + def serialize_state(self) -> Dict[str, Any]: + if self._simulator: + self._simulate_handler.serialize_state() + return super().serialize_state() + + def load_state(self, state: Dict[str, Any]): + if self._simulator: + self._simulate_handler.load_state(state) + super().load_state(state) + + def update_head_state(self, state: Dict[int, Optional[Tip]]): + if self._simulator: + self._simulate_handler.update_head_state(state) + super().update_head_state(state) + + def clear_head_state(self): + if self._simulator: + self._simulate_handler.clear_head_state() + super().clear_head_state() + + def _run_async_in_thread(self, func, *args, **kwargs): + super()._run_async_in_thread(func, *args, **kwargs) + + def _send_assigned_resource_to_backend(self, resource: Resource): + if self._simulator: + self._simulate_handler._send_assigned_resource_to_backend(resource) + super()._send_assigned_resource_to_backend(resource) + + def _send_unassigned_resource_to_backend(self, resource: Resource): + if self._simulator: + self._simulate_handler._send_unassigned_resource_to_backend(resource) + super()._send_unassigned_resource_to_backend(resource) + + def summary(self): + if self._simulator: + self._simulate_handler.summary() + super().summary() + + def _assert_positions_unique(self, positions: List[str]): + super()._assert_positions_unique(positions) + + def _assert_resources_exist(self, resources: Sequence[Resource]): + super()._assert_resources_exist(resources) + + def _check_args( + self, method: Callable, backend_kwargs: Dict[str, Any], default: Set[str], strictness: Strictness + ) -> Set[str]: + return super()._check_args(method, backend_kwargs, default, strictness) + + def _make_sure_channels_exist(self, channels: List[int]): + super()._make_sure_channels_exist(channels) + + def _format_param(self, value: Any) -> Any: + return super()._format_param(value) + + def _log_command(self, name: str, **kwargs) -> None: + super()._log_command(name, **kwargs) + + async def pick_up_tips( + self, + tip_spots: List[TipSpot], + use_channels: Optional[List[int]] = None, + offsets: Optional[List[Coordinate]] = None, + **backend_kwargs, + ): + print('222'*200) + print(tip_spots) + if self._simulator: + return await self._simulate_handler.pick_up_tips(tip_spots, use_channels, offsets, **backend_kwargs) + return await super().pick_up_tips(tip_spots, use_channels, offsets, **backend_kwargs) + + async def drop_tips( + self, + tip_spots: Sequence[Union[TipSpot, Trash]], + use_channels: Optional[List[int]] = None, + offsets: Optional[List[Coordinate]] = None, + allow_nonzero_volume: bool = False, + **backend_kwargs, + ): + if self._simulator: + return await self._simulate_handler.drop_tips( + tip_spots, use_channels, offsets, allow_nonzero_volume, **backend_kwargs + ) + return await super().drop_tips(tip_spots, use_channels, offsets, allow_nonzero_volume, **backend_kwargs) + + async def return_tips( + self, use_channels: Optional[list[int]] = None, allow_nonzero_volume: bool = False, **backend_kwargs + ): + if self._simulator: + return await self._simulate_handler.return_tips(use_channels, allow_nonzero_volume, **backend_kwargs) + return await super().return_tips(use_channels, allow_nonzero_volume, **backend_kwargs) + + async def discard_tips( + self, + use_channels: Optional[List[int]] = None, + allow_nonzero_volume: bool = True, + offsets: Optional[List[Coordinate]] = None, + **backend_kwargs, + ): + if self._simulator: + return await self._simulate_handler.discard_tips(use_channels, allow_nonzero_volume, offsets, **backend_kwargs) + return await super().discard_tips(use_channels, allow_nonzero_volume, offsets, **backend_kwargs) + + def _check_containers(self, resources: Sequence[Resource]): + super()._check_containers(resources) + + async def aspirate( + self, + resources: Sequence[Container], + vols: List[float], + use_channels: Optional[List[int]] = None, + flow_rates: Optional[List[Optional[float]]] = None, + offsets: Optional[List[Coordinate]] = None, + liquid_height: Optional[List[Optional[float]]] = None, + blow_out_air_volume: Optional[List[Optional[float]]] = None, + spread: Literal["wide", "tight", "custom"] = "wide", + **backend_kwargs, + ): + if self._simulator: + return await self._simulate_handler.aspirate( + resources, + vols, + use_channels, + flow_rates, + offsets, + liquid_height, + blow_out_air_volume, + spread, + **backend_kwargs, + ) + return await super().aspirate( + resources, + vols, + use_channels, + flow_rates, + offsets, + liquid_height, + blow_out_air_volume, + spread, + **backend_kwargs, + ) + + async def dispense( + self, + resources: Sequence[Container], + vols: List[float], + use_channels: Optional[List[int]] = None, + flow_rates: Optional[List[Optional[float]]] = None, + offsets: Optional[List[Coordinate]] = None, + liquid_height: Optional[List[Optional[float]]] = None, + blow_out_air_volume: Optional[List[Optional[float]]] = None, + spread: Literal["wide", "tight", "custom"] = "wide", + **backend_kwargs, + ): + if self._simulator: + return await self._simulate_handler.dispense( + resources, + vols, + use_channels, + flow_rates, + offsets, + liquid_height, + blow_out_air_volume, + spread, + **backend_kwargs, + ) + return await super().dispense( + resources, + vols, + use_channels, + flow_rates, + offsets, + liquid_height, + blow_out_air_volume, + spread, + **backend_kwargs, + ) + + async def transfer( + self, + source: Well, + targets: List[Well], + source_vol: Optional[float] = None, + ratios: Optional[List[float]] = None, + target_vols: Optional[List[float]] = None, + aspiration_flow_rate: Optional[float] = None, + dispense_flow_rates: Optional[List[Optional[float]]] = None, + **backend_kwargs, + ): + if self._simulator: + return await self._simulate_handler.transfer( + source, + targets, + source_vol, + ratios, + target_vols, + aspiration_flow_rate, + dispense_flow_rates, + **backend_kwargs, + ) + return await super().transfer( + source, + targets, + source_vol, + ratios, + target_vols, + aspiration_flow_rate, + dispense_flow_rates, + **backend_kwargs, + ) + + def use_channels(self, channels: List[int]): + if self._simulator: + self._simulate_handler.use_channels(channels) + return super().use_channels(channels) + + async def pick_up_tips96(self, tip_rack: TipRack, offset: Coordinate = Coordinate.zero(), **backend_kwargs): + if self._simulator: + return await self._simulate_handler.pick_up_tips96(tip_rack, offset, **backend_kwargs) + return await super().pick_up_tips96(tip_rack, offset, **backend_kwargs) + + async def drop_tips96( + self, + resource: Union[TipRack, Trash], + offset: Coordinate = Coordinate.zero(), + allow_nonzero_volume: bool = False, + **backend_kwargs, + ): + if self._simulator: + return await self._simulate_handler.drop_tips96(resource, offset, allow_nonzero_volume, **backend_kwargs) + return await super().drop_tips96(resource, offset, allow_nonzero_volume, **backend_kwargs) + + def _get_96_head_origin_tip_rack(self) -> Optional[TipRack]: + return super()._get_96_head_origin_tip_rack() + + async def return_tips96(self, allow_nonzero_volume: bool = False, **backend_kwargs): + if self._simulator: + return await self._simulate_handler.return_tips96(allow_nonzero_volume, **backend_kwargs) + return await super().return_tips96(allow_nonzero_volume, **backend_kwargs) + + async def discard_tips96(self, allow_nonzero_volume: bool = True, **backend_kwargs): + if self._simulator: + return await self._simulate_handler.discard_tips96(allow_nonzero_volume, **backend_kwargs) + return await super().discard_tips96(allow_nonzero_volume, **backend_kwargs) + + async def aspirate96( + self, + resource: Union[Plate, Container, List[Well]], + volume: float, + offset: Coordinate = Coordinate.zero(), + flow_rate: Optional[float] = None, + blow_out_air_volume: Optional[float] = None, + **backend_kwargs, + ): + if self._simulator: + return await self._simulate_handler.aspirate96( + resource, volume, offset, flow_rate, blow_out_air_volume, **backend_kwargs + ) + return await super().aspirate96(resource, volume, offset, flow_rate, blow_out_air_volume, **backend_kwargs) + + async def dispense96( + self, + resource: Union[Plate, Container, List[Well]], + volume: float, + offset: Coordinate = Coordinate.zero(), + flow_rate: Optional[float] = None, + blow_out_air_volume: Optional[float] = None, + **backend_kwargs, + ): + if self._simulator: + return await self._simulate_handler.dispense96( + resource, volume, offset, flow_rate, blow_out_air_volume, **backend_kwargs + ) + return await super().dispense96(resource, volume, offset, flow_rate, blow_out_air_volume, **backend_kwargs) + + async def stamp( + self, + source: Plate, + target: Plate, + volume: float, + aspiration_flow_rate: Optional[float] = None, + dispense_flow_rate: Optional[float] = None, + ): + if self._simulator: + return await self._simulate_handler.stamp(source, target, volume, aspiration_flow_rate, dispense_flow_rate) + return await super().stamp(source, target, volume, aspiration_flow_rate, dispense_flow_rate) + + async def pick_up_resource( + self, + resource: Resource, + offset: Coordinate = Coordinate.zero(), + pickup_distance_from_top: float = 0, + direction: GripDirection = GripDirection.FRONT, + **backend_kwargs, + ): + if self._simulator: + return await self._simulate_handler.pick_up_resource( + resource, offset, pickup_distance_from_top, direction, **backend_kwargs + ) + return await super().pick_up_resource(resource, offset, pickup_distance_from_top, direction, **backend_kwargs) + + async def move_picked_up_resource( + self, + to: Coordinate, + offset: Coordinate = Coordinate.zero(), + direction: Optional[GripDirection] = None, + **backend_kwargs, + ): + if self._simulator: + return await self._simulate_handler.move_picked_up_resource(to, offset, direction, **backend_kwargs) + return await super().move_picked_up_resource(to, offset, direction, **backend_kwargs) + + async def drop_resource( + self, + destination: Union[ResourceStack, ResourceHolder, Resource, Coordinate], + offset: Coordinate = Coordinate.zero(), + direction: GripDirection = GripDirection.FRONT, + **backend_kwargs, + ): + if self._simulator: + return await self._simulate_handler.drop_resource(destination, offset, direction, **backend_kwargs) + return await super().drop_resource(destination, offset, direction, **backend_kwargs) + + async def move_resource( + self, + resource: Resource, + to: Union[ResourceStack, ResourceHolder, Resource, Coordinate], + intermediate_locations: Optional[List[Coordinate]] = None, + pickup_offset: Coordinate = Coordinate.zero(), + destination_offset: Coordinate = Coordinate.zero(), + pickup_distance_from_top: float = 0, + pickup_direction: GripDirection = GripDirection.FRONT, + drop_direction: GripDirection = GripDirection.FRONT, + **backend_kwargs, + ): + if self._simulator: + return await self._simulate_handler.move_resource( + resource, + to, + intermediate_locations, + pickup_offset, + destination_offset, + pickup_distance_from_top, + pickup_direction, + drop_direction, + **backend_kwargs, + ) + return await super().move_resource( + resource, + to, + intermediate_locations, + pickup_offset, + destination_offset, + pickup_distance_from_top, + pickup_direction, + drop_direction, + **backend_kwargs, + ) + + async def move_lid( + self, + lid: Lid, + to: Union[Plate, ResourceStack, Coordinate], + intermediate_locations: Optional[List[Coordinate]] = None, + pickup_offset: Coordinate = Coordinate.zero(), + destination_offset: Coordinate = Coordinate.zero(), + pickup_direction: GripDirection = GripDirection.FRONT, + drop_direction: GripDirection = GripDirection.FRONT, + pickup_distance_from_top: float = 5.7 - 3.33, + **backend_kwargs, + ): + if self._simulator: + return await self._simulate_handler.move_lid( + lid, + to, + intermediate_locations, + pickup_offset, + destination_offset, + pickup_direction, + drop_direction, + pickup_distance_from_top, + **backend_kwargs, + ) + return await super().move_lid( + lid, + to, + intermediate_locations, + pickup_offset, + destination_offset, + pickup_direction, + drop_direction, + pickup_distance_from_top, + **backend_kwargs, + ) + + async def move_plate( + self, + plate: Plate, + to: Union[ResourceStack, ResourceHolder, Resource, Coordinate], + intermediate_locations: Optional[List[Coordinate]] = None, + pickup_offset: Coordinate = Coordinate.zero(), + destination_offset: Coordinate = Coordinate.zero(), + drop_direction: GripDirection = GripDirection.FRONT, + pickup_direction: GripDirection = GripDirection.FRONT, + pickup_distance_from_top: float = 13.2 - 3.33, + **backend_kwargs, + ): + if self._simulator: + return await self._simulate_handler.move_plate( + plate, + to, + intermediate_locations, + pickup_offset, + destination_offset, + drop_direction, + pickup_direction, + pickup_distance_from_top, + **backend_kwargs, + ) + return await super().move_plate( + plate, + to, + intermediate_locations, + pickup_offset, + destination_offset, + drop_direction, + pickup_direction, + pickup_distance_from_top, + **backend_kwargs, + ) + + def serialize(self): + if self._simulator: + self._simulate_handler.serialize() + return super().serialize() + + @classmethod + def deserialize(cls, data: dict, allow_marshal: bool = False) -> LiquidHandler: + return super().deserialize(data, allow_marshal) + + @classmethod + def load(cls, path: str) -> LiquidHandler: + return super().load(path) + + async def prepare_for_manual_channel_operation(self, channel: int): + if self._simulator: + return await self._simulate_handler.prepare_for_manual_channel_operation(channel) + return await super().prepare_for_manual_channel_operation(channel) + + async def move_channel_x(self, channel: int, x: float): + if self._simulator: + return await self._simulate_handler.move_channel_x(channel, x) + return await super().move_channel_x(channel, x) + + async def move_channel_y(self, channel: int, y: float): + if self._simulator: + return await self._simulate_handler.move_channel_y(channel, y) + return await super().move_channel_y(channel, y) + + async def move_channel_z(self, channel: int, z: float): + if self._simulator: + return await self._simulate_handler.move_channel_z(channel, z) + return await super().move_channel_z(channel, z) + + def assign_child_resource(self, resource: Resource, location: Optional[Coordinate], reassign: bool = True): + if self._simulator: + self._simulate_handler.assign_child_resource(resource, location, reassign) + pass + + async def probe_tip_presence_via_pickup( + self, tip_spots: List[TipSpot], use_channels: Optional[List[int]] = None + ) -> Dict[str, bool]: + if self._simulator: + return await self._simulate_handler.probe_tip_presence_via_pickup(tip_spots, use_channels) + return await super().probe_tip_presence_via_pickup(tip_spots, use_channels) + + async def probe_tip_inventory( + self, + tip_spots: List[TipSpot], + probing_fn: Optional[TipPresenceProbingMethod] = None, + use_channels: Optional[List[int]] = None, + ) -> Dict[str, bool]: + if self._simulator: + return await self._simulate_handler.probe_tip_inventory(tip_spots, probing_fn, use_channels) + return await super().probe_tip_inventory(tip_spots, probing_fn, use_channels) + + async def consolidate_tip_inventory(self, tip_racks: List[TipRack], use_channels: Optional[List[int]] = None): + if self._simulator: + return await self._simulate_handler.consolidate_tip_inventory(tip_racks, use_channels) + return await super().consolidate_tip_inventory(tip_racks, use_channels) + + +class LiquidHandlerAbstract(LiquidHandlerMiddleware): """Extended LiquidHandler with additional operations.""" + support_touch_tip = True + def __init__(self, backend: LiquidHandlerBackend, deck: Deck, simulator: bool=False, channel_num:int = 8): + """Initialize a LiquidHandler. + + Args: + backend: Backend to use. + deck: Deck to use. + """ + self._simulator = simulator + super().__init__(backend, deck, simulator, channel_num) + + @classmethod + def set_liquid(self, wells: list[Well], liquid_names: list[str], volumes: list[float]): + """Set the liquid in a well.""" + for well, liquid_name, volume in zip(wells, liquid_names, volumes): + well.set_liquids([(liquid_name, volume)]) # type: ignore # --------------------------------------------------------------- # REMOVE LIQUID -------------------------------------------------- # --------------------------------------------------------------- @@ -47,43 +585,101 @@ class LiquidHandlerAbstract(LiquidHandler): none_keys: List[str] = [], ): """A complete *remove* (aspirate → waste) operation.""" - trash = self.deck.get_trash_area() + try: if is_96_well: - pass # This mode is not verified + pass # This mode is not verified. else: - if len(vols) != len(sources): - raise ValueError("Length of `vols` must match `sources`.") + # 首先应该对任务分组,然后每次1个/8个进行操作处理 + if len(use_channels) == 1 and self.backend.num_channels == 1: - for src, vol in zip(sources, vols): - await self.move_to(src, dis_to_top=top[0] if top else 0) - tip = next(self.current_tip) - await self.pick_up_tips(tip) - await self.aspirate( - resources=[src], - vols=[vol], - use_channels=use_channels, # only aspirate96 used, default to None - flow_rates=[flow_rates[0]] if flow_rates else None, - offsets=[offsets[0]] if offsets else None, - liquid_height=[liquid_height[0]] if liquid_height else None, - blow_out_air_volume=blow_out_air_volume[0] if blow_out_air_volume else None, - spread=spread, - ) - await self.custom_delay(seconds=delays[0] if delays else 0) - await self.dispense( - resources=waste_liquid, - vols=[vol], - use_channels=use_channels, - flow_rates=[flow_rates[1]] if flow_rates else None, - offsets=[offsets[1]] if offsets else None, - liquid_height=[liquid_height[1]] if liquid_height else None, - blow_out_air_volume=blow_out_air_volume[1] if blow_out_air_volume else None, - spread=spread, - ) - await self.discard_tips() # For now, each of tips is discarded after use + for _ in range(len(sources)): + tip = [] + for __ in range(len(use_channels)): + tip.extend(next(self.current_tip)) + await self.pick_up_tips(tip) + await self.aspirate( + resources=[sources[_]], + vols=[vols[_]], + use_channels=use_channels, + flow_rates=[flow_rates[0]] if flow_rates else None, + offsets=[offsets[0]] if offsets else None, + liquid_height=[liquid_height[0]] if liquid_height else None, + blow_out_air_volume=[blow_out_air_volume[0]] if blow_out_air_volume else None, + spread=spread, + ) + if delays is not None: + await self.custom_delay(seconds=delays[0]) + + await self.dispense( + resources=[waste_liquid], + vols=[vols[_]], + use_channels=use_channels, + flow_rates=[flow_rates[1]] if flow_rates else None, + offsets=[offsets[1]] if offsets else None, + blow_out_air_volume=[blow_out_air_volume[1]] if blow_out_air_volume else None, + liquid_height=[liquid_height[1]] if liquid_height else None, + spread=spread, + ) + await self.discard_tips() + + elif len(use_channels) == 8 and self.backend.num_channels == 8: + + + # 对于8个的情况,需要判断此时任务是不是能被8通道移液站来成功处理 + if len(sources) % 8 != 0: + raise ValueError(f"Length of `sources` {len(sources)} must be a multiple of 8 for 8-channel mode.") + + # 8个8个来取任务序列 + + for i in range(0, len(sources), 8): + tip = [] + for _ in range(len(use_channels)): + tip.extend(next(self.current_tip)) + await self.pick_up_tips(tip) + current_targets = waste_liquid[i:i + 8] + current_reagent_sources = sources[i:i + 8] + current_asp_vols = vols[i:i + 8] + current_dis_vols = vols[i:i + 8] + current_asp_flow_rates = flow_rates[i:i + 8] if flow_rates else [None] * 8 + current_dis_flow_rates = flow_rates[-i*8-8:len(flow_rates)-i*8] if flow_rates else [None] * 8 + current_asp_offset = offsets[i:i + 8] if offsets else [None] * 8 + current_dis_offset = offsets[-i*8-8:len(offsets)-i*8] if offsets else [None] * 8 + current_asp_liquid_height = liquid_height[i:i + 8] if liquid_height else [None] * 8 + current_dis_liquid_height = liquid_height[-i*8-8:len(liquid_height)-i*8] if liquid_height else [None] * 8 + current_asp_blow_out_air_volume = blow_out_air_volume[i:i + 8] if blow_out_air_volume else [None] * 8 + current_dis_blow_out_air_volume = blow_out_air_volume[-i*8-8:len(blow_out_air_volume)-i*8] if blow_out_air_volume else [None] * 8 + + await self.aspirate( + resources=current_reagent_sources, + vols=current_asp_vols, + use_channels=use_channels, + flow_rates=current_asp_flow_rates, + offsets=current_asp_offset, + liquid_height=current_asp_liquid_height, + blow_out_air_volume=current_asp_blow_out_air_volume, + spread=spread, + ) + if delays is not None: + await self.custom_delay(seconds=delays[0]) + await self.dispense( + resources=current_targets, + vols=current_dis_vols, + use_channels=use_channels, + flow_rates=current_dis_flow_rates, + offsets=current_dis_offset, + liquid_height=current_dis_liquid_height, + blow_out_air_volume=current_dis_blow_out_air_volume, + spread=spread, + ) + if delays is not None: + await self.custom_delay(seconds=delays[1]) + await self.touch_tip(current_targets) + await self.discard_tips() except Exception as e: - raise RuntimeError(f"Liquid removal failed: {e}") from e + traceback.print_exc() + raise RuntimeError(f"Liquid addition failed: {e}") from e # --------------------------------------------------------------- # ADD LIQUID ----------------------------------------------------- @@ -110,57 +706,126 @@ class LiquidHandlerAbstract(LiquidHandler): mix_liquid_height: Optional[float] = None, none_keys: List[str] = [], ): - """A complete *add* (aspirate reagent → dispense into targets) operation.""" + # """A complete *add* (aspirate reagent → dispense into targets) operation.""" - try: + # # try: if is_96_well: pass # This mode is not verified. else: if len(asp_vols) != len(targets): - raise ValueError("Length of `vols` must match `targets`.") - tip = next(self.current_tip) - await self.pick_up_tips(tip) + raise ValueError(f"Length of `asp_vols` {len(asp_vols)} must match `targets` {len(targets)}.") - for _ in range(len(targets)): - await self.aspirate( - resources=reagent_sources, - vols=[asp_vols[_]], - use_channels=use_channels, - flow_rates=[flow_rates[0]] if flow_rates else None, - offsets=[offsets[0]] if offsets else None, - liquid_height=[liquid_height[0]] if liquid_height else None, - blow_out_air_volume=[blow_out_air_volume[0]] if blow_out_air_volume else None, - spread=spread, - ) - if delays is not None: - await self.custom_delay(seconds=delays[0]) - await self.dispense( - resources=[targets[_]], - vols=[dis_vols[_]], - use_channels=use_channels, - flow_rates=[flow_rates[1]] if flow_rates else None, - offsets=[offsets[1]] if offsets else None, - blow_out_air_volume=[blow_out_air_volume[1]] if blow_out_air_volume else None, - liquid_height=[liquid_height[1]] if liquid_height else None, - spread=spread, - ) - if delays is not None: - await self.custom_delay(seconds=delays[1]) - await self.mix( - targets=targets[_], - mix_time=mix_time, - mix_vol=mix_vol, - offsets=offsets if offsets else None, - height_to_bottom=mix_liquid_height if mix_liquid_height else None, - mix_rate=mix_rate if mix_rate else None, - ) - if delays is not None: - await self.custom_delay(seconds=delays[1]) - await self.touch_tip(targets[_]) - await self.discard_tips() + # 首先应该对任务分组,然后每次1个/8个进行操作处理 + if len(use_channels) == 1: + tip = [] + for _ in range(len(use_channels)): + tip.extend(next(self.current_tip)) + await self.pick_up_tips(tip) + for _ in range(len(targets)): + print(use_channels, reagent_sources) + await self.aspirate( + resources=reagent_sources, + vols=[asp_vols[_]], + use_channels=use_channels, + flow_rates=[flow_rates[0]] if flow_rates else None, + offsets=[offsets[0]] if offsets else None, + liquid_height=[liquid_height[0]] if liquid_height else None, + blow_out_air_volume=[blow_out_air_volume[0]] if blow_out_air_volume else None, + spread=spread, + ) + + if delays is not None: + await self.custom_delay(seconds=delays[0]) + await self.dispense( + resources=[targets[_]], + vols=[dis_vols[_]], + use_channels=use_channels, + flow_rates=[flow_rates[1]] if flow_rates else None, + offsets=[offsets[1]] if offsets else None, + blow_out_air_volume=[blow_out_air_volume[1]] if blow_out_air_volume else None, + liquid_height=[liquid_height[1]] if liquid_height else None, + spread=spread, + ) - except Exception as e: - raise RuntimeError(f"Liquid addition failed: {e}") from e + if delays is not None: + await self.custom_delay(seconds=delays[1]) + await self.mix( + targets=[targets[_]], + mix_time=mix_time, + mix_vol=mix_vol, + offsets=offsets if offsets else None, + height_to_bottom=mix_liquid_height if mix_liquid_height else None, + mix_rate=mix_rate if mix_rate else None, + ) + if delays is not None: + await self.custom_delay(seconds=delays[1]) + await self.touch_tip(targets[_]) + await self.discard_tips() + + elif len(use_channels) == 8: + # 对于8个的情况,需要判断此时任务是不是能被8通道移液站来成功处理 + if len(targets) % 8 != 0: + raise ValueError(f"Length of `targets` {len(targets)} must be a multiple of 8 for 8-channel mode.") + tip = [] + for _ in range(len(use_channels)): + tip.extend(next(self.current_tip)) + await self.pick_up_tips(tip) + for i in range(0, len(targets), 8): + current_targets = targets[i:i + 8] + current_reagent_sources = reagent_sources[i:i + 8] + current_asp_vols = asp_vols[i:i + 8] + current_dis_vols = dis_vols[i:i + 8] + current_asp_flow_rates = flow_rates[i:i + 8] if flow_rates else [None] * 8 + current_dis_flow_rates = flow_rates[-i*8-8:len(flow_rates)-i*8] if flow_rates else [None] * 8 + current_asp_offset = offsets[i:i + 8] if offsets else [None] * 8 + current_dis_offset = offsets[-i*8-8:len(offsets)-i*8] if offsets else [None] * 8 + current_asp_liquid_height = liquid_height[i:i + 8] if liquid_height else [None] * 8 + current_dis_liquid_height = liquid_height[-i*8-8:len(liquid_height)-i*8] if liquid_height else [None] * 8 + current_asp_blow_out_air_volume = blow_out_air_volume[i:i + 8] if blow_out_air_volume else [None] * 8 + current_dis_blow_out_air_volume = blow_out_air_volume[-i*8-8:len(blow_out_air_volume)-i*8] if blow_out_air_volume else [None] * 8 + + await self.aspirate( + resources=current_reagent_sources, + vols=current_asp_vols, + use_channels=use_channels, + flow_rates=current_asp_flow_rates, + offsets=current_asp_offset, + liquid_height=current_asp_liquid_height, + blow_out_air_volume=current_asp_blow_out_air_volume, + spread=spread, + ) + if delays is not None: + await self.custom_delay(seconds=delays[0]) + await self.dispense( + resources=current_targets, + vols=current_dis_vols, + use_channels=use_channels, + flow_rates=current_dis_flow_rates, + offsets=current_dis_offset, + liquid_height=current_dis_liquid_height, + blow_out_air_volume=current_dis_blow_out_air_volume, + spread=spread, + ) + if delays is not None: + await self.custom_delay(seconds=delays[1]) + + await self.mix( + targets=current_targets, + mix_time=mix_time, + mix_vol=mix_vol, + offsets=offsets if offsets else None, + height_to_bottom=mix_liquid_height if mix_liquid_height else None, + mix_rate=mix_rate if mix_rate else None, + ) + if delays is not None: + await self.custom_delay(seconds=delays[1]) + await self.touch_tip(current_targets) + await self.discard_tips() + + + # except Exception as e: + # traceback.print_exc() + # raise RuntimeError(f"Liquid addition failed: {e}") from e # --------------------------------------------------------------- # TRANSFER LIQUID ------------------------------------------------ @@ -183,7 +848,7 @@ class LiquidHandlerAbstract(LiquidHandler): spread: Literal["wide", "tight", "custom"] = "wide", is_96_well: bool = False, mix_stage: Optional[Literal["none", "before", "after", "both"]] = "none", - mix_times: Optional[List(int)] = None, + mix_times: Optional[List[int]] = None, mix_vol: Optional[int] = None, mix_rate: Optional[int] = None, mix_liquid_height: Optional[float] = None, @@ -205,57 +870,127 @@ class LiquidHandlerAbstract(LiquidHandler): Set *True* to use the 96‑channel head. """ - try: - # ------------------------------------------------------------------ - # 96‑channel head mode - # ------------------------------------------------------------------ - if is_96_well: - pass # This mode is not verified - else: - if not (len(asp_vols) == len(sources) and len(dis_vols) == len(targets)): - raise ValueError("`sources`, `targets`, and `vols` must have the same length.") - tip_iter = self.iter_tips(tip_racks) - for src, tgt, asp_vol, asp_flow_rate, dis_vol, dis_flow_rate in zip( - sources, targets, asp_vols, asp_flow_rates, dis_vols, dis_flow_rates - ): - tip = next(tip_iter) + if is_96_well: + pass # This mode is not verified. + else: + if len(asp_vols) != len(targets): + raise ValueError(f"Length of `asp_vols` {len(asp_vols)} must match `targets` {len(targets)}.") + + # 首先应该对任务分组,然后每次1个/8个进行操作处理 + if len(use_channels) == 1: + for _ in range(len(targets)): + tip = [] + for ___ in range(len(use_channels)): + tip.extend(next(self.current_tip)) await self.pick_up_tips(tip) - # Aspirate from source + await self.aspirate( - resources=[src], - vols=[asp_vol], + resources=[sources[_]], + vols=[asp_vols[_]], use_channels=use_channels, - flow_rates=[asp_flow_rate], - offsets=offsets, - liquid_height=liquid_height, - blow_out_air_volume=blow_out_air_volume, + flow_rates=[asp_flow_rates[0]] if asp_flow_rates else None, + offsets=[offsets[0]] if offsets else None, + liquid_height=[liquid_height[0]] if liquid_height else None, + blow_out_air_volume=[blow_out_air_volume[0]] if blow_out_air_volume else None, spread=spread, ) - self.custom_delay(seconds=delays[0] if delays else 0) - # Dispense into target + if delays is not None: + await self.custom_delay(seconds=delays[0]) await self.dispense( - resources=[tgt], - vols=[dis_vol], + resources=[targets[_]], + vols=[dis_vols[_]], use_channels=use_channels, - flow_rates=[dis_flow_rate], - offsets=offsets, - liquid_height=liquid_height, - blow_out_air_volume=blow_out_air_volume, + flow_rates=[dis_flow_rates[1]] if dis_flow_rates else None, + offsets=[offsets[1]] if offsets else None, + blow_out_air_volume=[blow_out_air_volume[1]] if blow_out_air_volume else None, + liquid_height=[liquid_height[1]] if liquid_height else None, spread=spread, ) + if delays is not None: + await self.custom_delay(seconds=delays[1]) await self.mix( - targets=[tgt], - mix_time=mix_times[0] if mix_times else None, - mix_vol=mix_vol[0] if mix_vol else None, - mix_rate=mix_rate[0] if mix_rate else None, + targets=[targets[_]], + mix_time=mix_times, + mix_vol=mix_vol, + offsets=offsets if offsets else None, + height_to_bottom=mix_liquid_height if mix_liquid_height else None, + mix_rate=mix_rate if mix_rate else None, ) - if touch_tip: - await self.touch_tip(tgt) + if delays is not None: + await self.custom_delay(seconds=delays[1]) + await self.touch_tip(targets[_]) await self.discard_tips() - except Exception as exc: - raise RuntimeError(f"Liquid transfer failed: {exc}") from exc + elif len(use_channels) == 8: + # 对于8个的情况,需要判断此时任务是不是能被8通道移液站来成功处理 + if len(targets) % 8 != 0: + raise ValueError(f"Length of `targets` {len(targets)} must be a multiple of 8 for 8-channel mode.") + + # 8个8个来取任务序列 + + for i in range(0, len(targets), 8): + # 取出8个任务 + tip = [] + for _ in range(len(use_channels)): + tip.extend(next(self.current_tip)) + await self.pick_up_tips(tip) + current_targets = targets[i:i + 8] + current_reagent_sources = sources[i:i + 8] + current_asp_vols = asp_vols[i:i + 8] + current_dis_vols = dis_vols[i:i + 8] + current_asp_flow_rates = asp_flow_rates[i:i + 8] + current_asp_offset = offsets[i:i + 8] if offsets else [None] * 8 + current_dis_offset = offsets[-i*8-8:len(offsets)-i*8] if offsets else [None] * 8 + current_asp_liquid_height = liquid_height[i:i + 8] if liquid_height else [None] * 8 + current_dis_liquid_height = liquid_height[-i*8-8:len(liquid_height)-i*8] if liquid_height else [None] * 8 + current_asp_blow_out_air_volume = blow_out_air_volume[i:i + 8] if blow_out_air_volume else [None] * 8 + current_dis_blow_out_air_volume = blow_out_air_volume[-i*8-8:len(blow_out_air_volume)-i*8] if blow_out_air_volume else [None] * 8 + current_dis_flow_rates = dis_flow_rates[i:i + 8] if dis_flow_rates else [None] * 8 + + await self.aspirate( + resources=current_reagent_sources, + vols=current_asp_vols, + use_channels=use_channels, + flow_rates=current_asp_flow_rates, + offsets=current_asp_offset, + blow_out_air_volume=current_asp_blow_out_air_volume, + liquid_height=current_asp_liquid_height, + spread=spread, + ) + + if delays is not None: + await self.custom_delay(seconds=delays[0]) + await self.dispense( + resources=current_targets, + vols=current_dis_vols, + use_channels=use_channels, + flow_rates=current_dis_flow_rates, + offsets=current_dis_offset, + blow_out_air_volume=current_dis_blow_out_air_volume, + liquid_height=current_dis_liquid_height, + spread=spread, + ) + if delays is not None: + await self.custom_delay(seconds=delays[1]) + + await self.mix( + targets=current_targets, + mix_time=mix_times, + mix_vol=mix_vol, + offsets=offsets if offsets else None, + height_to_bottom=mix_liquid_height if mix_liquid_height else None, + mix_rate=mix_rate if mix_rate else None, + ) + if delays is not None: + await self.custom_delay(seconds=delays[1]) + await self.touch_tip(current_targets) + await self.discard_tips() + + # except Exception as e: + # traceback.print_exc() + # raise RuntimeError(f"Liquid addition failed: {e}") from e + # --------------------------------------------------------------- # Helper utilities @@ -277,7 +1012,11 @@ class LiquidHandlerAbstract(LiquidHandler): print(f"Current time: {time.strftime('%H:%M:%S')}") async def touch_tip(self, targets: Sequence[Container]): + """Touch the tip to the side of the well.""" + + if not self.support_touch_tip: + return await self.aspirate( resources=[targets], vols=[0], @@ -337,6 +1076,7 @@ class LiquidHandlerAbstract(LiquidHandler): def set_tiprack(self, tip_racks: Sequence[TipRack]): """Set the tip racks for the liquid handler.""" + self.tip_racks = tip_racks tip_iter = self.iter_tips(tip_racks) self.current_tip = tip_iter diff --git a/unilabos/devices/liquid_handling/prcxi/deck.json b/unilabos/devices/liquid_handling/prcxi/deck.json new file mode 100644 index 0000000..7a97961 --- /dev/null +++ b/unilabos/devices/liquid_handling/prcxi/deck.json @@ -0,0 +1,13533 @@ +[ + { + "id": "PRCXI_Deck", + "name": "PRCXI_Deck", + "sample_id": null, + "children": [ + "HPLCPlateT1", + "container_for_nothing1", + "container_for_nothing2", + "trash", + "container_for_nothing3", + "container_for_nothing", + "container_for_nothing4", + "RackT8", + "container_for_nothing5", + "container_for_nothing6", + "PlateT11", + "container_for_nothing7", + "container_for_nothing8" + ], + "parent": "lh_PRCXI_Deck", + "type": "deck", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Deck", + "size_x": 100, + "size_y": 100, + "size_z": 100, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "deck", + "barcode": null + }, + "data": {} + }, + { + "id": "HPLCPlateT1", + "name": "HPLCPlateT1", + "sample_id": null, + "children": [ + "HPLCPlateT1_A1", + "HPLCPlateT1_B1", + "HPLCPlateT1_C1", + "HPLCPlateT1_D1", + "HPLCPlateT1_E1", + "HPLCPlateT1_F1", + "HPLCPlateT1_G1", + "HPLCPlateT1_H1", + "HPLCPlateT1_A2", + "HPLCPlateT1_B2", + "HPLCPlateT1_C2", + "HPLCPlateT1_D2", + "HPLCPlateT1_E2", + "HPLCPlateT1_F2", + "HPLCPlateT1_G2", + "HPLCPlateT1_H2", + "HPLCPlateT1_A3", + "HPLCPlateT1_B3", + "HPLCPlateT1_C3", + "HPLCPlateT1_D3", + "HPLCPlateT1_E3", + "HPLCPlateT1_F3", + "HPLCPlateT1_G3", + "HPLCPlateT1_H3", + "HPLCPlateT1_A4", + "HPLCPlateT1_B4", + "HPLCPlateT1_C4", + "HPLCPlateT1_D4", + "HPLCPlateT1_E4", + "HPLCPlateT1_F4", + "HPLCPlateT1_G4", + "HPLCPlateT1_H4", + "HPLCPlateT1_A5", + "HPLCPlateT1_B5", + "HPLCPlateT1_C5", + "HPLCPlateT1_D5", + "HPLCPlateT1_E5", + "HPLCPlateT1_F5", + "HPLCPlateT1_G5", + "HPLCPlateT1_H5", + "HPLCPlateT1_A6", + "HPLCPlateT1_B6", + "HPLCPlateT1_C6", + "HPLCPlateT1_D6", + "HPLCPlateT1_E6", + "HPLCPlateT1_F6", + "HPLCPlateT1_G6", + "HPLCPlateT1_H6", + "HPLCPlateT1_A7", + "HPLCPlateT1_B7", + "HPLCPlateT1_C7", + "HPLCPlateT1_D7", + "HPLCPlateT1_E7", + "HPLCPlateT1_F7", + "HPLCPlateT1_G7", + "HPLCPlateT1_H7", + "HPLCPlateT1_A8", + "HPLCPlateT1_B8", + "HPLCPlateT1_C8", + "HPLCPlateT1_D8", + "HPLCPlateT1_E8", + "HPLCPlateT1_F8", + "HPLCPlateT1_G8", + "HPLCPlateT1_H8", + "HPLCPlateT1_A9", + "HPLCPlateT1_B9", + "HPLCPlateT1_C9", + "HPLCPlateT1_D9", + "HPLCPlateT1_E9", + "HPLCPlateT1_F9", + "HPLCPlateT1_G9", + "HPLCPlateT1_H9", + "HPLCPlateT1_A10", + "HPLCPlateT1_B10", + "HPLCPlateT1_C10", + "HPLCPlateT1_D10", + "HPLCPlateT1_E10", + "HPLCPlateT1_F10", + "HPLCPlateT1_G10", + "HPLCPlateT1_H10", + "HPLCPlateT1_A11", + "HPLCPlateT1_B11", + "HPLCPlateT1_C11", + "HPLCPlateT1_D11", + "HPLCPlateT1_E11", + "HPLCPlateT1_F11", + "HPLCPlateT1_G11", + "HPLCPlateT1_H11", + "HPLCPlateT1_A12", + "HPLCPlateT1_B12", + "HPLCPlateT1_C12", + "HPLCPlateT1_D12", + "HPLCPlateT1_E12", + "HPLCPlateT1_F12", + "HPLCPlateT1_G12", + "HPLCPlateT1_H12" + ], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": { + "Material": { + "uuid": "548bbc3df0d4447586f2c19d2c0c0c55", + "Code": "HPLC01", + "Name": "HPLC料盘" + } + } + }, + { + "id": "HPLCPlateT1_A1", + "name": "HPLCPlateT1_A1", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B1", + "name": "HPLCPlateT1_B1", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C1", + "name": "HPLCPlateT1_C1", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D1", + "name": "HPLCPlateT1_D1", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E1", + "name": "HPLCPlateT1_E1", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F1", + "name": "HPLCPlateT1_F1", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G1", + "name": "HPLCPlateT1_G1", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H1", + "name": "HPLCPlateT1_H1", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A2", + "name": "HPLCPlateT1_A2", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B2", + "name": "HPLCPlateT1_B2", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C2", + "name": "HPLCPlateT1_C2", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D2", + "name": "HPLCPlateT1_D2", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E2", + "name": "HPLCPlateT1_E2", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F2", + "name": "HPLCPlateT1_F2", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G2", + "name": "HPLCPlateT1_G2", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H2", + "name": "HPLCPlateT1_H2", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A3", + "name": "HPLCPlateT1_A3", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B3", + "name": "HPLCPlateT1_B3", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C3", + "name": "HPLCPlateT1_C3", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D3", + "name": "HPLCPlateT1_D3", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E3", + "name": "HPLCPlateT1_E3", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F3", + "name": "HPLCPlateT1_F3", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G3", + "name": "HPLCPlateT1_G3", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H3", + "name": "HPLCPlateT1_H3", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A4", + "name": "HPLCPlateT1_A4", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B4", + "name": "HPLCPlateT1_B4", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C4", + "name": "HPLCPlateT1_C4", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D4", + "name": "HPLCPlateT1_D4", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E4", + "name": "HPLCPlateT1_E4", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F4", + "name": "HPLCPlateT1_F4", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G4", + "name": "HPLCPlateT1_G4", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H4", + "name": "HPLCPlateT1_H4", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A5", + "name": "HPLCPlateT1_A5", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B5", + "name": "HPLCPlateT1_B5", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C5", + "name": "HPLCPlateT1_C5", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D5", + "name": "HPLCPlateT1_D5", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E5", + "name": "HPLCPlateT1_E5", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F5", + "name": "HPLCPlateT1_F5", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G5", + "name": "HPLCPlateT1_G5", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H5", + "name": "HPLCPlateT1_H5", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A6", + "name": "HPLCPlateT1_A6", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B6", + "name": "HPLCPlateT1_B6", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C6", + "name": "HPLCPlateT1_C6", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D6", + "name": "HPLCPlateT1_D6", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E6", + "name": "HPLCPlateT1_E6", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F6", + "name": "HPLCPlateT1_F6", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G6", + "name": "HPLCPlateT1_G6", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H6", + "name": "HPLCPlateT1_H6", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A7", + "name": "HPLCPlateT1_A7", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B7", + "name": "HPLCPlateT1_B7", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C7", + "name": "HPLCPlateT1_C7", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D7", + "name": "HPLCPlateT1_D7", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E7", + "name": "HPLCPlateT1_E7", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F7", + "name": "HPLCPlateT1_F7", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G7", + "name": "HPLCPlateT1_G7", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H7", + "name": "HPLCPlateT1_H7", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A8", + "name": "HPLCPlateT1_A8", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B8", + "name": "HPLCPlateT1_B8", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C8", + "name": "HPLCPlateT1_C8", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D8", + "name": "HPLCPlateT1_D8", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E8", + "name": "HPLCPlateT1_E8", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F8", + "name": "HPLCPlateT1_F8", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G8", + "name": "HPLCPlateT1_G8", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H8", + "name": "HPLCPlateT1_H8", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A9", + "name": "HPLCPlateT1_A9", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B9", + "name": "HPLCPlateT1_B9", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C9", + "name": "HPLCPlateT1_C9", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D9", + "name": "HPLCPlateT1_D9", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E9", + "name": "HPLCPlateT1_E9", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F9", + "name": "HPLCPlateT1_F9", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G9", + "name": "HPLCPlateT1_G9", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H9", + "name": "HPLCPlateT1_H9", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A10", + "name": "HPLCPlateT1_A10", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B10", + "name": "HPLCPlateT1_B10", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C10", + "name": "HPLCPlateT1_C10", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D10", + "name": "HPLCPlateT1_D10", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E10", + "name": "HPLCPlateT1_E10", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F10", + "name": "HPLCPlateT1_F10", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G10", + "name": "HPLCPlateT1_G10", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H10", + "name": "HPLCPlateT1_H10", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A11", + "name": "HPLCPlateT1_A11", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B11", + "name": "HPLCPlateT1_B11", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C11", + "name": "HPLCPlateT1_C11", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D11", + "name": "HPLCPlateT1_D11", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E11", + "name": "HPLCPlateT1_E11", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F11", + "name": "HPLCPlateT1_F11", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G11", + "name": "HPLCPlateT1_G11", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H11", + "name": "HPLCPlateT1_H11", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_A12", + "name": "HPLCPlateT1_A12", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_B12", + "name": "HPLCPlateT1_B12", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_C12", + "name": "HPLCPlateT1_C12", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_D12", + "name": "HPLCPlateT1_D12", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_E12", + "name": "HPLCPlateT1_E12", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_F12", + "name": "HPLCPlateT1_F12", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_G12", + "name": "HPLCPlateT1_G12", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "HPLCPlateT1_H12", + "name": "HPLCPlateT1_H12", + "sample_id": null, + "children": [], + "parent": "HPLCPlateT1", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + } + }, + { + "id": "container_for_nothing1", + "name": "container_for_nothing1", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "container_for_nothing2", + "name": "container_for_nothing2", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "trash", + "name": "trash", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "container", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Trash", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "trash", + "model": null, + "barcode": null, + "max_volume": "Infinity", + "material_z_thickness": 0, + "compute_volume_from_height": null, + "compute_height_from_volume": null + }, + "data": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [], + "Material": { + "uuid": "730067cf07ae43849ddf4034299030e9" + } + } + }, + { + "id": "container_for_nothing3", + "name": "container_for_nothing3", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "container_for_nothing", + "name": "container_for_nothing", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "container_for_nothing4", + "name": "container_for_nothing4", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "RackT8", + "name": "RackT8", + "sample_id": null, + "children": [ + "name_A1", + "name_B1", + "name_C1", + "name_D1", + "name_E1", + "name_F1", + "name_G1", + "name_H1", + "name_A2", + "name_B2", + "name_C2", + "name_D2", + "name_E2", + "name_F2", + "name_G2", + "name_H2", + "name_A3", + "name_B3", + "name_C3", + "name_D3", + "name_E3", + "name_F3", + "name_G3", + "name_H3", + "name_A4", + "name_B4", + "name_C4", + "name_D4", + "name_E4", + "name_F4", + "name_G4", + "name_H4", + "name_A5", + "name_B5", + "name_C5", + "name_D5", + "name_E5", + "name_F5", + "name_G5", + "name_H5", + "name_A6", + "name_B6", + "name_C6", + "name_D6", + "name_E6", + "name_F6", + "name_G6", + "name_H6", + "name_A7", + "name_B7", + "name_C7", + "name_D7", + "name_E7", + "name_F7", + "name_G7", + "name_H7", + "name_A8", + "name_B8", + "name_C8", + "name_D8", + "name_E8", + "name_F8", + "name_G8", + "name_H8", + "name_A9", + "name_B9", + "name_C9", + "name_D9", + "name_E9", + "name_F9", + "name_G9", + "name_H9", + "name_A10", + "name_B10", + "name_C10", + "name_D10", + "name_E10", + "name_F10", + "name_G10", + "name_H10", + "name_A11", + "name_B11", + "name_C11", + "name_D11", + "name_E11", + "name_F11", + "name_G11", + "name_H11", + "name_A12", + "name_B12", + "name_C12", + "name_D12", + "name_E12", + "name_F12", + "name_G12", + "name_H12" + ], + "parent": "PRCXI_Deck", + "type": "container", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_rack", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": { + "Material": { + "uuid": "068b3815e36b4a72a59bae017011b29f", + "Code": "ZX-001-10+", + "Name": "10μL加长 Tip头" + } + } + }, + { + "id": "name_A1", + "name": "name_A1", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 13.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B1", + "name": "name_B1", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 13.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C1", + "name": "name_C1", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 13.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D1", + "name": "name_D1", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 13.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E1", + "name": "name_E1", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 13.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F1", + "name": "name_F1", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 13.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G1", + "name": "name_G1", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 13.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H1", + "name": "name_H1", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 13.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A2", + "name": "name_A2", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 22.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B2", + "name": "name_B2", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 22.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C2", + "name": "name_C2", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 22.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D2", + "name": "name_D2", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 22.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E2", + "name": "name_E2", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 22.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F2", + "name": "name_F2", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 22.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G2", + "name": "name_G2", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 22.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H2", + "name": "name_H2", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 22.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A3", + "name": "name_A3", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 31.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B3", + "name": "name_B3", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 31.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C3", + "name": "name_C3", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 31.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D3", + "name": "name_D3", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 31.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E3", + "name": "name_E3", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 31.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F3", + "name": "name_F3", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 31.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G3", + "name": "name_G3", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 31.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H3", + "name": "name_H3", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 31.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A4", + "name": "name_A4", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 40.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B4", + "name": "name_B4", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 40.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C4", + "name": "name_C4", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 40.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D4", + "name": "name_D4", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 40.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E4", + "name": "name_E4", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 40.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F4", + "name": "name_F4", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 40.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G4", + "name": "name_G4", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 40.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H4", + "name": "name_H4", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 40.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A5", + "name": "name_A5", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 49.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B5", + "name": "name_B5", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 49.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C5", + "name": "name_C5", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 49.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D5", + "name": "name_D5", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 49.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E5", + "name": "name_E5", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 49.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F5", + "name": "name_F5", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 49.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G5", + "name": "name_G5", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 49.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H5", + "name": "name_H5", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 49.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A6", + "name": "name_A6", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 58.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B6", + "name": "name_B6", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 58.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C6", + "name": "name_C6", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 58.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D6", + "name": "name_D6", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 58.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E6", + "name": "name_E6", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 58.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F6", + "name": "name_F6", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 58.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G6", + "name": "name_G6", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 58.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H6", + "name": "name_H6", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 58.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A7", + "name": "name_A7", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 67.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B7", + "name": "name_B7", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 67.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C7", + "name": "name_C7", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 67.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D7", + "name": "name_D7", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 67.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E7", + "name": "name_E7", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 67.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F7", + "name": "name_F7", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 67.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G7", + "name": "name_G7", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 67.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H7", + "name": "name_H7", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 67.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A8", + "name": "name_A8", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 76.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B8", + "name": "name_B8", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 76.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C8", + "name": "name_C8", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 76.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D8", + "name": "name_D8", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 76.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E8", + "name": "name_E8", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 76.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F8", + "name": "name_F8", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 76.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G8", + "name": "name_G8", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 76.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H8", + "name": "name_H8", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 76.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A9", + "name": "name_A9", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 85.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B9", + "name": "name_B9", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 85.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C9", + "name": "name_C9", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 85.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D9", + "name": "name_D9", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 85.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E9", + "name": "name_E9", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 85.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F9", + "name": "name_F9", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 85.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G9", + "name": "name_G9", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 85.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H9", + "name": "name_H9", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 85.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A10", + "name": "name_A10", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 94.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B10", + "name": "name_B10", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 94.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C10", + "name": "name_C10", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 94.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D10", + "name": "name_D10", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 94.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E10", + "name": "name_E10", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 94.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F10", + "name": "name_F10", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 94.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G10", + "name": "name_G10", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 94.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H10", + "name": "name_H10", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 94.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A11", + "name": "name_A11", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 103.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B11", + "name": "name_B11", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 103.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C11", + "name": "name_C11", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 103.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D11", + "name": "name_D11", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 103.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E11", + "name": "name_E11", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 103.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F11", + "name": "name_F11", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 103.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G11", + "name": "name_G11", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 103.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H11", + "name": "name_H11", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 103.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_A12", + "name": "name_A12", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 112.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_B12", + "name": "name_B12", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 112.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_C12", + "name": "name_C12", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 112.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_D12", + "name": "name_D12", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 112.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_E12", + "name": "name_E12", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 112.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_F12", + "name": "name_F12", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 112.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_G12", + "name": "name_G12", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 112.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "name_H12", + "name": "name_H12", + "sample_id": null, + "children": [], + "parent": "RackT8", + "type": "container", + "class": "", + "position": { + "x": 112.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 2.312, + "size_y": 2.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": null, + "tip_state": null, + "pending_tip": null + } + }, + { + "id": "container_for_nothing5", + "name": "container_for_nothing5", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "container_for_nothing6", + "name": "container_for_nothing6", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "PlateT11", + "name": "PlateT11", + "sample_id": null, + "children": [ + "PlateT11_A1", + "PlateT11_B1", + "PlateT11_C1", + "PlateT11_D1", + "PlateT11_E1", + "PlateT11_F1", + "PlateT11_G1", + "PlateT11_H1", + "PlateT11_A2", + "PlateT11_B2", + "PlateT11_C2", + "PlateT11_D2", + "PlateT11_E2", + "PlateT11_F2", + "PlateT11_G2", + "PlateT11_H2", + "PlateT11_A3", + "PlateT11_B3", + "PlateT11_C3", + "PlateT11_D3", + "PlateT11_E3", + "PlateT11_F3", + "PlateT11_G3", + "PlateT11_H3", + "PlateT11_A4", + "PlateT11_B4", + "PlateT11_C4", + "PlateT11_D4", + "PlateT11_E4", + "PlateT11_F4", + "PlateT11_G4", + "PlateT11_H4", + "PlateT11_A5", + "PlateT11_B5", + "PlateT11_C5", + "PlateT11_D5", + "PlateT11_E5", + "PlateT11_F5", + "PlateT11_G5", + "PlateT11_H5", + "PlateT11_A6", + "PlateT11_B6", + "PlateT11_C6", + "PlateT11_D6", + "PlateT11_E6", + "PlateT11_F6", + "PlateT11_G6", + "PlateT11_H6", + "PlateT11_A7", + "PlateT11_B7", + "PlateT11_C7", + "PlateT11_D7", + "PlateT11_E7", + "PlateT11_F7", + "PlateT11_G7", + "PlateT11_H7", + "PlateT11_A8", + "PlateT11_B8", + "PlateT11_C8", + "PlateT11_D8", + "PlateT11_E8", + "PlateT11_F8", + "PlateT11_G8", + "PlateT11_H8", + "PlateT11_A9", + "PlateT11_B9", + "PlateT11_C9", + "PlateT11_D9", + "PlateT11_E9", + "PlateT11_F9", + "PlateT11_G9", + "PlateT11_H9", + "PlateT11_A10", + "PlateT11_B10", + "PlateT11_C10", + "PlateT11_D10", + "PlateT11_E10", + "PlateT11_F10", + "PlateT11_G10", + "PlateT11_H10", + "PlateT11_A11", + "PlateT11_B11", + "PlateT11_C11", + "PlateT11_D11", + "PlateT11_E11", + "PlateT11_F11", + "PlateT11_G11", + "PlateT11_H11", + "PlateT11_A12", + "PlateT11_B12", + "PlateT11_C12", + "PlateT11_D12", + "PlateT11_E12", + "PlateT11_F12", + "PlateT11_G12", + "PlateT11_H12" + ], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": { + "Material": { + "uuid": "57b1e4711e9e4a32b529f3132fc5931f" + } + } + }, + { + "id": "PlateT11_A1", + "name": "PlateT11_A1", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + "Water", + 100 + ] + ], + "pending_liquids": [ + [ + "Water", + 100 + ] + ], + "liquid_history": [ + "Water" + ] + } + }, + { + "id": "PlateT11_B1", + "name": "PlateT11_B1", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C1", + "name": "PlateT11_C1", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D1", + "name": "PlateT11_D1", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E1", + "name": "PlateT11_E1", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F1", + "name": "PlateT11_F1", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G1", + "name": "PlateT11_G1", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H1", + "name": "PlateT11_H1", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 11.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A2", + "name": "PlateT11_A2", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + "Water", + 100 + ] + ], + "pending_liquids": [ + [ + "Water", + 100 + ] + ], + "liquid_history": [ + "Water" + ] + } + }, + { + "id": "PlateT11_B2", + "name": "PlateT11_B2", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C2", + "name": "PlateT11_C2", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D2", + "name": "PlateT11_D2", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E2", + "name": "PlateT11_E2", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F2", + "name": "PlateT11_F2", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G2", + "name": "PlateT11_G2", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H2", + "name": "PlateT11_H2", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 20.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A3", + "name": "PlateT11_A3", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + "Water", + 100 + ] + ], + "pending_liquids": [ + [ + "Water", + 100 + ] + ], + "liquid_history": [ + "Water" + ] + } + }, + { + "id": "PlateT11_B3", + "name": "PlateT11_B3", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C3", + "name": "PlateT11_C3", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D3", + "name": "PlateT11_D3", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E3", + "name": "PlateT11_E3", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F3", + "name": "PlateT11_F3", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G3", + "name": "PlateT11_G3", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H3", + "name": "PlateT11_H3", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 29.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A4", + "name": "PlateT11_A4", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + "Water", + 100 + ] + ], + "pending_liquids": [ + [ + "Water", + 100 + ] + ], + "liquid_history": [ + "Water" + ] + } + }, + { + "id": "PlateT11_B4", + "name": "PlateT11_B4", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C4", + "name": "PlateT11_C4", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D4", + "name": "PlateT11_D4", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E4", + "name": "PlateT11_E4", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F4", + "name": "PlateT11_F4", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G4", + "name": "PlateT11_G4", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H4", + "name": "PlateT11_H4", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 38.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A5", + "name": "PlateT11_A5", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + "Water", + 100 + ] + ], + "pending_liquids": [ + [ + "Water", + 100 + ] + ], + "liquid_history": [ + "Water" + ] + } + }, + { + "id": "PlateT11_B5", + "name": "PlateT11_B5", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C5", + "name": "PlateT11_C5", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D5", + "name": "PlateT11_D5", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E5", + "name": "PlateT11_E5", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F5", + "name": "PlateT11_F5", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G5", + "name": "PlateT11_G5", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H5", + "name": "PlateT11_H5", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 47.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A6", + "name": "PlateT11_A6", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + "Water", + 100 + ] + ], + "pending_liquids": [ + [ + "Water", + 100 + ] + ], + "liquid_history": [ + "Water" + ] + } + }, + { + "id": "PlateT11_B6", + "name": "PlateT11_B6", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C6", + "name": "PlateT11_C6", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D6", + "name": "PlateT11_D6", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E6", + "name": "PlateT11_E6", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F6", + "name": "PlateT11_F6", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G6", + "name": "PlateT11_G6", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H6", + "name": "PlateT11_H6", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 56.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A7", + "name": "PlateT11_A7", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_B7", + "name": "PlateT11_B7", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C7", + "name": "PlateT11_C7", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D7", + "name": "PlateT11_D7", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E7", + "name": "PlateT11_E7", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F7", + "name": "PlateT11_F7", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G7", + "name": "PlateT11_G7", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H7", + "name": "PlateT11_H7", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 65.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A8", + "name": "PlateT11_A8", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_B8", + "name": "PlateT11_B8", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C8", + "name": "PlateT11_C8", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D8", + "name": "PlateT11_D8", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E8", + "name": "PlateT11_E8", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F8", + "name": "PlateT11_F8", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G8", + "name": "PlateT11_G8", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H8", + "name": "PlateT11_H8", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 74.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A9", + "name": "PlateT11_A9", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_B9", + "name": "PlateT11_B9", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C9", + "name": "PlateT11_C9", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D9", + "name": "PlateT11_D9", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E9", + "name": "PlateT11_E9", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F9", + "name": "PlateT11_F9", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G9", + "name": "PlateT11_G9", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H9", + "name": "PlateT11_H9", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 83.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A10", + "name": "PlateT11_A10", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_B10", + "name": "PlateT11_B10", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C10", + "name": "PlateT11_C10", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D10", + "name": "PlateT11_D10", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E10", + "name": "PlateT11_E10", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F10", + "name": "PlateT11_F10", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G10", + "name": "PlateT11_G10", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H10", + "name": "PlateT11_H10", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 92.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A11", + "name": "PlateT11_A11", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_B11", + "name": "PlateT11_B11", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C11", + "name": "PlateT11_C11", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D11", + "name": "PlateT11_D11", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E11", + "name": "PlateT11_E11", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F11", + "name": "PlateT11_F11", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G11", + "name": "PlateT11_G11", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H11", + "name": "PlateT11_H11", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 101.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_A12", + "name": "PlateT11_A12", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 71.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_B12", + "name": "PlateT11_B12", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 62.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_C12", + "name": "PlateT11_C12", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 53.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_D12", + "name": "PlateT11_D12", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 44.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_E12", + "name": "PlateT11_E12", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 35.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_F12", + "name": "PlateT11_F12", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 26.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_G12", + "name": "PlateT11_G12", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 17.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "PlateT11_H12", + "name": "PlateT11_H12", + "sample_id": null, + "children": [], + "parent": "PlateT11", + "type": "well", + "class": "", + "position": { + "x": 110.9545, + "y": 8.8145, + "z": 3.55 + }, + "config": { + "type": "Well", + "size_x": 4.851, + "size_y": 4.851, + "size_z": 10.67, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "well", + "model": null, + "barcode": null, + "max_volume": 360, + "material_z_thickness": null, + "compute_volume_from_height": null, + "compute_height_from_volume": null, + "bottom_type": "unknown", + "cross_section_type": "circle" + }, + "data": { + "liquids": [ + [ + null, + 100 + ] + ], + "pending_liquids": [ + [ + null, + 100 + ] + ], + "liquid_history": [ + null + ] + } + }, + { + "id": "container_for_nothing7", + "name": "container_for_nothing7", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "container_for_nothing8", + "name": "container_for_nothing8", + "sample_id": null, + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 50, + "size_y": 50, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + } +] \ No newline at end of file diff --git a/unilabos/devices/liquid_handling/prcxi/prcxi.py b/unilabos/devices/liquid_handling/prcxi/prcxi.py new file mode 100644 index 0000000..2f13242 --- /dev/null +++ b/unilabos/devices/liquid_handling/prcxi/prcxi.py @@ -0,0 +1,1403 @@ +import asyncio +import collections +import contextlib +import json +import socket +import time +from typing import Any, List, Dict, Optional, TypedDict, Union, Sequence, Iterator, Literal + +from pylabrobot.liquid_handling import ( + LiquidHandlerBackend, + Pickup, + SingleChannelAspiration, + Drop, + SingleChannelDispense, + PickupTipRack, + DropTipRack, + MultiHeadAspirationPlate, ChatterBoxBackend, LiquidHandlerChatterboxBackend, +) +from pylabrobot.liquid_handling.standard import ( + MultiHeadAspirationContainer, + MultiHeadDispenseContainer, + MultiHeadDispensePlate, + ResourcePickup, + ResourceMove, + ResourceDrop, +) +from pylabrobot.resources import Tip, Deck, Plate, Well, TipRack, Resource, Container, Coordinate, TipSpot, Trash + +from unilabos.devices.liquid_handling.liquid_handler_abstract import LiquidHandlerAbstract + + +class PRCXIError(RuntimeError): + """Lilith 返回 Success=false 时抛出的业务异常""" + + +class Material(TypedDict): # 和Plate同关系 + uuid: str + Code: Optional[str] + Name: Optional[str] + SummaryName: Optional[str] + PipetteHeight: Optional[int] + materialEnum: Optional[int] + + +class WorkTablets(TypedDict): + Number: int + Code: str + Material: Dict[str, Any] + + +class MatrixInfo(TypedDict): + MatrixId: str + MatrixName: str + MatrixCount: int + WorkTablets: list[WorkTablets] + + +class PRCXI9300Deck(Deck): + """PRCXI 9300 的专用 Deck 类,继承自 Deck。 + + 该类定义了 PRCXI 9300 的工作台布局和槽位信息。 + """ + + def __init__(self, name: str, size_x: float, size_y: float, size_z: float): + super().__init__(name, size_x, size_y, size_z) + self.slots = [None] * 6 # PRCXI 9300 有 6 个槽位 + + +class PRCXI9300Container(Plate, TipRack): + """PRCXI 9300 的专用 Deck 类,继承自 Deck。 + + 该类定义了 PRCXI 9300 的工作台布局和槽位信息。 + """ + + def __init__(self, name: str, size_x: float, size_y: float, size_z: float, category: str, ordering: collections.OrderedDict, model: Optional[str] = None,): + super().__init__(name, size_x, size_y, size_z, category=category, ordering=ordering, model=model) + self._unilabos_state = {} + + def load_state(self, state: Dict[str, Any]) -> None: + """从给定的状态加载工作台信息。""" + super().load_state(state) + self._unilabos_state = state + + def serialize_state(self) -> Dict[str, Dict[str, Any]]: + data = super().serialize_state() + data.update(self._unilabos_state) + return data + + +class PRCXI9300Trash(Trash): + """PRCXI 9300 的专用 Trash 类,继承自 Trash。 + + 该类定义了 PRCXI 9300 的工作台布局和槽位信息。 + """ + + def __init__(self, name: str, size_x: float, size_y: float, size_z: float, category: str, **kwargs): + if name != "trash": + name = "trash" + print("PRCXI9300Trash name must be 'trash', using 'trash' instead.") + super().__init__(name, size_x, size_y, size_z, category=category, **kwargs) + self._unilabos_state = {} + + def load_state(self, state: Dict[str, Any]) -> None: + """从给定的状态加载工作台信息。""" + #super().load_state(state) + self._unilabos_state = state + + def serialize_state(self) -> Dict[str, Dict[str, Any]]: + data = super().serialize_state() + data.update(self._unilabos_state) + return data + +class PRCXI9300Handler(LiquidHandlerAbstract): + support_touch_tip = False + + @property + def reset_ok(self) -> bool: + """检查设备是否已重置成功。""" + if self._unilabos_backend.debug: + return True + return self._unilabos_backend.is_reset_ok + + def __init__(self, deck: Deck, host: str, port: int, timeout: float, channel_num=8, axis="Left", setup=True, debug=False, simulator=False, matrix_id=""): + tablets_info = [] + count = 0 + for child in deck.children: + if "Material" in child._unilabos_state: + count += 1 + tablets_info.append( + WorkTablets(Number=count, Code=f"T{count}", Material=child._unilabos_state["Material"]) + ) + self._unilabos_backend = PRCXI9300Backend(tablets_info, host, port, timeout, channel_num, axis, setup, debug, matrix_id) + super().__init__(backend=self._unilabos_backend, deck=deck, simulator=simulator, channel_num=channel_num) + + def set_liquid(self, wells: list[Well], liquid_names: list[str], volumes: list[float]): + return super().set_liquid(wells, liquid_names, volumes) + + async def create_protocol( + self, + protocol_name: str = "", + protocol_description: str = "", + protocol_version: str = "", + protocol_author: str = "", + protocol_date: str = "", + protocol_type: str = "", + none_keys: List[str] = [], + ): + self._unilabos_backend.create_protocol(protocol_name) + + async def run_protocol(self): + return self._unilabos_backend.run_protocol() + + async def remove_liquid( + self, + vols: List[float], + sources: Sequence[Container], + waste_liquid: Optional[Container] = None, + *, + use_channels: Optional[List[int]] = None, + flow_rates: Optional[List[Optional[float]]] = None, + offsets: Optional[List[Coordinate]] = None, + liquid_height: Optional[List[Optional[float]]] = None, + blow_out_air_volume: Optional[List[Optional[float]]] = None, + spread: Optional[Literal["wide", "tight", "custom"]] = "wide", + delays: Optional[List[int]] = None, + is_96_well: Optional[bool] = False, + top: Optional[List[float]] = None, + none_keys: List[str] = [], + ): + return await super().remove_liquid( + vols, + sources, + waste_liquid, + use_channels=use_channels, + flow_rates=flow_rates, + offsets=offsets, + liquid_height=liquid_height, + blow_out_air_volume=blow_out_air_volume, + spread=spread, + delays=delays, + is_96_well=is_96_well, + top=top, + none_keys=none_keys, + ) + + async def add_liquid( + self, + asp_vols: Union[List[float], float], + dis_vols: Union[List[float], float], + reagent_sources: Sequence[Container], + targets: Sequence[Container], + *, + use_channels: Optional[List[int]] = None, + flow_rates: Optional[List[Optional[float]]] = None, + offsets: Optional[List[Coordinate]] = None, + liquid_height: Optional[List[Optional[float]]] = None, + blow_out_air_volume: Optional[List[Optional[float]]] = None, + spread: Optional[Literal["wide", "tight", "custom"]] = "wide", + is_96_well: bool = False, + delays: Optional[List[int]] = None, + mix_time: Optional[int] = None, + mix_vol: Optional[int] = None, + mix_rate: Optional[int] = None, + mix_liquid_height: Optional[float] = None, + none_keys: List[str] = [], + ): + return await super().add_liquid( + asp_vols, + dis_vols, + reagent_sources, + targets, + use_channels=use_channels, + flow_rates=flow_rates, + offsets=offsets, + liquid_height=liquid_height, + blow_out_air_volume=blow_out_air_volume, + spread=spread, + is_96_well=is_96_well, + delays=delays, + mix_time=mix_time, + mix_vol=mix_vol, + mix_rate=mix_rate, + mix_liquid_height=mix_liquid_height, + none_keys=none_keys, + ) + + async def transfer_liquid( + self, + sources: Sequence[Container], + targets: Sequence[Container], + tip_racks: Sequence[TipRack], + *, + use_channels: Optional[List[int]] = None, + asp_vols: Union[List[float], float], + dis_vols: Union[List[float], float], + asp_flow_rates: Optional[List[Optional[float]]] = None, + dis_flow_rates: Optional[List[Optional[float]]] = None, + offsets: Optional[List[Coordinate]] = None, + touch_tip: bool = False, + liquid_height: Optional[List[Optional[float]]] = None, + blow_out_air_volume: Optional[List[Optional[float]]] = None, + spread: Literal["wide", "tight", "custom"] = "wide", + is_96_well: bool = False, + mix_stage: Optional[Literal["none", "before", "after", "both"]] = "none", + mix_times: Optional[List[int]] = None, + mix_vol: Optional[int] = None, + mix_rate: Optional[int] = None, + mix_liquid_height: Optional[float] = None, + delays: Optional[List[int]] = None, + none_keys: List[str] = [], + ): + return await super().transfer_liquid( + sources, + targets, + tip_racks, + use_channels=use_channels, + asp_vols=asp_vols, + dis_vols=dis_vols, + asp_flow_rates=asp_flow_rates, + dis_flow_rates=dis_flow_rates, + offsets=offsets, + touch_tip=touch_tip, + liquid_height=liquid_height, + blow_out_air_volume=blow_out_air_volume, + spread=spread, + is_96_well=is_96_well, + mix_stage=mix_stage, + mix_times=mix_times, + mix_vol=mix_vol, + mix_rate=mix_rate, + mix_liquid_height=mix_liquid_height, + delays=delays, + none_keys=none_keys, + ) + + async def custom_delay(self, seconds=0, msg=None): + return await super().custom_delay(seconds, msg) + + async def touch_tip(self, targets: Sequence[Container]): + return await super().touch_tip(targets) + + async def mix( + self, + targets: Sequence[Container], + mix_time: int = None, + mix_vol: Optional[int] = None, + height_to_bottom: Optional[float] = None, + offsets: Optional[Coordinate] = None, + mix_rate: Optional[float] = None, + none_keys: List[str] = [], + ): + return await self._unilabos_backend.mix(targets, mix_time, mix_vol, height_to_bottom, offsets, mix_rate, none_keys) + + def iter_tips(self, tip_racks: Sequence[TipRack]) -> Iterator[Resource]: + return super().iter_tips(tip_racks) + + async def pick_up_tips(self, tip_spots: List[TipSpot], use_channels: Optional[List[int]] = None, + offsets: Optional[List[Coordinate]] = None, **backend_kwargs): + return await super().pick_up_tips(tip_spots, use_channels, offsets, **backend_kwargs) + + async def aspirate(self, resources: Sequence[Container], vols: List[float], + use_channels: Optional[List[int]] = None, flow_rates: Optional[List[Optional[float]]] = None, + offsets: Optional[List[Coordinate]] = None, + liquid_height: Optional[List[Optional[float]]] = None, + blow_out_air_volume: Optional[List[Optional[float]]] = None, + spread: Literal["wide", "tight", "custom"] = "wide", **backend_kwargs): + + return await super().aspirate(resources, vols, use_channels, flow_rates, offsets, liquid_height, + blow_out_air_volume, spread, **backend_kwargs) + + async def drop_tips(self, tip_spots: Sequence[Union[TipSpot, Trash]], use_channels: Optional[List[int]] = None, + offsets: Optional[List[Coordinate]] = None, allow_nonzero_volume: bool = False, + **backend_kwargs): + return await super().drop_tips(tip_spots, use_channels, offsets, allow_nonzero_volume, **backend_kwargs) + + async def dispense(self, resources: Sequence[Container], vols: List[float], + use_channels: Optional[List[int]] = None, flow_rates: Optional[List[Optional[float]]] = None, + offsets: Optional[List[Coordinate]] = None, + liquid_height: Optional[List[Optional[float]]] = None, + blow_out_air_volume: Optional[List[Optional[float]]] = None, + spread: Literal["wide", "tight", "custom"] = "wide", **backend_kwargs): + return await super().dispense(resources, vols, use_channels, flow_rates, offsets, liquid_height, + blow_out_air_volume, spread, **backend_kwargs) + + async def discard_tips(self, use_channels: Optional[List[int]] = None, allow_nonzero_volume: bool = True, + offsets: Optional[List[Coordinate]] = None, **backend_kwargs): + return await super().discard_tips(use_channels, allow_nonzero_volume, offsets, **backend_kwargs) + + def set_tiprack(self, tip_racks: Sequence[TipRack]): + super().set_tiprack(tip_racks) + + async def move_to(self, well: Well, dis_to_top: float = 0, channel: int = 0): + return await super().move_to(well, dis_to_top, channel) + + +class PRCXI9300Backend(LiquidHandlerBackend): + """PRCXI 9300 的后端实现,继承自 LiquidHandlerBackend。 + + 该类提供了与 PRCXI 9300 设备进行通信的基本方法,包括方案管理、自动化控制、运行状态查询等。 + """ + + _num_channels = 8 # 默认通道数为 8 + _is_reset_ok = False + + @property + def is_reset_ok(self) -> bool: + self._is_reset_ok = self.api_client.get_reset_status() + return self._is_reset_ok + + matrix_info: MatrixInfo + protocol_name: str + steps_todo_list = [] + + def __init__( + self, + tablets_info: list[WorkTablets], + host: str = "127.0.0.1", + port: int = 9999, + timeout: float = 10.0, + channel_num: int=8, + axis: str="Left", + setup=True, + debug=False, + matrix_id="", + ) -> None: + super().__init__() + self.tablets_info = tablets_info + self.matrix_id = matrix_id + self.api_client = PRCXI9300Api(host, port, timeout, axis, debug) + self.host, self.port, self.timeout = host, port, timeout + self._num_channels = channel_num + self._execute_setup = setup + self.debug = debug + + def create_protocol(self, protocol_name): + self.protocol_name = protocol_name + self.steps_todo_list = [] + + def run_protocol(self): + assert self.is_reset_ok, "PRCXI9300Backend is not reset successfully. Please call setup() first." + run_time = time.time() + self.matrix_info = MatrixInfo( + MatrixId=f"{int(run_time)}", + MatrixName=f"protocol_{run_time}", + MatrixCount=len(self.tablets_info), + WorkTablets=self.tablets_info, + ) + #print(json.dumps(self.matrix_info, indent=2)) + if not len(self.matrix_id): + res = self.api_client.add_WorkTablet_Matrix(self.matrix_info) + assert res["Success"], f"Failed to create matrix: {res.get('Message', 'Unknown error')}" + print(f"PRCXI9300Backend created matrix with ID: {self.matrix_info['MatrixId']}, result: {res}") + solution_id = self.api_client.add_solution( + f"protocol_{run_time}", self.matrix_info["MatrixId"], self.steps_todo_list + ) + else: + print(f"PRCXI9300Backend using predefined worktable {self.matrix_id}, skipping matrix creation.") + solution_id = self.api_client.add_solution( + f"protocol_{run_time}", self.matrix_id, self.steps_todo_list + ) + print(f"PRCXI9300Backend created solution with ID: {solution_id}") + self.api_client.load_solution(solution_id) + return self.api_client.start() + + @classmethod + def check_channels(cls, use_channels: List[int]) -> List[int]: + """检查通道是否符合要求,PRCXI9300Backend 只支持所有 8 个通道。""" + if use_channels != [0, 1, 2, 3, 4, 5, 6, 7]: + print("PRCXI9300Backend only supports all 8 channels, using default [0, 1, 2, 3, 4, 5, 6, 7].") + return [0, 1, 2, 3, 4, 5, 6, 7] + return use_channels + + async def setup(self): + await super().setup() + try: + if self._execute_setup: + self.api_client.call("IAutomation", "Reset") + while not self.is_reset_ok: + print("Waiting for PRCXI9300 to reset...") + await asyncio.sleep(1) + print("PRCXI9300 reset successfully.") + except ConnectionRefusedError as e: + raise RuntimeError( + f"Failed to connect to PRCXI9300 API at {self.host}:{self.port}. " + "Please ensure the PRCXI9300 service is running." + ) from e + + async def stop(self): + self.api_client.call("IAutomation", "Stop") + + async def pick_up_tips(self, ops: List[Pickup], use_channels: List[int] = None): + """Pick up tips from the specified resource.""" + + plate_indexes = [] + for op in ops: + plate = op.resource.parent + deck = plate.parent + plate_index = deck.children.index(plate) + print(f"Plate index: {plate_index}, Plate name: {plate.name}") + print(f"Number of children in deck: {len(deck.children)}") + + plate_indexes.append(plate_index) + + if len(set(plate_indexes)) != 1: + raise ValueError("All pickups must be from the same plate. Found different plates: " + str(plate_indexes)) + + tip_columns = [] + for op in ops: + tipspot = op.resource + tipspot_index = tipspot.parent.children.index(tipspot) + tip_columns.append(tipspot_index // 8) + if len(set(tip_columns)) != 1: + raise ValueError("All pickups must be from the same tip column. Found different columns: " + str(tip_columns)) + # print('111'*99) + # print(plate_indexes[0]) + PlateNo = plate_indexes[0] + 1 + hole_col = tip_columns[0] + 1 + hole_row = 1 + if self._num_channels == 1: + hole_row = tipspot_index % 8 + 1 + + step = self.api_client.Load(dosage=0, plate_no=PlateNo, is_whole_plate=False, hole_row=hole_row, hole_col=hole_col, + blending_times=0, balance_height=0, plate_or_hole=f"H{hole_col}-8,T{PlateNo}", + hole_numbers="1,2,3,4,5,6,7,8") + self.steps_todo_list.append(step) + + async def drop_tips(self, ops: List[Drop], use_channels: List[int] = None): + """Pick up tips from the specified resource.""" + + # 检查trash # + if ops[0].resource.name == "trash": + + PlateNo = ops[0].resource.parent.children.index(ops[0].resource) + 1 + + step = self.api_client.UnLoad( + dosage=0, + plate_no=PlateNo, + is_whole_plate=False, + hole_row=1, + hole_col=3, + blending_times=0, + balance_height=0, + plate_or_hole=f"H{1}-8,T{PlateNo}", + hole_numbers="1,2,3,4,5,6,7,8", + ) + self.steps_todo_list.append(step) + return + #print(ops[0].resource.parent.children.index(ops[0].resource)) + + + plate_indexes = [] + for op in ops: + plate = op.resource.parent + deck = plate.parent + plate_index = deck.children.index(plate) + plate_indexes.append(plate_index) + if len(set(plate_indexes)) != 1: + raise ValueError("All drop_tips must be from the same plate. Found different plates: " + str(plate_indexes)) + + tip_columns = [] + for op in ops: + tipspot = op.resource + tipspot_index = tipspot.parent.children.index(tipspot) + tip_columns.append(tipspot_index // 8) + if len(set(tip_columns)) != 1: + raise ValueError("All drop_tips must be from the same tip column. Found different columns: " + str(tip_columns)) + + PlateNo = plate_indexes[0] + 1 + hole_col = tip_columns[0] + 1 + + if self.channel_num == 1: + hole_row = tipspot_index % 8 + 1 + + step = self.api_client.UnLoad( + dosage=0, + plate_no=PlateNo, + is_whole_plate=False, + hole_row=hole_row, + hole_col=hole_col, + blending_times=0, + balance_height=0, + plate_or_hole=f"H{hole_col}-8,T{PlateNo}", + hole_numbers="1,2,3,4,5,6,7,8", + ) + self.steps_todo_list.append(step) + + async def mix( + self, + targets: Sequence[Container], + mix_time: int = None, + mix_vol: Optional[int] = None, + height_to_bottom: Optional[float] = None, + offsets: Optional[Coordinate] = None, + mix_rate: Optional[float] = None, + none_keys: List[str] = [], + ): + + """Mix liquid in the specified resources.""" + + plate_indexes = [] + for op in targets: + deck = op.parent.parent + plate = op.parent + plate_index = deck.children.index(plate) + plate_indexes.append(plate_index) + + if len(set(plate_indexes)) != 1: + raise ValueError("All pickups must be from the same plate. Found different plates: " + str(plate_indexes)) + + tip_columns = [] + for op in targets: + tipspot_index = op.parent.children.index(op) + tip_columns.append(tipspot_index // 8) + + if len(set(tip_columns)) != 1: + raise ValueError("All pickups must be from the same tip column. Found different columns: " + str(tip_columns)) + + PlateNo = plate_indexes[0] + 1 + hole_col = tip_columns[0] + 1 + hole_row = 1 + if self.num_channels == 1: + hole_row = tipspot_index % 8 + 1 + + assert mix_time > 0 + step = self.api_client.Blending( + dosage=mix_vol, + plate_no=PlateNo, + is_whole_plate=False, + hole_row=hole_row, + hole_col=hole_col, + blending_times=mix_time, + balance_height=0, + plate_or_hole=f"H{hole_col}-8,T{PlateNo}", + hole_numbers="1,2,3,4,5,6,7,8", + ) + self.steps_todo_list.append(step) + + async def aspirate(self, ops: List[SingleChannelAspiration], use_channels: List[int] = None): + + """Aspirate liquid from the specified resources.""" + + plate_indexes = [] + for op in ops: + plate = op.resource.parent + deck = plate.parent + plate_index = deck.children.index(plate) + plate_indexes.append(plate_index) + + if len(set(plate_indexes)) != 1: + raise ValueError("All pickups must be from the same plate. Found different plates: " + str(plate_indexes)) + + tip_columns = [] + for op in ops: + tipspot = op.resource + tipspot_index = tipspot.parent.children.index(tipspot) + tip_columns.append(tipspot_index // 8) + + if len(set(tip_columns)) != 1: + raise ValueError("All pickups must be from the same tip column. Found different columns: " + str(tip_columns)) + + volumes = [op.volume for op in ops] + if len(set(volumes)) != 1: + raise ValueError("All aspirate volumes must be the same. Found different volumes: " + str(volumes)) + + PlateNo = plate_indexes[0] + 1 + hole_col = tip_columns[0] + 1 + hole_row = 1 + if self.num_channels == 1: + hole_row = tipspot_index % 8 + 1 + + step = self.api_client.Imbibing(dosage=int(volumes[0]), plate_no=PlateNo, is_whole_plate=False, hole_row=hole_row, + hole_col=hole_col, blending_times=0, balance_height=0, + plate_or_hole=f"H{hole_col}-8,T{PlateNo}", hole_numbers="1,2,3,4,5,6,7,8") + self.steps_todo_list.append(step) + + + + async def dispense(self, ops: List[SingleChannelDispense], use_channels: List[int] = None): + + """Dispense liquid into the specified resources.""" + + plate_indexes = [] + for op in ops: + plate = op.resource.parent + deck = plate.parent + plate_index = deck.children.index(plate) + plate_indexes.append(plate_index) + + if len(set(plate_indexes)) != 1: + raise ValueError("All dispense must be from the same plate. Found different plates: " + str(plate_indexes)) + + tip_columns = [] + for op in ops: + tipspot = op.resource + tipspot_index = tipspot.parent.children.index(tipspot) + tip_columns.append(tipspot_index // 8) + + if len(set(tip_columns)) != 1: + raise ValueError("All dispense must be from the same tip column. Found different columns: " + str(tip_columns)) + + volumes = [op.volume for op in ops] + if len(set(volumes)) != 1: + raise ValueError("All dispense volumes must be the same. Found different volumes: " + str(volumes)) + + PlateNo = plate_indexes[0] + 1 + hole_col = tip_columns[0] + 1 + + hole_row = 1 + if self.num_channels == 1: + hole_row = tipspot_index % 8 + 1 + + step = self.api_client.Tapping( + dosage=int(volumes[0]), + plate_no=PlateNo, + is_whole_plate=False, + hole_row=hole_row, + hole_col=hole_col, + blending_times=0, + balance_height=0, + plate_or_hole=f"H{hole_col}-8,T{PlateNo}", + hole_numbers="1,2,3,4,5,6,7,8", + ) + self.steps_todo_list.append(step) + + async def pick_up_tips96(self, pickup: PickupTipRack): + raise NotImplementedError("The PRCXI backend does not support the 96 head.") + + async def drop_tips96(self, drop: DropTipRack): + raise NotImplementedError("The PRCXI backend does not support the 96 head.") + + async def aspirate96(self, aspiration: Union[MultiHeadAspirationPlate, MultiHeadAspirationContainer]): + raise NotImplementedError("The Opentrons backend does not support the 96 head.") + + async def dispense96(self, dispense: Union[MultiHeadDispensePlate, MultiHeadDispenseContainer]): + raise NotImplementedError("The Opentrons backend does not support the 96 head.") + + async def pick_up_resource(self, pickup: ResourcePickup): + raise NotImplementedError("The Opentrons backend does not support the robotic arm.") + + async def move_picked_up_resource(self, move: ResourceMove): + raise NotImplementedError("The Opentrons backend does not support the robotic arm.") + + async def drop_resource(self, drop: ResourceDrop): + raise NotImplementedError("The Opentrons backend does not support the robotic arm.") + + def can_pick_up_tip(self, channel_idx: int, tip: Tip) -> bool: + return True # PRCXI9300Backend does not have tip compatibility issues + + def serialize(self) -> dict: + raise NotImplementedError() + + @property + def num_channels(self) -> int: + return self._num_channels + + +class PRCXI9300Api: + def __init__(self, host: str = "127.0.0.1", port: int = 9999, timeout: float = 10.0, axis="Left", debug: bool = False) -> None: + self.host, self.port, self.timeout = host, port, timeout + self.debug = debug + self.axis = axis + + @staticmethod + def _len_prefix(n: int) -> bytes: + return bytes.fromhex(format(n, "016x")) + + def _raw_request(self, payload: str) -> str: + if self.debug: + return " " + with contextlib.closing(socket.socket()) as sock: + sock.settimeout(self.timeout) + sock.connect((self.host, self.port)) + data = payload.encode() + sock.sendall(self._len_prefix(len(data)) + data) + + chunks, first = [], True + while True: + chunk = sock.recv(4096) + if not chunk: + break + if first: + chunk, first = chunk[8:], False + chunks.append(chunk) + return b"".join(chunks).decode() + + # ---------------------------------------------------- 方案相关(ISolution) + def list_solutions(self) -> List[Dict[str, Any]]: + """GetSolutionList""" + return self.call("ISolution", "GetSolutionList") + + def load_solution(self, solution_id: str) -> bool: + """LoadSolution""" + return self.call("ISolution", "LoadSolution", [solution_id]) + + def add_solution(self, name: str, matrix_id: str, steps: List[Dict[str, Any]]) -> str: + """AddSolution → 返回新方案 GUID""" + return self.call("ISolution", "AddSolution", [name, matrix_id, steps]) + + # ---------------------------------------------------- 自动化控制(IAutomation) + def start(self) -> bool: + return self.call("IAutomation", "Start") + + def call(self, service: str, method: str, params: Optional[list] = None) -> Any: + payload = json.dumps( + {"ServiceName": service, "MethodName": method, "Paramters": params or []}, separators=(",", ":") + ) + resp = json.loads(self._raw_request(payload)) + if not resp.get("Success", False): + raise PRCXIError(resp.get("Msg", "Unknown error")) + data = resp.get("Data") + try: + return json.loads(data) + except (TypeError, json.JSONDecodeError): + return data + + def pause(self) -> bool: + """Pause""" + return self.call("IAutomation", "Pause") + + def resume(self) -> bool: + """Resume""" + return self.call("IAutomation", "Resume") + + def get_error_code(self) -> Optional[str]: + """GetErrorCode""" + return self.call("IAutomation", "GetErrorCode") + + def get_reset_status(self) -> bool: + """GetErrorCode""" + if self.debug: + return True + res = self.call("IAutomation", "GetResetStatus") + return not res + + def clear_error_code(self) -> bool: + """RemoveErrorCodet""" + return self.call("IAutomation", "RemoveErrorCodet") + + # ---------------------------------------------------- 运行状态(IMachineState) + def step_state_list(self) -> List[Dict[str, Any]]: + """GetStepStateList""" + return self.call("IMachineState", "GetStepStateList") + + def step_status(self, seq_num: int) -> Dict[str, Any]: + """GetStepStatus""" + return self.call("IMachineState", "GetStepStatus", [seq_num]) + + def step_state(self, seq_num: int) -> Dict[str, Any]: + """GetStepState""" + return self.call("IMachineState", "GetStepState", [seq_num]) + + def axis_location(self, axis_num: int = 1) -> Dict[str, Any]: + """GetLocation""" + return self.call("IMachineState", "GetLocation", [axis_num]) + + # ---------------------------------------------------- 版位矩阵(IMatrix) + def list_matrices(self) -> List[Dict[str, Any]]: + """GetWorkTabletMatrices""" + return self.call("IMatrix", "GetWorkTabletMatrices") + + def matrix_by_id(self, matrix_id: str) -> Dict[str, Any]: + """GetWorkTabletMatrixById""" + return self.call("IMatrix", "GetWorkTabletMatrixById", [matrix_id]) + + def add_WorkTablet_Matrix(self, matrix: MatrixInfo): + return self.call("IMatrix", "AddWorkTabletMatrix", [matrix]) + + def Load(self, dosage: int, plate_no: int, is_whole_plate: bool, hole_row: int, hole_col: int, blending_times: int, + balance_height: int, plate_or_hole: str, hole_numbers: str, assist_fun1: str = "", assist_fun2: str = "", + assist_fun3: str = "", assist_fun4: str = "", assist_fun5: str = "", + liquid_method: str = "NormalDispense") -> Dict[str, Any]: + return { + "StepAxis": self.axis, + "Function": "Load", + "DosageNum": dosage, + "PlateNo": plate_no, + "IsWholePlate": is_whole_plate, + "HoleRow": hole_row, + "HoleCol": hole_col, + "BlendingTimes": blending_times, + "BalanceHeight": balance_height, + "PlateOrHoleNum": plate_or_hole, + "AssistFun1": assist_fun1, + "AssistFun2": assist_fun2, + "AssistFun3": assist_fun3, + "AssistFun4": assist_fun4, + "AssistFun5": assist_fun5, + "HoleNumbers": hole_numbers, + "LiquidDispensingMethod": liquid_method, + } + + def Imbibing(self, dosage: int, plate_no: int, is_whole_plate: bool, hole_row: int, hole_col: int, + blending_times: int, balance_height: int, plate_or_hole: str, hole_numbers: str, assist_fun1: str = "", + assist_fun2: str = "", assist_fun3: str = "", assist_fun4: str = "", assist_fun5: str = "", + liquid_method: str = "NormalDispense") -> Dict[str, Any]: + return { + "StepAxis": self.axis, + "Function": "Imbibing", + "DosageNum": dosage, + "PlateNo": plate_no, + "IsWholePlate": is_whole_plate, + "HoleRow": hole_row, + "HoleCol": hole_col, + "BlendingTimes": blending_times, + "BalanceHeight": balance_height, + "PlateOrHoleNum": plate_or_hole, + "AssistFun1": assist_fun1, + "AssistFun2": assist_fun2, + "AssistFun3": assist_fun3, + "AssistFun4": assist_fun4, + "AssistFun5": assist_fun5, + "HoleNumbers": hole_numbers, + "LiquidDispensingMethod": liquid_method, + } + + def Tapping( + self, + dosage: int, + plate_no: int, + is_whole_plate: bool, + hole_row: int, + hole_col: int, + blending_times: int, + balance_height: int, + plate_or_hole: str, + hole_numbers: str, + assist_fun1: str = "", + assist_fun2: str = "", + assist_fun3: str = "", + assist_fun4: str = "", + assist_fun5: str = "", + liquid_method: str = "NormalDispense", + ) -> Dict[str, Any]: + return { + "StepAxis": self.axis, + "Function": "Tapping", + "DosageNum": dosage, + "PlateNo": plate_no, + "IsWholePlate": is_whole_plate, + "HoleRow": hole_row, + "HoleCol": hole_col, + "BlendingTimes": blending_times, + "BalanceHeight": balance_height, + "PlateOrHoleNum": plate_or_hole, + "AssistFun1": assist_fun1, + "AssistFun2": assist_fun2, + "AssistFun3": assist_fun3, + "AssistFun4": assist_fun4, + "AssistFun5": assist_fun5, + "HoleNumbers": hole_numbers, + "LiquidDispensingMethod": liquid_method, + } + + def Blending( + self, + dosage: int, + plate_no: int, + is_whole_plate: bool, + hole_row: int, + hole_col: int, + blending_times: int, + balance_height: int, + plate_or_hole: str, + hole_numbers: str, + assist_fun1: str = "", + assist_fun2: str = "", + assist_fun3: str = "", + assist_fun4: str = "", + assist_fun5: str = "", + liquid_method: str = "NormalDispense", + ) -> Dict[str, Any]: + return { + "StepAxis": self.axis, + "Function": "Blending", + "DosageNum": dosage, + "PlateNo": plate_no, + "IsWholePlate": is_whole_plate, + "HoleRow": hole_row, + "HoleCol": hole_col, + "BlendingTimes": blending_times, + "BalanceHeight": balance_height, + "PlateOrHoleNum": plate_or_hole, + "AssistFun1": assist_fun1, + "AssistFun2": assist_fun2, + "AssistFun3": assist_fun3, + "AssistFun4": assist_fun4, + "AssistFun5": assist_fun5, + "HoleNumbers": hole_numbers, + "LiquidDispensingMethod": liquid_method, + } + + def UnLoad( + self, + dosage: int, + plate_no: int, + is_whole_plate: bool, + hole_row: int, + hole_col: int, + blending_times: int, + balance_height: int, + plate_or_hole: str, + hole_numbers: str, + assist_fun1: str = "", + assist_fun2: str = "", + assist_fun3: str = "", + assist_fun4: str = "", + assist_fun5: str = "", + liquid_method: str = "NormalDispense", + ) -> Dict[str, Any]: + return { + "StepAxis": self.axis, + "Function": "UnLoad", + "DosageNum": dosage, + "PlateNo": plate_no, + "IsWholePlate": is_whole_plate, + "HoleRow": hole_row, + "HoleCol": hole_col, + "BlendingTimes": blending_times, + "BalanceHeight": balance_height, + "PlateOrHoleNum": plate_or_hole, + "AssistFun1": assist_fun1, + "AssistFun2": assist_fun2, + "AssistFun3": assist_fun3, + "AssistFun4": assist_fun4, + "AssistFun5": assist_fun5, + "HoleNumbers": hole_numbers, + "LiquidDispensingMethod": liquid_method, + } + + +if __name__ == "__main__": + # # Example usage + # # 1. 用导出的json,给每个T1 T2板子设定相应的物料,如果是孔板和枪头盒,要对应区分 + # # 2. backend需要支持num channel为1的情况 + # # 3. 设计一个单点动作流程,可以跑 + # # 4. + deck = PRCXI9300Deck(name="PRCXI_Deck", size_x=100, size_y=100, size_z=100) + + from pylabrobot.resources.opentrons.tip_racks import opentrons_96_tiprack_300ul,opentrons_96_tiprack_10ul + from pylabrobot.resources.opentrons.plates import corning_96_wellplate_360ul_flat, nest_96_wellplate_2ml_deep + + def get_well_container(name: str) -> PRCXI9300Container: + well_containers = corning_96_wellplate_360ul_flat(name).serialize() + plate = PRCXI9300Container(name=name, size_x=50, size_y=50, size_z=10, category="plate", + ordering=collections.OrderedDict()) + plate_serialized = plate.serialize() + plate_serialized["parent_name"] = deck.name + well_containers.update({k: v for k, v in plate_serialized.items() if k not in ["children"]}) + new_plate: PRCXI9300Container = PRCXI9300Container.deserialize(well_containers) + return new_plate + + def get_tip_rack(name: str) -> PRCXI9300Container: + tip_racks = opentrons_96_tiprack_300ul("name").serialize() + tip_rack = PRCXI9300Container(name=name, size_x=50, size_y=50, size_z=10, category="tip_rack", + ordering=collections.OrderedDict()) + tip_rack_serialized = tip_rack.serialize() + tip_rack_serialized["parent_name"] = deck.name + tip_racks.update({k: v for k, v in tip_rack_serialized.items() if k not in ["children"]}) + new_tip_rack: PRCXI9300Container = PRCXI9300Container.deserialize(tip_racks) + return new_tip_rack + + plate1 = get_tip_rack("RackT1") + plate1.load_state({ + "Material": { + "uuid": "076250742950465b9d6ea29a225dfb00", + "Code": "ZX-001-300", + "Name": "300μL Tip头" + } + }) + + plate2 = get_well_container("PlateT2") + plate2.load_state({ + "Material": { + "uuid": "57b1e4711e9e4a32b529f3132fc5931f", + "Code": "ZX-019-2.2", + "Name": "96深孔板" + } + }) + + + plate3 = PRCXI9300Trash("trash", size_x=50, size_y=100, size_z=10, category="trash") + plate3.load_state({ + "Material": { + "uuid": "730067cf07ae43849ddf4034299030e9" + } + }) + + plate4 = get_tip_rack("RackT4") + plate4.load_state({ + "Material": { + "uuid": "076250742950465b9d6ea29a225dfb00", + "Code": "ZX-001-300", + "Name": "300μL Tip头" + } + }) + + plate5 = get_well_container("PlateT5") + plate5.load_state({ + "Material": { + "uuid": "57b1e4711e9e4a32b529f3132fc5931f", + "Code": "ZX-019-2.2", + "Name": "96深孔板" + } + }) + plate6 = get_well_container("PlateT6") + plate6.load_state({ + "Material": { + "uuid": "57b1e4711e9e4a32b529f3132fc5931f", + "Code": "ZX-019-2.2", + "Name": "96深孔板" + } + }) + + deck.assign_child_resource(plate1, location=Coordinate(0, 0, 0)) + deck.assign_child_resource(plate2, location=Coordinate(0, 0, 0)) + deck.assign_child_resource(plate3, location=Coordinate(0, 0, 0)) + deck.assign_child_resource(plate4, location=Coordinate(0, 0, 0)) + deck.assign_child_resource(plate5, location=Coordinate(0, 0, 0)) + deck.assign_child_resource(plate6, location=Coordinate(0, 0, 0)) + + # print(plate2) + plate_2_liquids = [[('water', 500)]]*96 + plate2.set_well_liquids(plate_2_liquids) + + handler = PRCXI9300Handler(deck=deck, host="10.181.214.132", port=9999, + timeout=10.0, setup=False, debug=False, + matrix_id="71593", + channel_num=8, axis="Left") # Initialize the handler with the deck and host settings + + + handler.set_tiprack([plate1]) + + asyncio.run(handler.setup()) # Initialize the handler and setup the connection + from pylabrobot.resources import set_volume_tracking + # from pylabrobot.resources import set_tip_tracking + set_volume_tracking(enabled=True) + from unilabos.resources.graphio import * + + asyncio.run(handler.create_protocol(protocol_name="Test Protocol")) # Initialize the backend and setup the connection + # asyncio.run(handler.pick_up_tips(plate1.children[:8],[0,1,2,3,4,5,6,7])) + + # asyncio.run(handler.aspirate(plate2.children[:8],[50]*8, [0,1,2,3,4,5,6,7])) + # asyncio.run(handler.dispense(plate5.children[:8],[50]*8,[0,1,2,3,4,5,6,7])) + # # # asyncio.run(handler.drop_tips(tip_rack.children[8:16],[0,1,2,3,4,5,6,7])) + # asyncio.run(handler.discard_tips()) + + # asyncio.run(handler.mix(well_containers.children[:8 + # ], mix_time=3, mix_vol=50, height_to_bottom=0.5, offsets=Coordinate(0, 0, 0), mix_rate=100)) + # #print(json.dumps(handler._unilabos_backend.steps_todo_list, indent=2)) # Print matrix info + # asyncio.run(handler.add_liquid( + # asp_vols=[100]*16, + # dis_vols=[100]*16, + # reagent_sources=plate2.children[:16], + # targets=plate5.children[:16], + # use_channels=[0, 1, 2, 3, 4, 5, 6, 7], + # flow_rates=[None] * 32, + # offsets=[Coordinate(0, 0, 0)] * 32, + # liquid_height=[None] * 16, + # blow_out_air_volume=[None] * 16, + # delays=None, + # mix_time=3, + # mix_vol=50, + # spread="wide", + # )) + + # asyncio.run(handler.remove_liquid( + # vols=[100]*16, + # sources=plate2.children[-16:], + # waste_liquid=plate5.children[:16], # 这个有些奇怪,但是好像也只能这么写 + # use_channels=[0, 1, 2, 3, 4, 5, 6, 7], + # flow_rates=[None] * 32, + # offsets=[Coordinate(0, 0, 0)] * 32, + # liquid_height=[None] * 32, + # blow_out_air_volume=[None] * 32, + # spread="wide", + # )) + asyncio.run(handler.transfer_liquid( + asp_vols=[100]*16, + dis_vols=[100]*16, + tip_racks=[plate1], + sources=plate2.children[-16:], + targets=plate5.children[:16], + use_channels=[0, 1, 2, 3, 4, 5, 6, 7], + offsets=[Coordinate(0, 0, 0)] * 32, + asp_flow_rates=[None] * 16, + dis_flow_rates=[None] * 16, + liquid_height=[None] * 32, + blow_out_air_volume=[None] * 32, + mix_times=3, + mix_vol=50, + spread="wide", + )) + print(json.dumps(handler._unilabos_backend.steps_todo_list, indent=2)) # Print matrix info + # # input("pick_up_tips add step") + asyncio.run(handler.run_protocol()) # Run the protocol + # # input("Running protocol...") + # # input("Press Enter to continue...") # Wait for user input before proceeding + # # print("PRCXI9300Handler initialized with deck and host settings.") + + # Example usage + # 1. 用导出的json,给每个T1 T2板子设定相应的物料,如果是孔板和枪头盒,要对应区分 + # 2. 设计一个单点动作流程,可以跑 + # 3. + + + + + + + + +# deck = PRCXI9300Deck(name="PRCXI_Deck", size_x=100, size_y=100, size_z=100) + +# from pylabrobot.resources.opentrons.tip_racks import tipone_96_tiprack_200ul,opentrons_96_tiprack_10ul +# from pylabrobot.resources.opentrons.plates import corning_96_wellplate_360ul_flat, nest_96_wellplate_2ml_deep + +# def get_well_container(name: str) -> PRCXI9300Container: +# well_containers = corning_96_wellplate_360ul_flat(name).serialize() +# plate = PRCXI9300Container(name=name, size_x=50, size_y=50, size_z=10, category="plate", +# ordering=collections.OrderedDict()) +# plate_serialized = plate.serialize() +# plate_serialized["parent_name"] = deck.name +# well_containers.update({k: v for k, v in plate_serialized.items() if k not in ["children"]}) +# new_plate: PRCXI9300Container = PRCXI9300Container.deserialize(well_containers) +# return new_plate + +# def get_tip_rack(name: str) -> PRCXI9300Container: +# tip_racks = opentrons_96_tiprack_10ul("name").serialize() +# tip_rack = PRCXI9300Container(name=name, size_x=50, size_y=50, size_z=10, category="tip_rack", +# ordering=collections.OrderedDict()) +# tip_rack_serialized = tip_rack.serialize() +# tip_rack_serialized["parent_name"] = deck.name +# tip_racks.update({k: v for k, v in tip_rack_serialized.items() if k not in ["children"]}) +# new_tip_rack: PRCXI9300Container = PRCXI9300Container.deserialize(tip_racks) +# return new_tip_rack + +# plate1 = get_well_container("HPLCPlateT1") +# plate1.load_state({ +# "Material": { +# "uuid": "548bbc3df0d4447586f2c19d2c0c0c55", +# "Code": "HPLC01", +# "Name": "HPLC料盘" +# } +# }) +# plate2 = get_well_container("PlateT2") +# plate2.load_state({ +# "Material": { +# "uuid": "04211a2dc93547fe9bf6121eac533650", +# } +# }) +# plate3 = get_well_container("PlateT3") +# plate3.load_state({ +# "Material": { +# "uuid": "04211a2dc93547fe9bf6121eac533650", +# } +# }) +# trash = PRCXI9300Trash(name="trash", size_x=50, size_y=50, size_z=10, category="trash") +# trash.load_state({ +# "Material": { +# "uuid": "730067cf07ae43849ddf4034299030e9" +# } +# }) +# plate5 = get_well_container("PlateT5") +# plate5.load_state({ +# "Material": { +# "uuid": "04211a2dc93547fe9bf6121eac533650", +# } +# }) +# plate6 = get_well_container("PlateT6") +# plate6.load_state({ +# "Material": { +# "uuid": "04211a2dc93547fe9bf6121eac533650" +# } +# }) +# plate7 = PRCXI9300Container(name="plateT7", size_x=50, size_y=50, size_z=10, category="plate", ordering=collections.OrderedDict()) +# plate7.load_state({ +# "Material": { +# "uuid": "04211a2dc93547fe9bf6121eac533650" +# } +# }) +# plate8 = get_tip_rack("RackT8") +# plate8.load_state({ +# "Material": { +# "uuid": "068b3815e36b4a72a59bae017011b29f", +# "Code": "ZX-001-10+", +# "Name": "10μL加长 Tip头" +# } +# }) +# plate9 = get_well_container("PlateT9") +# plate9.load_state({ +# "Material": { +# "uuid": "04211a2dc93547fe9bf6121eac533650" +# } +# }) +# plate10 = get_well_container("PlateT10") +# plate10.load_state({ +# "Material": { +# "uuid": "04211a2dc93547fe9bf6121eac533650" +# } +# }) +# plate11 = get_well_container("PlateT11") +# plate11.load_state({ +# "Material": { +# "uuid": "57b1e4711e9e4a32b529f3132fc5931f", +# } +# }) +# plate12 = get_well_container("PlateT12") +# plate12.load_state({ +# "Material": { +# "uuid": "04211a2dc93547fe9bf6121eac533650" +# } +# }) +# plate13 = get_well_container("PlateT13") +# plate13.load_state({ +# "Material": { +# "uuid": "04211a2dc93547fe9bf6121eac533650" +# } +# }) + +# # container_for_nothing = PRCXI9300Container(name="container_for_nothing", size_x=50, size_y=50, size_z=10, category="plate", ordering=collections.OrderedDict()) + +# deck.assign_child_resource(plate1, location=Coordinate(0, 0, 0)) +# deck.assign_child_resource(PRCXI9300Container(name="container_for_nothing1", size_x=50, size_y=50, size_z=10, category="plate", ordering=collections.OrderedDict()), location=Coordinate(0, 0, 0)) +# deck.assign_child_resource(PRCXI9300Container(name="container_for_nothing2", size_x=50, size_y=50, size_z=10, category="plate", ordering=collections.OrderedDict()), location=Coordinate(0, 0, 0)) +# deck.assign_child_resource(trash, location=Coordinate(0, 0, 0)) +# deck.assign_child_resource(PRCXI9300Container(name="container_for_nothing3", size_x=50, size_y=50, size_z=10, category="plate", ordering=collections.OrderedDict()), location=Coordinate(0, 0, 0)) +# deck.assign_child_resource(PRCXI9300Container(name="container_for_nothing", size_x=50, size_y=50, size_z=10, category="plate", ordering=collections.OrderedDict()), location=Coordinate(0, 0, 0)) +# deck.assign_child_resource(PRCXI9300Container(name="container_for_nothing4", size_x=50, size_y=50, size_z=10, category="plate", ordering=collections.OrderedDict()), location=Coordinate(0, 0, 0)) +# deck.assign_child_resource(plate8, location=Coordinate(0, 0, 0)) +# deck.assign_child_resource(PRCXI9300Container(name="container_for_nothing5", size_x=50, size_y=50, size_z=10, category="plate", ordering=collections.OrderedDict()), location=Coordinate(0, 0, 0)) +# deck.assign_child_resource(PRCXI9300Container(name="container_for_nothing6", size_x=50, size_y=50, size_z=10, category="plate", ordering=collections.OrderedDict()), location=Coordinate(0, 0, 0)) +# deck.assign_child_resource(plate11, location=Coordinate(0, 0, 0)) +# deck.assign_child_resource(PRCXI9300Container(name="container_for_nothing7", size_x=50, size_y=50, size_z=10, category="plate", ordering=collections.OrderedDict()), location=Coordinate(0, 0, 0)) +# deck.assign_child_resource(PRCXI9300Container(name="container_for_nothing8", size_x=50, size_y=50, size_z=10, category="plate", ordering=collections.OrderedDict()), location=Coordinate(0, 0, 0)) + +# handler = PRCXI9300Handler(deck=deck, host="10.181.102.13", port=9999, +# timeout=10.0, setup=False, debug=False, +# matrix_id="fd383e6d-2d0e-40b5-9c01-1b2870b1f1b1", +# channel_num=1, axis="Right") # Initialize the handler with the deck and host settings + +# handler.set_tiprack([plate8]) # Set the tip rack for the handler +# asyncio.run(handler.setup()) # Initialize the handler and setup the connection +# from pylabrobot.resources import set_volume_tracking +# # from pylabrobot.resources import set_tip_tracking +# set_volume_tracking(enabled=True) + +# plate11.set_well_liquids([("Water", 100) if (i % 8 == 0 and i // 8 < 6) else (None, 100) for i in range(96)]) # Set liquids for every 8 wells in plate8 + +# from unilabos.resources.graphio import * + +# A = tree_to_list([resource_plr_to_ulab(deck)]) +# with open("deck.json", "w", encoding="utf-8") as f: +# json.dump(A, f, indent=4, ensure_ascii=False) + +# print(plate11.get_well(0).tracker.get_used_volume()) +# asyncio.run(handler.create_protocol(protocol_name="Test Protocol")) # Initialize the backend and setup the connection + +# # asyncio.run(handler.pick_up_tips([plate8.children[8]],[0])) +# # print(plate8.children[8]) +# # # asyncio.run(handler.run_protocol()) +# # asyncio.run(handler.aspirate([plate11.children[0]],[10], [0])) +# # print(plate11.children[0]) +# # # asyncio.run(handler.run_protocol()) +# # asyncio.run(handler.dispense([plate1.children[0]],[10],[0])) +# # print(plate1.children[0]) +# # # asyncio.run(handler.run_protocol()) +# # asyncio.run(handler.mix([plate1.children[0]], mix_time=3, mix_vol=5, height_to_bottom=0.5, offsets=Coordinate(0, 0, 0), mix_rate=100)) +# # print(plate1.children[0]) +# # asyncio.run(handler.discard_tips()) + +# asyncio.run(handler.add_liquid( +# asp_vols=[10]*7, +# dis_vols=[10]*7, +# reagent_sources=[plate11.children[0]], +# targets=plate1.children[2:9], +# use_channels=[0], +# flow_rates=[None] * 4, +# offsets=[Coordinate(0, 0, 0)] * 4, +# liquid_height=[None] * 2, +# blow_out_air_volume=[None] * 2, +# delays=None, +# mix_time=3, +# mix_vol=5, +# spread="wide", +# )) + +# # asyncio.run(handler.transfer_liquid( +# # asp_vols=[10]*2, +# # dis_vols=[10]*2, +# # sources=plate11.children[:2], +# # targets=plate11.children[-2:], +# # use_channels=[0], +# # offsets=[Coordinate(0, 0, 0)] * 4, +# # liquid_height=[None] * 2, +# # blow_out_air_volume=[None] * 2, +# # delays=None, +# # mix_times=3, +# # mix_vol=5, +# # spread="wide", +# # tip_racks=[plate8] +# # )) + +# # asyncio.run(handler.remove_liquid( +# # vols=[10]*2, +# # sources=plate11.children[:2], +# # waste_liquid=plate11.children[43], +# # use_channels=[0], +# # offsets=[Coordinate(0, 0, 0)] * 4, +# # liquid_height=[None] * 2, +# # blow_out_air_volume=[None] * 2, +# # delays=None, +# # spread="wide" +# # )) + + + + + + + + +# asyncio.run(handler.run_protocol()) + +# # asyncio.run(handler.discard_tips()) +# # asyncio.run(handler.mix(well_containers.children[:8 +# # ], mix_time=3, mix_vol=50, height_to_bottom=0.5, offsets=Coordinate(0, 0, 0), mix_rate=100)) +# #print(json.dumps(handler._unilabos_backend.steps_todo_list, indent=2)) # Print matrix info + + +# # asyncio.run(handler.remove_liquid( +# # vols=[100]*16, +# # sources=well_containers.children[-16:], +# # waste_liquid=well_containers.children[:16], # 这个有些奇怪,但是好像也只能这么写 +# # use_channels=[0, 1, 2, 3, 4, 5, 6, 7], +# # flow_rates=[None] * 32, +# # offsets=[Coordinate(0, 0, 0)] * 32, +# # liquid_height=[None] * 32, +# # blow_out_air_volume=[None] * 32, +# # spread="wide", +# # )) +# # asyncio.run(handler.transfer_liquid( +# # asp_vols=[100]*16, +# # dis_vols=[100]*16, +# # tip_racks=[tip_rack], +# # sources=well_containers.children[-16:], +# # targets=well_containers.children[:16], +# # use_channels=[0, 1, 2, 3, 4, 5, 6, 7], +# # offsets=[Coordinate(0, 0, 0)] * 32, +# # asp_flow_rates=[None] * 16, +# # dis_flow_rates=[None] * 16, +# # liquid_height=[None] * 32, +# # blow_out_air_volume=[None] * 32, +# # mix_times=3, +# # mix_vol=50, +# # spread="wide", +# # )) +# print(json.dumps(handler._unilabos_backend.steps_todo_list, indent=2)) # Print matrix info +# # input("pick_up_tips add step") +# #asyncio.run(handler.run_protocol()) # Run the protocol +# # input("Running protocol...") +# # input("Press Enter to continue...") # Wait for user input before proceeding +# # print("PRCXI9300Handler initialized with deck and host settings.") + diff --git a/unilabos/devices/liquid_handling/revvity.py b/unilabos/devices/liquid_handling/revvity.py index 5f37c45..d080ba0 100644 --- a/unilabos/devices/liquid_handling/revvity.py +++ b/unilabos/devices/liquid_handling/revvity.py @@ -3,7 +3,11 @@ import sys import io # sys.path.insert(0, r'C:\kui\winprep_cli\winprep_c_Uni-lab\x64\Debug') -import winprep_c +try: + import winprep_c +except ImportError as e: + print("Error importing winprep_c:", e) + print("Please ensure that the winprep_c module is correctly installed and accessible.") from queue import Queue diff --git a/unilabos/devices/motor/iCL42.py b/unilabos/devices/motor/iCL42.py index d937865..57bc467 100644 --- a/unilabos/devices/motor/iCL42.py +++ b/unilabos/devices/motor/iCL42.py @@ -21,7 +21,7 @@ except Exception as e: sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", ".."))) from unilabos.utils.pywinauto_util import connect_application, get_process_pid_by_name, get_ui_path_with_window_specification, print_wrapper_identifiers from unilabos.device_comms.universal_driver import UniversalDriver, SingleRunningExecutor - from unilabos.devices.template_driver import universal_driver as ud + from unilabos.device_comms import universal_driver as ud print(f"使用文件DEBUG运行: {e}") diff --git a/unilabos/devices/raman_uv/home_made_raman.py b/unilabos/devices/raman_uv/home_made_raman.py index dcc3b56..64d8319 100644 --- a/unilabos/devices/raman_uv/home_made_raman.py +++ b/unilabos/devices/raman_uv/home_made_raman.py @@ -9,7 +9,7 @@ from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg import time class RamanObj: - def __init__(self, port_laser,port_ccd, baudrate_laser=9600, baudrate_ccd=921600): + def __init__(self, port_laser, port_ccd, baudrate_laser=9600, baudrate_ccd=921600): self.port_laser = port_laser self.port_ccd = port_ccd diff --git a/unilabos/devices/virtual/virtual_column.py b/unilabos/devices/virtual/virtual_column.py index c83da1c..892a320 100644 --- a/unilabos/devices/virtual/virtual_column.py +++ b/unilabos/devices/virtual/virtual_column.py @@ -3,7 +3,7 @@ import logging from typing import Dict, Any, Optional class VirtualColumn: - """Virtual column device for RunColumn protocol""" + """Virtual column device for RunColumn protocol 🏛️""" def __init__(self, device_id: str = None, config: Dict[str, Any] = None, **kwargs): # 处理可能的不同调用方式 @@ -25,45 +25,77 @@ class VirtualColumn: self._column_length = self.config.get('column_length') or kwargs.get('column_length', 25.0) self._column_diameter = self.config.get('column_diameter') or kwargs.get('column_diameter', 2.0) - print(f"=== VirtualColumn {self.device_id} created with max_flow_rate={self._max_flow_rate}, length={self._column_length}cm ===") + print(f"🏛️ === 虚拟色谱柱 {self.device_id} 已创建 === ✨") + print(f"📏 柱参数: 流速={self._max_flow_rate}mL/min | 长度={self._column_length}cm | 直径={self._column_diameter}cm 🔬") async def initialize(self) -> bool: - """Initialize virtual column""" - self.logger.info(f"Initializing virtual column {self.device_id}") + """Initialize virtual column 🚀""" + self.logger.info(f"🔧 初始化虚拟色谱柱 {self.device_id} ✨") + self.data.update({ "status": "Idle", - "column_state": "Ready", + "column_state": "Ready", "current_flow_rate": 0.0, "max_flow_rate": self._max_flow_rate, "column_length": self._column_length, "column_diameter": self._column_diameter, "processed_volume": 0.0, "progress": 0.0, - "current_status": "Ready" + "current_status": "Ready for separation" }) + + self.logger.info(f"✅ 色谱柱 {self.device_id} 初始化完成 🏛️") + self.logger.info(f"📊 设备规格: 最大流速 {self._max_flow_rate}mL/min | 柱长 {self._column_length}cm 📏") return True async def cleanup(self) -> bool: - """Cleanup virtual column""" - self.logger.info(f"Cleaning up virtual column {self.device_id}") + """Cleanup virtual column 🧹""" + self.logger.info(f"🧹 清理虚拟色谱柱 {self.device_id} 🔚") + + self.data.update({ + "status": "Offline", + "column_state": "Offline", + "current_status": "System offline" + }) + + self.logger.info(f"✅ 色谱柱 {self.device_id} 清理完成 💤") return True - async def run_column(self, from_vessel: str, to_vessel: str, column: str) -> bool: - """Execute column chromatography run - matches RunColumn action""" - self.logger.info(f"Running column separation: {from_vessel} -> {to_vessel} using {column}") + async def run_column(self, from_vessel: str, to_vessel: str, column: str, **kwargs) -> bool: + """Execute column chromatography run - matches RunColumn action 🏛️""" + + # 提取额外参数 + rf = kwargs.get('rf', '0.3') + solvent1 = kwargs.get('solvent1', 'ethyl_acetate') + solvent2 = kwargs.get('solvent2', 'hexane') + ratio = kwargs.get('ratio', '30:70') + + self.logger.info(f"🏛️ 开始柱层析分离: {from_vessel} → {to_vessel} 🚰") + self.logger.info(f" 🧪 使用色谱柱: {column}") + self.logger.info(f" 🎯 Rf值: {rf}") + self.logger.info(f" 🧪 洗脱溶剂: {solvent1}:{solvent2} ({ratio}) 💧") # 更新设备状态 self.data.update({ "status": "Running", "column_state": "Separating", - "current_status": "Column separation in progress", + "current_status": "🏛️ Column separation in progress", "progress": 0.0, - "processed_volume": 0.0 + "processed_volume": 0.0, + "current_from_vessel": from_vessel, + "current_to_vessel": to_vessel, + "current_column": column, + "current_rf": rf, + "current_solvents": f"{solvent1}:{solvent2} ({ratio})" }) # 模拟柱层析分离过程 # 假设处理时间基于流速和柱子长度 - separation_time = (self._column_length * 2) / self._max_flow_rate # 简化计算 + base_time = (self._column_length * 2) / self._max_flow_rate # 简化计算 + separation_time = max(base_time, 20.0) # 最少20秒 + + self.logger.info(f"⏱️ 预计分离时间: {separation_time:.1f}秒 ⌛") + self.logger.info(f"📏 柱参数: 长度 {self._column_length}cm | 流速 {self._max_flow_rate}mL/min 🌊") steps = 20 # 分20个步骤模拟分离过程 step_time = separation_time / steps @@ -74,34 +106,65 @@ class VirtualColumn: progress = (i + 1) / steps * 100 volume_processed = (i + 1) * 5.0 # 假设每步处理5mL + # 不同阶段的状态描述 + if progress <= 25: + phase = "🌊 样品上柱阶段" + phase_emoji = "📥" + elif progress <= 50: + phase = "🧪 洗脱开始" + phase_emoji = "💧" + elif progress <= 75: + phase = "⚗️ 成分分离中" + phase_emoji = "🔄" + else: + phase = "🎯 收集产物" + phase_emoji = "📤" + # 更新状态 + status_msg = f"{phase_emoji} {phase}: {progress:.1f}% | 💧 已处理: {volume_processed:.1f}mL" + self.data.update({ "progress": progress, "processed_volume": volume_processed, - "current_status": f"Column separation: {progress:.1f}% - Processing {volume_processed:.1f}mL" + "current_status": status_msg, + "current_phase": phase }) - self.logger.info(f"Column separation progress: {progress:.1f}%") + # 进度日志(每25%打印一次) + if progress >= 25 and (i + 1) % 5 == 0: # 每5步(25%)打印一次 + self.logger.info(f"📊 分离进度: {progress:.0f}% | {phase} | 💧 {volume_processed:.1f}mL 完成 ✨") # 分离完成 + final_status = f"✅ 柱层析分离完成: {from_vessel} → {to_vessel} | 💧 共处理 {volume_processed:.1f}mL" + self.data.update({ "status": "Idle", "column_state": "Ready", - "current_status": "Column separation completed", - "progress": 100.0 + "current_status": final_status, + "progress": 100.0, + "final_volume": volume_processed }) - self.logger.info(f"Column separation completed: {from_vessel} -> {to_vessel}") + self.logger.info(f"🎉 柱层析分离完成! ✨") + self.logger.info(f"📊 分离结果:") + self.logger.info(f" 🥽 源容器: {from_vessel}") + self.logger.info(f" 🥽 目标容器: {to_vessel}") + self.logger.info(f" 🏛️ 使用色谱柱: {column}") + self.logger.info(f" 💧 处理体积: {volume_processed:.1f}mL") + self.logger.info(f" 🧪 洗脱条件: {solvent1}:{solvent2} ({ratio})") + self.logger.info(f" 🎯 Rf值: {rf}") + self.logger.info(f" ⏱️ 总耗时: {separation_time:.1f}秒 🏁") + return True # 状态属性 @property def status(self) -> str: - return self.data.get("status", "Unknown") + return self.data.get("status", "❓ Unknown") @property def column_state(self) -> str: - return self.data.get("column_state", "Unknown") + return self.data.get("column_state", "❓ Unknown") @property def current_flow_rate(self) -> float: @@ -129,4 +192,12 @@ class VirtualColumn: @property def current_status(self) -> str: - return self.data.get("current_status", "Ready") \ No newline at end of file + return self.data.get("current_status", "📋 Ready") + + @property + def current_phase(self) -> str: + return self.data.get("current_phase", "🏠 待机中") + + @property + def final_volume(self) -> float: + return self.data.get("final_volume", 0.0) \ No newline at end of file diff --git a/unilabos/devices/virtual/virtual_filter.py b/unilabos/devices/virtual/virtual_filter.py index ca2e8b2..655934b 100644 --- a/unilabos/devices/virtual/virtual_filter.py +++ b/unilabos/devices/virtual/virtual_filter.py @@ -5,7 +5,7 @@ from typing import Dict, Any, Optional class VirtualFilter: - """Virtual filter device - 完全按照 Filter.action 规范""" + """Virtual filter device - 完全按照 Filter.action 规范 🌊""" def __init__(self, device_id: Optional[str] = None, config: Optional[Dict[str, Any]] = None, **kwargs): if device_id is None and 'id' in kwargs: @@ -31,8 +31,8 @@ class VirtualFilter: setattr(self, key, value) async def initialize(self) -> bool: - """Initialize virtual filter""" - self.logger.info(f"Initializing virtual filter {self.device_id}") + """Initialize virtual filter 🚀""" + self.logger.info(f"🔧 初始化虚拟过滤器 {self.device_id} ✨") # 按照 Filter.action 的 feedback 字段初始化 self.data.update({ @@ -43,17 +43,21 @@ class VirtualFilter: "current_status": "Ready for filtration", # Filter.action feedback "message": "Ready for filtration" }) + + self.logger.info(f"✅ 过滤器 {self.device_id} 初始化完成 🌊") return True async def cleanup(self) -> bool: - """Cleanup virtual filter""" - self.logger.info(f"Cleaning up virtual filter {self.device_id}") + """Cleanup virtual filter 🧹""" + self.logger.info(f"🧹 清理虚拟过滤器 {self.device_id} 🔚") self.data.update({ "status": "Offline", "current_status": "System offline", "message": "System offline" }) + + self.logger.info(f"✅ 过滤器 {self.device_id} 清理完成 💤") return True async def filter( @@ -66,64 +70,82 @@ class VirtualFilter: continue_heatchill: bool = False, volume: float = 0.0 ) -> bool: - """Execute filter action - 完全按照 Filter.action 参数""" - self.logger.info(f"Filter: vessel={vessel}, filtrate_vessel={filtrate_vessel}") - self.logger.info(f" stir={stir}, stir_speed={stir_speed}, temp={temp}") - self.logger.info(f" continue_heatchill={continue_heatchill}, volume={volume}") + """Execute filter action - 完全按照 Filter.action 参数 🌊""" + + # 🔧 新增:温度自动调整 + original_temp = temp + if temp == 0.0: + temp = 25.0 # 0度自动设置为室温 + self.logger.info(f"🌡️ 温度自动调整: {original_temp}°C → {temp}°C (室温) 🏠") + elif temp < 4.0: + temp = 4.0 # 小于4度自动设置为4度 + self.logger.info(f"🌡️ 温度自动调整: {original_temp}°C → {temp}°C (最低温度) ❄️") + + self.logger.info(f"🌊 开始过滤操作: {vessel} → {filtrate_vessel} 🚰") + self.logger.info(f" 🌪️ 搅拌: {stir} ({stir_speed} RPM)") + self.logger.info(f" 🌡️ 温度: {temp}°C") + self.logger.info(f" 💧 体积: {volume}mL") + self.logger.info(f" 🔥 保持加热: {continue_heatchill}") # 验证参数 if temp > self._max_temp or temp < 4.0: - error_msg = f"温度 {temp}°C 超出范围 (4-{self._max_temp}°C)" - self.logger.error(error_msg) + error_msg = f"🌡️ 温度 {temp}°C 超出范围 (4-{self._max_temp}°C) ⚠️" + self.logger.error(f"❌ {error_msg}") self.data.update({ - "status": f"Error: {error_msg}", - "current_status": f"Error: {error_msg}", + "status": f"Error: 温度超出范围 ⚠️", + "current_status": f"Error: 温度超出范围 ⚠️", "message": error_msg }) return False if stir and stir_speed > self._max_stir_speed: - error_msg = f"搅拌速度 {stir_speed} RPM 超出范围 (0-{self._max_stir_speed} RPM)" - self.logger.error(error_msg) + error_msg = f"🌪️ 搅拌速度 {stir_speed} RPM 超出范围 (0-{self._max_stir_speed} RPM) ⚠️" + self.logger.error(f"❌ {error_msg}") self.data.update({ - "status": f"Error: {error_msg}", - "current_status": f"Error: {error_msg}", + "status": f"Error: 搅拌速度超出范围 ⚠️", + "current_status": f"Error: 搅拌速度超出范围 ⚠️", "message": error_msg }) return False if volume > self._max_volume: - error_msg = f"过滤体积 {volume} mL 超出范围 (0-{self._max_volume} mL)" - self.logger.error(error_msg) + error_msg = f"💧 过滤体积 {volume} mL 超出范围 (0-{self._max_volume} mL) ⚠️" + self.logger.error(f"❌ {error_msg}") self.data.update({ - "status": f"Error: {error_msg}", - "current_status": f"Error: {error_msg}", + "status": f"Error: 体积超出范围 ⚠️", + "current_status": f"Error: 体积超出范围 ⚠️", "message": error_msg }) return False # 开始过滤 filter_volume = volume if volume > 0 else 50.0 + self.logger.info(f"🚀 开始过滤 {filter_volume}mL 液体 💧") self.data.update({ - "status": f"过滤中: {vessel}", + "status": f"🌊 过滤中: {vessel}", "current_temp": temp, "filtered_volume": 0.0, "progress": 0.0, - "current_status": f"Filtering {vessel} → {filtrate_vessel}", - "message": f"Starting filtration: {vessel} → {filtrate_vessel}" + "current_status": f"🌊 Filtering {vessel} → {filtrate_vessel}", + "message": f"🚀 Starting filtration: {vessel} → {filtrate_vessel}" }) try: # 过滤过程 - 实时更新进度 start_time = time_module.time() + # 根据体积和搅拌估算过滤时间 base_time = filter_volume / 5.0 # 5mL/s 基础速度 if stir: base_time *= 0.8 # 搅拌加速过滤 + self.logger.info(f"🌪️ 搅拌加速过滤,预计时间减少20% ⚡") if temp > 50.0: base_time *= 0.7 # 高温加速过滤 + self.logger.info(f"🔥 高温加速过滤,预计时间减少30% ⚡") + filter_time = max(base_time, 10.0) # 最少10秒 + self.logger.info(f"⏱️ 预计过滤时间: {filter_time:.1f}秒 ⌛") while True: current_time = time_module.time() @@ -133,20 +155,24 @@ class VirtualFilter: current_filtered = (progress / 100.0) * filter_volume # 更新状态 - 按照 Filter.action feedback 字段 - status_msg = f"过滤中: {vessel}" + status_msg = f"🌊 过滤中: {vessel}" if stir: - status_msg += f" | 搅拌: {stir_speed} RPM" - status_msg += f" | {temp}°C | {progress:.1f}% | 已过滤: {current_filtered:.1f}mL" + status_msg += f" | 🌪️ 搅拌: {stir_speed} RPM" + status_msg += f" | 🌡️ {temp}°C | 📊 {progress:.1f}% | 💧 已过滤: {current_filtered:.1f}mL" self.data.update({ "progress": progress, # Filter.action feedback "current_temp": temp, # Filter.action feedback "filtered_volume": current_filtered, # Filter.action feedback - "current_status": f"Filtering: {progress:.1f}% complete", # Filter.action feedback + "current_status": f"🌊 Filtering: {progress:.1f}% complete", # Filter.action feedback "status": status_msg, - "message": f"Filtering: {progress:.1f}% complete, {current_filtered:.1f}mL filtered" + "message": f"🌊 Filtering: {progress:.1f}% complete, {current_filtered:.1f}mL filtered" }) + # 进度日志(每25%打印一次) + if progress >= 25 and progress % 25 < 1: + self.logger.info(f"📊 过滤进度: {progress:.0f}% | 💧 {current_filtered:.1f}mL 完成 ✨") + if remaining <= 0: break @@ -154,54 +180,57 @@ class VirtualFilter: # 过滤完成 final_temp = temp if continue_heatchill else 25.0 - final_status = f"过滤完成: {vessel} | {filter_volume}mL → {filtrate_vessel}" + final_status = f"✅ 过滤完成: {vessel} | 💧 {filter_volume}mL → {filtrate_vessel}" if continue_heatchill: - final_status += " | 继续加热搅拌" + final_status += " | 🔥 继续加热搅拌" + self.logger.info(f"🔥 继续保持加热搅拌状态 🌪️") self.data.update({ "status": final_status, "progress": 100.0, # Filter.action feedback "current_temp": final_temp, # Filter.action feedback "filtered_volume": filter_volume, # Filter.action feedback - "current_status": f"Filtration completed: {filter_volume}mL", # Filter.action feedback - "message": f"Filtration completed: {filter_volume}mL filtered from {vessel}" + "current_status": f"✅ Filtration completed: {filter_volume}mL", # Filter.action feedback + "message": f"✅ Filtration completed: {filter_volume}mL filtered from {vessel}" }) - self.logger.info(f"Filtration completed: {filter_volume}mL from {vessel} to {filtrate_vessel}") + self.logger.info(f"🎉 过滤完成! 💧 {filter_volume}mL 从 {vessel} 过滤到 {filtrate_vessel} ✨") + self.logger.info(f"📊 最终状态: 温度 {final_temp}°C | 进度 100% | 体积 {filter_volume}mL 🏁") return True except Exception as e: - self.logger.error(f"Error during filtration: {str(e)}") + error_msg = f"过滤过程中发生错误: {str(e)} 💥" + self.logger.error(f"❌ {error_msg}") self.data.update({ - "status": f"过滤错误: {str(e)}", - "current_status": f"Filtration failed: {str(e)}", - "message": f"Filtration failed: {str(e)}" + "status": f"❌ 过滤错误: {str(e)}", + "current_status": f"❌ Filtration failed: {str(e)}", + "message": f"❌ Filtration failed: {str(e)}" }) return False # === 核心状态属性 - 按照 Filter.action feedback 字段 === @property def status(self) -> str: - return self.data.get("status", "Unknown") + return self.data.get("status", "❓ Unknown") @property def progress(self) -> float: - """Filter.action feedback 字段""" + """Filter.action feedback 字段 📊""" return self.data.get("progress", 0.0) @property def current_temp(self) -> float: - """Filter.action feedback 字段""" + """Filter.action feedback 字段 🌡️""" return self.data.get("current_temp", 25.0) @property def filtered_volume(self) -> float: - """Filter.action feedback 字段""" + """Filter.action feedback 字段 💧""" return self.data.get("filtered_volume", 0.0) @property def current_status(self) -> str: - """Filter.action feedback 字段""" + """Filter.action feedback 字段 📋""" return self.data.get("current_status", "") @property diff --git a/unilabos/devices/virtual/virtual_heatchill.py b/unilabos/devices/virtual/virtual_heatchill.py index 541434a..94ab572 100644 --- a/unilabos/devices/virtual/virtual_heatchill.py +++ b/unilabos/devices/virtual/virtual_heatchill.py @@ -4,7 +4,7 @@ import time as time_module # 重命名time模块,避免与参数冲突 from typing import Dict, Any class VirtualHeatChill: - """Virtual heat chill device for HeatChillProtocol testing""" + """Virtual heat chill device for HeatChillProtocol testing 🌡️""" def __init__(self, device_id: str = None, config: Dict[str, Any] = None, **kwargs): # 处理可能的不同调用方式 @@ -31,94 +31,149 @@ class VirtualHeatChill: for key, value in kwargs.items(): if key not in skip_keys and not hasattr(self, key): setattr(self, key, value) + + print(f"🌡️ === 虚拟温控设备 {self.device_id} 已创建 === ✨") + print(f"🔥 温度范围: {self._min_temp}°C ~ {self._max_temp}°C | 🌪️ 最大搅拌: {self._max_stir_speed} RPM") async def initialize(self) -> bool: - """Initialize virtual heat chill""" - self.logger.info(f"Initializing virtual heat chill {self.device_id}") + """Initialize virtual heat chill 🚀""" + self.logger.info(f"🔧 初始化虚拟温控设备 {self.device_id} ✨") # 初始化状态信息 self.data.update({ - "status": "Idle", + "status": "🏠 待机中", "operation_mode": "Idle", "is_stirring": False, "stir_speed": 0.0, "remaining_time": 0.0, }) + + self.logger.info(f"✅ 温控设备 {self.device_id} 初始化完成 🌡️") + self.logger.info(f"📊 设备规格: 温度范围 {self._min_temp}°C ~ {self._max_temp}°C | 搅拌范围 0 ~ {self._max_stir_speed} RPM") return True async def cleanup(self) -> bool: - """Cleanup virtual heat chill""" - self.logger.info(f"Cleaning up virtual heat chill {self.device_id}") + """Cleanup virtual heat chill 🧹""" + self.logger.info(f"🧹 清理虚拟温控设备 {self.device_id} 🔚") + self.data.update({ - "status": "Offline", + "status": "💤 离线", "operation_mode": "Offline", "is_stirring": False, "stir_speed": 0.0, "remaining_time": 0.0 }) + + self.logger.info(f"✅ 温控设备 {self.device_id} 清理完成 💤") return True - async def heat_chill(self, vessel: str, temp: float, time: float, stir: bool, + async def heat_chill(self, vessel: str, temp: float, time, stir: bool, stir_speed: float, purpose: str) -> bool: - """Execute heat chill action - 按实际时间运行,实时更新剩余时间""" - self.logger.info(f"HeatChill: vessel={vessel}, temp={temp}°C, time={time}s, stir={stir}, stir_speed={stir_speed}") + """Execute heat chill action - 🔧 修复:确保参数类型正确""" - # 验证参数 - if temp > self._max_temp or temp < self._min_temp: - error_msg = f"温度 {temp}°C 超出范围 ({self._min_temp}°C - {self._max_temp}°C)" - self.logger.error(error_msg) + # 🔧 关键修复:确保所有参数类型正确 + try: + temp = float(temp) + time_value = float(time) # 强制转换为浮点数 + stir_speed = float(stir_speed) + stir = bool(stir) + vessel = str(vessel) + purpose = str(purpose) + except (ValueError, TypeError) as e: + error_msg = f"参数类型转换错误: temp={temp}({type(temp)}), time={time}({type(time)}), error={str(e)}" + self.logger.error(f"❌ {error_msg}") self.data.update({ - "status": f"Error: {error_msg}", + "status": f"❌ 错误: {error_msg}", + "operation_mode": "Error" + }) + return False + + # 确定温度操作emoji + if temp > 25.0: + temp_emoji = "🔥" + operation_mode = "Heating" + status_action = "加热" + elif temp < 25.0: + temp_emoji = "❄️" + operation_mode = "Cooling" + status_action = "冷却" + else: + temp_emoji = "🌡️" + operation_mode = "Maintaining" + status_action = "保温" + + self.logger.info(f"🌡️ 开始温控操作: {vessel} → {temp}°C {temp_emoji}") + self.logger.info(f" 🥽 容器: {vessel}") + self.logger.info(f" 🎯 目标温度: {temp}°C {temp_emoji}") + self.logger.info(f" ⏰ 持续时间: {time_value}s") + self.logger.info(f" 🌪️ 搅拌: {stir} ({stir_speed} RPM)") + self.logger.info(f" 📝 目的: {purpose}") + + # 验证参数范围 + if temp > self._max_temp or temp < self._min_temp: + error_msg = f"🌡️ 温度 {temp}°C 超出范围 ({self._min_temp}°C - {self._max_temp}°C) ⚠️" + self.logger.error(f"❌ {error_msg}") + self.data.update({ + "status": f"❌ 错误: 温度超出范围 ⚠️", "operation_mode": "Error" }) return False if stir and stir_speed > self._max_stir_speed: - error_msg = f"搅拌速度 {stir_speed} RPM 超出最大值 {self._max_stir_speed} RPM" - self.logger.error(error_msg) + error_msg = f"🌪️ 搅拌速度 {stir_speed} RPM 超出最大值 {self._max_stir_speed} RPM ⚠️" + self.logger.error(f"❌ {error_msg}") self.data.update({ - "status": f"Error: {error_msg}", + "status": f"❌ 错误: 搅拌速度超出范围 ⚠️", "operation_mode": "Error" }) return False - # 确定操作模式 - if temp > 25.0: - operation_mode = "Heating" - status_action = "加热" - elif temp < 25.0: - operation_mode = "Cooling" - status_action = "冷却" - else: - operation_mode = "Maintaining" - status_action = "保温" + if time_value <= 0: + error_msg = f"⏰ 时间 {time_value}s 必须大于0 ⚠️" + self.logger.error(f"❌ {error_msg}") + self.data.update({ + "status": f"❌ 错误: 时间参数无效 ⚠️", + "operation_mode": "Error" + }) + return False - # **修复**: 使用重命名的time模块 + # 🔧 修复:使用转换后的时间值 start_time = time_module.time() - total_time = time + total_time = time_value # 使用转换后的浮点数 + + self.logger.info(f"🚀 开始{status_action}程序! 预计用时 {total_time:.1f}秒 ⏱️") # 开始操作 - stir_info = f" | 搅拌: {stir_speed} RPM" if stir else "" + stir_info = f" | 🌪️ 搅拌: {stir_speed} RPM" if stir else "" + self.data.update({ - "status": f"运行中: {status_action} {vessel} 至 {temp}°C | 剩余: {total_time:.0f}s{stir_info}", + "status": f"{temp_emoji} 运行中: {status_action} {vessel} 至 {temp}°C | ⏰ 剩余: {total_time:.0f}s{stir_info}", "operation_mode": operation_mode, "is_stirring": stir, "stir_speed": stir_speed if stir else 0.0, "remaining_time": total_time, }) - # **修复**: 在等待过程中每秒更新剩余时间 + # 在等待过程中每秒更新剩余时间 + last_logged_time = 0 while True: - current_time = time_module.time() # 使用重命名的time模块 + current_time = time_module.time() elapsed = current_time - start_time remaining = max(0, total_time - elapsed) + progress = (elapsed / total_time) * 100 if total_time > 0 else 100 # 更新剩余时间和状态 self.data.update({ "remaining_time": remaining, - "status": f"运行中: {status_action} {vessel} 至 {temp}°C | 剩余: {remaining:.0f}s{stir_info}" + "status": f"{temp_emoji} 运行中: {status_action} {vessel} 至 {temp}°C | ⏰ 剩余: {remaining:.0f}s{stir_info}", + "progress": progress }) + # 进度日志(每25%打印一次) + if progress >= 25 and int(progress) % 25 == 0 and int(progress) != last_logged_time: + self.logger.info(f"📊 {status_action}进度: {progress:.0f}% | ⏰ 剩余: {remaining:.0f}s | {temp_emoji} 目标: {temp}°C ✨") + last_logged_time = int(progress) + # 如果时间到了,退出循环 if remaining <= 0: break @@ -127,71 +182,114 @@ class VirtualHeatChill: await asyncio.sleep(1.0) # 操作完成 - final_stir_info = f" | 搅拌: {stir_speed} RPM" if stir else "" + final_stir_info = f" | 🌪️ 搅拌: {stir_speed} RPM" if stir else "" + self.data.update({ - "status": f"完成: {vessel} 已达到 {temp}°C | 用时: {total_time:.0f}s{final_stir_info}", + "status": f"✅ 完成: {vessel} 已达到 {temp}°C {temp_emoji} | ⏱️ 用时: {total_time:.0f}s{final_stir_info}", "operation_mode": "Completed", "remaining_time": 0.0, "is_stirring": False, - "stir_speed": 0.0 + "stir_speed": 0.0, + "progress": 100.0 }) - self.logger.info(f"HeatChill completed for vessel {vessel} at {temp}°C after {total_time}s") + self.logger.info(f"🎉 温控操作完成! ✨") + self.logger.info(f"📊 操作结果:") + self.logger.info(f" 🥽 容器: {vessel}") + self.logger.info(f" 🌡️ 达到温度: {temp}°C {temp_emoji}") + self.logger.info(f" ⏱️ 总用时: {total_time:.0f}s") + if stir: + self.logger.info(f" 🌪️ 搅拌速度: {stir_speed} RPM") + self.logger.info(f" 📝 操作目的: {purpose} 🏁") + return True async def heat_chill_start(self, vessel: str, temp: float, purpose: str) -> bool: - """Start continuous heat chill""" - self.logger.info(f"HeatChillStart: vessel={vessel}, temp={temp}°C") + """Start continuous heat chill 🔄""" - # 验证参数 - if temp > self._max_temp or temp < self._min_temp: - error_msg = f"温度 {temp}°C 超出范围 ({self._min_temp}°C - {self._max_temp}°C)" - self.logger.error(error_msg) + # 🔧 添加类型转换 + try: + temp = float(temp) + vessel = str(vessel) + purpose = str(purpose) + except (ValueError, TypeError) as e: + error_msg = f"参数类型转换错误: {str(e)}" + self.logger.error(f"❌ {error_msg}") self.data.update({ - "status": f"Error: {error_msg}", + "status": f"❌ 错误: {error_msg}", "operation_mode": "Error" }) return False - # 确定操作模式 + # 确定温度操作emoji if temp > 25.0: + temp_emoji = "🔥" operation_mode = "Heating" status_action = "持续加热" elif temp < 25.0: + temp_emoji = "❄️" operation_mode = "Cooling" status_action = "持续冷却" else: + temp_emoji = "🌡️" operation_mode = "Maintaining" status_action = "恒温保持" + self.logger.info(f"🔄 启动持续温控: {vessel} → {temp}°C {temp_emoji}") + self.logger.info(f" 🥽 容器: {vessel}") + self.logger.info(f" 🎯 目标温度: {temp}°C {temp_emoji}") + self.logger.info(f" 🔄 模式: {status_action}") + self.logger.info(f" 📝 目的: {purpose}") + + # 验证参数 + if temp > self._max_temp or temp < self._min_temp: + error_msg = f"🌡️ 温度 {temp}°C 超出范围 ({self._min_temp}°C - {self._max_temp}°C) ⚠️" + self.logger.error(f"❌ {error_msg}") + self.data.update({ + "status": f"❌ 错误: 温度超出范围 ⚠️", + "operation_mode": "Error" + }) + return False + self.data.update({ - "status": f"启动: {status_action} {vessel} 至 {temp}°C | 持续运行", + "status": f"🔄 启动: {status_action} {vessel} 至 {temp}°C {temp_emoji} | ♾️ 持续运行", "operation_mode": operation_mode, "is_stirring": False, "stir_speed": 0.0, "remaining_time": -1.0, # -1 表示持续运行 }) + self.logger.info(f"✅ 持续温控已启动! {temp_emoji} {status_action}模式 🚀") return True async def heat_chill_stop(self, vessel: str) -> bool: - """Stop heat chill""" - self.logger.info(f"HeatChillStop: vessel={vessel}") + """Stop heat chill 🛑""" + + # 🔧 添加类型转换 + try: + vessel = str(vessel) + except (ValueError, TypeError) as e: + error_msg = f"参数类型转换错误: {str(e)}" + self.logger.error(f"❌ {error_msg}") + return False + + self.logger.info(f"🛑 停止温控: {vessel}") self.data.update({ - "status": f"已停止: {vessel} 温控停止", + "status": f"🛑 已停止: {vessel} 温控停止", "operation_mode": "Stopped", "is_stirring": False, "stir_speed": 0.0, "remaining_time": 0.0, }) + self.logger.info(f"✅ 温控设备已停止 {vessel} 的温度控制 🏁") return True # 状态属性 @property def status(self) -> str: - return self.data.get("status", "Idle") + return self.data.get("status", "🏠 待机中") @property def operation_mode(self) -> str: @@ -207,4 +305,20 @@ class VirtualHeatChill: @property def remaining_time(self) -> float: - return self.data.get("remaining_time", 0.0) \ No newline at end of file + return self.data.get("remaining_time", 0.0) + + @property + def progress(self) -> float: + return self.data.get("progress", 0.0) + + @property + def max_temp(self) -> float: + return self._max_temp + + @property + def min_temp(self) -> float: + return self._min_temp + + @property + def max_stir_speed(self) -> float: + return self._max_stir_speed \ No newline at end of file diff --git a/unilabos/devices/virtual/virtual_multiway_valve.py b/unilabos/devices/virtual/virtual_multiway_valve.py index c24b7b1..3cd68a1 100644 --- a/unilabos/devices/virtual/virtual_multiway_valve.py +++ b/unilabos/devices/virtual/virtual_multiway_valve.py @@ -1,16 +1,20 @@ import time +import logging from typing import Union, Dict, Optional class VirtualMultiwayValve: """ - 虚拟九通阀门 - 0号位连接transfer pump,1-8号位连接其他设备 + 虚拟九通阀门 - 0号位连接transfer pump,1-8号位连接其他设备 🔄 """ def __init__(self, port: str = "VIRTUAL", positions: int = 8): self.port = port self.max_positions = positions # 1-8号位 self.total_positions = positions + 1 # 0-8号位,共9个位置 + # 添加日志记录器 + self.logger = logging.getLogger(f"VirtualMultiwayValve.{port}") + # 状态属性 self._status = "Idle" self._valve_state = "Ready" @@ -29,6 +33,10 @@ class VirtualMultiwayValve: 7: "port_7", # 7号位 8: "port_8" # 8号位 } + + print(f"🔄 === 虚拟多通阀门已创建 === ✨") + print(f"🎯 端口: {port} | 📊 位置范围: 0-{self.max_positions} | 🏠 初始位置: 0 (transfer_pump)") + self.logger.info(f"🔧 多通阀门初始化: 端口={port}, 最大位置={self.max_positions}") @property def status(self) -> str: @@ -47,31 +55,67 @@ class VirtualMultiwayValve: return self._target_position def get_current_position(self) -> int: - """获取当前阀门位置""" + """获取当前阀门位置 📍""" return self._current_position def get_current_port(self) -> str: - """获取当前连接的端口名称""" + """获取当前连接的端口名称 🔌""" return self.position_map.get(self._current_position, "unknown") def set_position(self, command: Union[int, str]): """ - 设置阀门位置 - 支持0-8位置 + 设置阀门位置 - 支持0-8位置 🎯 Args: command: 目标位置 (0-8) 或位置字符串 0: transfer pump位置 1-8: 其他设备位置 + 'default': 默认位置(0号位) """ try: - # 如果是字符串形式的位置,先转换为数字 + # 🔧 处理特殊字符串命令 if isinstance(command, str): - pos = int(command) + command_lower = command.lower().strip() + + # 处理特殊命令 + if command_lower in ['default', 'pump', 'transfer_pump', 'home']: + pos = 0 # 默认位置为0号位(transfer pump) + self.logger.info(f"🔧 特殊命令 '{command}' 映射到位置 {pos}") + elif command_lower in ['open']: + pos = 0 # open命令也映射到0号位 + self.logger.info(f"🔧 OPEN命令映射到位置 {pos}") + elif command_lower in ['close', 'closed']: + # 关闭命令保持当前位置 + pos = self._current_position + self.logger.info(f"🔧 CLOSE命令保持当前位置 {pos}") + else: + # 尝试转换为数字 + try: + pos = int(command) + except ValueError: + error_msg = f"无法识别的命令: '{command}'" + self.logger.error(f"❌ {error_msg}") + raise ValueError(error_msg) else: pos = int(command) if pos < 0 or pos > self.max_positions: - raise ValueError(f"Position must be between 0 and {self.max_positions}") + error_msg = f"位置必须在 0-{self.max_positions} 范围内" + self.logger.error(f"❌ {error_msg}: 请求位置={pos}") + raise ValueError(error_msg) + + # 获取位置描述emoji + if pos == 0: + pos_emoji = "🚰" + pos_desc = "泵位置" + else: + pos_emoji = "🔌" + pos_desc = f"端口{pos}" + + old_position = self._current_position + old_port = self.get_current_port() + + self.logger.info(f"🔄 阀门切换: {old_position}({old_port}) → {pos}({self.position_map.get(pos, 'unknown')}) {pos_emoji}") self._status = "Busy" self._valve_state = "Moving" @@ -79,104 +123,139 @@ class VirtualMultiwayValve: # 模拟阀门切换时间 switch_time = abs(self._current_position - pos) * 0.5 # 每个位置0.5秒 - time.sleep(switch_time) + + if switch_time > 0: + self.logger.info(f"⏱️ 阀门移动中... 预计用时: {switch_time:.1f}秒 🔄") + time.sleep(switch_time) self._current_position = pos self._status = "Idle" self._valve_state = "Ready" current_port = self.get_current_port() - return f"Position set to {pos} ({current_port})" + success_msg = f"✅ 阀门已切换到位置 {pos} ({current_port}) {pos_emoji}" + + self.logger.info(success_msg) + return success_msg except ValueError as e: + error_msg = f"❌ 阀门切换失败: {str(e)}" self._status = "Error" self._valve_state = "Error" - return f"Error: {str(e)}" + self.logger.error(error_msg) + return error_msg def set_to_pump_position(self): - """切换到transfer pump位置(0号位)""" + """切换到transfer pump位置(0号位)🚰""" + self.logger.info(f"🚰 切换到泵位置...") return self.set_position(0) def set_to_port(self, port_number: int): """ - 切换到指定端口位置 + 切换到指定端口位置 🔌 Args: port_number: 端口号 (1-8) """ if port_number < 1 or port_number > self.max_positions: - raise ValueError(f"Port number must be between 1 and {self.max_positions}") + error_msg = f"端口号必须在 1-{self.max_positions} 范围内" + self.logger.error(f"❌ {error_msg}: 请求端口={port_number}") + raise ValueError(error_msg) + + self.logger.info(f"🔌 切换到端口 {port_number}...") return self.set_position(port_number) def open(self): - """打开阀门 - 设置到transfer pump位置(0号位)""" + """打开阀门 - 设置到transfer pump位置(0号位)🔓""" + self.logger.info(f"🔓 打开阀门,设置到泵位置...") return self.set_to_pump_position() def close(self): - """关闭阀门 - 对于多通阀门,设置到一个"关闭"状态""" + """关闭阀门 - 对于多通阀门,设置到一个"关闭"状态 🔒""" + self.logger.info(f"🔒 关闭阀门...") + self._status = "Busy" self._valve_state = "Closing" time.sleep(0.5) - + # 可以选择保持当前位置或设置特殊关闭状态 self._status = "Idle" self._valve_state = "Closed" - return f"Valve closed at position {self._current_position}" + close_msg = f"🔒 阀门已关闭,保持在位置 {self._current_position} ({self.get_current_port()})" + self.logger.info(close_msg) + return close_msg def get_valve_position(self) -> int: - """获取阀门位置 - 兼容性方法""" + """获取阀门位置 - 兼容性方法 📍""" return self._current_position def is_at_position(self, position: int) -> bool: - """检查是否在指定位置""" - return self._current_position == position + """检查是否在指定位置 🎯""" + result = self._current_position == position + # 删除debug日志:self.logger.debug(f"🎯 位置检查: 当前={self._current_position}, 目标={position}, 匹配={result}") + return result def is_at_pump_position(self) -> bool: - """检查是否在transfer pump位置""" - return self._current_position == 0 + """检查是否在transfer pump位置 🚰""" + result = self._current_position == 0 + # 删除debug日志:pump_status = "是" if result else "否" + # 删除debug日志:self.logger.debug(f"🚰 泵位置检查: {pump_status} (当前位置: {self._current_position})") + return result def is_at_port(self, port_number: int) -> bool: - """检查是否在指定端口位置""" - return self._current_position == port_number + """检查是否在指定端口位置 🔌""" + result = self._current_position == port_number + # 删除debug日志:port_status = "是" if result else "否" + # 删除debug日志:self.logger.debug(f"🔌 端口{port_number}检查: {port_status} (当前位置: {self._current_position})") + return result def get_available_positions(self) -> list: - """获取可用位置列表""" - return list(range(0, self.max_positions + 1)) + """获取可用位置列表 📋""" + positions = list(range(0, self.max_positions + 1)) + # 删除debug日志:self.logger.debug(f"📋 可用位置: {positions}") + return positions def get_available_ports(self) -> Dict[int, str]: - """获取可用端口映射""" + """获取可用端口映射 🗺️""" + # 删除debug日志:self.logger.debug(f"🗺️ 端口映射: {self.position_map}") return self.position_map.copy() def reset(self): - """重置阀门到transfer pump位置(0号位)""" + """重置阀门到transfer pump位置(0号位)🔄""" + self.logger.info(f"🔄 重置阀门到泵位置...") return self.set_position(0) def switch_between_pump_and_port(self, port_number: int): """ - 在transfer pump位置和指定端口之间切换 + 在transfer pump位置和指定端口之间切换 🔄 Args: port_number: 目标端口号 (1-8) """ if self._current_position == 0: # 当前在pump位置,切换到指定端口 + self.logger.info(f"🔄 从泵位置切换到端口 {port_number}...") return self.set_to_port(port_number) else: # 当前在某个端口,切换到pump位置 + self.logger.info(f"🔄 从端口 {self._current_position} 切换到泵位置...") return self.set_to_pump_position() def get_flow_path(self) -> str: - """获取当前流路路径描述""" + """获取当前流路路径描述 🌊""" current_port = self.get_current_port() if self._current_position == 0: - return f"Transfer pump connected (position {self._current_position})" + flow_path = f"🚰 转移泵已连接 (位置 {self._current_position})" else: - return f"Port {self._current_position} connected ({current_port})" + flow_path = f"🔌 端口 {self._current_position} 已连接 ({current_port})" + + # 删除debug日志:self.logger.debug(f"🌊 当前流路: {flow_path}") + return flow_path def get_info(self) -> dict: - """获取阀门详细信息""" - return { + """获取阀门详细信息 📊""" + info = { "port": self.port, "max_positions": self.max_positions, "total_positions": self.total_positions, @@ -188,18 +267,25 @@ class VirtualMultiwayValve: "flow_path": self.get_flow_path(), "position_map": self.position_map } + + # 删除debug日志:self.logger.debug(f"📊 阀门信息: 位置={self._current_position}, 状态={self._status}, 端口={self.get_current_port()}") + return info def __str__(self): - return f"VirtualMultiwayValve(Position: {self._current_position}/{self.max_positions}, Port: {self.get_current_port()}, Status: {self._status})" + current_port = self.get_current_port() + status_emoji = "✅" if self._status == "Idle" else "🔄" if self._status == "Busy" else "❌" + + return f"🔄 VirtualMultiwayValve({status_emoji} 位置: {self._current_position}/{self.max_positions}, 端口: {current_port}, 状态: {self._status})" def set_valve_position(self, command: Union[int, str]): """ - 设置阀门位置 - 兼容pump_protocol调用 + 设置阀门位置 - 兼容pump_protocol调用 🎯 这是set_position的别名方法,用于兼容pump_protocol.py Args: command: 目标位置 (0-8) 或位置字符串 """ + # 删除debug日志:self.logger.debug(f"🎯 兼容性调用: set_valve_position({command})") return self.set_position(command) @@ -207,25 +293,35 @@ class VirtualMultiwayValve: if __name__ == "__main__": valve = VirtualMultiwayValve() - print("=== 虚拟九通阀门测试 ===") - print(f"初始状态: {valve}") - print(f"当前流路: {valve.get_flow_path()}") + print("🔄 === 虚拟九通阀门测试 === ✨") + print(f"🏠 初始状态: {valve}") + print(f"🌊 当前流路: {valve.get_flow_path()}") # 切换到试剂瓶1(1号位) - print(f"\n切换到1号位: {valve.set_position(1)}") - print(f"当前状态: {valve}") + print(f"\n🔌 切换到1号位: {valve.set_position(1)}") + print(f"📍 当前状态: {valve}") # 切换到transfer pump位置(0号位) - print(f"\n切换到pump位置: {valve.set_to_pump_position()}") - print(f"当前状态: {valve}") + print(f"\n🚰 切换到pump位置: {valve.set_to_pump_position()}") + print(f"📍 当前状态: {valve}") # 切换到试剂瓶2(2号位) - print(f"\n切换到2号位: {valve.set_to_port(2)}") - print(f"当前状态: {valve}") + print(f"\n🔌 切换到2号位: {valve.set_to_port(2)}") + print(f"📍 当前状态: {valve}") # 显示所有可用位置 - print(f"\n可用位置: {valve.get_available_positions()}") - print(f"端口映射: {valve.get_available_ports()}") + print(f"\n📋 可用位置: {valve.get_available_positions()}") + print(f"🗺️ 端口映射: {valve.get_available_ports()}") # 获取详细信息 - print(f"\n详细信息: {valve.get_info()}") \ No newline at end of file + print(f"\n📊 详细信息: {valve.get_info()}") + + # 测试切换功能 + print(f"\n🔄 智能切换测试:") + print(f"当前位置: {valve._current_position}") + print(f"切换结果: {valve.switch_between_pump_and_port(3)}") + print(f"新位置: {valve._current_position}") + + # 重置测试 + print(f"\n🔄 重置测试: {valve.reset()}") + print(f"📍 重置后状态: {valve}") \ No newline at end of file diff --git a/unilabos/devices/virtual/virtual_rotavap.py b/unilabos/devices/virtual/virtual_rotavap.py index ba01c7b..61e66a3 100644 --- a/unilabos/devices/virtual/virtual_rotavap.py +++ b/unilabos/devices/virtual/virtual_rotavap.py @@ -3,9 +3,12 @@ import logging import time as time_module from typing import Dict, Any, Optional +def debug_print(message): + """调试输出 🔍""" + print(f"🌪️ [ROTAVAP] {message}", flush=True) class VirtualRotavap: - """Virtual rotary evaporator device - 简化版,只保留核心功能""" + """Virtual rotary evaporator device - 简化版,只保留核心功能 🌪️""" def __init__(self, device_id: Optional[str] = None, config: Optional[Dict[str, Any]] = None, **kwargs): # 处理可能的不同调用方式 @@ -32,13 +35,16 @@ class VirtualRotavap: if key not in skip_keys and not hasattr(self, key): setattr(self, key, value) + print(f"🌪️ === 虚拟旋转蒸发仪 {self.device_id} 已创建 === ✨") + print(f"🔥 温度范围: 10°C ~ {self._max_temp}°C | 🌀 转速范围: 10 ~ {self._max_rotation_speed} RPM") + async def initialize(self) -> bool: - """Initialize virtual rotary evaporator""" - self.logger.info(f"Initializing virtual rotary evaporator {self.device_id}") + """Initialize virtual rotary evaporator 🚀""" + self.logger.info(f"🔧 初始化虚拟旋转蒸发仪 {self.device_id} ✨") # 只保留核心状态 self.data.update({ - "status": "Idle", + "status": "🏠 待机中", "rotavap_state": "Ready", # Ready, Evaporating, Completed, Error "current_temp": 25.0, "target_temp": 25.0, @@ -47,22 +53,27 @@ class VirtualRotavap: "evaporated_volume": 0.0, "progress": 0.0, "remaining_time": 0.0, - "message": "Ready for evaporation" + "message": "🌪️ Ready for evaporation" }) + + self.logger.info(f"✅ 旋转蒸发仪 {self.device_id} 初始化完成 🌪️") + self.logger.info(f"📊 设备规格: 温度范围 10°C ~ {self._max_temp}°C | 转速范围 10 ~ {self._max_rotation_speed} RPM") return True async def cleanup(self) -> bool: - """Cleanup virtual rotary evaporator""" - self.logger.info(f"Cleaning up virtual rotary evaporator {self.device_id}") + """Cleanup virtual rotary evaporator 🧹""" + self.logger.info(f"🧹 清理虚拟旋转蒸发仪 {self.device_id} 🔚") self.data.update({ - "status": "Offline", + "status": "💤 离线", "rotavap_state": "Offline", "current_temp": 25.0, "rotation_speed": 0.0, "vacuum_pressure": 1.0, - "message": "System offline" + "message": "💤 System offline" }) + + self.logger.info(f"✅ 旋转蒸发仪 {self.device_id} 清理完成 💤") return True async def evaporate( @@ -70,46 +81,102 @@ class VirtualRotavap: vessel: str, pressure: float = 0.1, temp: float = 60.0, - time: float = 1800.0, # 30分钟默认 - stir_speed: float = 100.0 + time: float = 180.0, + stir_speed: float = 100.0, + solvent: str = "", + **kwargs ) -> bool: - """Execute evaporate action - 简化的蒸发流程""" - self.logger.info(f"Evaporate: vessel={vessel}, pressure={pressure} bar, temp={temp}°C, time={time}s, rotation={stir_speed} RPM") - + """Execute evaporate action - 简化版 🌪️""" + + # 🔧 新增:确保time参数是数值类型 + if isinstance(time, str): + try: + time = float(time) + except ValueError: + self.logger.error(f"❌ 无法转换时间参数 '{time}' 为数值,使用默认值180.0秒") + time = 180.0 + elif not isinstance(time, (int, float)): + self.logger.error(f"❌ 时间参数类型无效: {type(time)},使用默认值180.0秒") + time = 180.0 + + # 确保time是float类型 + time = float(time) + + # 🔧 简化处理:如果vessel就是设备自己,直接操作 + if vessel == self.device_id: + debug_print(f"🎯 在设备 {self.device_id} 上直接执行蒸发操作") + actual_vessel = self.device_id + else: + actual_vessel = vessel + + # 参数预处理 + if solvent: + self.logger.info(f"🧪 识别到溶剂: {solvent}") + # 根据溶剂调整参数 + solvent_lower = solvent.lower() + if any(s in solvent_lower for s in ['water', 'aqueous']): + temp = max(temp, 80.0) + pressure = max(pressure, 0.2) + self.logger.info(f"💧 水系溶剂:调整参数 → 温度 {temp}°C, 压力 {pressure} bar") + elif any(s in solvent_lower for s in ['ethanol', 'methanol', 'acetone']): + temp = min(temp, 50.0) + pressure = min(pressure, 0.05) + self.logger.info(f"⚡ 易挥发溶剂:调整参数 → 温度 {temp}°C, 压力 {pressure} bar") + + self.logger.info(f"🌪️ 开始蒸发操作: {actual_vessel}") + self.logger.info(f" 🥽 容器: {actual_vessel}") + self.logger.info(f" 🌡️ 温度: {temp}°C") + self.logger.info(f" 💨 真空度: {pressure} bar") + self.logger.info(f" ⏰ 时间: {time}s") + self.logger.info(f" 🌀 转速: {stir_speed} RPM") + if solvent: + self.logger.info(f" 🧪 溶剂: {solvent}") + # 验证参数 if temp > self._max_temp or temp < 10.0: - error_msg = f"温度 {temp}°C 超出范围 (10-{self._max_temp}°C)" - self.logger.error(error_msg) + error_msg = f"🌡️ 温度 {temp}°C 超出范围 (10-{self._max_temp}°C) ⚠️" + self.logger.error(f"❌ {error_msg}") self.data.update({ - "status": f"Error: {error_msg}", + "status": f"❌ 错误: 温度超出范围", "rotavap_state": "Error", + "current_temp": 25.0, + "progress": 0.0, + "evaporated_volume": 0.0, "message": error_msg }) return False if stir_speed > self._max_rotation_speed or stir_speed < 10.0: - error_msg = f"旋转速度 {stir_speed} RPM 超出范围 (10-{self._max_rotation_speed} RPM)" - self.logger.error(error_msg) + error_msg = f"🌀 旋转速度 {stir_speed} RPM 超出范围 (10-{self._max_rotation_speed} RPM) ⚠️" + self.logger.error(f"❌ {error_msg}") self.data.update({ - "status": f"Error: {error_msg}", + "status": f"❌ 错误: 转速超出范围", "rotavap_state": "Error", + "current_temp": 25.0, + "progress": 0.0, + "evaporated_volume": 0.0, "message": error_msg }) return False if pressure < 0.01 or pressure > 1.0: - error_msg = f"真空度 {pressure} bar 超出范围 (0.01-1.0 bar)" - self.logger.error(error_msg) + error_msg = f"💨 真空度 {pressure} bar 超出范围 (0.01-1.0 bar) ⚠️" + self.logger.error(f"❌ {error_msg}") self.data.update({ - "status": f"Error: {error_msg}", + "status": f"❌ 错误: 压力超出范围", "rotavap_state": "Error", + "current_temp": 25.0, + "progress": 0.0, + "evaporated_volume": 0.0, "message": error_msg }) return False - # 开始蒸发 + # 开始蒸发 - 🔧 现在time已经确保是float类型 + self.logger.info(f"🚀 启动蒸发程序! 预计用时 {time/60:.1f}分钟 ⏱️") + self.data.update({ - "status": f"蒸发中: {vessel}", + "status": f"🌪️ 蒸发中: {actual_vessel}", "rotavap_state": "Evaporating", "current_temp": temp, "target_temp": temp, @@ -118,13 +185,14 @@ class VirtualRotavap: "remaining_time": time, "progress": 0.0, "evaporated_volume": 0.0, - "message": f"Evaporating {vessel} at {temp}°C, {pressure} bar, {stir_speed} RPM" + "message": f"🌪️ Evaporating {actual_vessel} at {temp}°C, {pressure} bar, {stir_speed} RPM" }) try: # 蒸发过程 - 实时更新进度 start_time = time_module.time() total_time = time + last_logged_progress = 0 while True: current_time = time_module.time() @@ -132,18 +200,31 @@ class VirtualRotavap: remaining = max(0, total_time - elapsed) progress = min(100.0, (elapsed / total_time) * 100) - # 模拟蒸发体积 - evaporated_vol = progress * 0.8 # 假设最多蒸发80mL + # 模拟蒸发体积 - 根据溶剂类型调整 + if solvent and any(s in solvent.lower() for s in ['water', 'aqueous']): + evaporated_vol = progress * 0.6 # 水系溶剂蒸发慢 + elif solvent and any(s in solvent.lower() for s in ['ethanol', 'methanol', 'acetone']): + evaporated_vol = progress * 1.0 # 易挥发溶剂蒸发快 + else: + evaporated_vol = progress * 0.8 # 默认蒸发量 + + # 🔧 更新状态 - 确保包含所有必需字段 + status_msg = f"🌪️ 蒸发中: {actual_vessel} | 🌡️ {temp}°C | 💨 {pressure} bar | 🌀 {stir_speed} RPM | 📊 {progress:.1f}% | ⏰ 剩余: {remaining:.0f}s" - # 更新状态 self.data.update({ "remaining_time": remaining, "progress": progress, "evaporated_volume": evaporated_vol, - "status": f"蒸发中: {vessel} | {temp}°C | {pressure} bar | {progress:.1f}% | 剩余: {remaining:.0f}s", - "message": f"Evaporating: {progress:.1f}% complete, {remaining:.0f}s remaining" + "current_temp": temp, + "status": status_msg, + "message": f"🌪️ Evaporating: {progress:.1f}% complete, 💧 {evaporated_vol:.1f}mL evaporated, ⏰ {remaining:.0f}s remaining" }) + # 进度日志(每25%打印一次) + if progress >= 25 and int(progress) % 25 == 0 and int(progress) != last_logged_progress: + self.logger.info(f"📊 蒸发进度: {progress:.0f}% | 💧 已蒸发: {evaporated_vol:.1f}mL | ⏰ 剩余: {remaining:.0f}s ✨") + last_logged_progress = int(progress) + # 时间到了,退出循环 if remaining <= 0: break @@ -152,40 +233,59 @@ class VirtualRotavap: await asyncio.sleep(1.0) # 蒸发完成 - final_evaporated = 80.0 + if solvent and any(s in solvent.lower() for s in ['water', 'aqueous']): + final_evaporated = 60.0 # 水系溶剂 + elif solvent and any(s in solvent.lower() for s in ['ethanol', 'methanol', 'acetone']): + final_evaporated = 100.0 # 易挥发溶剂 + else: + final_evaporated = 80.0 # 默认 + self.data.update({ - "status": f"蒸发完成: {vessel} | 蒸发量: {final_evaporated:.1f}mL", + "status": f"✅ 蒸发完成: {actual_vessel} | 💧 蒸发量: {final_evaporated:.1f}mL", "rotavap_state": "Completed", "evaporated_volume": final_evaporated, "progress": 100.0, + "current_temp": temp, "remaining_time": 0.0, - "current_temp": 25.0, # 冷却下来 - "rotation_speed": 0.0, # 停止旋转 - "vacuum_pressure": 1.0, # 恢复大气压 - "message": f"Evaporation completed: {final_evaporated}mL evaporated from {vessel}" + "rotation_speed": 0.0, + "vacuum_pressure": 1.0, + "message": f"✅ Evaporation completed: {final_evaporated}mL evaporated from {actual_vessel}" }) - self.logger.info(f"Evaporation completed: {final_evaporated}mL evaporated from {vessel}") + self.logger.info(f"🎉 蒸发操作完成! ✨") + self.logger.info(f"📊 蒸发结果:") + self.logger.info(f" 🥽 容器: {actual_vessel}") + self.logger.info(f" 💧 蒸发量: {final_evaporated:.1f}mL") + self.logger.info(f" 🌡️ 蒸发温度: {temp}°C") + self.logger.info(f" 💨 真空度: {pressure} bar") + self.logger.info(f" 🌀 旋转速度: {stir_speed} RPM") + self.logger.info(f" ⏱️ 总用时: {total_time:.0f}s") + if solvent: + self.logger.info(f" 🧪 处理溶剂: {solvent} 🏁") + return True except Exception as e: # 出错处理 - self.logger.error(f"Error during evaporation: {str(e)}") + error_msg = f"蒸发过程中发生错误: {str(e)} 💥" + self.logger.error(f"❌ {error_msg}") self.data.update({ - "status": f"蒸发错误: {str(e)}", + "status": f"❌ 蒸发错误: {str(e)}", "rotavap_state": "Error", "current_temp": 25.0, + "progress": 0.0, + "evaporated_volume": 0.0, "rotation_speed": 0.0, "vacuum_pressure": 1.0, - "message": f"Evaporation failed: {str(e)}" + "message": f"❌ Evaporation failed: {str(e)}" }) return False # === 核心状态属性 === @property def status(self) -> str: - return self.data.get("status", "Unknown") + return self.data.get("status", "❓ Unknown") @property def rotavap_state(self) -> str: diff --git a/unilabos/devices/virtual/virtual_solenoid_valve.py b/unilabos/devices/virtual/virtual_solenoid_valve.py index f25cc84..54a1e6d 100644 --- a/unilabos/devices/virtual/virtual_solenoid_valve.py +++ b/unilabos/devices/virtual/virtual_solenoid_valve.py @@ -43,10 +43,25 @@ class VirtualSolenoidValve: def is_open(self) -> bool: return self._is_open - def get_valve_position(self) -> str: + @property + def valve_position(self) -> str: """获取阀门位置状态""" return "OPEN" if self._is_open else "CLOSED" + @property + def state(self) -> dict: + """获取阀门完整状态""" + return { + "device_id": self.device_id, + "port": self.port, + "voltage": self.voltage, + "response_time": self.response_time, + "is_open": self._is_open, + "valve_state": self._valve_state, + "status": self._status, + "position": self.valve_position + } + async def set_valve_position(self, command: str = None, **kwargs): """ 设置阀门位置 - ROS动作接口 @@ -91,7 +106,7 @@ class VirtualSolenoidValve: return { "success": True, "message": result_msg, - "valve_position": self.get_valve_position() + "valve_position": self.valve_position } async def open(self, **kwargs): @@ -102,21 +117,25 @@ class VirtualSolenoidValve: """关闭电磁阀 - ROS动作接口""" return await self.set_valve_position(command="CLOSED") - async def set_state(self, command: Union[bool, str], **kwargs): + async def set_status(self, string: str = None, **kwargs): """ - 设置阀门状态 - 兼容 SendCmd 类型 + 设置阀门状态 - 兼容 StrSingleInput 类型 Args: - command: True/False 或 "open"/"close" + string: "ON"/"OFF" 或 "OPEN"/"CLOSED" """ - if isinstance(command, bool): - cmd_str = "OPEN" if command else "CLOSED" - elif isinstance(command, str): - cmd_str = command - else: - return {"success": False, "message": "Invalid command type"} + if string is None: + return {"success": False, "message": "Missing string parameter"} - return await self.set_valve_position(command=cmd_str) + # 将 string 参数转换为 command 参数 + if string.upper() in ["ON", "OPEN"]: + command = "OPEN" + elif string.upper() in ["OFF", "CLOSED"]: + command = "CLOSED" + else: + command = string + + return await self.set_valve_position(command=command) def toggle(self): """切换阀门状态""" @@ -129,19 +148,6 @@ class VirtualSolenoidValve: """检查阀门是否关闭""" return not self._is_open - def get_state(self) -> dict: - """获取阀门完整状态""" - return { - "device_id": self.device_id, - "port": self.port, - "voltage": self.voltage, - "response_time": self.response_time, - "is_open": self._is_open, - "valve_state": self._valve_state, - "status": self._status, - "position": self.get_valve_position() - } - async def reset(self): """重置阀门到关闭状态""" return await self.close() \ No newline at end of file diff --git a/unilabos/devices/virtual/virtual_solid_dispenser.py b/unilabos/devices/virtual/virtual_solid_dispenser.py new file mode 100644 index 0000000..439c348 --- /dev/null +++ b/unilabos/devices/virtual/virtual_solid_dispenser.py @@ -0,0 +1,389 @@ +import asyncio +import logging +import re +from typing import Dict, Any, Optional + +class VirtualSolidDispenser: + """ + 虚拟固体粉末加样器 - 用于处理 Add Protocol 中的固体试剂添加 ⚗️ + + 特点: + - 高兼容性:缺少参数不报错 ✅ + - 智能识别:自动查找固体试剂瓶 🔍 + - 简单反馈:成功/失败 + 消息 📊 + """ + + def __init__(self, device_id: str = None, config: Dict[str, Any] = None, **kwargs): + self.device_id = device_id or "virtual_solid_dispenser" + self.config = config or {} + + # 设备参数 + self.max_capacity = float(self.config.get('max_capacity', 100.0)) # 最大加样量 (g) + self.precision = float(self.config.get('precision', 0.001)) # 精度 (g) + + # 状态变量 + self._status = "Idle" + self._current_reagent = "" + self._dispensed_amount = 0.0 + self._total_operations = 0 + + self.logger = logging.getLogger(f"VirtualSolidDispenser.{self.device_id}") + + print(f"⚗️ === 虚拟固体分配器 {self.device_id} 创建成功! === ✨") + print(f"📊 设备规格: 最大容量 {self.max_capacity}g | 精度 {self.precision}g 🎯") + + async def initialize(self) -> bool: + """初始化固体加样器 🚀""" + self.logger.info(f"🔧 初始化固体分配器 {self.device_id} ✨") + self._status = "Ready" + self._current_reagent = "" + self._dispensed_amount = 0.0 + + self.logger.info(f"✅ 固体分配器 {self.device_id} 初始化完成 ⚗️") + return True + + async def cleanup(self) -> bool: + """清理固体加样器 🧹""" + self.logger.info(f"🧹 清理固体分配器 {self.device_id} 🔚") + self._status = "Idle" + + self.logger.info(f"✅ 固体分配器 {self.device_id} 清理完成 💤") + return True + + def parse_mass_string(self, mass_str: str) -> float: + """ + 解析质量字符串为数值 (g) ⚖️ + + 支持格式: "2.9 g", "19.3g", "4.5 mg", "1.2 kg" 等 + """ + if not mass_str or not isinstance(mass_str, str): + return 0.0 + + # 移除空格并转小写 + mass_clean = mass_str.strip().lower() + + # 正则匹配数字和单位 + pattern = r'(\d+(?:\.\d+)?)\s*([a-z]*)' + match = re.search(pattern, mass_clean) + + if not match: + self.logger.debug(f"🔍 无法解析质量字符串: {mass_str}") + return 0.0 + + try: + value = float(match.group(1)) + unit = match.group(2) or 'g' # 默认单位 g + + # 单位转换为 g + unit_multipliers = { + 'g': 1.0, + 'gram': 1.0, + 'grams': 1.0, + 'mg': 0.001, + 'milligram': 0.001, + 'milligrams': 0.001, + 'kg': 1000.0, + 'kilogram': 1000.0, + 'kilograms': 1000.0, + 'μg': 0.000001, + 'ug': 0.000001, + 'microgram': 0.000001, + 'micrograms': 0.000001, + } + + multiplier = unit_multipliers.get(unit, 1.0) + result = value * multiplier + + self.logger.debug(f"⚖️ 质量解析: {mass_str} → {result:.6f}g (原值: {value} {unit})") + return result + + except (ValueError, TypeError): + self.logger.warning(f"⚠️ 无法解析质量字符串: {mass_str}") + return 0.0 + + def parse_mol_string(self, mol_str: str) -> float: + """ + 解析摩尔数字符串为数值 (mol) 🧮 + + 支持格式: "0.12 mol", "16.2 mmol", "25.2mmol" 等 + """ + if not mol_str or not isinstance(mol_str, str): + return 0.0 + + # 移除空格并转小写 + mol_clean = mol_str.strip().lower() + + # 正则匹配数字和单位 + pattern = r'(\d+(?:\.\d+)?)\s*(m?mol)' + match = re.search(pattern, mol_clean) + + if not match: + self.logger.debug(f"🔍 无法解析摩尔数字符串: {mol_str}") + return 0.0 + + try: + value = float(match.group(1)) + unit = match.group(2) + + # 单位转换为 mol + if unit == 'mmol': + result = value * 0.001 + else: # mol + result = value + + self.logger.debug(f"🧮 摩尔数解析: {mol_str} → {result:.6f}mol (原值: {value} {unit})") + return result + + except (ValueError, TypeError): + self.logger.warning(f"⚠️ 无法解析摩尔数字符串: {mol_str}") + return 0.0 + + def find_solid_reagent_bottle(self, reagent_name: str) -> str: + """ + 查找固体试剂瓶 🔍 + + 这是一个简化版本,实际使用时应该连接到系统的设备图 + """ + if not reagent_name: + self.logger.debug(f"🔍 未指定试剂名称,使用默认瓶") + return "unknown_solid_bottle" + + # 可能的固体试剂瓶命名模式 + possible_names = [ + f"solid_bottle_{reagent_name}", + f"reagent_solid_{reagent_name}", + f"powder_{reagent_name}", + f"{reagent_name}_solid", + f"{reagent_name}_powder", + f"solid_{reagent_name}", + ] + + # 这里简化处理,实际应该查询设备图 + selected_bottle = possible_names[0] + self.logger.debug(f"🔍 为试剂 {reagent_name} 选择试剂瓶: {selected_bottle}") + return selected_bottle + + async def add_solid( + self, + vessel: str, + reagent: str, + mass: str = "", + mol: str = "", + purpose: str = "", + **kwargs # 兼容额外参数 + ) -> Dict[str, Any]: + """ + 添加固体试剂的主要方法 ⚗️ + + Args: + vessel: 目标容器 + reagent: 试剂名称 + mass: 质量字符串 (如 "2.9 g") + mol: 摩尔数字符串 (如 "0.12 mol") + purpose: 添加目的 + **kwargs: 其他兼容参数 + + Returns: + Dict: 操作结果 + """ + try: + self.logger.info(f"⚗️ === 开始固体加样操作 === ✨") + self.logger.info(f" 🥽 目标容器: {vessel}") + self.logger.info(f" 🧪 试剂: {reagent}") + self.logger.info(f" ⚖️ 质量: {mass}") + self.logger.info(f" 🧮 摩尔数: {mol}") + self.logger.info(f" 📝 目的: {purpose}") + + # 参数验证 - 宽松处理 + if not vessel: + vessel = "main_reactor" # 默认容器 + self.logger.warning(f"⚠️ 未指定容器,使用默认容器: {vessel} 🏠") + + if not reagent: + error_msg = "❌ 错误: 必须指定试剂名称" + self.logger.error(error_msg) + return { + "success": False, + "message": error_msg, + "return_info": "missing_reagent" + } + + # 解析质量和摩尔数 + mass_value = self.parse_mass_string(mass) + mol_value = self.parse_mol_string(mol) + + self.logger.info(f"📊 解析结果 - 质量: {mass_value:.6f}g | 摩尔数: {mol_value:.6f}mol") + + # 确定实际加样量 + if mass_value > 0: + actual_amount = mass_value + amount_unit = "g" + amount_emoji = "⚖️" + self.logger.info(f"⚖️ 按质量加样: {actual_amount:.6f} {amount_unit}") + elif mol_value > 0: + # 简化处理:假设分子量为100 g/mol + assumed_mw = 100.0 + actual_amount = mol_value * assumed_mw + amount_unit = "g (from mol)" + amount_emoji = "🧮" + self.logger.info(f"🧮 按摩尔数加样: {mol_value:.6f} mol → {actual_amount:.6f} g (假设分子量 {assumed_mw})") + else: + # 没有指定量,使用默认值 + actual_amount = 1.0 + amount_unit = "g (default)" + amount_emoji = "🎯" + self.logger.warning(f"⚠️ 未指定质量或摩尔数,使用默认值: {actual_amount} {amount_unit} 🎯") + + # 检查容量限制 + if actual_amount > self.max_capacity: + error_msg = f"❌ 错误: 请求量 {actual_amount:.3f}g 超过最大容量 {self.max_capacity}g" + self.logger.error(error_msg) + return { + "success": False, + "message": error_msg, + "return_info": "exceeds_capacity" + } + + # 查找试剂瓶 + reagent_bottle = self.find_solid_reagent_bottle(reagent) + self.logger.info(f"🔍 使用试剂瓶: {reagent_bottle}") + + # 模拟加样过程 + self._status = "Dispensing" + self._current_reagent = reagent + + # 计算操作时间 (基于质量) + operation_time = max(0.5, actual_amount * 0.1) # 每克0.1秒,最少0.5秒 + + self.logger.info(f"🚀 开始加样,预计时间: {operation_time:.1f}秒 ⏱️") + + # 显示进度的模拟 + steps = max(3, int(operation_time)) + step_time = operation_time / steps + + for i in range(steps): + progress = (i + 1) / steps * 100 + await asyncio.sleep(step_time) + if i % 2 == 0: # 每隔一步显示进度 + self.logger.debug(f"📊 加样进度: {progress:.0f}% | {amount_emoji} 正在分配 {reagent}...") + + # 更新状态 + self._dispensed_amount = actual_amount + self._total_operations += 1 + self._status = "Ready" + + # 成功结果 + success_message = f"✅ 成功添加 {reagent} {actual_amount:.6f} {amount_unit} 到 {vessel}" + + self.logger.info(f"🎉 === 固体加样完成 === ✨") + self.logger.info(f"📊 操作结果:") + self.logger.info(f" ✅ {success_message}") + self.logger.info(f" 🧪 试剂瓶: {reagent_bottle}") + self.logger.info(f" ⏱️ 用时: {operation_time:.1f}秒") + self.logger.info(f" 🎯 总操作次数: {self._total_operations} 🏁") + + return { + "success": True, + "message": success_message, + "return_info": f"dispensed_{actual_amount:.6f}g", + "dispensed_amount": actual_amount, + "reagent": reagent, + "vessel": vessel + } + + except Exception as e: + error_message = f"❌ 固体加样失败: {str(e)} 💥" + self.logger.error(error_message) + self._status = "Error" + + return { + "success": False, + "message": error_message, + "return_info": "operation_failed" + } + + # 状态属性 + @property + def status(self) -> str: + return self._status + + @property + def current_reagent(self) -> str: + return self._current_reagent + + @property + def dispensed_amount(self) -> float: + return self._dispensed_amount + + @property + def total_operations(self) -> int: + return self._total_operations + + def get_device_info(self) -> Dict[str, Any]: + """获取设备状态信息 📊""" + info = { + "device_id": self.device_id, + "status": self._status, + "current_reagent": self._current_reagent, + "last_dispensed_amount": self._dispensed_amount, + "total_operations": self._total_operations, + "max_capacity": self.max_capacity, + "precision": self.precision + } + + self.logger.debug(f"📊 设备信息: 状态={self._status}, 试剂={self._current_reagent}, 加样量={self._dispensed_amount:.6f}g") + return info + + def __str__(self): + status_emoji = "✅" if self._status == "Ready" else "🔄" if self._status == "Dispensing" else "❌" if self._status == "Error" else "🏠" + return f"⚗️ VirtualSolidDispenser({status_emoji} {self.device_id}: {self._status}, 最后加样 {self._dispensed_amount:.3f}g)" + + +# 测试函数 +async def test_solid_dispenser(): + """测试固体加样器 🧪""" + print("⚗️ === 固体加样器测试开始 === 🧪") + + dispenser = VirtualSolidDispenser("test_dispenser") + await dispenser.initialize() + + # 测试1: 按质量加样 + print(f"\n🧪 测试1: 按质量加样...") + result1 = await dispenser.add_solid( + vessel="main_reactor", + reagent="magnesium", + mass="2.9 g" + ) + print(f"📊 测试1结果: {result1}") + + # 测试2: 按摩尔数加样 + print(f"\n🧮 测试2: 按摩尔数加样...") + result2 = await dispenser.add_solid( + vessel="main_reactor", + reagent="sodium_nitrite", + mol="0.28 mol" + ) + print(f"📊 测试2结果: {result2}") + + # 测试3: 缺少参数 + print(f"\n⚠️ 测试3: 缺少参数测试...") + result3 = await dispenser.add_solid( + reagent="test_compound" + ) + print(f"📊 测试3结果: {result3}") + + # 测试4: 超容量测试 + print(f"\n❌ 测试4: 超容量测试...") + result4 = await dispenser.add_solid( + vessel="main_reactor", + reagent="heavy_compound", + mass="150 g" # 超过100g限制 + ) + print(f"📊 测试4结果: {result4}") + + print(f"\n📊 最终设备信息: {dispenser.get_device_info()}") + print(f"✅ === 测试完成 === 🎉") + + +if __name__ == "__main__": + asyncio.run(test_solid_dispenser()) \ No newline at end of file diff --git a/unilabos/devices/virtual/virtual_stirrer.py b/unilabos/devices/virtual/virtual_stirrer.py index 874f997..2b9058b 100644 --- a/unilabos/devices/virtual/virtual_stirrer.py +++ b/unilabos/devices/virtual/virtual_stirrer.py @@ -4,7 +4,7 @@ import time as time_module from typing import Dict, Any class VirtualStirrer: - """Virtual stirrer device for StirProtocol testing - 功能完整版""" + """Virtual stirrer device for StirProtocol testing - 功能完整版 🌪️""" def __init__(self, device_id: str = None, config: Dict[str, Any] = None, **kwargs): # 处理可能的不同调用方式 @@ -30,45 +30,69 @@ class VirtualStirrer: for key, value in kwargs.items(): if key not in skip_keys and not hasattr(self, key): setattr(self, key, value) + + print(f"🌪️ === 虚拟搅拌器 {self.device_id} 已创建 === ✨") + print(f"🔧 速度范围: {self._min_speed} ~ {self._max_speed} RPM | 📱 端口: {self.port}") async def initialize(self) -> bool: - """Initialize virtual stirrer""" - self.logger.info(f"Initializing virtual stirrer {self.device_id}") + """Initialize virtual stirrer 🚀""" + self.logger.info(f"🔧 初始化虚拟搅拌器 {self.device_id} ✨") # 初始化状态信息 self.data.update({ - "status": "Idle", + "status": "🏠 待机中", "operation_mode": "Idle", # 操作模式: Idle, Stirring, Settling, Completed, Error "current_vessel": "", # 当前搅拌的容器 "current_speed": 0.0, # 当前搅拌速度 "is_stirring": False, # 是否正在搅拌 "remaining_time": 0.0, # 剩余时间 }) + + self.logger.info(f"✅ 搅拌器 {self.device_id} 初始化完成 🌪️") + self.logger.info(f"📊 设备规格: 速度范围 {self._min_speed} ~ {self._max_speed} RPM") return True async def cleanup(self) -> bool: - """Cleanup virtual stirrer""" - self.logger.info(f"Cleaning up virtual stirrer {self.device_id}") + """Cleanup virtual stirrer 🧹""" + self.logger.info(f"🧹 清理虚拟搅拌器 {self.device_id} 🔚") + self.data.update({ - "status": "Offline", + "status": "💤 离线", "operation_mode": "Offline", "current_vessel": "", "current_speed": 0.0, "is_stirring": False, "remaining_time": 0.0, }) + + self.logger.info(f"✅ 搅拌器 {self.device_id} 清理完成 💤") return True - async def stir(self, stir_time: float, stir_speed: float, settling_time: float) -> bool: - """Execute stir action - 定时搅拌 + 沉降""" - self.logger.info(f"Stir: speed={stir_speed} RPM, time={stir_time}s, settling={settling_time}s") + async def stir(self, stir_time: float, stir_speed: float, settling_time: float, **kwargs) -> bool: + """Execute stir action - 定时搅拌 + 沉降 🌪️""" + + # 🔧 类型转换 - 确保所有参数都是数字类型 + try: + stir_time = float(stir_time) + stir_speed = float(stir_speed) + settling_time = float(settling_time) + except (ValueError, TypeError) as e: + error_msg = f"参数类型转换失败: stir_time={stir_time}, stir_speed={stir_speed}, settling_time={settling_time}, error={e}" + self.logger.error(f"❌ {error_msg}") + self.data.update({ + "status": f"❌ 错误: {error_msg}", + "operation_mode": "Error" + }) + return False + + self.logger.info(f"🌪️ 开始搅拌操作: 速度 {stir_speed} RPM | 时间 {stir_time}s | 沉降 {settling_time}s") # 验证参数 if stir_speed > self._max_speed or stir_speed < self._min_speed: - error_msg = f"搅拌速度 {stir_speed} RPM 超出范围 ({self._min_speed} - {self._max_speed} RPM)" - self.logger.error(error_msg) + error_msg = f"🌪️ 搅拌速度 {stir_speed} RPM 超出范围 ({self._min_speed} - {self._max_speed} RPM) ⚠️" + self.logger.error(f"❌ {error_msg}") self.data.update({ - "status": f"Error: {error_msg}", + "status": f"❌ 错误: 速度超出范围", "operation_mode": "Error" }) return False @@ -77,8 +101,10 @@ class VirtualStirrer: start_time = time_module.time() total_stir_time = stir_time + self.logger.info(f"🚀 开始搅拌阶段: {stir_speed} RPM × {total_stir_time}s ⏱️") + self.data.update({ - "status": f"搅拌中: {stir_speed} RPM | 剩余: {total_stir_time:.0f}s", + "status": f"🌪️ 搅拌中: {stir_speed} RPM | ⏰ 剩余: {total_stir_time:.0f}s", "operation_mode": "Stirring", "current_speed": stir_speed, "is_stirring": True, @@ -86,30 +112,41 @@ class VirtualStirrer: }) # 搅拌过程 - 实时更新剩余时间 + last_logged_time = 0 while True: current_time = time_module.time() elapsed = current_time - start_time remaining = max(0, total_stir_time - elapsed) + progress = (elapsed / total_stir_time) * 100 if total_stir_time > 0 else 100 # 更新状态 self.data.update({ "remaining_time": remaining, - "status": f"搅拌中: {stir_speed} RPM | 剩余: {remaining:.0f}s" + "status": f"🌪️ 搅拌中: {stir_speed} RPM | ⏰ 剩余: {remaining:.0f}s" }) + # 进度日志(每25%打印一次) + if progress >= 25 and int(progress) % 25 == 0 and int(progress) != last_logged_time: + self.logger.info(f"📊 搅拌进度: {progress:.0f}% | 🌪️ {stir_speed} RPM | ⏰ 剩余: {remaining:.0f}s ✨") + last_logged_time = int(progress) + # 搅拌时间到了 if remaining <= 0: break await asyncio.sleep(1.0) + self.logger.info(f"✅ 搅拌阶段完成! 🌪️ {stir_speed} RPM × {stir_time}s") + # === 第二阶段:沉降(如果需要)=== if settling_time > 0: start_settling_time = time_module.time() total_settling_time = settling_time + self.logger.info(f"🛑 开始沉降阶段: 停止搅拌 × {total_settling_time}s ⏱️") + self.data.update({ - "status": f"沉降中: 停止搅拌 | 剩余: {total_settling_time:.0f}s", + "status": f"🛑 沉降中: 停止搅拌 | ⏰ 剩余: {total_settling_time:.0f}s", "operation_mode": "Settling", "current_speed": 0.0, "is_stirring": False, @@ -117,52 +154,87 @@ class VirtualStirrer: }) # 沉降过程 - 实时更新剩余时间 + last_logged_settling = 0 while True: current_time = time_module.time() elapsed = current_time - start_settling_time remaining = max(0, total_settling_time - elapsed) + progress = (elapsed / total_settling_time) * 100 if total_settling_time > 0 else 100 # 更新状态 self.data.update({ "remaining_time": remaining, - "status": f"沉降中: 停止搅拌 | 剩余: {remaining:.0f}s" + "status": f"🛑 沉降中: 停止搅拌 | ⏰ 剩余: {remaining:.0f}s" }) + # 进度日志(每25%打印一次) + if progress >= 25 and int(progress) % 25 == 0 and int(progress) != last_logged_settling: + self.logger.info(f"📊 沉降进度: {progress:.0f}% | 🛑 静置中 | ⏰ 剩余: {remaining:.0f}s ✨") + last_logged_settling = int(progress) + # 沉降时间到了 if remaining <= 0: break await asyncio.sleep(1.0) + + self.logger.info(f"✅ 沉降阶段完成! 🛑 静置 {settling_time}s") # === 操作完成 === - settling_info = f" | 沉降: {settling_time:.0f}s" if settling_time > 0 else "" + settling_info = f" | 🛑 沉降: {settling_time:.0f}s" if settling_time > 0 else "" + self.data.update({ - "status": f"完成: 搅拌 {stir_speed} RPM, {stir_time:.0f}s{settling_info}", + "status": f"✅ 完成: 🌪️ 搅拌 {stir_speed} RPM × {stir_time:.0f}s{settling_info}", "operation_mode": "Completed", "current_speed": 0.0, "is_stirring": False, "remaining_time": 0.0, }) - self.logger.info(f"Stir completed: {stir_speed} RPM for {stir_time}s + settling {settling_time}s") + self.logger.info(f"🎉 搅拌操作完成! ✨") + self.logger.info(f"📊 操作总结:") + self.logger.info(f" 🌪️ 搅拌: {stir_speed} RPM × {stir_time}s") + if settling_time > 0: + self.logger.info(f" 🛑 沉降: {settling_time}s") + self.logger.info(f" ⏱️ 总用时: {(stir_time + settling_time):.0f}s 🏁") + return True - async def start_stir(self, vessel: str, stir_speed: float, purpose: str) -> bool: - """Start stir action - 开始持续搅拌""" - self.logger.info(f"StartStir: vessel={vessel}, speed={stir_speed} RPM, purpose={purpose}") + async def start_stir(self, vessel: str, stir_speed: float, purpose: str = "") -> bool: + """Start stir action - 开始持续搅拌 🔄""" - # 验证参数 - if stir_speed > self._max_speed or stir_speed < self._min_speed: - error_msg = f"搅拌速度 {stir_speed} RPM 超出范围 ({self._min_speed} - {self._max_speed} RPM)" - self.logger.error(error_msg) + # 🔧 类型转换 + try: + stir_speed = float(stir_speed) + vessel = str(vessel) + purpose = str(purpose) + except (ValueError, TypeError) as e: + error_msg = f"参数类型转换错误: {str(e)}" + self.logger.error(f"❌ {error_msg}") self.data.update({ - "status": f"Error: {error_msg}", + "status": f"❌ 错误: {error_msg}", "operation_mode": "Error" }) return False + self.logger.info(f"🔄 启动持续搅拌: {vessel} | 🌪️ {stir_speed} RPM") + if purpose: + self.logger.info(f"📝 搅拌目的: {purpose}") + + # 验证参数 + if stir_speed > self._max_speed or stir_speed < self._min_speed: + error_msg = f"🌪️ 搅拌速度 {stir_speed} RPM 超出范围 ({self._min_speed} - {self._max_speed} RPM) ⚠️" + self.logger.error(f"❌ {error_msg}") + self.data.update({ + "status": f"❌ 错误: 速度超出范围", + "operation_mode": "Error" + }) + return False + + purpose_info = f" | 📝 {purpose}" if purpose else "" + self.data.update({ - "status": f"启动: 持续搅拌 {vessel} at {stir_speed} RPM | {purpose}", + "status": f"🔄 启动: 持续搅拌 {vessel} | 🌪️ {stir_speed} RPM{purpose_info}", "operation_mode": "Stirring", "current_vessel": vessel, "current_speed": stir_speed, @@ -170,16 +242,28 @@ class VirtualStirrer: "remaining_time": -1.0, # -1 表示持续运行 }) + self.logger.info(f"✅ 持续搅拌已启动! 🌪️ {stir_speed} RPM × ♾️ 🚀") return True async def stop_stir(self, vessel: str) -> bool: - """Stop stir action - 停止搅拌""" - self.logger.info(f"StopStir: vessel={vessel}") + """Stop stir action - 停止搅拌 🛑""" + + # 🔧 类型转换 + try: + vessel = str(vessel) + except (ValueError, TypeError) as e: + error_msg = f"参数类型转换错误: {str(e)}" + self.logger.error(f"❌ {error_msg}") + return False current_speed = self.data.get("current_speed", 0.0) + self.logger.info(f"🛑 停止搅拌: {vessel}") + if current_speed > 0: + self.logger.info(f"🌪️ 之前搅拌速度: {current_speed} RPM") + self.data.update({ - "status": f"已停止: {vessel} 搅拌停止 | 之前速度: {current_speed} RPM", + "status": f"🛑 已停止: {vessel} 搅拌停止 | 之前速度: {current_speed} RPM", "operation_mode": "Stopped", "current_vessel": "", "current_speed": 0.0, @@ -187,12 +271,13 @@ class VirtualStirrer: "remaining_time": 0.0, }) + self.logger.info(f"✅ 搅拌器已停止 {vessel} 的搅拌操作 🏁") return True # 状态属性 @property def status(self) -> str: - return self.data.get("status", "Idle") + return self.data.get("status", "🏠 待机中") @property def operation_mode(self) -> str: @@ -212,4 +297,33 @@ class VirtualStirrer: @property def remaining_time(self) -> float: - return self.data.get("remaining_time", 0.0) \ No newline at end of file + return self.data.get("remaining_time", 0.0) + + @property + def max_speed(self) -> float: + return self._max_speed + + @property + def min_speed(self) -> float: + return self._min_speed + + def get_device_info(self) -> Dict[str, Any]: + """获取设备状态信息 📊""" + info = { + "device_id": self.device_id, + "status": self.status, + "operation_mode": self.operation_mode, + "current_vessel": self.current_vessel, + "current_speed": self.current_speed, + "is_stirring": self.is_stirring, + "remaining_time": self.remaining_time, + "max_speed": self._max_speed, + "min_speed": self._min_speed + } + + self.logger.debug(f"📊 设备信息: 模式={self.operation_mode}, 速度={self.current_speed} RPM, 搅拌={self.is_stirring}") + return info + + def __str__(self): + status_emoji = "✅" if self.operation_mode == "Idle" else "🌪️" if self.operation_mode == "Stirring" else "🛑" if self.operation_mode == "Settling" else "❌" + return f"🌪️ VirtualStirrer({status_emoji} {self.device_id}: {self.operation_mode}, {self.current_speed} RPM)" \ No newline at end of file diff --git a/unilabos/devices/virtual/virtual_transferpump.py b/unilabos/devices/virtual/virtual_transferpump.py index a2cba9c..7d80744 100644 --- a/unilabos/devices/virtual/virtual_transferpump.py +++ b/unilabos/devices/virtual/virtual_transferpump.py @@ -12,7 +12,7 @@ class VirtualPumpMode(Enum): class VirtualTransferPump: - """虚拟转移泵类 - 模拟泵的基本功能,无需实际硬件""" + """虚拟转移泵类 - 模拟泵的基本功能,无需实际硬件 🚰""" def __init__(self, device_id: str = None, config: dict = None, **kwargs): """ @@ -42,20 +42,31 @@ class VirtualTransferPump: self._max_velocity = 5.0 # float self._current_volume = 0.0 # float + # 🚀 新增:快速模式设置 - 大幅缩短执行时间 + self._fast_mode = True # 是否启用快速模式 + self._fast_move_time = 1.0 # 快速移动时间(秒) + self._fast_dispense_time = 1.0 # 快速喷射时间(秒) + self.logger = logging.getLogger(f"VirtualTransferPump.{self.device_id}") + + print(f"🚰 === 虚拟转移泵 {self.device_id} 已创建 === ✨") + print(f"💨 快速模式: {'启用' if self._fast_mode else '禁用'} | 移动时间: {self._fast_move_time}s | 喷射时间: {self._fast_dispense_time}s") + print(f"📊 最大容量: {self.max_volume}mL | 端口: {self.port}") async def initialize(self) -> bool: - """初始化虚拟泵""" - self.logger.info(f"Initializing virtual pump {self.device_id}") + """初始化虚拟泵 🚀""" + self.logger.info(f"🔧 初始化虚拟转移泵 {self.device_id} ✨") self._status = "Idle" self._position = 0.0 self._current_volume = 0.0 + self.logger.info(f"✅ 转移泵 {self.device_id} 初始化完成 🚰") return True async def cleanup(self) -> bool: - """清理虚拟泵""" - self.logger.info(f"Cleaning up virtual pump {self.device_id}") + """清理虚拟泵 🧹""" + self.logger.info(f"🧹 清理虚拟转移泵 {self.device_id} 🔚") self._status = "Idle" + self.logger.info(f"✅ 转移泵 {self.device_id} 清理完成 💤") return True # 基本属性 @@ -65,12 +76,12 @@ class VirtualTransferPump: @property def position(self) -> float: - """当前柱塞位置 (ml)""" + """当前柱塞位置 (ml) 📍""" return self._position @property def current_volume(self) -> float: - """当前注射器中的体积 (ml)""" + """当前注射器中的体积 (ml) 💧""" return self._current_volume @property @@ -82,22 +93,50 @@ class VirtualTransferPump: return self._transfer_rate def set_max_velocity(self, velocity: float): - """设置最大速度 (ml/s)""" + """设置最大速度 (ml/s) 🌊""" self._max_velocity = max(0.1, min(50.0, velocity)) # 限制在合理范围内 - self.logger.info(f"Set max velocity to {self._max_velocity} ml/s") + self.logger.info(f"🌊 设置最大速度为 {self._max_velocity} mL/s") def get_status(self) -> str: - """获取泵状态""" + """获取泵状态 📋""" return self._status async def _simulate_operation(self, duration: float): - """模拟操作延时""" + """模拟操作延时 ⏱️""" self._status = "Busy" await asyncio.sleep(duration) self._status = "Idle" def _calculate_duration(self, volume: float, velocity: float = None) -> float: - """计算操作持续时间""" + """ + 计算操作持续时间 ⏰ + 🚀 快速模式:保留计算逻辑用于日志显示,但实际使用固定的快速时间 + """ + if velocity is None: + velocity = self._max_velocity + + # 📊 计算理论时间(用于日志显示) + theoretical_duration = abs(volume) / velocity + + # 🚀 如果启用快速模式,使用固定的快速时间 + if self._fast_mode: + # 根据操作类型选择快速时间 + if abs(volume) > 0.1: # 大于0.1mL的操作 + actual_duration = self._fast_move_time + else: # 很小的操作 + actual_duration = 0.5 + + self.logger.debug(f"⚡ 快速模式: 理论时间 {theoretical_duration:.2f}s → 实际时间 {actual_duration:.2f}s") + return actual_duration + else: + # 正常模式使用理论时间 + return theoretical_duration + + def _calculate_display_duration(self, volume: float, velocity: float = None) -> float: + """ + 计算显示用的持续时间(用于日志) 📊 + 这个函数返回理论计算时间,用于日志显示 + """ if velocity is None: velocity = self._max_velocity return abs(volume) / velocity @@ -105,7 +144,7 @@ class VirtualTransferPump: # 新的set_position方法 - 专门用于SetPumpPosition动作 async def set_position(self, position: float, max_velocity: float = None): """ - 移动到绝对位置 - 专门用于SetPumpPosition动作 + 移动到绝对位置 - 专门用于SetPumpPosition动作 🎯 Args: position (float): 目标位置 (ml) @@ -122,56 +161,107 @@ class VirtualTransferPump: # 限制位置在有效范围内 target_position = max(0.0, min(float(self.max_volume), target_position)) - # 计算移动距离和时间 + # 计算移动距离 volume_to_move = abs(target_position - self._position) - duration = self._calculate_duration(volume_to_move, velocity) - self.logger.info(f"SET_POSITION: Moving to {target_position} ml (current: {self._position} ml), velocity: {velocity} ml/s") + # 📊 计算显示用的时间(用于日志) + display_duration = self._calculate_display_duration(volume_to_move, velocity) - # 模拟移动过程 - start_position = self._position - steps = 10 if duration > 0.1 else 1 # 如果移动距离很小,只用1步 - step_duration = duration / steps if steps > 1 else duration + # ⚡ 计算实际执行时间(快速模式) + actual_duration = self._calculate_duration(volume_to_move, velocity) - for i in range(steps + 1): - # 计算当前位置和进度 - progress = (i / steps) * 100 if steps > 0 else 100 - current_pos = start_position + (target_position - start_position) * (i / steps) if steps > 0 else target_position + # 🎯 确定操作类型和emoji + if target_position > self._position: + operation_type = "吸液" + operation_emoji = "📥" + elif target_position < self._position: + operation_type = "排液" + operation_emoji = "📤" + else: + operation_type = "保持" + operation_emoji = "📍" + + self.logger.info(f"🎯 SET_POSITION: {operation_type} {operation_emoji}") + self.logger.info(f" 📍 位置: {self._position:.2f}mL → {target_position:.2f}mL (移动 {volume_to_move:.2f}mL)") + self.logger.info(f" 🌊 速度: {velocity:.2f} mL/s") + self.logger.info(f" ⏰ 预计时间: {display_duration:.2f}s") + + if self._fast_mode: + self.logger.info(f" ⚡ 快速模式: 实际用时 {actual_duration:.2f}s") + + # 🚀 模拟移动过程 + if volume_to_move > 0.01: # 只有当移动距离足够大时才显示进度 + start_position = self._position + steps = 5 if actual_duration > 0.5 else 2 # 根据实际时间调整步数 + step_duration = actual_duration / steps - # 更新状态 - self._status = "Moving" if i < steps else "Idle" - self._position = current_pos - self._current_volume = current_pos + self.logger.info(f"🚀 开始{operation_type}... {operation_emoji}") - # 等待一小步时间 - if i < steps and step_duration > 0: - await asyncio.sleep(step_duration) + for i in range(steps + 1): + # 计算当前位置和进度 + progress = (i / steps) * 100 if steps > 0 else 100 + current_pos = start_position + (target_position - start_position) * (i / steps) if steps > 0 else target_position + + # 更新状态 + if i < steps: + self._status = f"{operation_type}中" + status_emoji = "🔄" + else: + self._status = "Idle" + status_emoji = "✅" + + self._position = current_pos + self._current_volume = current_pos + + # 显示进度(每25%或最后一步) + if i == 0: + self.logger.debug(f" 🔄 {operation_type}开始: {progress:.0f}%") + elif progress >= 50 and i == steps // 2: + self.logger.debug(f" 🔄 {operation_type}进度: {progress:.0f}%") + elif i == steps: + self.logger.info(f" ✅ {operation_type}完成: {progress:.0f}% | 当前位置: {current_pos:.2f}mL") + + # 等待一小步时间 + if i < steps and step_duration > 0: + await asyncio.sleep(step_duration) + else: + # 移动距离很小,直接完成 + self._position = target_position + self._current_volume = target_position + self.logger.info(f" 📍 微调完成: {target_position:.2f}mL") # 确保最终位置准确 self._position = target_position self._current_volume = target_position self._status = "Idle" - self.logger.info(f"SET_POSITION: Reached position {self._position} ml, current volume: {self._current_volume} ml") + # 📊 最终状态日志 + if volume_to_move > 0.01: + self.logger.info(f"🎉 SET_POSITION 完成! 📍 最终位置: {self._position:.2f}mL | 💧 当前体积: {self._current_volume:.2f}mL") # 返回符合action定义的结果 return { "success": True, - "message": f"Successfully moved to position {self._position} ml" + "message": f"✅ 成功移动到位置 {self._position:.2f}mL ({operation_type})", + "final_position": self._position, + "final_volume": self._current_volume, + "operation_type": operation_type } except Exception as e: - error_msg = f"Failed to set position: {str(e)}" + error_msg = f"❌ 设置位置失败: {str(e)}" self.logger.error(error_msg) return { "success": False, - "message": error_msg + "message": error_msg, + "final_position": self._position, + "final_volume": self._current_volume } # 其他泵操作方法 async def pull_plunger(self, volume: float, velocity: float = None): """ - 拉取柱塞(吸液) + 拉取柱塞(吸液) 📥 Args: volume (float): 要拉取的体积 (ml) @@ -181,23 +271,29 @@ class VirtualTransferPump: actual_volume = new_position - self._position if actual_volume <= 0: - self.logger.warning("Cannot pull - already at maximum volume") + self.logger.warning("⚠️ 无法吸液 - 已达到最大容量") return - duration = self._calculate_duration(actual_volume, velocity) + display_duration = self._calculate_display_duration(actual_volume, velocity) + actual_duration = self._calculate_duration(actual_volume, velocity) - self.logger.info(f"Pulling {actual_volume} ml (from {self._position} to {new_position})") + self.logger.info(f"📥 开始吸液: {actual_volume:.2f}mL") + self.logger.info(f" 📍 位置: {self._position:.2f}mL → {new_position:.2f}mL") + self.logger.info(f" ⏰ 预计时间: {display_duration:.2f}s") - await self._simulate_operation(duration) + if self._fast_mode: + self.logger.info(f" ⚡ 快速模式: 实际用时 {actual_duration:.2f}s") + + await self._simulate_operation(actual_duration) self._position = new_position self._current_volume = new_position - self.logger.info(f"Pulled {actual_volume} ml, current volume: {self._current_volume} ml") + self.logger.info(f"✅ 吸液完成: {actual_volume:.2f}mL | 💧 当前体积: {self._current_volume:.2f}mL") async def push_plunger(self, volume: float, velocity: float = None): """ - 推出柱塞(排液) + 推出柱塞(排液) 📤 Args: volume (float): 要推出的体积 (ml) @@ -207,35 +303,44 @@ class VirtualTransferPump: actual_volume = self._position - new_position if actual_volume <= 0: - self.logger.warning("Cannot push - already at minimum volume") + self.logger.warning("⚠️ 无法排液 - 已达到最小容量") return - duration = self._calculate_duration(actual_volume, velocity) + display_duration = self._calculate_display_duration(actual_volume, velocity) + actual_duration = self._calculate_duration(actual_volume, velocity) - self.logger.info(f"Pushing {actual_volume} ml (from {self._position} to {new_position})") + self.logger.info(f"📤 开始排液: {actual_volume:.2f}mL") + self.logger.info(f" 📍 位置: {self._position:.2f}mL → {new_position:.2f}mL") + self.logger.info(f" ⏰ 预计时间: {display_duration:.2f}s") - await self._simulate_operation(duration) + if self._fast_mode: + self.logger.info(f" ⚡ 快速模式: 实际用时 {actual_duration:.2f}s") + + await self._simulate_operation(actual_duration) self._position = new_position self._current_volume = new_position - self.logger.info(f"Pushed {actual_volume} ml, current volume: {self._current_volume} ml") + self.logger.info(f"✅ 排液完成: {actual_volume:.2f}mL | 💧 当前体积: {self._current_volume:.2f}mL") # 便捷操作方法 async def aspirate(self, volume: float, velocity: float = None): - """吸液操作""" + """吸液操作 📥""" await self.pull_plunger(volume, velocity) async def dispense(self, volume: float, velocity: float = None): - """排液操作""" + """排液操作 📤""" await self.push_plunger(volume, velocity) async def transfer(self, volume: float, aspirate_velocity: float = None, dispense_velocity: float = None): - """转移操作(先吸后排)""" + """转移操作(先吸后排) 🔄""" + self.logger.info(f"🔄 开始转移操作: {volume:.2f}mL") + # 吸液 await self.aspirate(volume, aspirate_velocity) # 短暂停顿 + self.logger.debug("⏸️ 短暂停顿...") await asyncio.sleep(0.1) # 排液 diff --git a/unilabos/devices/zhida_hplc/zhida.py b/unilabos/devices/zhida_hplc/zhida.py index a6e1f9d..2320dbe 100644 --- a/unilabos/devices/zhida_hplc/zhida.py +++ b/unilabos/devices/zhida_hplc/zhida.py @@ -1,11 +1,9 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- -import socket -import json import base64 -import argparse -import sys +import json +import socket import time @@ -96,17 +94,20 @@ class ZhidaClient: def abort(self) -> dict: return self._send_command({"command": "abort"}) -""" -a,b,c -1,2,4 -2,4,5 -""" -client = ZhidaClient() -# 连接 -client.connect() -# 获取状态 -print(client.status) +if __name__ == "__main__": + + """ + a,b,c + 1,2,4 + 2,4,5 + """ + + client = ZhidaClient() + # 连接 + client.connect() + # 获取状态 + print(client.status) -# 命令格式:python zhida.py [options] + # 命令格式:python zhida.py [options] diff --git a/unilabos/messages/__init__.py b/unilabos/messages/__init__.py index 16947e6..4ef5ac9 100644 --- a/unilabos/messages/__init__.py +++ b/unilabos/messages/__init__.py @@ -10,22 +10,92 @@ class Point3D(BaseModel): # Start Protocols class PumpTransferProtocol(BaseModel): - from_vessel: str - to_vessel: str - volume: float + # === 核心参数(保持必需) === + from_vessel: dict + to_vessel: dict + + # === 所有其他参数都改为可选,添加默认值 === + volume: float = 0.0 # 🔧 改为-1,表示转移全部体积 amount: str = "" - time: float = 0 + time: float = 0.0 viscous: bool = False - rinsing_solvent: str = "air" - rinsing_volume: float = 5000 - rinsing_repeats: int = 2 + rinsing_solvent: str = "" + rinsing_volume: float = 0.0 + rinsing_repeats: int = 0 solid: bool = False - flowrate: float = 500 - transfer_flowrate: float = 2500 + flowrate: float = 2.5 + transfer_flowrate: float = 0.5 + + # === 新版XDL兼容参数(可选) === + rate_spec: str = "" + event: str = "" + through: str = "" + + def model_post_init(self, __context): + """后处理:智能参数处理和兼容性调整""" + + # 如果指定了 amount 但volume是默认值,尝试解析 amount + if self.amount and self.volume == 0.0: + parsed_volume = self._parse_amount_to_volume(self.amount) + if parsed_volume > 0: + self.volume = parsed_volume + + # 如果指定了 time 但没有明确设置流速,根据时间计算流速 + if self.time > 0 and self.volume > 0: + if self.flowrate == 2.5 and self.transfer_flowrate == 0.5: + calculated_flowrate = self.volume / self.time + self.flowrate = min(calculated_flowrate, 10.0) + self.transfer_flowrate = min(calculated_flowrate, 5.0) + + # 🔧 核心修复:如果flowrate为0(ROS2传入),使用默认值 + if self.flowrate <= 0: + self.flowrate = 2.5 + if self.transfer_flowrate <= 0: + self.transfer_flowrate = 0.5 + + # 根据 rate_spec 调整流速 + if self.rate_spec == "dropwise": + self.flowrate = min(self.flowrate, 0.1) + self.transfer_flowrate = min(self.transfer_flowrate, 0.1) + elif self.rate_spec == "slowly": + self.flowrate = min(self.flowrate, 0.5) + self.transfer_flowrate = min(self.transfer_flowrate, 0.3) + elif self.rate_spec == "quickly": + self.flowrate = max(self.flowrate, 5.0) + self.transfer_flowrate = max(self.transfer_flowrate, 2.0) + + def _parse_amount_to_volume(self, amount: str) -> float: + """解析 amount 字符串为体积""" + if not amount: + return 0.0 + + amount = amount.lower().strip() + + # 处理特殊关键词 + if amount == "all": + return 0.0 # 🔧 "all"也表示转移全部 + + # 提取数字 + import re + numbers = re.findall(r'[\d.]+', amount) + if numbers: + volume = float(numbers[0]) + + # 单位转换 + if 'ml' in amount or 'milliliter' in amount: + return volume + elif 'l' in amount and 'ml' not in amount: + return volume * 1000 + elif 'μl' in amount or 'microliter' in amount: + return volume / 1000 + else: + return volume + + return 0.0 class CleanProtocol(BaseModel): - vessel: str + vessel: dict solvent: str volume: float temp: float @@ -35,10 +105,10 @@ class CleanProtocol(BaseModel): class SeparateProtocol(BaseModel): purpose: str product_phase: str - from_vessel: str - separation_vessel: str - to_vessel: str - waste_phase_to_vessel: str + from_vessel: dict + separation_vessel: dict + to_vessel: dict + waste_phase_to_vessel: dict solvent: str solvent_volume: float through: str @@ -49,17 +119,96 @@ class SeparateProtocol(BaseModel): class EvaporateProtocol(BaseModel): - vessel: str - pressure: float - temp: float - time: float - stir_speed: float + # === 核心参数(必需) === + vessel: dict = Field(..., description="蒸发容器名称") + + # === 所有其他参数都改为可选,添加默认值 === + pressure: float = Field(0.1, description="真空度 (bar),默认0.1 bar") + temp: float = Field(60.0, description="加热温度 (°C),默认60°C") + time: float = Field(180.0, description="蒸发时间 (秒),默认1800s (30分钟)") + stir_speed: float = Field(100.0, description="旋转速度 (RPM),默认100 RPM") + + # === 新版XDL兼容参数(可选) === + solvent: str = Field("", description="溶剂名称(用于识别蒸发的溶剂类型)") + + def model_post_init(self, __context): + """后处理:智能参数处理和兼容性调整""" + + # 参数范围验证和修正 + if self.pressure <= 0 or self.pressure > 1.0: + logger.warning(f"真空度 {self.pressure} bar 超出范围,修正为 0.1 bar") + self.pressure = 0.1 + + if self.temp < 10.0 or self.temp > 200.0: + logger.warning(f"温度 {self.temp}°C 超出范围,修正为 60°C") + self.temp = 60.0 + + if self.time <= 0: + logger.warning(f"时间 {self.time}s 无效,修正为 1800s") + self.time = 1800.0 + + if self.stir_speed < 10.0 or self.stir_speed > 300.0: + logger.warning(f"旋转速度 {self.stir_speed} RPM 超出范围,修正为 100 RPM") + self.stir_speed = 100.0 + + # 根据溶剂类型调整参数 + if self.solvent: + self._adjust_parameters_by_solvent() + + def _adjust_parameters_by_solvent(self): + """根据溶剂类型调整蒸发参数""" + solvent_lower = self.solvent.lower() + + # 水系溶剂:较高温度,较低真空度 + if any(s in solvent_lower for s in ['water', 'aqueous', 'h2o']): + if self.temp == 60.0: # 如果是默认值,则调整 + self.temp = 80.0 + if self.pressure == 0.1: + self.pressure = 0.2 + + # 有机溶剂:根据沸点调整 + elif any(s in solvent_lower for s in ['ethanol', 'methanol', 'acetone']): + if self.temp == 60.0: + self.temp = 50.0 + if self.pressure == 0.1: + self.pressure = 0.05 + + # 高沸点溶剂:更高温度 + elif any(s in solvent_lower for s in ['dmso', 'dmi', 'toluene']): + if self.temp == 60.0: + self.temp = 100.0 + if self.pressure == 0.1: + self.pressure = 0.01 class EvacuateAndRefillProtocol(BaseModel): - vessel: str - gas: str - repeats: int + # === 必需参数 === + vessel: dict = Field(..., description="目标容器名称") + gas: str = Field(..., description="气体名称") + + # 🔧 删除 repeats 参数,直接在代码中硬编码为 3 次 + + def model_post_init(self, __context): + """后处理:参数验证和兼容性调整""" + + # 验证气体名称 + if not self.gas.strip(): + logger.warning("气体名称为空,使用默认值 'nitrogen'") + self.gas = "nitrogen" + + # 标准化气体名称 + gas_aliases = { + 'n2': 'nitrogen', + 'ar': 'argon', + 'air': 'air', + 'o2': 'oxygen', + 'co2': 'carbon_dioxide', + 'h2': 'hydrogen' + } + + gas_lower = self.gas.lower().strip() + if gas_lower in gas_aliases: + self.gas = gas_aliases[gas_lower] class AGVTransferProtocol(BaseModel): @@ -70,7 +219,7 @@ class AGVTransferProtocol(BaseModel): #=============新添加的新的协议================ class AddProtocol(BaseModel): - vessel: str + vessel: dict reagent: str volume: float mass: float @@ -82,52 +231,292 @@ class AddProtocol(BaseModel): purpose: str class CentrifugeProtocol(BaseModel): - vessel: str + vessel: dict speed: float time: float temp: float class FilterProtocol(BaseModel): - vessel: str - filtrate_vessel: str - stir: bool - stir_speed: float - temp: float - continue_heatchill: bool - volume: float + # === 必需参数 === + vessel: dict = Field(..., description="过滤容器名称") + + # === 可选参数 === + filtrate_vessel: dict = Field("", description="滤液容器名称(可选,自动查找)") + + def model_post_init(self, __context): + """后处理:参数验证""" + # 验证容器名称 + if not self.vessel.strip(): + raise ValueError("vessel 参数不能为空") class HeatChillProtocol(BaseModel): - vessel: str - temp: float - time: float - stir: bool - stir_speed: float - purpose: str + # === 必需参数 === + vessel: dict = Field(..., description="加热容器名称") + + # === 可选参数 - 温度相关 === + temp: float = Field(25.0, description="目标温度 (°C)") + temp_spec: str = Field("", description="温度规格(如 'room temperature', 'reflux')") + + # === 可选参数 - 时间相关 === + time: float = Field(300.0, description="加热时间 (秒)") + time_spec: str = Field("", description="时间规格(如 'overnight', '2 h')") + + # === 可选参数 - 其他XDL参数 === + pressure: str = Field("", description="压力规格(如 '1 mbar'),不做特殊处理") + reflux_solvent: str = Field("", description="回流溶剂名称,不做特殊处理") + + # === 可选参数 - 搅拌相关 === + stir: bool = Field(False, description="是否搅拌") + stir_speed: float = Field(300.0, description="搅拌速度 (RPM)") + purpose: str = Field("", description="操作目的") + + def model_post_init(self, __context): + """后处理:参数验证和解析""" + + # 验证必需参数 + if not self.vessel.strip(): + raise ValueError("vessel 参数不能为空") + + # 温度解析:优先使用 temp_spec,然后是 temp + if self.temp_spec: + self.temp = self._parse_temp_spec(self.temp_spec) + + # 时间解析:优先使用 time_spec,然后是 time + if self.time_spec: + self.time = self._parse_time_spec(self.time_spec) + + # 参数范围验证 + if self.temp < -50.0 or self.temp > 300.0: + logger.warning(f"温度 {self.temp}°C 超出范围,修正为 25°C") + self.temp = 25.0 + + if self.time < 0: + logger.warning(f"时间 {self.time}s 无效,修正为 300s") + self.time = 300.0 + + if self.stir_speed < 0 or self.stir_speed > 1500.0: + logger.warning(f"搅拌速度 {self.stir_speed} RPM 超出范围,修正为 300 RPM") + self.stir_speed = 300.0 + + def _parse_temp_spec(self, temp_spec: str) -> float: + """解析温度规格为具体温度""" + + temp_spec = temp_spec.strip().lower() + + # 特殊温度规格 + special_temps = { + "room temperature": 25.0, # 室温 + "reflux": 78.0, # 默认回流温度(乙醇沸点) + "ice bath": 0.0, # 冰浴 + "boiling": 100.0, # 沸腾 + "hot": 60.0, # 热 + "warm": 40.0, # 温热 + "cold": 10.0, # 冷 + } + + if temp_spec in special_temps: + return special_temps[temp_spec] + + # 解析带单位的温度(如 "256 °C") + import re + temp_pattern = r'(\d+(?:\.\d+)?)\s*°?[cf]?' + match = re.search(temp_pattern, temp_spec) + + if match: + return float(match.group(1)) + + return 25.0 # 默认室温 + + def _parse_time_spec(self, time_spec: str) -> float: + """解析时间规格为秒数""" + + time_spec = time_spec.strip().lower() + + # 特殊时间规格 + special_times = { + "overnight": 43200.0, # 12小时 + "several hours": 10800.0, # 3小时 + "few hours": 7200.0, # 2小时 + "long time": 3600.0, # 1小时 + "short time": 300.0, # 5分钟 + } + + if time_spec in special_times: + return special_times[time_spec] + + # 解析带单位的时间(如 "2 h") + import re + time_pattern = r'(\d+(?:\.\d+)?)\s*([a-zA-Z]+)' + match = re.search(time_pattern, time_spec) + + if match: + value = float(match.group(1)) + unit = match.group(2).lower() + + unit_multipliers = { + 's': 1.0, + 'sec': 1.0, + 'second': 1.0, + 'seconds': 1.0, + 'min': 60.0, + 'minute': 60.0, + 'minutes': 60.0, + 'h': 3600.0, + 'hr': 3600.0, + 'hour': 3600.0, + 'hours': 3600.0, + } + + multiplier = unit_multipliers.get(unit, 3600.0) # 默认按小时计算 + return value * multiplier + + return 300.0 # 默认5分钟 + class HeatChillStartProtocol(BaseModel): - vessel: str - temp: float - purpose: str + # === 必需参数 === + vessel: dict = Field(..., description="加热容器名称") + + # === 可选参数 - 温度相关 === + temp: float = Field(25.0, description="目标温度 (°C)") + temp_spec: str = Field("", description="温度规格(如 'room temperature', 'reflux')") + + # === 可选参数 - 其他XDL参数 === + pressure: str = Field("", description="压力规格(如 '1 mbar'),不做特殊处理") + reflux_solvent: str = Field("", description="回流溶剂名称,不做特殊处理") + + # === 可选参数 - 搅拌相关 === + stir: bool = Field(False, description="是否搅拌") + stir_speed: float = Field(300.0, description="搅拌速度 (RPM)") + purpose: str = Field("", description="操作目的") + class HeatChillStopProtocol(BaseModel): - vessel: str + # === 必需参数 === + vessel: dict = Field(..., description="加热容器名称") + class StirProtocol(BaseModel): - stir_time: float - stir_speed: float - settling_time: float + # === 必需参数 === + vessel: dict = Field(..., description="搅拌容器名称") + + # === 可选参数 === + time: str = Field("5 min", description="搅拌时间(如 '0.5 h', '30 min')") + event: str = Field("", description="事件标识(如 'A', 'B')") + time_spec: str = Field("", description="时间规格(如 'several minutes', 'overnight')") + + def model_post_init(self, __context): + """后处理:参数验证和时间解析""" + + # 验证必需参数 + if not self.vessel.strip(): + raise ValueError("vessel 参数不能为空") + + # 优先使用 time_spec,然后是 time + if self.time_spec: + self.time = self.time_spec + + # 时间解析和验证 + if self.time: + try: + # 解析时间字符串为秒数 + parsed_time = self._parse_time_string(self.time) + if parsed_time <= 0: + logger.warning(f"时间 '{self.time}' 解析结果无效,使用默认值 300s") + self.time = "5 min" + except Exception as e: + logger.warning(f"时间 '{self.time}' 解析失败: {e},使用默认值 300s") + self.time = "5 min" + + def _parse_time_string(self, time_str: str) -> float: + """解析时间字符串为秒数""" + import re + + time_str = time_str.strip().lower() + + # 特殊时间规格 + special_times = { + "several minutes": 300.0, # 5分钟 + "few minutes": 180.0, # 3分钟 + "overnight": 43200.0, # 12小时 + "room temperature": 300.0, # 默认5分钟 + } + + if time_str in special_times: + return special_times[time_str] + + # 正则表达式匹配数字和单位 + pattern = r'(\d+\.?\d*)\s*([a-zA-Z]+)' + match = re.match(pattern, time_str) + + if not match: + return 300.0 # 默认5分钟 + + value = float(match.group(1)) + unit = match.group(2).lower() + + # 时间单位转换 + unit_multipliers = { + 's': 1.0, + 'sec': 1.0, + 'second': 1.0, + 'seconds': 1.0, + 'min': 60.0, + 'minute': 60.0, + 'minutes': 60.0, + 'h': 3600.0, + 'hr': 3600.0, + 'hour': 3600.0, + 'hours': 3600.0, + 'd': 86400.0, + 'day': 86400.0, + 'days': 86400.0, + } + + multiplier = unit_multipliers.get(unit, 60.0) # 默认按分钟计算 + return value * multiplier + + def get_time_in_seconds(self) -> float: + """获取时间(秒)""" + return self._parse_time_string(self.time) class StartStirProtocol(BaseModel): - vessel: str - stir_speed: float - purpose: str + # === 必需参数 === + vessel: dict = Field(..., description="搅拌容器名称") + + # === 可选参数,添加默认值 === + stir_speed: float = Field(200.0, description="搅拌速度 (RPM),默认200 RPM") + purpose: str = Field("", description="搅拌目的(可选)") + + def model_post_init(self, __context): + """后处理:参数验证和修正""" + + # 验证必需参数 + if not self.vessel.strip(): + raise ValueError("vessel 参数不能为空") + + # 修正参数范围 + if self.stir_speed < 10.0: + logger.warning(f"搅拌速度 {self.stir_speed} RPM 过低,修正为 100 RPM") + self.stir_speed = 100.0 + elif self.stir_speed > 1500.0: + logger.warning(f"搅拌速度 {self.stir_speed} RPM 过高,修正为 1000 RPM") + self.stir_speed = 1000.0 class StopStirProtocol(BaseModel): - vessel: str + # === 必需参数 === + vessel: dict = Field(..., description="搅拌容器名称") + + def model_post_init(self, __context): + """后处理:参数验证""" + + # 验证必需参数 + if not self.vessel.strip(): + raise ValueError("vessel 参数不能为空") class TransferProtocol(BaseModel): - from_vessel: str - to_vessel: str + from_vessel: dict + to_vessel: dict volume: float amount: str = "" time: float = 0 @@ -138,14 +527,14 @@ class TransferProtocol(BaseModel): solid: bool = False class CleanVesselProtocol(BaseModel): - vessel: str + vessel: dict solvent: str volume: float temp: float repeats: int = 1 class DissolveProtocol(BaseModel): - vessel: str + vessel: dict solvent: str volume: float amount: str = "" @@ -154,8 +543,8 @@ class DissolveProtocol(BaseModel): stir_speed: float = 0.0 class FilterThroughProtocol(BaseModel): - from_vessel: str - to_vessel: str + from_vessel: dict + to_vessel: dict filter_through: str eluting_solvent: str = "" eluting_volume: float = 0.0 @@ -163,28 +552,92 @@ class FilterThroughProtocol(BaseModel): residence_time: float = 0.0 class RunColumnProtocol(BaseModel): - from_vessel: str - to_vessel: str + from_vessel: dict + to_vessel: dict column: str class WashSolidProtocol(BaseModel): - vessel: str - solvent: str - volume: float - filtrate_vessel: str = "" - temp: float = 25.0 - stir: bool = False - stir_speed: float = 0.0 - time: float = 0.0 - repeats: int = 1 + # === 必需参数 === + vessel: dict = Field(..., description="装有固体的容器名称") + solvent: str = Field(..., description="清洗溶剂名称") + volume: float = Field(..., description="清洗溶剂体积 (mL)") + + # === 可选参数,添加默认值 === + filtrate_vessel: dict = Field("", description="滤液收集容器(可选,自动查找)") + temp: float = Field(25.0, description="清洗温度 (°C),默认25°C") + stir: bool = Field(False, description="是否搅拌,默认False") + stir_speed: float = Field(0.0, description="搅拌速度 (RPM),默认0") + time: float = Field(0.0, description="清洗时间 (秒),默认0") + repeats: int = Field(1, description="重复次数,默认1") + + def model_post_init(self, __context): + """后处理:参数验证和修正""" + + # 验证必需参数 + if not self.vessel.strip(): + raise ValueError("vessel 参数不能为空") + + if not self.solvent.strip(): + raise ValueError("solvent 参数不能为空") + + if self.volume <= 0: + raise ValueError("volume 必须大于0") + + # 修正参数范围 + if self.temp < 0 or self.temp > 200: + logger.warning(f"温度 {self.temp}°C 超出范围,修正为 25°C") + self.temp = 25.0 + + if self.stir_speed < 0 or self.stir_speed > 500: + logger.warning(f"搅拌速度 {self.stir_speed} RPM 超出范围,修正为 0") + self.stir_speed = 0.0 + + if self.time < 0: + logger.warning(f"时间 {self.time}s 无效,修正为 0") + self.time = 0.0 + + if self.repeats < 1: + logger.warning(f"重复次数 {self.repeats} 无效,修正为 1") + self.repeats = 1 + elif self.repeats > 10: + logger.warning(f"重复次数 {self.repeats} 过多,修正为 10") + self.repeats = 10 + +class AdjustPHProtocol(BaseModel): + vessel: dict = Field(..., description="目标容器") + ph_value: float = Field(..., description="目标pH值") # 改为 ph_value + reagent: str = Field(..., description="酸碱试剂名称") + # 移除其他可选参数,使用默认值 + +class ResetHandlingProtocol(BaseModel): + solvent: str = Field(..., description="溶剂名称") + +class DryProtocol(BaseModel): + compound: str = Field(..., description="化合物名称") + vessel: dict = Field(..., description="目标容器") + +class RecrystallizeProtocol(BaseModel): + ratio: str = Field(..., description="溶剂比例(如 '1:1', '3:7')") + solvent1: str = Field(..., description="第一种溶剂名称") + solvent2: str = Field(..., description="第二种溶剂名称") + vessel: dict = Field(..., description="目标容器") + volume: float = Field(..., description="总体积 (mL)") + +class HydrogenateProtocol(BaseModel): + temp: str = Field(..., description="反应温度(如 '45 °C')") + time: str = Field(..., description="反应时间(如 '2 h')") + vessel: dict = Field(..., description="反应容器") __all__ = [ "Point3D", "PumpTransferProtocol", "CleanProtocol", "SeparateProtocol", "EvaporateProtocol", "EvacuateAndRefillProtocol", "AGVTransferProtocol", "CentrifugeProtocol", "AddProtocol", "FilterProtocol", - "HeatChillProtocol", "HeatChillStartProtocol", "HeatChillStopProtocol", + "HeatChillProtocol", + "HeatChillStartProtocol", "HeatChillStopProtocol", "StirProtocol", "StartStirProtocol", "StopStirProtocol", "TransferProtocol", "CleanVesselProtocol", "DissolveProtocol", - "FilterThroughProtocol", "RunColumnProtocol", "WashSolidProtocol" + "FilterThroughProtocol", "RunColumnProtocol", "WashSolidProtocol", + "AdjustPHProtocol", "ResetHandlingProtocol", "DryProtocol", + "RecrystallizeProtocol", "HydrogenateProtocol" ] # End Protocols diff --git a/unilabos/registry/device_comms/modbus_ioboard.yaml b/unilabos/registry/device_comms/modbus_ioboard.yaml index fcea4d7..1667e21 100644 --- a/unilabos/registry/device_comms/modbus_ioboard.yaml +++ b/unilabos/registry/device_comms/modbus_ioboard.yaml @@ -1,10 +1,10 @@ -io_snrd: - description: IO Board with 16 IOs - class: - module: ilabos.device_comms.SRND_16_IO:SRND_16_IO - type: python - hardware_interface: - name: modbus_client - extra_info: [] - read: read_io_coil - write: write_io_coil \ No newline at end of file +#io_snrd: +# description: IO Board with 16 IOs +# class: +# module: unilabos.device_comms.SRND_16_IO:SRND_16_IO +# type: python +# hardware_interface: +# name: modbus_client +# extra_info: [] +# read: read_io_coil +# write: write_io_coil \ No newline at end of file diff --git a/unilabos/registry/device_comms/serial.yaml b/unilabos/registry/device_comms/serial.yaml index 86cf7e5..3bf2b02 100644 --- a/unilabos/registry/device_comms/serial.yaml +++ b/unilabos/registry/device_comms/serial.yaml @@ -1,7 +1,106 @@ serial: - description: Serial communication interface, used when sharing same serial port for multiple devices + category: + - serial class: + action_value_mappings: + auto-handle_serial_request: + feedback: {} + goal: {} + goal_default: + request: null + response: null + handles: [] + result: {} + schema: + description: handle_serial_request的参数schema + properties: + feedback: {} + goal: + properties: + request: + type: string + response: + type: string + required: + - request + - response + type: object + result: {} + required: + - goal + title: handle_serial_request参数 + type: object + type: UniLabJsonCommand + auto-read_data: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: read_data的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: read_data参数 + type: object + type: UniLabJsonCommand + auto-send_command: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: send_command的参数schema + properties: + feedback: {} + goal: + properties: + command: + type: string + required: + - command + type: object + result: {} + required: + - goal + title: send_command参数 + type: object + type: UniLabJsonCommand module: unilabos.ros.nodes.presets.serial_node:ROS2SerialNode + status_types: {} type: ros2 - schema: - properties: {} \ No newline at end of file + config_info: [] + description: Serial communication interface, used when sharing same serial port + for multiple devices + handles: [] + icon: '' + init_param_schema: + config: + properties: + baudrate: + default: 9600 + type: integer + device_id: + type: string + port: + type: string + resource_tracker: + type: string + required: + - device_id + - port + type: object + data: + properties: {} + required: [] + type: object + version: 1.0.0 diff --git a/unilabos/registry/devices/camera.yaml b/unilabos/registry/devices/camera.yaml new file mode 100644 index 0000000..ea5337e --- /dev/null +++ b/unilabos/registry/devices/camera.yaml @@ -0,0 +1,73 @@ +camera: + category: + - camera + class: + action_value_mappings: + auto-destroy_node: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: 用于安全地关闭摄像头设备,释放摄像头资源,停止视频采集和发布服务。调用此函数将清理OpenCV摄像头连接并销毁ROS2节点。 + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: destroy_node参数 + type: object + type: UniLabJsonCommand + auto-timer_callback: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: 定时器回调函数的参数schema。此函数负责定期采集摄像头视频帧,将OpenCV格式的图像转换为ROS Image消息格式,并发布到指定的视频话题。默认以10Hz频率执行,确保视频流的连续性和实时性。 + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: timer_callback参数 + type: object + type: UniLabJsonCommand + module: unilabos.ros.nodes.presets.camera:VideoPublisher + status_types: {} + type: ros2 + config_info: [] + description: VideoPublisher摄像头设备节点,用于实时视频采集和流媒体发布。该设备通过OpenCV连接本地摄像头(如USB摄像头、内置摄像头等),定时采集视频帧并将其转换为ROS2的sensor_msgs/Image消息格式发布到视频话题。主要用于实验室自动化系统中的视觉监控、图像分析、实时观察等应用场景。支持可配置的摄像头索引、发布频率等参数。 + handles: [] + icon: '' + init_param_schema: + config: + properties: + camera_index: + default: 0 + type: string + device_id: + default: video_publisher + type: string + period: + default: 0.1 + type: number + resource_tracker: + type: string + required: [] + type: object + data: + properties: {} + required: [] + type: object + version: 1.0.0 diff --git a/unilabos/registry/devices/characterization_optic.yaml b/unilabos/registry/devices/characterization_optic.yaml index 52ffc87..5fef855 100644 --- a/unilabos/registry/devices/characterization_optic.yaml +++ b/unilabos/registry/devices/characterization_optic.yaml @@ -1,67 +1,411 @@ -# 光学表征设备:红外、紫外可见、拉曼等 -raman_home_made: - description: Raman spectroscopy device - class: - module: unilabos.devices.raman_uv.home_made_raman:RamanObj - type: python - status_types: - status: String - action_value_mappings: - raman_cmd: - type: SendCmd - goal: - command: command - feedback: {} - result: - success: success - schema: - properties: - status: - type: string - required: - - status - additionalProperties: false - type: object hplc.agilent: - description: HPLC device + category: + - characterization_optic class: - module: unilabos.devices.hplc.AgilentHPLC:HPLCDriver - type: python - status_types: - device_status: String - could_run: Bool - driver_init_ok: Bool - is_running: Bool - finish_status: String - status_text: String action_value_mappings: + auto-check_status: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: 检查安捷伦HPLC设备状态的函数。用于监控设备的运行状态、连接状态、错误信息等关键指标。该函数定期查询设备状态,确保系统稳定运行,及时发现和报告设备异常。适用于自动化流程中的设备监控、故障诊断、系统维护等场景。 + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: check_status参数 + type: object + type: UniLabJsonCommand + auto-extract_data_from_txt: + feedback: {} + goal: {} + goal_default: + file_path: null + handles: [] + result: {} + schema: + description: 从文本文件中提取分析数据的函数。用于解析安捷伦HPLC生成的结果文件,提取峰面积、保留时间、浓度等关键分析数据。支持多种文件格式的自动识别和数据结构化处理,为后续数据分析和报告生成提供标准化的数据格式。适用于批量数据处理、结果验证、质量控制等分析工作流程。 + properties: + feedback: {} + goal: + properties: + file_path: + type: string + required: + - file_path + type: object + result: {} + required: + - goal + title: extract_data_from_txt参数 + type: object + type: UniLabJsonCommand + auto-start_sequence: + feedback: {} + goal: {} + goal_default: + params: null + resource: null + wf_name: null + handles: [] + result: {} + schema: + description: 启动安捷伦HPLC分析序列的函数。用于执行预定义的分析方法序列,包括样品进样、色谱分离、检测等完整的分析流程。支持参数配置、资源分配、工作流程管理等功能,实现全自动的样品分析。适用于批量样品处理、标准化分析、质量检测等需要连续自动分析的应用场景。 + properties: + feedback: {} + goal: + properties: + params: + type: string + resource: + type: object + wf_name: + type: string + required: + - wf_name + type: object + result: {} + required: + - goal + title: start_sequence参数 + type: object + type: UniLabJsonCommand + auto-try_close_sub_device: + feedback: {} + goal: {} + goal_default: + device_name: null + handles: [] + result: {} + schema: + description: 尝试关闭HPLC子设备的函数。用于安全地关闭泵、检测器、进样器等各个子模块,确保设备正常断开连接并保护硬件安全。该函数提供错误处理和状态确认机制,避免强制关闭可能造成的设备损坏。适用于设备维护、系统重启、紧急停机等需要安全关闭设备的场景。 + properties: + feedback: {} + goal: + properties: + device_name: + type: string + required: [] + type: object + result: {} + required: + - goal + title: try_close_sub_device参数 + type: object + type: UniLabJsonCommand + auto-try_open_sub_device: + feedback: {} + goal: {} + goal_default: + device_name: null + handles: [] + result: {} + schema: + description: 尝试打开HPLC子设备的函数。用于初始化和连接泵、检测器、进样器等各个子模块,建立设备通信并进行自检。该函数提供连接验证和错误恢复机制,确保子设备正常启动并准备就绪。适用于设备初始化、系统启动、设备重连等需要建立设备连接的场景。 + properties: + feedback: {} + goal: + properties: + device_name: + type: string + required: [] + type: object + result: {} + required: + - goal + title: try_open_sub_device参数 + type: object + type: UniLabJsonCommand execute_command_from_outer: - type: SendCmd + feedback: {} goal: command: command - feedback: {} + goal_default: + command: '' + handles: [] result: success: success - schema: - properties: - device_status: - type: string - could_run: - type: boolean - driver_init_ok: - type: boolean - is_running: - type: boolean - finish_status: - type: string - status_text: - type: string - required: - - device_status - - could_run - - driver_init_ok - - is_running - - finish_status - - status_text - additionalProperties: false - type: object + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.hplc.AgilentHPLC:HPLCDriver + status_types: + could_run: bool + data_file: list + device_status: str + driver_init_ok: bool + finish_status: str + is_running: bool + status_text: str + success: bool + type: python + config_info: [] + description: 安捷伦高效液相色谱(HPLC)分析设备,用于复杂化合物的分离、检测和定量分析。该设备通过UI自动化技术控制安捷伦ChemStation软件,实现全自动的样品分析流程。具备序列启动、设备状态监控、数据文件提取、结果处理等功能。支持多样品批量处理和实时状态反馈,适用于药物分析、环境检测、食品安全、化学研究等需要高精度色谱分析的实验室应用。 + handles: [] + icon: '' + init_param_schema: + config: + properties: + driver_debug: + default: false + type: string + required: [] + type: object + data: + properties: + could_run: + type: boolean + data_file: + type: array + device_status: + type: string + driver_init_ok: + type: boolean + finish_status: + type: string + is_running: + type: boolean + status_text: + type: string + success: + type: boolean + required: + - status_text + - device_status + - could_run + - driver_init_ok + - is_running + - success + - finish_status + - data_file + type: object + version: 1.0.0 +raman_home_made: + category: + - characterization_optic + class: + action_value_mappings: + auto-ccd_time: + feedback: {} + goal: {} + goal_default: + int_time: null + handles: [] + result: {} + schema: + description: 设置CCD检测器积分时间的函数。用于配置拉曼光谱仪的信号采集时间,控制光谱数据的质量和信噪比。较长的积分时间可获得更高的信号强度和更好的光谱质量,但会增加测量时间。该函数允许根据样品特性和测量要求动态调整检测参数,优化测量效果。 + properties: + feedback: {} + goal: + properties: + int_time: + type: string + required: + - int_time + type: object + result: {} + required: + - goal + title: ccd_time参数 + type: object + type: UniLabJsonCommand + auto-laser_on_power: + feedback: {} + goal: {} + goal_default: + output_voltage_laser: null + handles: [] + result: {} + schema: + description: 设置激光器输出功率的函数。用于控制拉曼光谱仪激光器的功率输出,调节激光强度以适应不同样品的测量需求。适当的激光功率能够获得良好的拉曼信号同时避免样品损伤。该函数支持精确的功率控制,确保测量结果的稳定性和重现性。 + properties: + feedback: {} + goal: + properties: + output_voltage_laser: + type: string + required: + - output_voltage_laser + type: object + result: {} + required: + - goal + title: laser_on_power参数 + type: object + type: UniLabJsonCommand + auto-raman_without_background: + feedback: {} + goal: {} + goal_default: + int_time: null + laser_power: null + handles: [] + result: {} + schema: + description: 执行无背景扣除的拉曼光谱测量函数。用于直接采集样品的拉曼光谱信号,不进行背景校正处理。该函数配置积分时间和激光功率参数,获取原始光谱数据用于后续的数据处理分析。适用于对光谱数据质量要求较高或需要自定义背景处理流程的测量场景。 + properties: + feedback: {} + goal: + properties: + int_time: + type: string + laser_power: + type: string + required: + - int_time + - laser_power + type: object + result: {} + required: + - goal + title: raman_without_background参数 + type: object + type: UniLabJsonCommand + auto-raman_without_background_average: + feedback: {} + goal: {} + goal_default: + average: null + int_time: null + laser_power: null + sample_name: null + handles: [] + result: {} + schema: + description: 执行多次平均的无背景拉曼光谱测量函数。通过多次测量取平均值来提高光谱数据的信噪比和测量精度,减少随机噪声影响。该函数支持自定义平均次数、积分时间、激光功率等参数,并可为样品指定名称便于数据管理。适用于对测量精度要求较高的定量分析和研究应用。 + properties: + feedback: {} + goal: + properties: + average: + type: string + int_time: + type: string + laser_power: + type: string + sample_name: + type: string + required: + - sample_name + - int_time + - laser_power + - average + type: object + result: {} + required: + - goal + title: raman_without_background_average参数 + type: object + type: UniLabJsonCommand + raman_cmd: + feedback: {} + goal: + command: command + goal_default: + command: '' + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.raman_uv.home_made_raman:RamanObj + status_types: {} + type: python + config_info: [] + description: 拉曼光谱分析设备,用于物质的分子结构和化学成分表征。该设备集成激光器和CCD检测器,通过串口通信控制激光功率和光谱采集。具备背景扣除、多次平均、自动数据处理等功能,支持高精度的拉曼光谱测量。适用于材料表征、化学分析、质量控制、研究开发等需要分子指纹识别和结构分析的实验应用。 + handles: [] + icon: '' + init_param_schema: + config: + properties: + baudrate_ccd: + default: 921600 + type: string + baudrate_laser: + default: 9600 + type: string + port_ccd: + type: string + port_laser: + type: string + required: + - port_laser + - port_ccd + type: object + data: + properties: {} + required: [] + type: object + version: 1.0.0 diff --git a/unilabos/registry/devices/hotel.yaml b/unilabos/registry/devices/hotel.yaml index 0f92511..204f021 100644 --- a/unilabos/registry/devices/hotel.yaml +++ b/unilabos/registry/devices/hotel.yaml @@ -1,9 +1,35 @@ hotel.thermo_orbitor_rs2_hotel: - description: Thermo Orbitor RS2 Hotel - class: + category: + - hotel + class: + action_value_mappings: {} module: unilabos.devices.resource_container.container:HotelContainer + status_types: + rotation: String type: python + config_info: [] + description: Thermo Orbitor RS2 Hotel容器设备,用于实验室样品的存储和管理。该设备通过HotelContainer类实现容器的旋转控制和状态监控,主要用于存储实验样品、试剂瓶或其他实验器具,支持旋转功能以便于样品的自动化存取。适用于需要有序存储和快速访问大量样品的实验室自动化场景。 + handles: [] + icon: '' + init_param_schema: + config: + properties: + device_config: + type: object + rotation: + type: object + required: + - rotation + - device_config + type: object + data: + properties: + rotation: + type: string + required: + - rotation + type: object model: - type: device mesh: thermo_orbitor_rs2_hotel - + type: device + version: 1.0.0 diff --git a/unilabos/registry/devices/laiyu_add_solid.yaml b/unilabos/registry/devices/laiyu_add_solid.yaml index 3554023..fbb654d 100644 --- a/unilabos/registry/devices/laiyu_add_solid.yaml +++ b/unilabos/registry/devices/laiyu_add_solid.yaml @@ -1,56 +1,385 @@ laiyu_add_solid: - description: Laiyu Add Solid + category: + - laiyu_add_solid class: - module: unilabos.devices.laiyu_add_solid.laiyu:Laiyu - type: python - status_types: {} action_value_mappings: + add_powder_tube: + feedback: {} + goal: + compound_mass: compound_mass + powder_tube_number: powder_tube_number + target_tube_position: target_tube_position + goal_default: + compound_mass: 0.0 + powder_tube_number: 0 + target_tube_position: '' + handles: [] + result: + actual_mass_mg: actual_mass_mg + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: SolidDispenseAddPowderTube_Feedback + type: object + goal: + properties: + compound_mass: + type: number + powder_tube_number: + maximum: 2147483647 + minimum: -2147483648 + type: integer + target_tube_position: + type: string + required: + - powder_tube_number + - target_tube_position + - compound_mass + title: SolidDispenseAddPowderTube_Goal + type: object + result: + properties: + actual_mass_mg: + type: number + return_info: + type: string + success: + type: boolean + required: + - return_info + - actual_mass_mg + - success + title: SolidDispenseAddPowderTube_Result + type: object + required: + - goal + title: SolidDispenseAddPowderTube + type: object + type: SolidDispenseAddPowderTube + auto-calculate_crc: + feedback: {} + goal: {} + goal_default: + data: null + handles: [] + result: {} + schema: + description: Modbus CRC-16校验码计算函数。计算Modbus RTU通信协议所需的CRC-16校验码,确保数据传输的完整性和可靠性。该函数实现标准的CRC-16算法,用于构造完整的Modbus指令帧。 + properties: + feedback: {} + goal: + properties: + data: + type: string + required: + - data + type: object + result: {} + required: + - goal + title: calculate_crc参数 + type: object + type: UniLabJsonCommand + auto-send_command: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: Modbus指令发送函数。构造完整的Modbus RTU指令帧(包含CRC校验),发送给分装设备并等待响应。该函数处理底层通信协议,确保指令的正确传输和响应接收,支持最长3分钟的响应等待时间。 + properties: + feedback: {} + goal: + properties: + command: + type: string + required: + - command + type: object + result: {} + required: + - goal + title: send_command参数 + type: object + type: UniLabJsonCommand + discharge: + feedback: {} + goal: + float_input: float_input + goal_default: + float_in: 0.0 + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: FloatSingleInput_Feedback + type: object + goal: + properties: + float_in: + type: number + required: + - float_in + title: FloatSingleInput_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: FloatSingleInput_Result + type: object + required: + - goal + title: FloatSingleInput + type: object + type: FloatSingleInput + move_to_plate: + feedback: {} + goal: + string: string + goal_default: + string: '' + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: StrSingleInput_Feedback + type: object + goal: + properties: + string: + type: string + required: + - string + title: StrSingleInput_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: StrSingleInput_Result + type: object + required: + - goal + title: StrSingleInput + type: object + type: StrSingleInput move_to_xyz: - type: Point3DSeparateInput + feedback: {} goal: x: x y: y z: z - feedback: {} + goal_default: + x: 0.0 + y: 0.0 + z: 0.0 + handles: [] result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: Point3DSeparateInput_Feedback + type: object + goal: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point3DSeparateInput_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: Point3DSeparateInput_Result + type: object + required: + - goal + title: Point3DSeparateInput + type: object + type: Point3DSeparateInput pick_powder_tube: - type: IntSingleInput + feedback: {} goal: int_input: int_input - feedback: {} + goal_default: + int_input: 0 + handles: [] result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: IntSingleInput_Feedback + type: object + goal: + properties: + int_input: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - int_input + title: IntSingleInput_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: IntSingleInput_Result + type: object + required: + - goal + title: IntSingleInput + type: object + type: IntSingleInput put_powder_tube: - type: IntSingleInput + feedback: {} goal: int_input: int_input - feedback: {} + goal_default: + int_input: 0 + handles: [] result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: IntSingleInput_Feedback + type: object + goal: + properties: + int_input: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - int_input + title: IntSingleInput_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: IntSingleInput_Result + type: object + required: + - goal + title: IntSingleInput + type: object + type: IntSingleInput reset: - type: EmptyIn + feedback: {} goal: {} - feedback: {} + goal_default: {} + handles: [] result: {} - add_powder_tube: - type: SolidDispenseAddPowderTube - goal: - powder_tube_number: powder_tube_number - target_tube_position: target_tube_position - compound_mass: compound_mass - feedback: {} - result: - actual_mass_mg: actual_mass_mg - move_to_plate: - type: StrSingleInput - goal: - string: string - feedback: {} - result: {} - discharge: - type: FloatSingleInput - goal: - float_input: float_input - feedback: {} - result: {} - - schema: - properties: {} \ No newline at end of file + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + module: unilabos.devices.laiyu_add_solid.laiyu:Laiyu + status_types: + status: str + type: python + config_info: [] + description: 来渝固体粉末自动分装设备,用于实验室化学试剂的精确称量和分装。该设备通过Modbus RTU协议与控制系统通信,集成了精密天平、三轴运动平台、粉筒管理系统等组件。支持多种粉末试剂的自动拿取、精确称量、定点分装和归位操作。具备高精度称量、位置控制和批量处理能力,适用于化学合成、药物研发、材料制备等需要精确固体试剂配制的实验室应用场景。 + handles: [] + icon: '' + init_param_schema: + config: + properties: + baudrate: + default: 115200 + type: string + port: + type: string + timeout: + default: 0.5 + type: string + required: + - port + type: object + data: + properties: + status: + type: string + required: + - status + type: object + version: 1.0.0 diff --git a/unilabos/registry/devices/liquid_handler.yaml b/unilabos/registry/devices/liquid_handler.yaml index bb94b59..7e6e781 100644 --- a/unilabos/registry/devices/liquid_handler.yaml +++ b/unilabos/registry/devices/liquid_handler.yaml @@ -1,461 +1,8273 @@ liquid_handler: - description: Liquid handler device controlled by pylabrobot - icon: icon_yiyezhan.webp + category: + - liquid_handler class: - module: unilabos.devices.liquid_handling.liquid_handler_abstract:LiquidHandlerAbstract - type: python - status_types: - name: String action_value_mappings: - remove: - type: LiquidHandlerRemove - goal: - vols: vols - sources: sources - waste_liquid: waste_liquid - use_channels: use_channels - flow_rates: flow_rates - offsets: offsets - liquid_height: liquid_height - blow_out_air_volume: blow_out_air_volume - spread: spread - delays: delays - is_96_well: is_96_well - top: top - none_keys: none_keys - feedback: {} - result: {} add_liquid: - type: LiquidHandlerAdd + feedback: {} goal: asp_vols: asp_vols + blow_out_air_volume: blow_out_air_volume dis_vols: dis_vols + flow_rates: flow_rates + is_96_well: is_96_well + liquid_height: liquid_height + mix_liquid_height: mix_liquid_height + mix_rate: mix_rate + mix_time: mix_time + mix_vol: mix_vol + none_keys: none_keys + offsets: offsets reagent_sources: reagent_sources + spread: spread targets: targets use_channels: use_channels - flow_rates: flow_rates - offsets: offsets - liquid_height: liquid_height - blow_out_air_volume: blow_out_air_volume - spread: spread - is_96_well: is_96_well - mix_time: mix_time - mix_vol: mix_vol - mix_rate: mix_rate - mix_liquid_height: mix_liquid_height - none_keys: none_keys - feedback: {} - result: {} - transfer_liquid: - type: LiquidHandlerTransfer - goal: - asp_vols: asp_vols - dis_vols: dis_vols - sources: sources - targets: targets - tip_racks: tip_racks - use_channels: use_channels - asp_flow_rates: asp_flow_rates - dis_flow_rates: dis_flow_rates - offsets: offsets - touch_tip: touch_tip - liquid_height: liquid_height - blow_out_air_volume: blow_out_air_volume - spread: spread - is_96_well: is_96_well - mix_stage: mix_stage - mix_times: mix_times - mix_vol: mix_vol - mix_rate: mix_rate - mix_liquid_height: mix_liquid_height - delays: delays - none_keys: none_keys - feedback: {} - result: {} - mix: - type: LiquidHandlerMix - goal: - targets: targets - mix_time: mix_time - mix_vol: mix_vol - height_to_bottom: height_to_bottom - offsets: offsets - mix_rate: mix_rate - none_keys: none_keys - feedback: {} - result: {} - move_to: - type: LiquidHandlerMoveTo - goal: - well: well - dis_to_top: dis_to_top - channel: channel - feedback: {} + goal_default: + asp_vols: + - 0.0 + blow_out_air_volume: + - 0.0 + dis_vols: + - 0.0 + flow_rates: + - 0.0 + is_96_well: false + liquid_height: + - 0.0 + mix_liquid_height: 0.0 + mix_rate: 0 + mix_time: 0 + mix_vol: 0 + none_keys: + - '' + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + reagent_sources: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + spread: '' + targets: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + use_channels: + - 0 + handles: [] + placeholder_keys: + reagent_sources: unilabos_resources + targets: unilabos_resources result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerAdd_Feedback + type: object + goal: + properties: + asp_vols: + items: + type: number + type: array + blow_out_air_volume: + items: + type: number + type: array + dis_vols: + items: + type: number + type: array + flow_rates: + items: + type: number + type: array + is_96_well: + type: boolean + liquid_height: + items: + type: number + type: array + mix_liquid_height: + type: number + mix_rate: + maximum: 2147483647 + minimum: -2147483648 + type: integer + mix_time: + maximum: 2147483647 + minimum: -2147483648 + type: integer + mix_vol: + maximum: 2147483647 + minimum: -2147483648 + type: integer + none_keys: + items: + type: string + type: array + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + reagent_sources: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + spread: + type: string + targets: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + required: + - asp_vols + - dis_vols + - reagent_sources + - targets + - use_channels + - flow_rates + - offsets + - liquid_height + - blow_out_air_volume + - spread + - is_96_well + - mix_time + - mix_vol + - mix_rate + - mix_liquid_height + - none_keys + title: LiquidHandlerAdd_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerAdd_Result + type: object + required: + - goal + title: LiquidHandlerAdd + type: object + type: LiquidHandlerAdd aspirate: - type: LiquidHandlerAspirate + feedback: {} goal: - resources: resources - vols: vols - use_channels: use_channels - flow_rates: flow_rates + blow_out_air_volume: blow_out_air_volume end_delay: end_delay - offsets: offsets + flow_rates: flow_rates liquid_height: liquid_height - blow_out_air_volume: blow_out_air_volume - feedback: {} - result: - name: name - discard_tips: - type: LiquidHandlerDiscardTips - goal: - use_channels: use_channels - feedback: {} - result: - name: name - dispense: - type: LiquidHandlerDispense - goal: + offsets: offsets resources: resources - vols: vols use_channels: use_channels + vols: vols + goal_default: + blow_out_air_volume: + - 0.0 + flow_rates: + - 0.0 + liquid_height: + - 0.0 + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + resources: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + spread: '' + use_channels: + - 0 + vols: + - 0.0 + handles: [] + result: + name: name + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerAspirate_Feedback + type: object + goal: + properties: + blow_out_air_volume: + items: + type: number + type: array + flow_rates: + items: + type: number + type: array + liquid_height: + items: + type: number + type: array + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + resources: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + spread: + type: string + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + vols: + items: + type: number + type: array + required: + - resources + - vols + - use_channels + - flow_rates + - offsets + - liquid_height + - blow_out_air_volume + - spread + title: LiquidHandlerAspirate_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerAspirate_Result + type: object + required: + - goal + title: LiquidHandlerAspirate + type: object + type: LiquidHandlerAspirate + auto-create_protocol: + feedback: {} + goal: {} + goal_default: + none_keys: [] + protocol_author: null + protocol_date: null + protocol_description: null + protocol_name: null + protocol_type: null + protocol_version: null + handles: [] + result: {} + schema: + description: 创建实验协议函数。用于建立新的液体处理实验协议,定义协议名称、描述、版本、作者、日期等基本信息。该函数支持协议模板化管理,便于实验流程的标准化和重复性。适用于实验设计、方法开发、标准操作程序建立等需要协议管理的应用场景。 + properties: + feedback: {} + goal: + properties: + none_keys: + default: [] + type: string + protocol_author: + type: string + protocol_date: + type: string + protocol_description: + type: string + protocol_name: + type: string + protocol_type: + type: string + protocol_version: + type: string + required: + - protocol_name + - protocol_description + - protocol_version + - protocol_author + - protocol_date + - protocol_type + type: object + result: {} + required: + - goal + title: create_protocol参数 + type: object + type: UniLabJsonCommandAsync + auto-custom_delay: + feedback: {} + goal: {} + goal_default: + msg: null + seconds: 0 + handles: [] + result: {} + schema: + description: 自定义延时函数。在实验流程中插入可配置的等待时间,用于满足特定的反应时间、孵育时间或设备稳定时间要求。支持自定义延时消息和秒数设置,提供流程控制和时间管理功能。适用于酶反应等待、温度平衡、样品孵育等需要时间控制的实验步骤。 + properties: + feedback: {} + goal: + properties: + msg: + type: string + seconds: + default: 0 + type: string + required: [] + type: object + result: {} + required: + - goal + title: custom_delay参数 + type: object + type: UniLabJsonCommandAsync + auto-iter_tips: + feedback: {} + goal: {} + goal_default: + tip_racks: null + handles: [] + result: {} + schema: + description: 吸头迭代函数。用于自动管理和切换吸头架中的吸头,实现批量实验中的吸头自动分配和追踪。该函数监控吸头使用状态,自动切换到下一个可用吸头位置,确保实验流程的连续性。适用于高通量实验、批量处理、自动化流水线等需要大量吸头管理的应用场景。 + properties: + feedback: {} + goal: + properties: + tip_racks: + type: string + required: + - tip_racks + type: object + result: {} + required: + - goal + title: iter_tips参数 + type: object + type: UniLabJsonCommand + auto-set_tiprack: + feedback: {} + goal: {} + goal_default: + tip_racks: null + handles: [] + result: {} + schema: + description: 吸头架设置函数。用于配置和初始化液体处理系统的吸头架信息,包括吸头架位置、类型、容量等参数。该函数建立吸头资源管理系统,为后续的吸头选择和使用提供基础配置。适用于系统初始化、吸头架更换、实验配置等需要吸头资源管理的操作场景。 + properties: + feedback: {} + goal: + properties: + tip_racks: + type: string + required: + - tip_racks + type: object + result: {} + required: + - goal + title: set_tiprack参数 + type: object + type: UniLabJsonCommand + auto-touch_tip: + feedback: {} + goal: {} + goal_default: + targets: null + handles: [] + result: {} + schema: + description: 吸头碰触函数。控制移液器吸头轻触容器边缘或底部,用于去除吸头外壁附着的液滴,提高移液精度和减少污染。该函数支持多目标位置操作,可配置碰触参数和位置偏移。适用于精密移液、减少液体残留、防止交叉污染等需要提高移液质量的实验操作。 + properties: + feedback: {} + goal: + properties: + targets: + type: string + required: + - targets + type: object + result: {} + required: + - goal + title: touch_tip参数 + type: object + type: UniLabJsonCommandAsync + discard_tips: + feedback: {} + goal: + use_channels: use_channels + goal_default: + use_channels: + - 0 + handles: [] + result: + name: name + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerDiscardTips_Feedback + type: object + goal: + properties: + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + required: + - use_channels + title: LiquidHandlerDiscardTips_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerDiscardTips_Result + type: object + required: + - goal + title: LiquidHandlerDiscardTips + type: object + type: LiquidHandlerDiscardTips + dispense: + feedback: {} + goal: + blow_out_air_volume: blow_out_air_volume flow_rates: flow_rates offsets: offsets - blow_out_air_volume: blow_out_air_volume + resources: resources spread: spread - feedback: {} + use_channels: use_channels + vols: vols + goal_default: + blow_out_air_volume: + - 0 + flow_rates: + - 0.0 + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + resources: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + spread: '' + use_channels: + - 0 + vols: + - 0.0 + handles: [] result: name: name + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerDispense_Feedback + type: object + goal: + properties: + blow_out_air_volume: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + flow_rates: + items: + type: number + type: array + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + resources: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + spread: + type: string + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + vols: + items: + type: number + type: array + required: + - resources + - vols + - use_channels + - flow_rates + - offsets + - blow_out_air_volume + - spread + title: LiquidHandlerDispense_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerDispense_Result + type: object + required: + - goal + title: LiquidHandlerDispense + type: object + type: LiquidHandlerDispense drop_tips: + feedback: {} + goal: + allow_nonzero_volume: allow_nonzero_volume + offsets: offsets + tip_spots: tip_spots + use_channels: use_channels + goal_default: + allow_nonzero_volume: false + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + tip_spots: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + use_channels: + - 0 + handles: [] + result: + name: name + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerDropTips_Feedback + type: object + goal: + properties: + allow_nonzero_volume: + type: boolean + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + tip_spots: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + required: + - tip_spots + - use_channels + - offsets + - allow_nonzero_volume + title: LiquidHandlerDropTips_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerDropTips_Result + type: object + required: + - goal + title: LiquidHandlerDropTips + type: object type: LiquidHandlerDropTips - goal: - tip_spots: tip_spots - use_channels: use_channels - offsets: offsets - allow_nonzero_volume: allow_nonzero_volume - feedback: {} - result: - name: name drop_tips96: - type: LiquidHandlerDropTips96 + feedback: {} goal: - tip_rack: tip_rack - offset: offset allow_nonzero_volume: allow_nonzero_volume - feedback: {} + offset: offset + tip_rack: tip_rack + goal_default: + allow_nonzero_volume: false + offset: + x: 0.0 + y: 0.0 + z: 0.0 + tip_rack: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] result: name: name + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerDropTips96_Feedback + type: object + goal: + properties: + allow_nonzero_volume: + type: boolean + offset: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + tip_rack: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - tip_rack + - offset + - allow_nonzero_volume + title: LiquidHandlerDropTips96_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerDropTips96_Result + type: object + required: + - goal + title: LiquidHandlerDropTips96 + type: object + type: LiquidHandlerDropTips96 + mix: + feedback: {} + goal: + height_to_bottom: height_to_bottom + mix_rate: mix_rate + mix_time: mix_time + mix_vol: mix_vol + none_keys: none_keys + offsets: offsets + targets: targets + goal_default: + height_to_bottom: 0.0 + mix_rate: 0.0 + mix_time: 0 + mix_vol: 0 + none_keys: + - '' + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + targets: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerMix_Feedback + type: object + goal: + properties: + height_to_bottom: + type: number + mix_rate: + type: number + mix_time: + maximum: 2147483647 + minimum: -2147483648 + type: integer + mix_vol: + maximum: 2147483647 + minimum: -2147483648 + type: integer + none_keys: + items: + type: string + type: array + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + targets: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + required: + - targets + - mix_time + - mix_vol + - height_to_bottom + - offsets + - mix_rate + - none_keys + title: LiquidHandlerMix_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerMix_Result + type: object + required: + - goal + title: LiquidHandlerMix + type: object + type: LiquidHandlerMix move_lid: - type: LiquidHandlerMoveLid + feedback: {} goal: + destination_offset: destination_offset + drop_direction: drop_direction + get_direction: get_direction + intermediate_locations: intermediate_locations lid: lid - to: to - intermediate_locations: intermediate_locations - resource_offset: resource_offset - destination_offset: destination_offset pickup_direction: pickup_direction - drop_direction: drop_direction - get_direction: get_direction - put_direction: put_direction pickup_distance_from_top: pickup_distance_from_top - feedback: {} + put_direction: put_direction + resource_offset: resource_offset + to: to + goal_default: + destination_offset: + x: 0.0 + y: 0.0 + z: 0.0 + drop_direction: '' + get_direction: '' + intermediate_locations: + - x: 0.0 + y: 0.0 + z: 0.0 + lid: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + pickup_direction: '' + pickup_distance_from_top: 0.0 + put_direction: '' + resource_offset: + x: 0.0 + y: 0.0 + z: 0.0 + to: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] result: name: name + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerMoveLid_Feedback + type: object + goal: + properties: + destination_offset: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + drop_direction: + type: string + get_direction: + type: string + intermediate_locations: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + lid: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + pickup_direction: + type: string + pickup_distance_from_top: + type: number + put_direction: + type: string + resource_offset: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + to: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - lid + - to + - intermediate_locations + - resource_offset + - destination_offset + - pickup_direction + - drop_direction + - get_direction + - put_direction + - pickup_distance_from_top + title: LiquidHandlerMoveLid_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerMoveLid_Result + type: object + required: + - goal + title: LiquidHandlerMoveLid + type: object + type: LiquidHandlerMoveLid move_plate: - type: LiquidHandlerMovePlate + feedback: {} goal: - plate: plate - to: to + destination_offset: destination_offset + drop_direction: drop_direction + get_direction: get_direction intermediate_locations: intermediate_locations - resource_offset: resource_offset + pickup_direction: pickup_direction pickup_offset: pickup_offset - destination_offset: destination_offset - pickup_direction: pickup_direction - drop_direction: drop_direction - get_direction: get_direction + plate: plate put_direction: put_direction - feedback: {} - result: - name: name - move_resource: - type: LiquidHandlerMoveResource - goal: - resource: resource - to: to - intermediate_locations: intermediate_locations resource_offset: resource_offset - destination_offset: destination_offset - pickup_distance_from_top: pickup_distance_from_top - pickup_direction: pickup_direction - drop_direction: drop_direction - get_direction: get_direction - put_direction: put_direction - feedback: {} + to: to + goal_default: + destination_offset: + x: 0.0 + y: 0.0 + z: 0.0 + drop_direction: '' + get_direction: '' + intermediate_locations: + - x: 0.0 + y: 0.0 + z: 0.0 + pickup_direction: '' + pickup_distance_from_top: 0.0 + pickup_offset: + x: 0.0 + y: 0.0 + z: 0.0 + plate: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + put_direction: '' + resource_offset: + x: 0.0 + y: 0.0 + z: 0.0 + to: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] result: name: name - pick_up_tips: - type: LiquidHandlerPickUpTips + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerMovePlate_Feedback + type: object + goal: + properties: + destination_offset: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + drop_direction: + type: string + get_direction: + type: string + intermediate_locations: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + pickup_direction: + type: string + pickup_distance_from_top: + type: number + pickup_offset: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + plate: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + put_direction: + type: string + resource_offset: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + to: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - plate + - to + - intermediate_locations + - resource_offset + - pickup_offset + - destination_offset + - pickup_direction + - drop_direction + - get_direction + - put_direction + - pickup_distance_from_top + title: LiquidHandlerMovePlate_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerMovePlate_Result + type: object + required: + - goal + title: LiquidHandlerMovePlate + type: object + type: LiquidHandlerMovePlate + move_resource: + feedback: {} goal: + destination_offset: destination_offset + drop_direction: drop_direction + get_direction: get_direction + intermediate_locations: intermediate_locations + pickup_direction: pickup_direction + pickup_distance_from_top: pickup_distance_from_top + put_direction: put_direction + resource: resource + resource_offset: resource_offset + to: to + goal_default: + destination_offset: + x: 0.0 + y: 0.0 + z: 0.0 + drop_direction: '' + get_direction: '' + intermediate_locations: + - x: 0.0 + y: 0.0 + z: 0.0 + pickup_direction: '' + pickup_distance_from_top: 0.0 + put_direction: '' + resource: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + resource_offset: + x: 0.0 + y: 0.0 + z: 0.0 + to: + x: 0.0 + y: 0.0 + z: 0.0 + handles: [] + result: + name: name + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerMoveResource_Feedback + type: object + goal: + properties: + destination_offset: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + drop_direction: + type: string + get_direction: + type: string + intermediate_locations: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + pickup_direction: + type: string + pickup_distance_from_top: + type: number + put_direction: + type: string + resource: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + resource_offset: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + to: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - resource + - to + - intermediate_locations + - resource_offset + - destination_offset + - pickup_distance_from_top + - pickup_direction + - drop_direction + - get_direction + - put_direction + title: LiquidHandlerMoveResource_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerMoveResource_Result + type: object + required: + - goal + title: LiquidHandlerMoveResource + type: object + type: LiquidHandlerMoveResource + move_to: + feedback: {} + goal: + channel: channel + dis_to_top: dis_to_top + well: well + goal_default: + channel: 0 + dis_to_top: 0.0 + well: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerMoveTo_Feedback + type: object + goal: + properties: + channel: + maximum: 2147483647 + minimum: -2147483648 + type: integer + dis_to_top: + type: number + well: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - well + - dis_to_top + - channel + title: LiquidHandlerMoveTo_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerMoveTo_Result + type: object + required: + - goal + title: LiquidHandlerMoveTo + type: object + type: LiquidHandlerMoveTo + pick_up_tips: + feedback: {} + goal: + offsets: offsets tip_spots: tip_spots use_channels: use_channels - offsets: offsets - feedback: {} + goal_default: + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + tip_spots: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + use_channels: + - 0 + handles: [] result: name: name + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerPickUpTips_Feedback + type: object + goal: + properties: + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + tip_spots: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + required: + - tip_spots + - use_channels + - offsets + title: LiquidHandlerPickUpTips_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerPickUpTips_Result + type: object + required: + - goal + title: LiquidHandlerPickUpTips + type: object + type: LiquidHandlerPickUpTips pick_up_tips96: - type: LiquidHandlerPickUpTips96 + feedback: {} goal: - tip_rack: tip_rack offset: offset - feedback: {} + tip_rack: tip_rack + goal_default: + offset: + x: 0.0 + y: 0.0 + z: 0.0 + tip_rack: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] result: name: name - return_tips: - type: LiquidHandlerReturnTips + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerPickUpTips96_Feedback + type: object + goal: + properties: + offset: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + tip_rack: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - tip_rack + - offset + title: LiquidHandlerPickUpTips96_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerPickUpTips96_Result + type: object + required: + - goal + title: LiquidHandlerPickUpTips96 + type: object + type: LiquidHandlerPickUpTips96 + remove: + feedback: {} goal: + blow_out_air_volume: blow_out_air_volume + delays: delays + flow_rates: flow_rates + is_96_well: is_96_well + liquid_height: liquid_height + none_keys: none_keys + offsets: offsets + sources: sources + spread: spread + top: top use_channels: use_channels - allow_nonzero_volume: allow_nonzero_volume + vols: vols + waste_liquid: waste_liquid + goal_default: + blow_out_air_volume: + - 0.0 + delays: + - 0 + flow_rates: + - 0.0 + is_96_well: false + liquid_height: + - 0.0 + none_keys: + - '' + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + sources: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + spread: '' + top: + - 0.0 + use_channels: + - 0 + vols: + - 0.0 + waste_liquid: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerRemove_Feedback + type: object + goal: + properties: + blow_out_air_volume: + items: + type: number + type: array + delays: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + flow_rates: + items: + type: number + type: array + is_96_well: + type: boolean + liquid_height: + items: + type: number + type: array + none_keys: + items: + type: string + type: array + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + sources: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + spread: + type: string + top: + items: + type: number + type: array + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + vols: + items: + type: number + type: array + waste_liquid: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vols + - sources + - waste_liquid + - use_channels + - flow_rates + - offsets + - liquid_height + - blow_out_air_volume + - spread + - delays + - is_96_well + - top + - none_keys + title: LiquidHandlerRemove_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerRemove_Result + type: object + required: + - goal + title: LiquidHandlerRemove + type: object + type: LiquidHandlerRemove + remove_liquid: feedback: {} + goal: + blow_out_air_volume: blow_out_air_volume + delays: delays + flow_rates: flow_rates + is_96_well: is_96_well + liquid_height: liquid_height + none_keys: none_keys + offsets: offsets + sources: sources + spread: spread + top: top + use_channels: use_channels + vols: vols + waste_liquid: waste_liquid + goal_default: + blow_out_air_volume: + - 0.0 + delays: + - 0 + flow_rates: + - 0.0 + is_96_well: false + liquid_height: + - 0.0 + none_keys: + - '' + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + sources: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + spread: '' + top: + - 0.0 + use_channels: + - 0 + vols: + - 0.0 + waste_liquid: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] + placeholder_keys: + sources: unilabos_resources + waste_liquid: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerRemove_Feedback + type: object + goal: + properties: + blow_out_air_volume: + items: + type: number + type: array + delays: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + flow_rates: + items: + type: number + type: array + is_96_well: + type: boolean + liquid_height: + items: + type: number + type: array + none_keys: + items: + type: string + type: array + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + sources: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + spread: + type: string + top: + items: + type: number + type: array + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + vols: + items: + type: number + type: array + waste_liquid: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vols + - sources + - waste_liquid + - use_channels + - flow_rates + - offsets + - liquid_height + - blow_out_air_volume + - spread + - delays + - is_96_well + - top + - none_keys + title: LiquidHandlerRemove_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerRemove_Result + type: object + required: + - goal + title: LiquidHandlerRemove + type: object + type: LiquidHandlerRemove + return_tips: + feedback: {} + goal: + allow_nonzero_volume: allow_nonzero_volume + use_channels: use_channels + goal_default: + allow_nonzero_volume: false + use_channels: + - 0 + handles: [] result: name: name + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerReturnTips_Feedback + type: object + goal: + properties: + allow_nonzero_volume: + type: boolean + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + required: + - use_channels + - allow_nonzero_volume + title: LiquidHandlerReturnTips_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerReturnTips_Result + type: object + required: + - goal + title: LiquidHandlerReturnTips + type: object + type: LiquidHandlerReturnTips return_tips96: - type: LiquidHandlerReturnTips96 + feedback: {} goal: allow_nonzero_volume: allow_nonzero_volume - feedback: {} + goal_default: + allow_nonzero_volume: false + handles: [] result: name: name + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerReturnTips96_Feedback + type: object + goal: + properties: + allow_nonzero_volume: + type: boolean + required: + - allow_nonzero_volume + title: LiquidHandlerReturnTips96_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerReturnTips96_Result + type: object + required: + - goal + title: LiquidHandlerReturnTips96 + type: object + type: LiquidHandlerReturnTips96 stamp: - type: LiquidHandlerStamp + feedback: {} goal: + aspiration_flow_rate: aspiration_flow_rate + dispense_flow_rate: dispense_flow_rate source: source target: target volume: volume - aspiration_flow_rate: aspiration_flow_rate - dispense_flow_rate: dispense_flow_rate - feedback: {} + goal_default: + aspiration_flow_rate: 0.0 + dispense_flow_rate: 0.0 + source: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + target: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + volume: 0.0 + handles: [] result: name: name + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerStamp_Feedback + type: object + goal: + properties: + aspiration_flow_rate: + type: number + dispense_flow_rate: + type: number + source: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + target: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + volume: + type: number + required: + - source + - target + - volume + - aspiration_flow_rate + - dispense_flow_rate + title: LiquidHandlerStamp_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerStamp_Result + type: object + required: + - goal + title: LiquidHandlerStamp + type: object + type: LiquidHandlerStamp transfer: - type: LiquidHandlerTransfer goal: - source: source - targets: targets - source_vol: source_vol - ratios: ratios - target_vols: target_vols aspiration_flow_rate: aspiration_flow_rate dispense_flow_rates: dispense_flow_rates - handles: - input: - - handler_key: liquid-input - label: Liquid Input - data_type: resource - io_type: target - data_source: handle - data_key: liquid - output: - - handler_key: liquid-output - label: Liquid Output - data_type: resource - io_type: source - data_source: executor - data_key: liquid - schema: - type: object - properties: - name: - type: string - description: 液体处理仪器当前状态 - required: - - name - additionalProperties: false - -liquid_handler.revvity: - class: - module: unilabos.devices.liquid_handling.revvity:Revvity - type: python - status_types: - status: String - action_value_mappings: - run: - type: WorkStationRun - goal: - wf_name: file_path - params: params - resource: resource - feedback: - status: status - result: - success: success - -liquid_handler.biomek: - description: Biomek液体处理器设备,基于pylabrobot控制 - icon: icon_yiyezhan.webp - class: - module: unilabos.devices.liquid_handling.biomek:LiquidHandlerBiomek - type: python - status_types: {} - action_value_mappings: - create_protocol: - type: LiquidHandlerProtocolCreation - goal: - protocol_name: protocol_name - protocol_description: protocol_description - protocol_version: protocol_version - protocol_author: protocol_author - protocol_date: protocol_date - protocol_type: protocol_type - none_keys: none_keys - feedback: {} - result: {} - run_protocol: - type: EmptyIn - goal: {} - feedback: {} - result: {} - transfer_liquid: - type: LiquidHandlerTransfer - goal: - asp_vols: asp_vols - dis_vols: dis_vols - sources: sources + ratios: ratios + source: source + source_vol: source_vol + target_vols: target_vols targets: targets - tip_racks: tip_racks - use_channels: use_channels + goal_default: + amount: '' + from_vessel: '' + rinsing_repeats: 0 + rinsing_solvent: '' + rinsing_volume: 0.0 + solid: false + time: 0.0 + to_vessel: '' + viscous: false + volume: 0.0 + handles: [] + schema: + description: '' + properties: + feedback: + properties: + current_status: + type: string + progress: + type: number + transferred_volume: + type: number + required: + - progress + - transferred_volume + - current_status + title: Transfer_Feedback + type: object + goal: + properties: + amount: + type: string + from_vessel: + type: string + rinsing_repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + rinsing_solvent: + type: string + rinsing_volume: + type: number + solid: + type: boolean + time: + type: number + to_vessel: + type: string + viscous: + type: boolean + volume: + type: number + required: + - from_vessel + - to_vessel + - volume + - amount + - time + - viscous + - rinsing_solvent + - rinsing_volume + - rinsing_repeats + - solid + title: Transfer_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Transfer_Result + type: object + required: + - goal + title: Transfer + type: object + type: Transfer + transfer_liquid: + feedback: {} + goal: asp_flow_rates: asp_flow_rates - dis_flow_rates: dis_flow_rates - offsets: offsets - touch_tip: touch_tip - liquid_height: liquid_height + asp_vols: asp_vols blow_out_air_volume: blow_out_air_volume - spread: spread + delays: delays + dis_flow_rates: dis_flow_rates + dis_vols: dis_vols is_96_well: is_96_well + liquid_height: liquid_height + mix_liquid_height: mix_liquid_height + mix_rate: mix_rate mix_stage: mix_stage mix_times: mix_times mix_vol: mix_vol - mix_rate: mix_rate - mix_liquid_height: mix_liquid_height - delays: delays none_keys: none_keys - feedback: {} + offsets: offsets + sources: sources + spread: spread + targets: targets + tip_racks: tip_racks + touch_tip: touch_tip + use_channels: use_channels + goal_default: + asp_flow_rates: + - 0.0 + asp_vols: + - 0.0 + blow_out_air_volume: + - 0.0 + delays: + - 0 + dis_flow_rates: + - 0.0 + dis_vols: + - 0.0 + is_96_well: false + liquid_height: + - 0.0 + mix_liquid_height: 0.0 + mix_rate: 0 + mix_stage: '' + mix_times: + - 0 + mix_vol: 0 + none_keys: + - '' + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + sources: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + spread: '' + targets: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + tip_racks: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + touch_tip: false + use_channels: + - 0 + handles: [] + placeholder_keys: + sources: unilabos_resources + targets: unilabos_resources + tip_racks: unilabos_resources result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerTransfer_Feedback + type: object + goal: + properties: + asp_flow_rates: + items: + type: number + type: array + asp_vols: + items: + type: number + type: array + blow_out_air_volume: + items: + type: number + type: array + delays: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + dis_flow_rates: + items: + type: number + type: array + dis_vols: + items: + type: number + type: array + is_96_well: + type: boolean + liquid_height: + items: + type: number + type: array + mix_liquid_height: + type: number + mix_rate: + maximum: 2147483647 + minimum: -2147483648 + type: integer + mix_stage: + type: string + mix_times: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + mix_vol: + maximum: 2147483647 + minimum: -2147483648 + type: integer + none_keys: + items: + type: string + type: array + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + sources: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + spread: + type: string + targets: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + tip_racks: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + touch_tip: + type: boolean + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + required: + - asp_vols + - dis_vols + - sources + - targets + - tip_racks + - use_channels + - asp_flow_rates + - dis_flow_rates + - offsets + - touch_tip + - liquid_height + - blow_out_air_volume + - spread + - is_96_well + - mix_stage + - mix_times + - mix_vol + - mix_rate + - mix_liquid_height + - delays + - none_keys + title: LiquidHandlerTransfer_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerTransfer_Result + type: object + required: + - goal + title: LiquidHandlerTransfer + type: object + type: LiquidHandlerTransfer + module: unilabos.devices.liquid_handling.liquid_handler_abstract:LiquidHandlerAbstract + status_types: {} + type: python + config_info: [] + description: Liquid handler device controlled by pylabrobot + handles: + input: + - data_key: liquid + data_source: handle + data_type: resource + handler_key: liquid-input + io_type: target + label: Liquid Input + output: + - data_key: liquid + data_source: executor + data_type: resource + handler_key: liquid-output + io_type: source + label: Liquid Output + icon: icon_yiyezhan.webp + init_param_schema: + config: + properties: + backend: + type: string + channel_num: + default: 8 + type: integer + deck: + type: string + simulator: + type: boolean + required: + - backend + - deck + - simulator + type: object + data: + properties: {} + required: [] + type: object + version: 1.0.0 +liquid_handler.biomek: + category: + - liquid_handler + class: + action_value_mappings: + auto-create_resource: + feedback: {} + goal: {} + goal_default: + bind_location: null + bind_parent_id: null + liquid_input_slot: null + liquid_type: null + liquid_volume: null + resource_tracker: null + resources: null + slot_on_deck: null + handles: [] + result: {} + schema: + description: create_resource的参数schema + properties: + feedback: {} + goal: + properties: + bind_location: + type: object + bind_parent_id: + type: string + liquid_input_slot: + type: array + liquid_type: + type: array + liquid_volume: + type: array + resource_tracker: + type: string + resources: + type: array + slot_on_deck: + type: integer + required: + - resource_tracker + - resources + - bind_parent_id + - bind_location + - liquid_input_slot + - liquid_type + - liquid_volume + - slot_on_deck + type: object + result: {} + required: + - goal + title: create_resource参数 + type: object + type: UniLabJsonCommand + auto-instrument_setup_biomek: + feedback: {} + goal: {} + goal_default: + class_name: null + id: null + liquid_input_wells: null + liquid_type: null + liquid_volume: null + parent: null + slot_on_deck: null + handles: [] + result: {} + schema: + description: instrument_setup_biomek的参数schema + properties: + feedback: {} + goal: + properties: + class_name: + type: string + id: + type: string + liquid_input_wells: + type: array + liquid_type: + type: array + liquid_volume: + type: array + parent: + type: string + slot_on_deck: + type: string + required: + - id + - parent + - slot_on_deck + - class_name + - liquid_type + - liquid_volume + - liquid_input_wells + type: object + result: {} + required: + - goal + title: instrument_setup_biomek参数 + type: object + type: UniLabJsonCommand + create_protocol: + feedback: {} + goal: + none_keys: none_keys + protocol_author: protocol_author + protocol_date: protocol_date + protocol_description: protocol_description + protocol_name: protocol_name + protocol_type: protocol_type + protocol_version: protocol_version + goal_default: + none_keys: + - '' + protocol_author: '' + protocol_date: '' + protocol_description: '' + protocol_name: '' + protocol_type: '' + protocol_version: '' + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerProtocolCreation_Feedback + type: object + goal: + properties: + none_keys: + items: + type: string + type: array + protocol_author: + type: string + protocol_date: + type: string + protocol_description: + type: string + protocol_name: + type: string + protocol_type: + type: string + protocol_version: + type: string + required: + - protocol_name + - protocol_description + - protocol_version + - protocol_author + - protocol_date + - protocol_type + - none_keys + title: LiquidHandlerProtocolCreation_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: LiquidHandlerProtocolCreation_Result + type: object + required: + - goal + title: LiquidHandlerProtocolCreation + type: object + type: LiquidHandlerProtocolCreation + incubation_biomek: + feedback: {} + goal: + time: time + goal_default: + time: 0 handles: input: - - handler_key: liquid-input - label: Liquid Input - data_type: resource - io_type: target - data_source: handle - data_key: liquid + - data_key: liquid + data_source: handle + data_type: resource + handler_key: plate + label: plate output: - - handler_key: liquid-output - label: Liquid Output - data_type: resource - io_type: source - data_source: executor - data_key: liquid - transfer_biomek: - type: LiquidHandlerTransferBiomek + - data_key: liquid + data_source: handle + data_type: resource + handler_key: plate_out + label: plate + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerIncubateBiomek_Feedback + type: object + goal: + properties: + time: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - time + title: LiquidHandlerIncubateBiomek_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerIncubateBiomek_Result + type: object + required: + - goal + title: LiquidHandlerIncubateBiomek + type: object + type: LiquidHandlerIncubateBiomek + move_biomek: + feedback: {} goal: + source: sources + target: targets + goal_default: + sources: '' + targets: '' + handles: + input: + - data_key: liquid + data_source: handle + data_type: resource + handler_key: sources + label: sources + output: + - data_key: liquid + data_source: handle + data_type: resource + handler_key: targets + label: targets + result: + name: name + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerMoveBiomek_Feedback + type: object + goal: + properties: + sources: + type: string + targets: + type: string + required: + - sources + - targets + title: LiquidHandlerMoveBiomek_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerMoveBiomek_Result + type: object + required: + - goal + title: LiquidHandlerMoveBiomek + type: object + type: LiquidHandlerMoveBiomek + oscillation_biomek: + feedback: {} + goal: + rpm: rpm + time: time + goal_default: + rpm: 0 + time: 0 + handles: + input: + - data_key: liquid + data_source: handle + data_type: resource + handler_key: plate + label: plate + output: + - data_key: liquid + data_source: handle + data_type: resource + handler_key: plate_out + label: plate + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerOscillateBiomek_Feedback + type: object + goal: + properties: + rpm: + maximum: 2147483647 + minimum: -2147483648 + type: integer + time: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - rpm + - time + title: LiquidHandlerOscillateBiomek_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerOscillateBiomek_Result + type: object + required: + - goal + title: LiquidHandlerOscillateBiomek + type: object + type: LiquidHandlerOscillateBiomek + run_protocol: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + transfer_biomek: + feedback: {} + goal: + aspirate_techniques: aspirate_techniques + dispense_techniques: dispense_techniques sources: sources targets: targets tip_rack: tip_rack volume: volume - aspirate_techniques: aspirate_techniques - dispense_techniques: dispense_techniques - feedback: {} - result: {} + goal_default: + aspirate_technique: '' + dispense_technique: '' + sources: '' + targets: '' + tip_rack: '' + volume: 0.0 handles: input: - - handler_key: sources - label: sources - data_type: resource - data_source: handle - data_key: liquid - - handler_key: targets - label: targets - data_type: resource - data_source: executor - data_key: liquid - - handler_key: tip_rack - label: tip_rack - data_type: resource - data_source: executor - data_key: liquid + - data_key: liquid + data_source: handle + data_type: resource + handler_key: sources + label: sources + - data_key: liquid + data_source: executor + data_type: resource + handler_key: targets + label: targets + - data_key: liquid + data_source: executor + data_type: resource + handler_key: tip_rack + label: tip_rack output: - - handler_key: sources_out - label: sources - data_type: resource - data_source: handle - data_key: liquid - - handler_key: targets_out - label: targets - data_type: resource - data_source: executor - data_key: liquid - oscillation_biomek: - type: LiquidHandlerOscillateBiomek - goal: - rpm: rpm - time: time - feedback: {} + - data_key: liquid + data_source: handle + data_type: resource + handler_key: sources_out + label: sources + - data_key: liquid + data_source: executor + data_type: resource + handler_key: targets_out + label: targets result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerTransferBiomek_Feedback + type: object + goal: + properties: + aspirate_technique: + type: string + dispense_technique: + type: string + sources: + type: string + targets: + type: string + tip_rack: + type: string + volume: + type: number + required: + - sources + - targets + - tip_rack + - volume + - aspirate_technique + - dispense_technique + title: LiquidHandlerTransferBiomek_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerTransferBiomek_Result + type: object + required: + - goal + title: LiquidHandlerTransferBiomek + type: object + type: LiquidHandlerTransferBiomek + transfer_liquid: + feedback: {} + goal: + asp_flow_rates: asp_flow_rates + asp_vols: asp_vols + blow_out_air_volume: blow_out_air_volume + delays: delays + dis_flow_rates: dis_flow_rates + dis_vols: dis_vols + is_96_well: is_96_well + liquid_height: liquid_height + mix_liquid_height: mix_liquid_height + mix_rate: mix_rate + mix_stage: mix_stage + mix_times: mix_times + mix_vol: mix_vol + none_keys: none_keys + offsets: offsets + sources: sources + spread: spread + targets: targets + tip_racks: tip_racks + touch_tip: touch_tip + use_channels: use_channels + goal_default: + asp_flow_rates: + - 0.0 + asp_vols: + - 0.0 + blow_out_air_volume: + - 0.0 + delays: + - 0 + dis_flow_rates: + - 0.0 + dis_vols: + - 0.0 + is_96_well: false + liquid_height: + - 0.0 + mix_liquid_height: 0.0 + mix_rate: 0 + mix_stage: '' + mix_times: + - 0 + mix_vol: 0 + none_keys: + - '' + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + sources: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + spread: '' + targets: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + tip_racks: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + touch_tip: false + use_channels: + - 0 handles: input: - - handler_key: plate - label: plate - data_type: resource - data_source: handle - data_key: liquid + - data_key: liquid + data_source: handle + data_type: resource + handler_key: liquid-input + io_type: target + label: Liquid Input output: - - handler_key: plate_out - label: plate - data_type: resource - data_source: handle - data_key: liquid - move_biomek: - type: LiquidHandlerMoveBiomek - goal: - source: sources - target: targets + - data_key: liquid + data_source: executor + data_type: resource + handler_key: liquid-output + io_type: source + label: Liquid Output + placeholder_keys: + sources: unilabos_resources + targets: unilabos_resources + tip_racks: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerTransfer_Feedback + type: object + goal: + properties: + asp_flow_rates: + items: + type: number + type: array + asp_vols: + items: + type: number + type: array + blow_out_air_volume: + items: + type: number + type: array + delays: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + dis_flow_rates: + items: + type: number + type: array + dis_vols: + items: + type: number + type: array + is_96_well: + type: boolean + liquid_height: + items: + type: number + type: array + mix_liquid_height: + type: number + mix_rate: + maximum: 2147483647 + minimum: -2147483648 + type: integer + mix_stage: + type: string + mix_times: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + mix_vol: + maximum: 2147483647 + minimum: -2147483648 + type: integer + none_keys: + items: + type: string + type: array + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + sources: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + spread: + type: string + targets: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + tip_racks: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + touch_tip: + type: boolean + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + required: + - asp_vols + - dis_vols + - sources + - targets + - tip_racks + - use_channels + - asp_flow_rates + - dis_flow_rates + - offsets + - touch_tip + - liquid_height + - blow_out_air_volume + - spread + - is_96_well + - mix_stage + - mix_times + - mix_vol + - mix_rate + - mix_liquid_height + - delays + - none_keys + title: LiquidHandlerTransfer_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerTransfer_Result + type: object + required: + - goal + title: LiquidHandlerTransfer + type: object + type: LiquidHandlerTransfer + module: unilabos.devices.liquid_handling.biomek:LiquidHandlerBiomek + status_types: + success: String + type: python + config_info: [] + description: Biomek液体处理器设备,基于pylabrobot控制 + handles: [] + icon: icon_yiyezhan.webp + init_param_schema: + config: + properties: {} + required: [] + type: object + data: + properties: + success: + type: string + required: + - success + type: object + version: 1.0.0 +liquid_handler.prcxi: + category: + - liquid_handler + class: + action_value_mappings: + add_liquid: feedback: {} + goal: + asp_vols: asp_vols + blow_out_air_volume: blow_out_air_volume + dis_vols: dis_vols + flow_rates: flow_rates + is_96_well: is_96_well + liquid_height: liquid_height + mix_liquid_height: mix_liquid_height + mix_rate: mix_rate + mix_time: mix_time + mix_vol: mix_vol + none_keys: none_keys + offsets: offsets + reagent_sources: reagent_sources + spread: spread + targets: targets + use_channels: use_channels + goal_default: + asp_vols: + - 0.0 + blow_out_air_volume: + - 0.0 + dis_vols: + - 0.0 + flow_rates: + - 0.0 + is_96_well: false + liquid_height: + - 0.0 + mix_liquid_height: 0.0 + mix_rate: 0 + mix_time: 0 + mix_vol: 0 + none_keys: + - '' + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + reagent_sources: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + spread: '' + targets: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + use_channels: + - 0 + handles: [] + placeholder_keys: + reagent_sources: unilabos_resources + targets: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerAdd_Feedback + type: object + goal: + properties: + asp_vols: + items: + type: number + type: array + blow_out_air_volume: + items: + type: number + type: array + dis_vols: + items: + type: number + type: array + flow_rates: + items: + type: number + type: array + is_96_well: + type: boolean + liquid_height: + items: + type: number + type: array + mix_liquid_height: + type: number + mix_rate: + maximum: 2147483647 + minimum: -2147483648 + type: integer + mix_time: + maximum: 2147483647 + minimum: -2147483648 + type: integer + mix_vol: + maximum: 2147483647 + minimum: -2147483648 + type: integer + none_keys: + items: + type: string + type: array + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + reagent_sources: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + spread: + type: string + targets: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + required: + - asp_vols + - dis_vols + - reagent_sources + - targets + - use_channels + - flow_rates + - offsets + - liquid_height + - blow_out_air_volume + - spread + - is_96_well + - mix_time + - mix_vol + - mix_rate + - mix_liquid_height + - none_keys + title: LiquidHandlerAdd_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerAdd_Result + type: object + required: + - goal + title: LiquidHandlerAdd + type: object + type: LiquidHandlerAdd + aspirate: + feedback: {} + goal: + blow_out_air_volume: blow_out_air_volume + end_delay: end_delay + flow_rates: flow_rates + liquid_height: liquid_height + offsets: offsets + resources: resources + use_channels: use_channels + vols: vols + goal_default: + blow_out_air_volume: + - 0.0 + flow_rates: + - 0.0 + liquid_height: + - 0.0 + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + resources: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + spread: '' + use_channels: + - 0 + vols: + - 0.0 + handles: [] + placeholder_keys: + resources: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerAspirate_Feedback + type: object + goal: + properties: + blow_out_air_volume: + items: + type: number + type: array + flow_rates: + items: + type: number + type: array + liquid_height: + items: + type: number + type: array + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + resources: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + spread: + type: string + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + vols: + items: + type: number + type: array + required: + - resources + - vols + - use_channels + - flow_rates + - offsets + - liquid_height + - blow_out_air_volume + - spread + title: LiquidHandlerAspirate_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerAspirate_Result + type: object + required: + - goal + title: LiquidHandlerAspirate + type: object + type: LiquidHandlerAspirate + auto-create_protocol: + feedback: {} + goal: {} + goal_default: + none_keys: [] + protocol_author: '' + protocol_date: '' + protocol_description: '' + protocol_name: '' + protocol_type: '' + protocol_version: '' + handles: [] + result: {} + schema: + description: create_protocol的参数schema + properties: + feedback: {} + goal: + properties: + none_keys: + default: [] + type: array + protocol_author: + default: '' + type: string + protocol_date: + default: '' + type: string + protocol_description: + default: '' + type: string + protocol_name: + default: '' + type: string + protocol_type: + default: '' + type: string + protocol_version: + default: '' + type: string + required: [] + type: object + result: {} + required: + - goal + title: create_protocol参数 + type: object + type: UniLabJsonCommandAsync + auto-custom_delay: + feedback: {} + goal: {} + goal_default: + msg: null + seconds: 0 + handles: [] + result: {} + schema: + description: custom_delay的参数schema + properties: + feedback: {} + goal: + properties: + msg: + type: string + seconds: + default: 0 + type: string + required: [] + type: object + result: {} + required: + - goal + title: custom_delay参数 + type: object + type: UniLabJsonCommandAsync + auto-discard_tips: + feedback: {} + goal: {} + goal_default: + allow_nonzero_volume: true + offsets: null + use_channels: null + handles: [] + result: {} + schema: + description: discard_tips的参数schema + properties: + feedback: {} + goal: + properties: + allow_nonzero_volume: + default: true + type: boolean + offsets: + type: string + use_channels: + type: string + required: [] + type: object + result: {} + required: + - goal + title: discard_tips参数 + type: object + type: UniLabJsonCommandAsync + auto-iter_tips: + feedback: {} + goal: {} + goal_default: + tip_racks: null + handles: [] + result: {} + schema: + description: iter_tips的参数schema + properties: + feedback: {} + goal: + properties: + tip_racks: + type: string + required: + - tip_racks + type: object + result: {} + required: + - goal + title: iter_tips参数 + type: object + type: UniLabJsonCommand + auto-move_to: + feedback: {} + goal: {} + goal_default: + channel: 0 + dis_to_top: 0 + well: null + handles: [] + result: {} + schema: + description: move_to的参数schema + properties: + feedback: {} + goal: + properties: + channel: + default: 0 + type: integer + dis_to_top: + default: 0 + type: number + well: + type: string + required: + - well + type: object + result: {} + required: + - goal + title: move_to参数 + type: object + type: UniLabJsonCommandAsync + auto-run_protocol: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: run_protocol的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: run_protocol参数 + type: object + type: UniLabJsonCommandAsync + auto-touch_tip: + feedback: {} + goal: {} + goal_default: + targets: null + handles: [] + result: {} + schema: + description: touch_tip的参数schema + properties: + feedback: {} + goal: + properties: + targets: + type: string + required: + - targets + type: object + result: {} + required: + - goal + title: touch_tip参数 + type: object + type: UniLabJsonCommandAsync + dispense: + feedback: {} + goal: + blow_out_air_volume: blow_out_air_volume + flow_rates: flow_rates + offsets: offsets + resources: resources + spread: spread + use_channels: use_channels + vols: vols + goal_default: + blow_out_air_volume: + - 0 + flow_rates: + - 0.0 + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + resources: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + spread: '' + use_channels: + - 0 + vols: + - 0.0 + handles: [] + placeholder_keys: + resources: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerDispense_Feedback + type: object + goal: + properties: + blow_out_air_volume: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + flow_rates: + items: + type: number + type: array + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + resources: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + spread: + type: string + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + vols: + items: + type: number + type: array + required: + - resources + - vols + - use_channels + - flow_rates + - offsets + - blow_out_air_volume + - spread + title: LiquidHandlerDispense_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerDispense_Result + type: object + required: + - goal + title: LiquidHandlerDispense + type: object + type: LiquidHandlerDispense + drop_tips: + feedback: {} + goal: {} + goal_default: + allow_nonzero_volume: false + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + tip_spots: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + use_channels: + - 0 + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerDropTips_Feedback + type: object + goal: + properties: + allow_nonzero_volume: + type: boolean + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + tip_spots: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + required: + - tip_spots + - use_channels + - offsets + - allow_nonzero_volume + title: LiquidHandlerDropTips_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerDropTips_Result + type: object + required: + - goal + title: LiquidHandlerDropTips + type: object + type: LiquidHandlerDropTips + mix: + feedback: {} + goal: + height_to_bottom: height_to_bottom + mix_rate: mix_rate + mix_time: mix_time + mix_vol: mix_vol + none_keys: none_keys + offsets: offsets + targets: targets + goal_default: + height_to_bottom: 0.0 + mix_rate: 0.0 + mix_time: 0 + mix_vol: 0 + none_keys: + - '' + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + targets: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] + placeholder_keys: + targets: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerMix_Feedback + type: object + goal: + properties: + height_to_bottom: + type: number + mix_rate: + type: number + mix_time: + maximum: 2147483647 + minimum: -2147483648 + type: integer + mix_vol: + maximum: 2147483647 + minimum: -2147483648 + type: integer + none_keys: + items: + type: string + type: array + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + targets: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + required: + - targets + - mix_time + - mix_vol + - height_to_bottom + - offsets + - mix_rate + - none_keys + title: LiquidHandlerMix_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerMix_Result + type: object + required: + - goal + title: LiquidHandlerMix + type: object + type: LiquidHandlerMix + pick_up_tips: + feedback: {} + goal: + offsets: offsets + tip_spots: tip_spots + use_channels: use_channels + goal_default: + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + tip_spots: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + use_channels: + - 0 + handles: [] + placeholder_keys: + tip_spots: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerPickUpTips_Feedback + type: object + goal: + properties: + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + tip_spots: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + required: + - tip_spots + - use_channels + - offsets + title: LiquidHandlerPickUpTips_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerPickUpTips_Result + type: object + required: + - goal + title: LiquidHandlerPickUpTips + type: object + type: LiquidHandlerPickUpTips + remove_liquid: + feedback: {} + goal: + blow_out_air_volume: blow_out_air_volume + delays: delays + flow_rates: flow_rates + is_96_well: is_96_well + liquid_height: liquid_height + none_keys: none_keys + offsets: offsets + sources: sources + spread: spread + top: top + use_channels: use_channels + vols: vols + waste_liquid: waste_liquid + goal_default: + blow_out_air_volume: + - 0.0 + delays: + - 0 + flow_rates: + - 0.0 + is_96_well: false + liquid_height: + - 0.0 + none_keys: + - '' + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + sources: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + spread: '' + top: + - 0.0 + use_channels: + - 0 + vols: + - 0.0 + waste_liquid: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] + placeholder_keys: + sources: unilabos_resources + waste_liquid: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerRemove_Feedback + type: object + goal: + properties: + blow_out_air_volume: + items: + type: number + type: array + delays: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + flow_rates: + items: + type: number + type: array + is_96_well: + type: boolean + liquid_height: + items: + type: number + type: array + none_keys: + items: + type: string + type: array + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + sources: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + spread: + type: string + top: + items: + type: number + type: array + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + vols: + items: + type: number + type: array + waste_liquid: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vols + - sources + - waste_liquid + - use_channels + - flow_rates + - offsets + - liquid_height + - blow_out_air_volume + - spread + - delays + - is_96_well + - top + - none_keys + title: LiquidHandlerRemove_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerRemove_Result + type: object + required: + - goal + title: LiquidHandlerRemove + type: object + type: LiquidHandlerRemove + set_liquid: + feedback: {} + goal: + liquid_names: liquid_names + volumes: volumes + wells: wells + goal_default: + liquid_names: + - '' + volumes: + - 0.0 + wells: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] + placeholder_keys: + wells: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerSetLiquid_Feedback + type: object + goal: + properties: + liquid_names: + items: + type: string + type: array + volumes: + items: + type: number + type: array + wells: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + required: + - wells + - liquid_names + - volumes + title: LiquidHandlerSetLiquid_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: LiquidHandlerSetLiquid_Result + type: object + required: + - goal + title: LiquidHandlerSetLiquid + type: object + type: LiquidHandlerSetLiquid + set_tiprack: + feedback: {} + goal: + tip_racks: tip_racks + goal_default: + tip_racks: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] + placeholder_keys: + tip_racks: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerSetTipRack_Feedback + type: object + goal: + properties: + tip_racks: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + required: + - tip_racks + title: LiquidHandlerSetTipRack_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerSetTipRack_Result + type: object + required: + - goal + title: LiquidHandlerSetTipRack + type: object + type: LiquidHandlerSetTipRack + transfer: + goal: + aspiration_flow_rate: aspiration_flow_rate + dispense_flow_rates: dispense_flow_rates + ratios: ratios + source: source + source_vol: source_vol + target_vols: target_vols + targets: targets + goal_default: + amount: '' + from_vessel: '' + rinsing_repeats: 0 + rinsing_solvent: '' + rinsing_volume: 0.0 + solid: false + time: 0.0 + to_vessel: '' + viscous: false + volume: 0.0 + handles: [] + schema: + description: '' + properties: + feedback: + properties: + current_status: + type: string + progress: + type: number + transferred_volume: + type: number + required: + - progress + - transferred_volume + - current_status + title: Transfer_Feedback + type: object + goal: + properties: + amount: + type: string + from_vessel: + type: string + rinsing_repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + rinsing_solvent: + type: string + rinsing_volume: + type: number + solid: + type: boolean + time: + type: number + to_vessel: + type: string + viscous: + type: boolean + volume: + type: number + required: + - from_vessel + - to_vessel + - volume + - amount + - time + - viscous + - rinsing_solvent + - rinsing_volume + - rinsing_repeats + - solid + title: Transfer_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Transfer_Result + type: object + required: + - goal + title: Transfer + type: object + type: Transfer + transfer_liquid: + feedback: {} + goal: + asp_flow_rates: asp_flow_rates + asp_vols: asp_vols + blow_out_air_volume: blow_out_air_volume + delays: delays + dis_flow_rates: dis_flow_rates + dis_vols: dis_vols + is_96_well: is_96_well + liquid_height: liquid_height + mix_liquid_height: mix_liquid_height + mix_rate: mix_rate + mix_stage: mix_stage + mix_times: mix_times + mix_vol: mix_vol + none_keys: none_keys + offsets: offsets + sources: sources + spread: spread + targets: targets + tip_racks: tip_racks + touch_tip: touch_tip + use_channels: use_channels + goal_default: + asp_flow_rates: + - 0.0 + asp_vols: + - 0.0 + blow_out_air_volume: + - 0.0 + delays: + - 0 + dis_flow_rates: + - 0.0 + dis_vols: + - 0.0 + is_96_well: false + liquid_height: + - 0.0 + mix_liquid_height: 0.0 + mix_rate: 0 + mix_stage: '' + mix_times: + - 0 + mix_vol: 0 + none_keys: + - '' + offsets: + - x: 0.0 + y: 0.0 + z: 0.0 + sources: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + spread: '' + targets: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + tip_racks: + - category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + touch_tip: false + use_channels: + - 0 + handles: [] + placeholder_keys: + sources: unilabos_resources + targets: unilabos_resources + tip_racks: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: LiquidHandlerTransfer_Feedback + type: object + goal: + properties: + asp_flow_rates: + items: + type: number + type: array + asp_vols: + items: + type: number + type: array + blow_out_air_volume: + items: + type: number + type: array + delays: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + dis_flow_rates: + items: + type: number + type: array + dis_vols: + items: + type: number + type: array + is_96_well: + type: boolean + liquid_height: + items: + type: number + type: array + mix_liquid_height: + type: number + mix_rate: + maximum: 2147483647 + minimum: -2147483648 + type: integer + mix_stage: + type: string + mix_times: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + mix_vol: + maximum: 2147483647 + minimum: -2147483648 + type: integer + none_keys: + items: + type: string + type: array + offsets: + items: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + type: array + sources: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + spread: + type: string + targets: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + tip_racks: + items: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + type: array + touch_tip: + type: boolean + use_channels: + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array + required: + - asp_vols + - dis_vols + - sources + - targets + - tip_racks + - use_channels + - asp_flow_rates + - dis_flow_rates + - offsets + - touch_tip + - liquid_height + - blow_out_air_volume + - spread + - is_96_well + - mix_stage + - mix_times + - mix_vol + - mix_rate + - mix_liquid_height + - delays + - none_keys + title: LiquidHandlerTransfer_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: LiquidHandlerTransfer_Result + type: object + required: + - goal + title: LiquidHandlerTransfer + type: object + type: LiquidHandlerTransfer + module: unilabos.devices.liquid_handling.prcxi.prcxi:PRCXI9300Handler + status_types: + reset_ok: bool + type: python + config_info: [] + description: prcxi液体处理器设备,基于pylabrobot控制 + handles: [] + icon: icon_yiyezhan.webp + init_param_schema: + config: + properties: + axis: + default: Left + type: string + channel_num: + default: 8 + type: string + debug: + default: false + type: string + deck: + type: string + host: + type: string + matrix_id: + default: '' + type: string + port: + type: integer + setup: + default: true + type: string + simulator: + default: false + type: string + timeout: + type: number + required: + - deck + - host + - port + - timeout + type: object + data: + properties: + reset_ok: + type: boolean + required: + - reset_ok + type: object + version: 1.0.0 +liquid_handler.revvity: + category: + - liquid_handler + class: + action_value_mappings: + run: + feedback: + status: status + goal: + params: params + resource: resource + wf_name: file_path + goal_default: + params: '' + resource: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + wf_name: '' + handles: [] result: - name: name - handles: - input: - - handler_key: sources - label: sources - data_type: resource - data_source: handle - data_key: liquid - output: - - handler_key: targets - label: targets - data_type: resource - data_source: handle - data_key: liquid - incubation_biomek: - type: LiquidHandlerIncubateBiomek - goal: - time: time - feedback: {} - result: {} - handles: - input: - - handler_key: plate - label: plate - data_type: resource - data_source: handle - data_key: liquid - output: - - handler_key: plate_out - label: plate - data_type: resource - data_source: handle - data_key: liquid - schema: - type: object - properties: {} - required: [] - additionalProperties: false + success: success + schema: + description: '' + properties: + feedback: + properties: + gantt: + type: string + status: + type: string + required: + - status + - gantt + title: WorkStationRun_Feedback + type: object + goal: + properties: + params: + type: string + resource: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + wf_name: + type: string + required: + - wf_name + - params + - resource + title: WorkStationRun_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: WorkStationRun_Result + type: object + required: + - goal + title: WorkStationRun + type: object + type: WorkStationRun + module: unilabos.devices.liquid_handling.revvity:Revvity + status_types: + status: str + success: bool + type: python + config_info: [] + description: '' + handles: [] + icon: '' + init_param_schema: + config: + properties: {} + required: [] + type: object + data: + properties: + status: + type: string + success: + type: boolean + required: + - success + - status + type: object + version: 1.0.0 diff --git a/unilabos/registry/devices/mock_devices.yaml b/unilabos/registry/devices/mock_devices.yaml index 93f52a8..ec62986 100644 --- a/unilabos/registry/devices/mock_devices.yaml +++ b/unilabos/registry/devices/mock_devices.yaml @@ -1,892 +1,4685 @@ mock_chiller: - description: Mock Chiller Device + category: + - mock_devices class: - module: unilabos.devices.mock.mock_chiller:MockChiller - type: python - status_types: - current_temperature: Float64 - target_temperature: Float64 - status: String - is_cooling: Bool - is_heating: Bool - vessel: String # 新增 - purpose: String # 新增 action_value_mappings: emergency_stop: - type: EmptyIn + feedback: {} goal: {} - feedback: {} + goal_default: {} + handles: [] result: success: success + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn heat_chill_start: - type: HeatChillStart + feedback: {} goal: - vessel: vessel - temp: temp purpose: purpose - feedback: {} + temp: temp + vessel: vessel + goal_default: + purpose: '' + temp: 0.0 + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] result: - success: success status: status + success: success + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: HeatChillStart_Feedback + type: object + goal: + properties: + purpose: + type: string + temp: + type: number + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + - temp + - purpose + title: HeatChillStart_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: HeatChillStart_Result + type: object + required: + - goal + title: HeatChillStart + type: object + type: HeatChillStart heat_chill_stop: - type: HeatChillStop - goal: - vessel: vessel feedback: {} - result: - success: success - status: status - schema: - type: object - properties: - current_temperature: - type: number - description: Current temperature of the chiller in °C - target_temperature: - type: number - description: Target temperature setting in °C - status: - type: string - description: Current status of the device - is_cooling: - type: boolean - description: Whether the device is actively cooling - is_heating: - type: boolean - description: Whether the device is actively heating - vessel: # 新增 - type: string - description: Current vessel being processed - purpose: # 新增 - type: string - description: Purpose of the current operation - required: - - current_temperature - - target_temperature - - status - - vessel - - purpose - additionalProperties: false -mock_filter: - description: Mock Filter Device - class: - module: unilabos.devices.mock.mock_filter:MockFilter - type: python - status_types: - status: String - is_filtering: Bool - flow_rate: Float64 - pressure_drop: Float64 - filter_life: Float64 - vessel: String - filtrate_vessel: String - filtered_volume: Float64 - progress: Float64 - stir: Bool - stir_speed: Float64 - temperature: Float64 - continue_heatchill: Bool - target_volume: Float64 - action_value_mappings: - filter: - type: Filter goal: vessel: vessel + goal_default: + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] + result: + status: status + success: success + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: HeatChillStop_Feedback + type: object + goal: + properties: + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + title: HeatChillStop_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: HeatChillStop_Result + type: object + required: + - goal + title: HeatChillStop + type: object + type: HeatChillStop + module: unilabos.devices.mock.mock_chiller:MockChiller + status_types: + current_temperature: float + is_cooling: bool + is_heating: bool + purpose: str + status: str + status_info: dict + target_temperature: float + vessel: str + type: python + config_info: [] + description: Mock Chiller Device + handles: [] + icon: '' + init_param_schema: + config: + properties: + port: + default: MOCK + type: string + required: [] + type: object + data: + properties: + current_temperature: + type: number + is_cooling: + type: boolean + is_heating: + type: boolean + purpose: + type: string + status: + type: string + status_info: + type: object + target_temperature: + type: number + vessel: + type: string + required: + - current_temperature + - target_temperature + - status + - is_cooling + - is_heating + - vessel + - purpose + - status_info + type: object + version: 1.0.0 +mock_filter: + category: + - mock_devices + class: + action_value_mappings: + auto-emergency_stop: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: emergency_stop的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: emergency_stop参数 + type: object + type: UniLabJsonCommand + filter: + feedback: + current_status: current_status + current_temp: current_temp + filtered_volume: filtered_volume + progress: progress + goal: + continue_heatchill: continue_heatchill filtrate_vessel: filtrate_vessel stir: stir stir_speed: stir_speed temp: temp - continue_heatchill: continue_heatchill + vessel: vessel volume: volume - feedback: - progress: progress - current_temp: current_temp - filtered_volume: filtered_volume - current_status: current_status + goal_default: + continue_heatchill: false + filtrate_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + stir: false + stir_speed: 0.0 + temp: 0.0 + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + volume: 0.0 + handles: [] result: - success: success message: message - stop_filtering: - type: EmptyIn - goal: {} - feedback: {} - result: success: success + schema: + description: '' + properties: + feedback: + properties: + current_status: + type: string + current_temp: + type: number + filtered_volume: + type: number + progress: + type: number + required: + - progress + - current_temp + - filtered_volume + - current_status + title: Filter_Feedback + type: object + goal: + properties: + continue_heatchill: + type: boolean + filtrate_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + stir: + type: boolean + stir_speed: + type: number + temp: + type: number + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + volume: + type: number + required: + - vessel + - filtrate_vessel + - stir + - stir_speed + - temp + - continue_heatchill + - volume + title: Filter_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Filter_Result + type: object + required: + - goal + title: Filter + type: object + type: Filter replace_filter: - type: EmptyIn - goal: {} feedback: {} + goal: {} + goal_default: {} + handles: [] result: success: success - schema: - type: object - properties: - status: - type: string - description: Current status of the filter - is_filtering: - type: boolean - description: Whether the filter is actively filtering - flow_rate: - type: number - description: Current flow rate in L/min - pressure_drop: - type: number - description: Pressure drop across the filter in Pa - filter_life: - type: number - description: Remaining filter life percentage - power_on: - type: boolean - description: Power state of the device - required: - - status - - is_filtering - - flow_rate - - filter_life - - vessel - - filtrate_vessel - - filtered_volume - - progress - additionalProperties: false -mock_heater: - description: Mock Heater Device - class: - module: unilabos.devices.mock.mock_heater:MockHeater - type: python + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + stop_filtering: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + module: unilabos.devices.mock.mock_filter:MockFilter status_types: - current_temperature: Float64 - target_temperature: Float64 - status: String - is_heating: Bool - heating_power: Float64 - max_temperature: Float64 - vessel: String - purpose: String - stir: Bool - stir_speed: Float64 + continue_heatchill: bool + filter_life: float + filtered_volume: float + filtrate_vessel: str + flow_rate: float + is_filtering: bool + pressure_drop: float + progress: float + status: str + status_info: dict + stir: bool + stir_speed: float + target_volume: float + temperature: float + vessel: str + type: python + config_info: [] + description: Mock Filter Device + handles: [] + icon: '' + init_param_schema: + config: + properties: + port: + default: MOCK + type: string + required: [] + type: object + data: + properties: + continue_heatchill: + type: boolean + filter_life: + type: number + filtered_volume: + type: number + filtrate_vessel: + type: string + flow_rate: + type: number + is_filtering: + type: boolean + pressure_drop: + type: number + progress: + type: number + status: + type: string + status_info: + type: object + stir: + type: boolean + stir_speed: + type: number + target_volume: + type: number + temperature: + type: number + vessel: + type: string + required: + - status + - is_filtering + - flow_rate + - pressure_drop + - filter_life + - vessel + - filtrate_vessel + - filtered_volume + - progress + - stir + - stir_speed + - temperature + - continue_heatchill + - target_volume + - status_info + type: object + version: 1.0.0 +mock_heater: + category: + - mock_devices + class: action_value_mappings: - heat_chill_start: - type: HeatChillStart - goal: - vessel: vessel - temp: temp - purpose: purpose - feedback: - status: status - result: - success: success - heat_chill_stop: - type: HeatChillStop - goal: - vessel: vessel - feedback: - status: status + auto-set_heating_power: + feedback: {} + goal: {} + goal_default: + power: null + handles: [] + result: {} + schema: + description: set_heating_power的参数schema + properties: + feedback: {} + goal: + properties: + power: + type: number + required: + - power + type: object + result: {} + required: + - goal + title: set_heating_power参数 + type: object + type: UniLabJsonCommand + auto-set_temperature: + feedback: {} + goal: {} + goal_default: + temperature: null + handles: [] + result: {} + schema: + description: set_temperature的参数schema + properties: + feedback: {} + goal: + properties: + temperature: + type: number + required: + - temperature + type: object + result: {} + required: + - goal + title: set_temperature参数 + type: object + type: UniLabJsonCommand + emergency_stop: + feedback: {} + goal: {} + goal_default: {} + handles: [] result: success: success + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn heat_chill: - type: HeatChill + feedback: + status: status goal: - vessel: vessel - temp: temp - time: time + purpose: purpose stir: stir stir_speed: stir_speed - purpose: purpose + temp: temp + time: time + vessel: vessel + goal_default: + pressure: '' + purpose: '' + reflux_solvent: '' + stir: false + stir_speed: 0.0 + temp: 0.0 + temp_spec: '' + time: '' + time_spec: '' + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: HeatChill_Feedback + type: object + goal: + properties: + pressure: + type: string + purpose: + type: string + reflux_solvent: + type: string + stir: + type: boolean + stir_speed: + type: number + temp: + type: number + temp_spec: + type: string + time: + type: string + time_spec: + type: string + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + - temp + - time + - temp_spec + - time_spec + - pressure + - reflux_solvent + - stir + - stir_speed + - purpose + title: HeatChill_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: HeatChill_Result + type: object + required: + - goal + title: HeatChill + type: object + type: HeatChill + heat_chill_start: feedback: status: status + goal: + purpose: purpose + temp: temp + vessel: vessel + goal_default: + purpose: '' + temp: 0.0 + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] result: success: success - emergency_stop: - type: EmptyIn - goal: {} - feedback: {} + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: HeatChillStart_Feedback + type: object + goal: + properties: + purpose: + type: string + temp: + type: number + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + - temp + - purpose + title: HeatChillStart_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: HeatChillStart_Result + type: object + required: + - goal + title: HeatChillStart + type: object + type: HeatChillStart + heat_chill_stop: + feedback: + status: status + goal: + vessel: vessel + goal_default: + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] result: success: success - schema: - type: object - properties: - current_temperature: - type: number - description: Current temperature of the heater in °C - target_temperature: - type: number - description: Target temperature setting in °C - status: - type: string - description: Current status of the device - is_heating: - type: boolean - description: Whether the device is actively heating - heating_power: - type: number - description: Current heating power percentage - max_temperature: - type: number - description: Maximum temperature limit - vessel: - type: string - description: Current vessel being heated - purpose: - type: string - description: Purpose of the heating operation - stir: - type: boolean - description: Whether stirring is enabled - stir_speed: - type: number - description: Current stirring speed - required: - - current_temperature - - target_temperature - - status - - vessel - - purpose - additionalProperties: false + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: HeatChillStop_Feedback + type: object + goal: + properties: + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + title: HeatChillStop_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: HeatChillStop_Result + type: object + required: + - goal + title: HeatChillStop + type: object + type: HeatChillStop + module: unilabos.devices.mock.mock_heater:MockHeater + status_types: + current_temperature: float + heating_power: float + is_heating: bool + max_temperature: float + purpose: str + status: str + status_info: dict + stir: bool + stir_speed: float + target_temperature: float + vessel: str + type: python + config_info: [] + description: Mock Heater Device + handles: [] + icon: '' + init_param_schema: + config: + properties: + port: + default: MOCK + type: string + required: [] + type: object + data: + properties: + current_temperature: + type: number + heating_power: + type: number + is_heating: + type: boolean + max_temperature: + type: number + purpose: + type: string + status: + type: string + status_info: + type: object + stir: + type: boolean + stir_speed: + type: number + target_temperature: + type: number + vessel: + type: string + required: + - current_temperature + - target_temperature + - status + - is_heating + - heating_power + - max_temperature + - vessel + - purpose + - stir + - stir_speed + - status_info + type: object + version: 1.0.0 mock_pump: - description: Mock Pump Device + category: + - mock_devices class: - module: unilabos.devices.mock.mock_pump:MockPump - type: python - status_types: - status: String - pump_state: String - flow_rate: Float64 - target_flow_rate: Float64 - pressure: Float64 - total_volume: Float64 - max_flow_rate: Float64 - max_pressure: Float64 - from_vessel: String - to_vessel: String - transfer_volume: Float64 - amount: String - transfer_time: Float64 - is_viscous: Bool - rinsing_solvent: String - rinsing_volume: Float64 - rinsing_repeats: Int32 - is_solid: Bool - time_spent: Float64 - time_remaining: Float64 - current_device: String action_value_mappings: - pump_transfer: - type: PumpTransfer - goal: - from_vessel: from_vessel - to_vessel: to_vessel - volume: volume - amount: amount - time: time - viscous: viscous - rinsing_solvent: rinsing_solvent - rinsing_volume: rinsing_volume - rinsing_repeats: rinsing_repeats - solid: solid - feedback: - status: status - current_device: current_device - time_spent: time_spent - time_remaining: time_remaining - result: - success: success + auto-emergency_stop: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: emergency_stop的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: emergency_stop参数 + type: object + type: UniLabJsonCommand pause_pump: - type: EmptyIn - goal: {} feedback: {} + goal: {} + goal_default: {} + handles: [] result: success: success - resume_pump: + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object type: EmptyIn - goal: {} - feedback: {} + pump_transfer: + feedback: + current_device: current_device + status: status + time_remaining: time_remaining + time_spent: time_spent + goal: + amount: amount + from_vessel: from_vessel + rinsing_repeats: rinsing_repeats + rinsing_solvent: rinsing_solvent + rinsing_volume: rinsing_volume + solid: solid + time: time + to_vessel: to_vessel + viscous: viscous + volume: volume + goal_default: + amount: '' + event: '' + flowrate: 0.0 + from_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + rate_spec: '' + rinsing_repeats: 0 + rinsing_solvent: '' + rinsing_volume: 0.0 + solid: false + through: '' + time: 0.0 + to_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + transfer_flowrate: 0.0 + viscous: false + volume: 0.0 + handles: [] result: success: success + schema: + description: '' + properties: + feedback: + properties: + current_device: + type: string + status: + type: string + time_remaining: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + time_spent: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + required: + - status + - current_device + - time_spent + - time_remaining + title: PumpTransfer_Feedback + type: object + goal: + properties: + amount: + type: string + event: + type: string + flowrate: + type: number + from_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + rate_spec: + type: string + rinsing_repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + rinsing_solvent: + type: string + rinsing_volume: + type: number + solid: + type: boolean + through: + type: string + time: + type: number + to_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + transfer_flowrate: + type: number + viscous: + type: boolean + volume: + type: number + required: + - from_vessel + - to_vessel + - volume + - amount + - time + - viscous + - rinsing_solvent + - rinsing_volume + - rinsing_repeats + - solid + - flowrate + - transfer_flowrate + - rate_spec + - event + - through + title: PumpTransfer_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: PumpTransfer_Result + type: object + required: + - goal + title: PumpTransfer + type: object + type: PumpTransfer reset_volume_counter: - type: EmptyIn + feedback: {} goal: {} - feedback: {} + goal_default: {} + handles: [] result: success: success - schema: - type: object - properties: - status: - type: string - description: Current status of the pump - pump_state: - type: string - description: Pump operation state (Running/Stopped/Paused) - flow_rate: - type: number - description: Current flow rate in mL/min - target_flow_rate: - type: number - description: Target flow rate in mL/min - pressure: - type: number - description: Current pressure in bar - total_volume: - type: number - description: Total accumulated volume in mL - max_flow_rate: - type: number - description: Maximum flow rate in mL/min - max_pressure: - type: number - description: Maximum pressure in bar - from_vessel: - type: string - description: Source vessel for transfer - to_vessel: - type: string - description: Target vessel for transfer - transfer_volume: - type: number - description: Volume to transfer in mL - amount: - type: string - description: Amount description - transfer_time: - type: number - description: Transfer time in seconds - is_viscous: - type: boolean - description: Whether the liquid is viscous - rinsing_solvent: - type: string - description: Solvent used for rinsing - rinsing_volume: - type: number - description: Volume used for rinsing - rinsing_repeats: - type: integer - description: Number of rinsing cycles - is_solid: - type: boolean - description: Whether transferring solid material - current_device: - type: string - description: Current device identifier - required: - - status - - pump_state - - flow_rate - - from_vessel - - to_vessel - additionalProperties: false -mock_rotavap: - description: Mock Rotavap Device - class: - module: unilabos.devices.mock.mock_rotavap:MockRotavap - type: python + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + resume_pump: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + module: unilabos.devices.mock.mock_pump:MockPump status_types: - status: String - rotate_state: String - rotate_time: Float64 - rotate_speed: Float64 - pump_state: String - pump_time: Float64 - vacuum_level: Float64 - temperature: Float64 - target_temperature: Float64 - success: String + amount: str + current_device: str + flow_rate: float + from_vessel: str + is_solid: bool + is_viscous: bool + max_flow_rate: float + max_pressure: float + pressure: float + pump_state: str + rinsing_repeats: int + rinsing_solvent: str + rinsing_volume: float + status: str + status_info: dict + target_flow_rate: float + time_remaining: float + time_spent: float + to_vessel: str + total_volume: float + transfer_time: float + transfer_volume: float + type: python + config_info: [] + description: Mock Pump Device + handles: [] + icon: '' + init_param_schema: + config: + properties: + port: + default: MOCK + type: string + required: [] + type: object + data: + properties: + amount: + type: string + current_device: + type: string + flow_rate: + type: number + from_vessel: + type: string + is_solid: + type: boolean + is_viscous: + type: boolean + max_flow_rate: + type: number + max_pressure: + type: number + pressure: + type: number + pump_state: + type: string + rinsing_repeats: + type: integer + rinsing_solvent: + type: string + rinsing_volume: + type: number + status: + type: string + status_info: + type: object + target_flow_rate: + type: number + time_remaining: + type: number + time_spent: + type: number + to_vessel: + type: string + total_volume: + type: number + transfer_time: + type: number + transfer_volume: + type: number + required: + - status + - current_device + - pump_state + - flow_rate + - target_flow_rate + - pressure + - total_volume + - max_flow_rate + - max_pressure + - from_vessel + - to_vessel + - transfer_volume + - amount + - transfer_time + - is_viscous + - rinsing_solvent + - rinsing_volume + - rinsing_repeats + - is_solid + - time_spent + - time_remaining + - status_info + type: object + version: 1.0.0 +mock_rotavap: + category: + - mock_devices + class: action_value_mappings: - set_timer: - type: StrSingleInput - goal: - string: command + auto-emergency_stop: feedback: {} - result: - success: success - set_rotate_time: - type: FloatSingleInput - goal: - float_in: time_seconds + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: emergency_stop的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: emergency_stop参数 + type: object + type: UniLabJsonCommand + auto-stop_all_operations: feedback: {} - result: - success: success + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: stop_all_operations的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: stop_all_operations参数 + type: object + type: UniLabJsonCommand set_pump_time: - type: FloatSingleInput + feedback: {} goal: float_in: time_seconds - feedback: {} + goal_default: + float_in: 0.0 + handles: [] result: success: success - set_rotate_speed: + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: FloatSingleInput_Feedback + type: object + goal: + properties: + float_in: + type: number + required: + - float_in + title: FloatSingleInput_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: FloatSingleInput_Result + type: object + required: + - goal + title: FloatSingleInput + type: object type: FloatSingleInput + set_rotate_speed: + feedback: {} goal: float_in: speed - feedback: {} + goal_default: + float_in: 0.0 + handles: [] result: success: success - set_temperature: + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: FloatSingleInput_Feedback + type: object + goal: + properties: + float_in: + type: number + required: + - float_in + title: FloatSingleInput_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: FloatSingleInput_Result + type: object + required: + - goal + title: FloatSingleInput + type: object type: FloatSingleInput + set_rotate_time: + feedback: {} + goal: + float_in: time_seconds + goal_default: + float_in: 0.0 + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: FloatSingleInput_Feedback + type: object + goal: + properties: + float_in: + type: number + required: + - float_in + title: FloatSingleInput_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: FloatSingleInput_Result + type: object + required: + - goal + title: FloatSingleInput + type: object + type: FloatSingleInput + set_temperature: + feedback: {} goal: float_in: temperature - feedback: {} + goal_default: + float_in: 0.0 + handles: [] result: success: success - start_rotation: - type: EmptyIn - goal: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: FloatSingleInput_Feedback + type: object + goal: + properties: + float_in: + type: number + required: + - float_in + title: FloatSingleInput_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: FloatSingleInput_Result + type: object + required: + - goal + title: FloatSingleInput + type: object + type: FloatSingleInput + set_timer: feedback: {} + goal: + string: command + goal_default: + string: '' + handles: [] result: success: success + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: StrSingleInput_Feedback + type: object + goal: + properties: + string: + type: string + required: + - string + title: StrSingleInput_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: StrSingleInput_Result + type: object + required: + - goal + title: StrSingleInput + type: object + type: StrSingleInput start_pump: - type: EmptyIn - goal: {} feedback: {} + goal: {} + goal_default: {} + handles: [] result: success: success - schema: - type: object - properties: - status: - type: string - description: Current status of the rotavap - rotate_state: - type: string - description: Rotation state (Running/Stopped) - rotate_time: - type: number - description: Remaining rotation time in seconds - rotate_speed: - type: number - description: Rotation speed in rpm - pump_state: - type: string - description: Pump state (Running/Stopped) - pump_time: - type: number - description: Remaining pump time in seconds - vacuum_level: - type: number - description: Current vacuum level in mbar - temperature: - type: number - description: Current water bath temperature - target_temperature: - type: number - description: Target water bath temperature - success: - type: string - description: Operation success status - required: - - status - - rotate_time - - pump_time - - temperature - additionalProperties: false -mock_separator: - description: Simplified Mock Separator Device - class: - module: unilabos.devices.mock.mock_separator:MockSeparator - type: python + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + start_rotation: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + module: unilabos.devices.mock.mock_rotavap:MockRotavap status_types: - status: String - settling_time: Float64 - valve_state: String - shake_time: Float64 - shake_status: String - current_device: String - purpose: String - product_phase: String - from_vessel: String - separation_vessel: String - to_vessel: String - waste_phase_to_vessel: String - solvent: String - solvent_volume: Float64 - through: String - repeats: Int32 - stir_time: Float64 - stir_speed: Float64 - time_spent: Float64 - time_remaining: Float64 + pump_state: str + pump_time: float + rotate_speed: float + rotate_state: str + rotate_time: float + status: str + status_info: dict + target_temperature: float + temperature: float + vacuum_level: float + type: python + config_info: [] + description: Mock Rotavap Device + handles: [] + icon: '' + init_param_schema: + config: + properties: + port: + default: MOCK + type: string + required: [] + type: object + data: + properties: + pump_state: + type: string + pump_time: + type: number + rotate_speed: + type: number + rotate_state: + type: string + rotate_time: + type: number + status: + type: string + status_info: + type: object + target_temperature: + type: number + temperature: + type: number + vacuum_level: + type: number + required: + - status + - rotate_state + - rotate_time + - rotate_speed + - pump_state + - pump_time + - vacuum_level + - temperature + - target_temperature + - status_info + type: object + version: 1.0.0 +mock_separator: + category: + - mock_devices + class: action_value_mappings: separate: - type: Separate + feedback: + current_device: current_device + status: status + time_remaining: time_remaining + time_spent: time_spent goal: - purpose: purpose - product_phase: product_phase from_vessel: from_vessel + product_phase: product_phase + purpose: purpose + repeats: repeats separation_vessel: separation_vessel - to_vessel: to_vessel - waste_phase_to_vessel: waste_phase_to_vessel + settling_time: settling_time solvent: solvent solvent_volume: solvent_volume - through: through - repeats: repeats - stir_time: stir_time stir_speed: stir_speed - settling_time: settling_time - feedback: - status: status - current_device: current_device - time_spent: time_spent - time_remaining: time_remaining - result: - success: success - shake: - type: FloatSingleInput - goal: - float_in: shake_time - feedback: - status: status - result: - success: success - stop_operations: - type: EmptyIn - goal: {} - feedback: {} + stir_time: stir_time + through: through + to_vessel: to_vessel + waste_phase_to_vessel: waste_phase_to_vessel + goal_default: + from_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + product_phase: '' + product_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + purpose: '' + repeats: 0 + separation_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + settling_time: 0.0 + solvent: '' + solvent_volume: '' + stir_speed: 0.0 + stir_time: 0.0 + through: '' + to_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + volume: '' + waste_phase_to_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + waste_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] result: success: success + schema: + description: '' + properties: + feedback: + properties: + progress: + type: number + status: + type: string + required: + - status + - progress + title: Separate_Feedback + type: object + goal: + properties: + from_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + product_phase: + type: string + product_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + purpose: + type: string + repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + separation_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + settling_time: + type: number + solvent: + type: string + solvent_volume: + type: string + stir_speed: + type: number + stir_time: + type: number + through: + type: string + to_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + volume: + type: string + waste_phase_to_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + waste_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + - purpose + - product_phase + - from_vessel + - separation_vessel + - to_vessel + - waste_phase_to_vessel + - product_vessel + - waste_vessel + - solvent + - solvent_volume + - volume + - through + - repeats + - stir_time + - stir_speed + - settling_time + title: Separate_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Separate_Result + type: object + required: + - goal + title: Separate + type: object + type: Separate set_valve: - type: StrSingleInput + feedback: {} goal: string: command - feedback: {} + goal_default: + string: '' + handles: [] result: success: success - schema: - type: object - properties: - status: - type: string - description: Current status of the separator - settling_time: - type: number - description: Settling time in seconds - valve_state: - type: string - description: Valve state (Open/Closed) - shake_time: - type: number - description: Remaining shake time in seconds - shake_status: - type: string - description: Current shake state - purpose: - type: string - description: Separation purpose (wash/extract) - product_phase: - type: string - description: Product phase (top/bottom) - from_vessel: - type: string - description: Source vessel - separation_vessel: - type: string - description: Vessel for separation - to_vessel: - type: string - description: Target vessel - required: - - status - - valve_state - - shake_status - - current_device - additionalProperties: false -mock_solenoid_valve: - description: Mock Solenoid Valve Device - class: - module: unilabos.devices.mock.mock_solenoid_valve:MockSolenoidValve - type: python - status_types: - status: String - valve_status: String - action_value_mappings: - set_valve_status: + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: StrSingleInput_Feedback + type: object + goal: + properties: + string: + type: string + required: + - string + title: StrSingleInput_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: StrSingleInput_Result + type: object + required: + - goal + title: StrSingleInput + type: object type: StrSingleInput - goal: - string: status - feedback: {} - result: - success: success - open_valve: - type: EmptyIn - goal: {} - feedback: {} - result: - success: success - close_valve: - type: EmptyIn - goal: {} - feedback: {} - result: - success: success - schema: - type: object - properties: - status: - type: string - description: Current status of the valve - valve_status: - type: string - description: Valve status (Open/Closed) - required: - - status - - valve_status - additionalProperties: false -mock_stirrer: - description: Mock Stirrer Device - class: - module: unilabos.devices.mock.mock_stirrer:MockStirrer - type: python - status_types: - status: String - stir_speed: Float64 - target_stir_speed: Float64 - stir_state: String - temperature: Float64 - target_temperature: Float64 - heating_state: String - heating_power: Float64 - max_stir_speed: Float64 - max_temperature: Float64 - action_value_mappings: - set_stir_speed: - type: FloatSingleInput - goal: - float_in: speed - feedback: {} - result: - success: success - set_temperature: - type: FloatSingleInput - goal: - float_in: temperature - feedback: {} - result: - success: success - start_stirring: - type: EmptyIn - goal: {} - feedback: {} - result: - success: success - stop_stirring: - type: EmptyIn - goal: {} - feedback: {} - result: - success: success - heating_control: - type: StrSingleInput - goal: - string: heating_state - feedback: {} - result: - success: success - schema: - type: object - properties: - status: - type: string - description: Current status of the stirrer - stir_speed: - type: number - description: Current stirring speed in rpm - target_stir_speed: - type: number - description: Target stirring speed in rpm - stir_state: - type: string - description: Stirring state (Running/Stopped) - temperature: - type: number - description: Current temperature in °C - target_temperature: - type: number - description: Target temperature in °C - heating_state: - type: string - description: Heating state (On/Off) - heating_power: - type: number - description: Current heating power percentage - max_stir_speed: - type: number - description: Maximum stirring speed in rpm - max_temperature: - type: number - description: Maximum temperature in °C - required: - - status - - stir_speed - - temperature - - power_state - additionalProperties: false -mock_stirrer_new: - description: Mock Stirrer Device (Copy Version) - class: - module: unilabos.devices.mock.mock_stirrer_new:MockStirrer_new - type: python - status_types: - status: String - vessel: String - purpose: String - stir_speed: Float64 - target_stir_speed: Float64 - stir_state: String - stir_time: Float64 - settling_time: Float64 - progress: Float64 - max_stir_speed: Float64 - action_value_mappings: - start_stir: - type: StartStir - goal: - vessel: vessel - stir_speed: stir_speed - purpose: purpose - feedback: - progress: progress - current_speed: stir_speed - current_status: status - result: - success: success - message: message - stir: - type: Stir - goal: - stir_time: stir_time - stir_speed: stir_speed - settling_time: settling_time + shake: feedback: status: status + goal: + float_in: shake_time + goal_default: + float_in: 0.0 + handles: [] result: success: success + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: FloatSingleInput_Feedback + type: object + goal: + properties: + float_in: + type: number + required: + - float_in + title: FloatSingleInput_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: FloatSingleInput_Result + type: object + required: + - goal + title: FloatSingleInput + type: object + type: FloatSingleInput + stop_operations: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + module: unilabos.devices.mock.mock_separator:MockSeparator + status_types: + current_device: str + from_vessel: str + product_phase: str + purpose: str + repeats: int + separation_vessel: str + settling_time: float + shake_status: str + shake_time: float + solvent: str + solvent_volume: float + status: str + status_info: dict + stir_speed: float + stir_time: float + through: str + time_remaining: float + time_spent: float + to_vessel: str + valve_state: str + waste_phase_to_vessel: str + type: python + config_info: [] + description: Simplified Mock Separator Device + handles: [] + icon: '' + init_param_schema: + config: + properties: + port: + default: MOCK + type: string + required: [] + type: object + data: + properties: + current_device: + type: string + from_vessel: + type: string + product_phase: + type: string + purpose: + type: string + repeats: + type: integer + separation_vessel: + type: string + settling_time: + type: number + shake_status: + type: string + shake_time: + type: number + solvent: + type: string + solvent_volume: + type: number + status: + type: string + status_info: + type: object + stir_speed: + type: number + stir_time: + type: number + through: + type: string + time_remaining: + type: number + time_spent: + type: number + to_vessel: + type: string + valve_state: + type: string + waste_phase_to_vessel: + type: string + required: + - current_device + - purpose + - valve_state + - settling_time + - status + - shake_time + - shake_status + - product_phase + - from_vessel + - separation_vessel + - to_vessel + - waste_phase_to_vessel + - solvent + - solvent_volume + - through + - repeats + - stir_time + - stir_speed + - time_spent + - time_remaining + - status_info + type: object + version: 1.0.0 +mock_solenoid_valve: + category: + - mock_devices + class: + action_value_mappings: + auto-is_closed: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: is_closed的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_closed参数 + type: object + type: UniLabJsonCommand + auto-is_open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: is_open的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_open参数 + type: object + type: UniLabJsonCommand + close_valve: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + open_valve: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + set_valve_status: + feedback: {} + goal: + string: status + goal_default: + string: '' + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: StrSingleInput_Feedback + type: object + goal: + properties: + string: + type: string + required: + - string + title: StrSingleInput_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: StrSingleInput_Result + type: object + required: + - goal + title: StrSingleInput + type: object + type: StrSingleInput + module: unilabos.devices.mock.mock_solenoid_valve:MockSolenoidValve + status_types: + status: str + valve_status: str + type: python + config_info: [] + description: Mock Solenoid Valve Device + handles: [] + icon: '' + init_param_schema: + config: + properties: + port: + default: MOCK + type: string + required: [] + type: object + data: + properties: + status: + type: string + valve_status: + type: string + required: + - status + - valve_status + type: object + version: 1.0.0 +mock_stirrer: + category: + - mock_devices + class: + action_value_mappings: + auto-emergency_stop: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: emergency_stop的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: emergency_stop参数 + type: object + type: UniLabJsonCommand + auto-stop_all_operations: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: stop_all_operations的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: stop_all_operations参数 + type: object + type: UniLabJsonCommand + heating_control: + feedback: {} + goal: + string: heating_state + goal_default: + string: '' + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: StrSingleInput_Feedback + type: object + goal: + properties: + string: + type: string + required: + - string + title: StrSingleInput_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: StrSingleInput_Result + type: object + required: + - goal + title: StrSingleInput + type: object + type: StrSingleInput + set_stir_speed: + feedback: {} + goal: + float_in: speed + goal_default: + float_in: 0.0 + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: FloatSingleInput_Feedback + type: object + goal: + properties: + float_in: + type: number + required: + - float_in + title: FloatSingleInput_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: FloatSingleInput_Result + type: object + required: + - goal + title: FloatSingleInput + type: object + type: FloatSingleInput + set_temperature: + feedback: {} + goal: + float_in: temperature + goal_default: + float_in: 0.0 + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: FloatSingleInput_Feedback + type: object + goal: + properties: + float_in: + type: number + required: + - float_in + title: FloatSingleInput_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: FloatSingleInput_Result + type: object + required: + - goal + title: FloatSingleInput + type: object + type: FloatSingleInput + start_stirring: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + stop_stirring: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + module: unilabos.devices.mock.mock_stirrer:MockStirrer + status_types: + heating_power: float + heating_state: str + max_stir_speed: float + max_temperature: float + status: str + status_info: dict + stir_speed: float + stir_state: str + target_stir_speed: float + target_temperature: float + temperature: float + type: python + config_info: [] + description: Mock Stirrer Device + handles: [] + icon: '' + init_param_schema: + config: + properties: + port: + default: MOCK + type: string + required: [] + type: object + data: + properties: + heating_power: + type: number + heating_state: + type: string + max_stir_speed: + type: number + max_temperature: + type: number + status: + type: string + status_info: + type: object + stir_speed: + type: number + stir_state: + type: string + target_stir_speed: + type: number + target_temperature: + type: number + temperature: + type: number + required: + - status + - stir_speed + - target_stir_speed + - stir_state + - temperature + - target_temperature + - heating_state + - heating_power + - max_stir_speed + - max_temperature + - status_info + type: object + version: 1.0.0 +mock_stirrer_new: + category: + - mock_devices + class: + action_value_mappings: + start_stir: + feedback: + current_speed: stir_speed + current_status: status + progress: progress + goal: + purpose: purpose + stir_speed: stir_speed + vessel: vessel + goal_default: + purpose: '' + stir_speed: 0.0 + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] + result: + message: message + success: success + schema: + description: '' + properties: + feedback: + properties: + current_speed: + type: number + current_status: + type: string + progress: + type: number + required: + - progress + - current_speed + - current_status + title: StartStir_Feedback + type: object + goal: + properties: + purpose: + type: string + stir_speed: + type: number + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + - stir_speed + - purpose + title: StartStir_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: StartStir_Result + type: object + required: + - goal + title: StartStir + type: object + type: StartStir + stir: + feedback: + status: status + goal: + settling_time: settling_time + stir_speed: stir_speed + stir_time: stir_time + goal_default: + event: '' + settling_time: '' + stir_speed: 0.0 + stir_time: 0.0 + time: '' + time_spec: '' + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: Stir_Feedback + type: object + goal: + properties: + event: + type: string + settling_time: + type: string + stir_speed: + type: number + stir_time: + type: number + time: + type: string + time_spec: + type: string + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + - time + - event + - time_spec + - stir_time + - stir_speed + - settling_time + title: Stir_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Stir_Result + type: object + required: + - goal + title: Stir + type: object + type: Stir stop_stir: - type: StopStir + feedback: + current_status: status + progress: progress goal: vessel: vessel - feedback: - progress: progress - current_status: status + goal_default: + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] + result: + message: message + success: success + schema: + description: '' + properties: + feedback: + properties: + current_status: + type: string + progress: + type: number + required: + - progress + - current_status + title: StopStir_Feedback + type: object + goal: + properties: + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + title: StopStir_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: StopStir_Result + type: object + required: + - goal + title: StopStir + type: object + type: StopStir + module: unilabos.devices.mock.mock_stirrer_new:MockStirrer_new + status_types: + max_stir_speed: float + progress: float + purpose: str + settling_time: float + status: str + status_info: dict + stir_speed: float + stir_state: str + stir_time: float + target_stir_speed: float + vessel: str + type: python + config_info: [] + description: Mock Stirrer Device (Copy Version) + handles: [] + icon: '' + init_param_schema: + config: + properties: + port: + default: MOCK + type: string + required: [] + type: object + data: + properties: + max_stir_speed: + type: number + progress: + type: number + purpose: + type: string + settling_time: + type: number + status: + type: string + status_info: + type: object + stir_speed: + type: number + stir_state: + type: string + stir_time: + type: number + target_stir_speed: + type: number + vessel: + type: string + required: + - status + - stir_speed + - target_stir_speed + - stir_state + - vessel + - purpose + - stir_time + - settling_time + - max_stir_speed + - progress + - status_info + type: object + version: 1.0.0 +mock_vacuum: + category: + - mock_devices + class: + action_value_mappings: + auto-emergency_stop: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: emergency_stop的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: emergency_stop参数 + type: object + type: UniLabJsonCommand + pause_vacuum: + feedback: {} + goal: {} + goal_default: {} + handles: [] result: success: success - message: message - schema: - type: object - properties: - status: - type: string - vessel: - type: string - purpose: - type: string - stir_speed: - type: number - target_stir_speed: - type: number - stir_state: - type: string - stir_time: - type: number - settling_time: - type: number - progress: - type: number - max_stir_speed: - type: number - required: - - status - - stir_speed - - stir_state - - vessel - additionalProperties: false -mock_vacuum: - description: Mock Vacuum Pump Device - class: - module: unilabos.devices.mock.mock_vacuum:MockVacuum - type: python - status_types: - status: String - power_state: String - pump_state: String - vacuum_level: Float64 - target_vacuum: Float64 - pump_speed: Float64 - pump_efficiency: Float64 - max_pump_speed: Float64 - action_value_mappings: + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn power_control: - type: StrSingleInput + feedback: {} goal: string: power_state - feedback: {} + goal_default: + string: '' + handles: [] result: success: success + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: StrSingleInput_Feedback + type: object + goal: + properties: + string: + type: string + required: + - string + title: StrSingleInput_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: StrSingleInput_Result + type: object + required: + - goal + title: StrSingleInput + type: object + type: StrSingleInput + resume_vacuum: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn set_vacuum_level: - type: FloatSingleInput + feedback: {} goal: float_in: vacuum_level - feedback: {} + goal_default: + float_in: 0.0 + handles: [] result: success: success + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: FloatSingleInput_Feedback + type: object + goal: + properties: + float_in: + type: number + required: + - float_in + title: FloatSingleInput_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: FloatSingleInput_Result + type: object + required: + - goal + title: FloatSingleInput + type: object + type: FloatSingleInput start_vacuum: - type: EmptyIn - goal: {} feedback: {} + goal: {} + goal_default: {} + handles: [] result: success: success + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn stop_vacuum: - type: EmptyIn - goal: {} feedback: {} + goal: {} + goal_default: {} + handles: [] result: success: success - pause_vacuum: + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object type: EmptyIn - goal: {} - feedback: {} - result: - success: success - resume_vacuum: - type: EmptyIn - goal: {} - feedback: {} - result: - success: success vent_to_atmosphere: - type: EmptyIn - goal: {} feedback: {} + goal: {} + goal_default: {} + handles: [] result: success: success - schema: - type: object - properties: - status: - type: string - description: Current status of the vacuum pump - power_state: - type: string - description: Power state (On/Off) - pump_state: - type: string - description: Pump operation state (Running/Stopped/Paused) - vacuum_level: - type: number - description: Current vacuum level in mbar - target_vacuum: - type: number - description: Target vacuum level in mbar - pump_speed: - type: number - description: Current pump speed in L/s - pump_efficiency: - type: number - description: Pump efficiency percentage - max_pump_speed: - type: number - description: Maximum pump speed in L/s - required: - - status - - power_state - - pump_state - - vacuum_level - additionalProperties: false + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + module: unilabos.devices.mock.mock_vacuum:MockVacuum + status_types: + max_pump_speed: float + power_state: str + pump_efficiency: float + pump_speed: float + pump_state: str + status: str + status_info: dict + target_vacuum: float + vacuum_level: float + type: python + config_info: [] + description: Mock Vacuum Pump Device + handles: [] + icon: '' + init_param_schema: + config: + properties: + port: + default: MOCK + type: string + required: [] + type: object + data: + properties: + max_pump_speed: + type: number + power_state: + type: string + pump_efficiency: + type: number + pump_speed: + type: number + pump_state: + type: string + status: + type: string + status_info: + type: object + target_vacuum: + type: number + vacuum_level: + type: number + required: + - status + - power_state + - pump_state + - vacuum_level + - target_vacuum + - pump_speed + - pump_efficiency + - max_pump_speed + - status_info + type: object + version: 1.0.0 diff --git a/unilabos/registry/devices/moveit_config.yaml b/unilabos/registry/devices/moveit_config.yaml index 6236855..eafa522 100644 --- a/unilabos/registry/devices/moveit_config.yaml +++ b/unilabos/registry/devices/moveit_config.yaml @@ -1,56 +1,704 @@ -moveit.toyo_xyz: - description: Toyo XYZ - class: - module: unilabos.devices.ros_dev.moveit_interface:MoveitInterface - type: python - action_value_mappings: - set_position: - type: SendCmd - goal: - command: command - feedback: { } - result: { } - pick_and_place: - type: SendCmd - goal: - command: command - feedback: { } - result: { } - set_status: - type: SendCmd - goal: - command: command - feedback: { } - result: { } - - model: - type: device - mesh: toyo_xyz - moveit.arm_slider: - description: Arm with Slider - model: - type: device - mesh: arm_slider + category: + - moveit_config class: - module: unilabos.devices.ros_dev.moveit_interface:MoveitInterface - type: python action_value_mappings: - set_position: - type: SendCmd - goal: - command: command + auto-check_tf_update_actions: feedback: {} + goal: {} + goal_default: {} + handles: [] result: {} + schema: + description: check_tf_update_actions的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: check_tf_update_actions参数 + type: object + type: UniLabJsonCommand + auto-moveit_joint_task: + feedback: {} + goal: {} + goal_default: + joint_names: null + joint_positions: null + move_group: null + retry: 10 + speed: 1 + handles: [] + result: {} + schema: + description: moveit_joint_task的参数schema + properties: + feedback: {} + goal: + properties: + joint_names: + type: string + joint_positions: + type: string + move_group: + type: string + retry: + default: 10 + type: string + speed: + default: 1 + type: string + required: + - move_group + - joint_positions + type: object + result: {} + required: + - goal + title: moveit_joint_task参数 + type: object + type: UniLabJsonCommand + auto-moveit_task: + feedback: {} + goal: {} + goal_default: + cartesian: false + move_group: null + offsets: + - 0 + - 0 + - 0 + position: null + quaternion: null + retry: 10 + speed: 1 + target_link: null + handles: [] + result: {} + schema: + description: moveit_task的参数schema + properties: + feedback: {} + goal: + properties: + cartesian: + default: false + type: string + move_group: + type: string + offsets: + default: + - 0 + - 0 + - 0 + type: string + position: + type: string + quaternion: + type: string + retry: + default: 10 + type: string + speed: + default: 1 + type: string + target_link: + type: string + required: + - move_group + - position + - quaternion + type: object + result: {} + required: + - goal + title: moveit_task参数 + type: object + type: UniLabJsonCommand + auto-post_init: + feedback: {} + goal: {} + goal_default: + ros_node: null + handles: [] + result: {} + schema: + description: post_init的参数schema + properties: + feedback: {} + goal: + properties: + ros_node: + type: string + required: + - ros_node + type: object + result: {} + required: + - goal + title: post_init参数 + type: object + type: UniLabJsonCommand + auto-resource_manager: + feedback: {} + goal: {} + goal_default: + parent_link: null + resource: null + handles: [] + result: {} + schema: + description: resource_manager的参数schema + properties: + feedback: {} + goal: + properties: + parent_link: + type: string + resource: + type: string + required: + - resource + - parent_link + type: object + result: {} + required: + - goal + title: resource_manager参数 + type: object + type: UniLabJsonCommand + auto-wait_for_resource_action: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: wait_for_resource_action的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: wait_for_resource_action参数 + type: object + type: UniLabJsonCommand pick_and_place: - type: SendCmd + feedback: {} goal: command: command - feedback: {} + goal_default: + command: '' + handles: [] result: {} + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + set_position: + feedback: {} + goal: + command: command + goal_default: + command: '' + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd set_status: - type: SendCmd + feedback: {} goal: command: command - feedback: {} + goal_default: + command: '' + handles: [] result: {} + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.ros_dev.moveit_interface:MoveitInterface + status_types: {} + type: python + config_info: [] + description: 机械臂与滑块运动系统,基于MoveIt2运动规划框架的多自由度机械臂控制设备。该系统集成机械臂和线性滑块,通过ROS2和MoveIt2实现精确的轨迹规划和协调运动控制。支持笛卡尔空间和关节空间的运动规划、碰撞检测、逆运动学求解等功能。适用于复杂的pick-and-place操作、精密装配、多工位协作等需要高精度多轴协调运动的实验室自动化应用。 + handles: [] + icon: '' + init_param_schema: + config: + properties: + device_config: + type: string + joint_poses: + type: string + moveit_type: + type: string + rotation: + type: string + required: + - moveit_type + - joint_poses + type: object + data: + properties: {} + required: [] + type: object + model: + mesh: arm_slider + type: device + version: 1.0.0 +moveit.toyo_xyz: + category: + - moveit_config + class: + action_value_mappings: + auto-check_tf_update_actions: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: check_tf_update_actions的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: check_tf_update_actions参数 + type: object + type: UniLabJsonCommand + auto-moveit_joint_task: + feedback: {} + goal: {} + goal_default: + joint_names: null + joint_positions: null + move_group: null + retry: 10 + speed: 1 + handles: [] + result: {} + schema: + description: moveit_joint_task的参数schema + properties: + feedback: {} + goal: + properties: + joint_names: + type: string + joint_positions: + type: string + move_group: + type: string + retry: + default: 10 + type: string + speed: + default: 1 + type: string + required: + - move_group + - joint_positions + type: object + result: {} + required: + - goal + title: moveit_joint_task参数 + type: object + type: UniLabJsonCommand + auto-moveit_task: + feedback: {} + goal: {} + goal_default: + cartesian: false + move_group: null + offsets: + - 0 + - 0 + - 0 + position: null + quaternion: null + retry: 10 + speed: 1 + target_link: null + handles: [] + result: {} + schema: + description: moveit_task的参数schema + properties: + feedback: {} + goal: + properties: + cartesian: + default: false + type: string + move_group: + type: string + offsets: + default: + - 0 + - 0 + - 0 + type: string + position: + type: string + quaternion: + type: string + retry: + default: 10 + type: string + speed: + default: 1 + type: string + target_link: + type: string + required: + - move_group + - position + - quaternion + type: object + result: {} + required: + - goal + title: moveit_task参数 + type: object + type: UniLabJsonCommand + auto-post_init: + feedback: {} + goal: {} + goal_default: + ros_node: null + handles: [] + result: {} + schema: + description: post_init的参数schema + properties: + feedback: {} + goal: + properties: + ros_node: + type: string + required: + - ros_node + type: object + result: {} + required: + - goal + title: post_init参数 + type: object + type: UniLabJsonCommand + auto-resource_manager: + feedback: {} + goal: {} + goal_default: + parent_link: null + resource: null + handles: [] + result: {} + schema: + description: resource_manager的参数schema + properties: + feedback: {} + goal: + properties: + parent_link: + type: string + resource: + type: string + required: + - resource + - parent_link + type: object + result: {} + required: + - goal + title: resource_manager参数 + type: object + type: UniLabJsonCommand + auto-wait_for_resource_action: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: wait_for_resource_action的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: wait_for_resource_action参数 + type: object + type: UniLabJsonCommand + pick_and_place: + feedback: {} + goal: + command: command + goal_default: + command: '' + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + set_position: + feedback: {} + goal: + command: command + goal_default: + command: '' + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + set_status: + feedback: {} + goal: + command: command + goal_default: + command: '' + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.ros_dev.moveit_interface:MoveitInterface + status_types: {} + type: python + config_info: [] + description: 东洋XYZ三轴运动平台,基于MoveIt2运动规划框架的精密定位设备。该设备通过ROS2和MoveIt2实现三维空间的精确运动控制,支持复杂轨迹规划、多点定位、速度控制等功能。具备高精度定位、平稳运动、实时轨迹监控等特性。适用于精密加工、样品定位、检测扫描、自动化装配等需要高精度三维运动控制的实验室和工业应用场景。 + handles: [] + icon: '' + init_param_schema: + config: + properties: + device_config: + type: string + joint_poses: + type: string + moveit_type: + type: string + rotation: + type: string + required: + - moveit_type + - joint_poses + type: object + data: + properties: {} + required: [] + type: object + model: + mesh: toyo_xyz + type: device + version: 1.0.0 diff --git a/unilabos/registry/devices/organic_miscellaneous.yaml b/unilabos/registry/devices/organic_miscellaneous.yaml index 74551e7..c3e4aa2 100644 --- a/unilabos/registry/devices/organic_miscellaneous.yaml +++ b/unilabos/registry/devices/organic_miscellaneous.yaml @@ -1,73 +1,479 @@ -separator.homemade: - description: Separator device with homemade grbl controller - class: - module: unilabos.devices.separator.homemade_grbl_conductivity:SeparatorController - type: python - status_types: - sensordata: Float64 - status: String - action_value_mappings: - stir: - type: Stir - goal: - stir_time: stir_time, - stir_speed: stir_speed - settling_time: settling_time - feedback: - status: status - result: - success: success - valve_open_cmd: - type: SendCmd - goal: - command: command - feedback: - status: status - result": - success: success - schema: - type: object - properties: - status: - type: string - description: The status of the device - sensordata: - type: number - description: 电导传感器数据 - required: - - status - - sensordata - additionalProperties: false - rotavap.one: - description: Rotavap device + category: + - organic_miscellaneous class: - module: unilabos.devices.rotavap.rotavap_one:RotavapOne - type: python - status_types: - pump_time: Float64 - rotate_time: Float64 action_value_mappings: + auto-cmd_write: + feedback: {} + goal: {} + goal_default: + cmd: null + handles: [] + result: {} + schema: + description: cmd_write的参数schema + properties: + feedback: {} + goal: + properties: + cmd: + type: string + required: + - cmd + type: object + result: {} + required: + - goal + title: cmd_write参数 + type: object + type: UniLabJsonCommand + auto-main_loop: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: main_loop的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: main_loop参数 + type: object + type: UniLabJsonCommand + auto-set_pump_time: + feedback: {} + goal: {} + goal_default: + time: null + handles: [] + result: {} + schema: + description: set_pump_time的参数schema + properties: + feedback: {} + goal: + properties: + time: + type: string + required: + - time + type: object + result: {} + required: + - goal + title: set_pump_time参数 + type: object + type: UniLabJsonCommand + auto-set_rotate_time: + feedback: {} + goal: {} + goal_default: + time: null + handles: [] + result: {} + schema: + description: set_rotate_time的参数schema + properties: + feedback: {} + goal: + properties: + time: + type: string + required: + - time + type: object + result: {} + required: + - goal + title: set_rotate_time参数 + type: object + type: UniLabJsonCommand set_timer: - type: SendCmd + feedback: {} goal: command: command - feedback: {} + goal_default: + command: '' + handles: [] result: success: success - schema: - type: object - properties: - temperature: - type: number - description: 旋蒸水浴温度 - pump_time: - type: number - description: The pump time of the device - rotate_time: - type: number - description: The rotate time of the device - required: - - pump_time - - rotate_time - additionalProperties: false \ No newline at end of file + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.rotavap.rotavap_one:RotavapOne + status_types: {} + type: python + config_info: [] + description: 旋转蒸发仪设备,用于有机化学实验中的溶剂回收和浓缩操作。该设备通过串口通信控制,集成旋转和真空泵功能,支持定时控制和自动化操作。具备旋转速度调节、真空度控制、温度管理等功能,实现高效的溶剂蒸发和回收。适用于有机合成、天然产物提取、药物制备等需要溶剂去除和浓缩的实验室应用场景。 + handles: [] + icon: '' + init_param_schema: + config: + properties: + port: + type: string + rate: + default: 9600 + type: string + required: + - port + type: object + data: + properties: {} + required: [] + type: object + version: 1.0.0 +separator.homemade: + category: + - organic_miscellaneous + class: + action_value_mappings: + auto-read_sensor_loop: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: read_sensor_loop的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: read_sensor_loop参数 + type: object + type: UniLabJsonCommand + auto-valve_open: + feedback: {} + goal: {} + goal_default: + condition: null + value: null + handles: [] + result: {} + schema: + description: valve_open的参数schema + properties: + feedback: {} + goal: + properties: + condition: + type: string + value: + type: string + required: + - condition + - value + type: object + result: {} + required: + - goal + title: valve_open参数 + type: object + type: UniLabJsonCommand + auto-write: + feedback: {} + goal: {} + goal_default: + data: null + handles: [] + result: {} + schema: + description: write的参数schema + properties: + feedback: {} + goal: + properties: + data: + type: string + required: + - data + type: object + result: {} + required: + - goal + title: write参数 + type: object + type: UniLabJsonCommand + stir: + feedback: + status: status + goal: + settling_time: settling_time + stir_speed: stir_speed + stir_time: stir_time, + goal_default: + event: '' + settling_time: '' + stir_speed: 0.0 + stir_time: 0.0 + time: '' + time_spec: '' + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: Stir_Feedback + type: object + goal: + properties: + event: + type: string + settling_time: + type: string + stir_speed: + type: number + stir_time: + type: number + time: + type: string + time_spec: + type: string + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + - time + - event + - time_spec + - stir_time + - stir_speed + - settling_time + title: Stir_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Stir_Result + type: object + required: + - goal + title: Stir + type: object + type: Stir + valve_open_cmd: + feedback: + status: status + goal: + command: command + goal_default: + command: '' + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.separator.homemade_grbl_conductivity:SeparatorController + status_types: {} + type: python + config_info: [] + description: 液-液分离器设备,基于自制Grbl控制器的自动化分离系统。该设备集成搅拌、沉降、阀门控制和电导率传感器,通过串口通信实现精确的分离操作控制。支持自动搅拌、分层沉降、基于传感器反馈的智能分液等功能。适用于有机化学中的萃取分离、相分离、液-液提取等需要精确分离控制的实验应用。 + handles: [] + icon: '' + init_param_schema: + config: + properties: + baudrate_executor: + default: 115200 + type: integer + baudrate_sensor: + default: 115200 + type: integer + port_executor: + type: string + port_sensor: + type: string + required: + - port_executor + - port_sensor + type: object + data: + properties: {} + required: [] + type: object + version: 1.0.0 diff --git a/unilabos/registry/devices/pump_and_valve.yaml b/unilabos/registry/devices/pump_and_valve.yaml index 651a25f..7dcfa75 100644 --- a/unilabos/registry/devices/pump_and_valve.yaml +++ b/unilabos/registry/devices/pump_and_valve.yaml @@ -1,85 +1,816 @@ -syringe_pump_with_valve.runze: - description: Runze Syringe pump with valve +solenoid_valve: + category: + - pump_and_valve class: - module: unilabos.devices.pump_and_valve.runze_backbone:RunzeSyringePump + action_value_mappings: + auto-close: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: close的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: close参数 + type: object + type: UniLabJsonCommand + auto-is_closed: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: is_closed的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_closed参数 + type: object + type: UniLabJsonCommand + auto-is_open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: is_open的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_open参数 + type: object + type: UniLabJsonCommand + auto-open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: open参数 + type: object + type: UniLabJsonCommand + auto-read_data: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: read_data的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: read_data参数 + type: object + type: UniLabJsonCommand + auto-send_command: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: send_command的参数schema + properties: + feedback: {} + goal: + properties: + command: + type: string + required: + - command + type: object + result: {} + required: + - goal + title: send_command参数 + type: object + type: UniLabJsonCommand + set_valve_position: + feedback: {} + goal: + string: position + goal_default: + string: '' + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: StrSingleInput_Feedback + type: object + goal: + properties: + string: + type: string + required: + - string + title: StrSingleInput_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: StrSingleInput_Result + type: object + required: + - goal + title: StrSingleInput + type: object + type: StrSingleInput + module: unilabos.devices.pump_and_valve.solenoid_valve:SolenoidValve + status_types: + status: str + valve_position: str type: python + config_info: [] + description: 电磁阀控制设备,用于精确的流体路径控制和开关操作。该设备通过串口通信控制电磁阀的开关状态,支持远程操作和状态监测。具备快速响应、可靠密封、状态反馈等特性,广泛应用于流体输送、样品进样、路径切换等需要精确流体控制的实验室自动化应用。 + handles: [] + icon: '' + init_param_schema: + config: + properties: + io_device_port: + type: string + required: + - io_device_port + type: object + data: + properties: + status: + type: string + valve_position: + type: string + required: + - status + - valve_position + type: object + version: 1.0.0 +solenoid_valve.mock: + category: + - pump_and_valve + class: + action_value_mappings: + auto-is_closed: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: is_closed的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_closed参数 + type: object + type: UniLabJsonCommand + auto-is_open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: is_open的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_open参数 + type: object + type: UniLabJsonCommand + auto-set_valve_position: + feedback: {} + goal: {} + goal_default: + position: null + handles: [] + result: {} + schema: + description: set_valve_position的参数schema + properties: + feedback: {} + goal: + properties: + position: + type: string + required: + - position + type: object + result: {} + required: + - goal + title: set_valve_position参数 + type: object + type: UniLabJsonCommand + close: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + module: unilabos.devices.pump_and_valve.solenoid_valve_mock:SolenoidValveMock + status_types: + status: str + valve_position: str + type: python + config_info: [] + description: 模拟电磁阀设备,用于系统测试和开发调试。该设备模拟真实电磁阀的开关操作和状态变化,提供与实际设备相同的控制接口和反馈机制。支持流体路径的虚拟控制,便于在没有实际硬件的情况下进行流体系统的集成测试和算法验证。适用于系统开发、流程调试和培训演示等场景。 + handles: + - data_type: fluid + handler_key: in + io_type: target + label: in + side: NORTH + - data_type: fluid + handler_key: out + io_type: source + label: out + side: SOUTH + icon: '' + init_param_schema: + config: + properties: + port: + default: COM6 + type: string + required: [] + type: object + data: + properties: + status: + type: string + valve_position: + type: string + required: + - status + - valve_position + type: object + version: 1.0.0 +syringe_pump_with_valve.runze: + category: + - pump_and_valve + class: + action_value_mappings: + auto-close: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: close的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: close参数 + type: object + type: UniLabJsonCommand + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: initialize的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize参数 + type: object + type: UniLabJsonCommand + auto-pull_plunger: + feedback: {} + goal: {} + goal_default: + volume: null + handles: [] + result: {} + schema: + description: pull_plunger的参数schema + properties: + feedback: {} + goal: + properties: + volume: + type: number + required: + - volume + type: object + result: {} + required: + - goal + title: pull_plunger参数 + type: object + type: UniLabJsonCommand + auto-push_plunger: + feedback: {} + goal: {} + goal_default: + volume: null + handles: [] + result: {} + schema: + description: push_plunger的参数schema + properties: + feedback: {} + goal: + properties: + volume: + type: number + required: + - volume + type: object + result: {} + required: + - goal + title: push_plunger参数 + type: object + type: UniLabJsonCommand + auto-query_aux_input_status_1: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: query_aux_input_status_1的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: query_aux_input_status_1参数 + type: object + type: UniLabJsonCommand + auto-query_aux_input_status_2: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: query_aux_input_status_2的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: query_aux_input_status_2参数 + type: object + type: UniLabJsonCommand + auto-query_backlash_position: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: query_backlash_position的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: query_backlash_position参数 + type: object + type: UniLabJsonCommand + auto-query_command_buffer_status: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: query_command_buffer_status的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: query_command_buffer_status参数 + type: object + type: UniLabJsonCommand + auto-query_software_version: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: query_software_version的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: query_software_version参数 + type: object + type: UniLabJsonCommand + auto-send_command: + feedback: {} + goal: {} + goal_default: + full_command: null + handles: [] + result: {} + schema: + description: send_command的参数schema + properties: + feedback: {} + goal: + properties: + full_command: + type: string + required: + - full_command + type: object + result: {} + required: + - goal + title: send_command参数 + type: object + type: UniLabJsonCommand + auto-set_baudrate: + feedback: {} + goal: {} + goal_default: + baudrate: null + handles: [] + result: {} + schema: + description: set_baudrate的参数schema + properties: + feedback: {} + goal: + properties: + baudrate: + type: string + required: + - baudrate + type: object + result: {} + required: + - goal + title: set_baudrate参数 + type: object + type: UniLabJsonCommand + auto-set_max_velocity: + feedback: {} + goal: {} + goal_default: + velocity: null + handles: [] + result: {} + schema: + description: set_max_velocity的参数schema + properties: + feedback: {} + goal: + properties: + velocity: + type: number + required: + - velocity + type: object + result: {} + required: + - goal + title: set_max_velocity参数 + type: object + type: UniLabJsonCommand + auto-set_position: + feedback: {} + goal: {} + goal_default: + max_velocity: null + position: null + handles: [] + result: {} + schema: + description: set_position的参数schema + properties: + feedback: {} + goal: + properties: + max_velocity: + type: number + position: + type: number + required: + - position + type: object + result: {} + required: + - goal + title: set_position参数 + type: object + type: UniLabJsonCommand + auto-set_valve_position: + feedback: {} + goal: {} + goal_default: + position: null + handles: [] + result: {} + schema: + description: set_valve_position的参数schema + properties: + feedback: {} + goal: + properties: + position: + type: string + required: + - position + type: object + result: {} + required: + - goal + title: set_valve_position参数 + type: object + type: UniLabJsonCommand + auto-set_velocity_grade: + feedback: {} + goal: {} + goal_default: + velocity: null + handles: [] + result: {} + schema: + description: set_velocity_grade的参数schema + properties: + feedback: {} + goal: + properties: + velocity: + type: string + required: + - velocity + type: object + result: {} + required: + - goal + title: set_velocity_grade参数 + type: object + type: UniLabJsonCommand + auto-stop_operation: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: stop_operation的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: stop_operation参数 + type: object + type: UniLabJsonCommand + auto-wait_error: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: wait_error的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: wait_error参数 + type: object + type: UniLabJsonCommand hardware_interface: name: hardware_interface read: send_command write: send_command - schema: - type: object - properties: - status: - type: string - description: The status of the device - position: - type: number - description: The volume of the syringe - speed_max: - type: number - description: The speed of the syringe - valve_position: - type: string - description: The position of the valve - required: - - status - - position - - valve_position - additionalProperties: false - -solenoid_valve.mock: - description: Mock solenoid valve - class: - module: unilabos.devices.pump_and_valve.solenoid_valve_mock:SolenoidValveMock - type: python + module: unilabos.devices.pump_and_valve.runze_backbone:RunzeSyringePump status_types: - status: String - valve_position: String - action_value_mappings: - open: - type: EmptyIn - goal: {} - feedback: {} - result: {} - close: - type: EmptyIn - goal: {} - feedback: {} - result: {} - handles: - - handler_key: in - label: in - io_type: target - data_type: fluid - side: NORTH - - handler_key: out - label: out - io_type: source - data_type: fluid - side: SOUTH + max_velocity: float + mode: int + plunger_position: String + position: float + status: str + valve_position: str + velocity_end: String + velocity_grade: String + velocity_init: String + type: python + config_info: [] + description: 润泽精密注射泵设备,集成阀门控制的高精度流体输送系统。该设备通过串口通信控制,支持多种运行模式和精确的体积控制。具备可变速度控制、精密定位、阀门切换、实时状态监控等功能。适用于微量液体输送、精密进样、流速控制、化学反应进料等需要高精度流体操作的实验室自动化应用。 + handles: [] + icon: '' init_param_schema: - type: object - properties: - port: - type: string - description: "通信端口" - default: "COM6" - required: - - port - -solenoid_valve: - description: Solenoid valve - class: - module: unilabos.devices.pump_and_valve.solenoid_valve:SolenoidValve - type: python - status_types: - status: String - valve_position: String - action_value_mappings: - set_valve_position: - type: StrSingleInput - goal: - string: position - feedback: {} - result: {} \ No newline at end of file + config: + properties: + address: + default: '1' + type: string + max_volume: + default: 25.0 + type: number + mode: + type: string + port: + type: string + required: + - port + type: object + data: + properties: + max_velocity: + type: number + mode: + type: integer + plunger_position: + type: string + position: + type: number + status: + type: string + valve_position: + type: string + velocity_end: + type: string + velocity_grade: + type: string + velocity_init: + type: string + required: + - status + - mode + - max_velocity + - velocity_grade + - velocity_init + - velocity_end + - valve_position + - position + - plunger_position + type: object + version: 1.0.0 diff --git a/unilabos/registry/devices/robot_agv.yaml b/unilabos/registry/devices/robot_agv.yaml index a78107e..be4aa6c 100644 --- a/unilabos/registry/devices/robot_agv.yaml +++ b/unilabos/registry/devices/robot_agv.yaml @@ -1,29 +1,109 @@ -# 仙工智能底盘(知行使用) agv.SEER: - description: SEER AGV + category: + - robot_agv class: - module: unilabos.devices.agv.agv_navigator:AgvNavigator - type: python - status_types: - pose: Float64MultiArray - status: String action_value_mappings: + auto-send: + feedback: {} + goal: {} + goal_default: + cmd: null + ex_data: '' + obj: receive_socket + handles: [] + result: {} + schema: + description: AGV底层通信命令发送函数。通过TCP socket连接向AGV发送底层控制命令,支持pose(位置)、status(状态)、nav(导航)等命令类型。用于获取AGV当前位置坐标、运行状态或发送导航指令。该函数封装了AGV的通信协议,将命令转换为十六进制数据包并处理响应解析。 + properties: + feedback: {} + goal: + properties: + cmd: + type: string + ex_data: + default: '' + type: string + obj: + default: receive_socket + type: string + required: + - cmd + type: object + result: {} + required: + - goal + title: send参数 + type: object + type: UniLabJsonCommand send_nav_task: - type: SendCmd + feedback: {} goal: command: command - feedback: {} + goal_default: + command: '' + handles: [] result: success: success - schema: - properties: - pose: - type: array - items: - type: number - status: - type: string - required: + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.agv.agv_navigator:AgvNavigator + status_types: + pose: list + status: str + type: python + config_info: [] + description: SEER AGV自动导引车设备,用于实验室内物料和设备的自主移动运输。该AGV通过TCP socket与导航系统通信,具备精确的定位和路径规划能力。支持实时位置监控、状态查询和导航任务执行,可在预设的实验室环境中自主移动至指定位置。适用于样品运输、设备转移、多工位协作等实验室自动化物流场景。 + handles: [] + icon: '' + init_param_schema: + config: + properties: + host: + type: string + required: + - host + type: object + data: + properties: + pose: + type: array + status: + type: string + required: + - pose - status - additionalProperties: false - type: object \ No newline at end of file + type: object + version: 1.0.0 diff --git a/unilabos/registry/devices/robot_arm.yaml b/unilabos/registry/devices/robot_arm.yaml index e981199..10a06fd 100644 --- a/unilabos/registry/devices/robot_arm.yaml +++ b/unilabos/registry/devices/robot_arm.yaml @@ -1,55 +1,176 @@ robotic_arm.UR: - description: UR robotic arm + category: + - robot_arm class: - module: unilabos.devices.agv.ur_arm_task:UrArmTask - type: python - status_types: - arm_pose: Float64MultiArray - gripper_pose: Float64 - arm_status: String - gripper_status: String action_value_mappings: + auto-arm_init: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: 机械臂初始化函数。执行UR机械臂的完整初始化流程,包括上电、释放制动器、解除保护停止状态等。该函数确保机械臂从安全停止状态恢复到可操作状态,是机械臂使用前的必要步骤。初始化完成后机械臂将处于就绪状态,可以接收后续的运动指令。 + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: arm_init参数 + type: object + type: UniLabJsonCommand + auto-load_pose_data: + feedback: {} + goal: {} + goal_default: + data: null + handles: [] + result: {} + schema: + description: 从JSON字符串加载位置数据函数。接收包含机械臂位置信息的JSON格式字符串,解析并存储位置数据供后续运动任务使用。位置数据通常包含多个预定义的工作位置坐标,用于实现精确的多点运动控制。适用于动态配置机械臂工作位置的场景。 + properties: + feedback: {} + goal: + properties: + data: + type: string + required: + - data + type: object + result: {} + required: + - goal + title: load_pose_data参数 + type: object + type: UniLabJsonCommand + auto-load_pose_file: + feedback: {} + goal: {} + goal_default: + file: null + handles: [] + result: {} + schema: + description: 从文件加载位置数据函数。读取指定的JSON文件并加载其中的机械臂位置信息。该函数支持从外部配置文件中获取预设的工作位置,便于位置数据的管理和重用。适用于需要从固定配置文件中读取复杂位置序列的应用场景。 + properties: + feedback: {} + goal: + properties: + file: + type: string + required: + - file + type: object + result: {} + required: + - goal + title: load_pose_file参数 + type: object + type: UniLabJsonCommand + auto-reload_pose: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: 重新加载位置数据函数。重新读取并解析之前设置的位置文件,更新内存中的位置数据。该函数用于在位置文件被修改后刷新机械臂的位置配置,无需重新初始化整个系统。适用于动态更新机械臂工作位置的场景。 + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: reload_pose参数 + type: object + type: UniLabJsonCommand move_pos_task: - type: SendCmd + feedback: {} goal: command: command - feedback: {} + goal_default: + command: '' + handles: [] result: success: success - schema: - properties: - arm_pose: - type: array - items: + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.agv.ur_arm_task:UrArmTask + status_types: + arm_pose: list + arm_status: str + gripper_pose: float + gripper_status: str + type: python + config_info: [] + description: Universal Robots机械臂设备,用于实验室精密操作和自动化作业。该设备集成了UR机械臂本体、Robotiq夹爪和RTDE通信接口,支持六自由度精确运动控制和力觉反馈。具备实时位置监控、状态反馈、轨迹规划等功能,可执行复杂的多点位运动任务。适用于样品抓取、精密装配、实验器具操作等需要高精度和高重复性的实验室自动化场景。 + handles: [] + icon: '' + init_param_schema: + config: + properties: + host: + type: string + retry: + default: 30 + type: string + required: + - host + type: object + data: + properties: + arm_pose: + type: array + arm_status: + type: string + gripper_pose: type: number - gripper_pose: - type: number - arm_status: - type: string - description: 机械臂设备状态 - gripper_status: - type: string - description: 机械爪设备状态 - required: + gripper_status: + type: string + required: + - arm_pose + - gripper_pose - arm_status - gripper_status additionalProperties: false - type: object - -robotic_arm.elite: - description: Elite robot arm - class: - module: unilabos.devices.arm.elite_robot:EliteRobot - type: python - status_types: - arm_pose: Float64MultiArray - action_value_mappings: - modbus_task_cmd: - type: SendCmd - goal: - command: command - feedback: {} - result: {} - model: - type: device - mesh: elite_robot \ No newline at end of file + type: object \ No newline at end of file diff --git a/unilabos/registry/devices/robot_gripper.yaml b/unilabos/registry/devices/robot_gripper.yaml index bae970a..2a2ccce 100644 --- a/unilabos/registry/devices/robot_gripper.yaml +++ b/unilabos/registry/devices/robot_gripper.yaml @@ -1,37 +1,596 @@ -gripper.mock: - description: Mock gripper - class: - module: unilabos.devices.gripper.mock:MockGripper - type: python - status_types: - position: Float64 - torque: Float64 - status: String - action_value_mappings: - push_to: - type: GripperCommand - goal: - command.position: position - command.max_effort: torque - feedback: - position: position - effort: torque - result: - position: position - effort: torque - gripper.misumi_rz: - description: Misumi RZ gripper + category: + - robot_gripper class: - module: unilabos.devices.motor:Grasp.EleGripper - type: python - status_types: - status: String action_value_mappings: + auto-data_loop: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: data_loop的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: data_loop参数 + type: object + type: UniLabJsonCommand + auto-data_reader: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: data_reader的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: data_reader参数 + type: object + type: UniLabJsonCommand + auto-gripper_move: + feedback: {} + goal: {} + goal_default: + force: null + pos: null + speed: null + handles: [] + result: {} + schema: + description: 夹爪抓取运动控制函数。控制夹爪的开合运动,支持位置、速度、力矩的精确设定。位置参数控制夹爪开合程度,速度参数控制运动快慢,力矩参数控制夹持强度。该函数提供安全的力控制,避免损坏被抓取物体,适用于各种形状和材质的物品抓取。 + properties: + feedback: {} + goal: + properties: + force: + type: string + pos: + type: string + speed: + type: string + required: + - pos + - speed + - force + type: object + result: {} + required: + - goal + title: gripper_move参数 + type: object + type: UniLabJsonCommand + auto-init_gripper: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: 夹爪初始化函数。执行Misumi RZ夹爪的完整初始化流程,包括Modbus通信建立、电机参数配置、传感器校准等。该函数确保夹爪系统从安全状态恢复到可操作状态,是夹爪使用前的必要步骤。初始化完成后夹爪将处于就绪状态,可接收抓取和旋转指令。 + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: init_gripper参数 + type: object + type: UniLabJsonCommand + auto-modbus_crc: + feedback: {} + goal: {} + goal_default: + data: null + handles: [] + result: {} + schema: + description: modbus_crc的参数schema + properties: + feedback: {} + goal: + properties: + data: + type: string + required: + - data + type: object + result: {} + required: + - goal + title: modbus_crc参数 + type: object + type: UniLabJsonCommand + auto-move_and_rotate: + feedback: {} + goal: {} + goal_default: + grasp_F: null + grasp_pos: null + grasp_v: null + spin_F: null + spin_pos: null + spin_v: null + handles: [] + result: {} + schema: + description: move_and_rotate的参数schema + properties: + feedback: {} + goal: + properties: + grasp_F: + type: string + grasp_pos: + type: string + grasp_v: + type: string + spin_F: + type: string + spin_pos: + type: string + spin_v: + type: string + required: + - spin_pos + - grasp_pos + - spin_v + - grasp_v + - spin_F + - grasp_F + type: object + result: {} + required: + - goal + title: move_and_rotate参数 + type: object + type: UniLabJsonCommand + auto-node_gripper_move: + feedback: {} + goal: {} + goal_default: + cmd: null + handles: [] + result: {} + schema: + description: 节点夹爪移动任务函数。接收逗号分隔的命令字符串,解析位置、速度、力矩参数并执行夹爪抓取动作。该函数等待运动完成并返回执行结果,提供同步的运动控制接口。适用于需要可靠完成确认的精密抓取操作。 + properties: + feedback: {} + goal: + properties: + cmd: + type: string + required: + - cmd + type: object + result: {} + required: + - goal + title: node_gripper_move参数 + type: object + type: UniLabJsonCommand + auto-node_rotate_move: + feedback: {} + goal: {} + goal_default: + cmd: null + handles: [] + result: {} + schema: + description: 节点旋转移动任务函数。接收逗号分隔的命令字符串,解析角度、速度、力矩参数并执行夹爪旋转动作。该函数等待旋转完成并返回执行结果,提供同步的旋转控制接口。适用于需要精确角度定位和完成确认的旋转操作。 + properties: + feedback: {} + goal: + properties: + cmd: + type: string + required: + - cmd + type: object + result: {} + required: + - goal + title: node_rotate_move参数 + type: object + type: UniLabJsonCommand + auto-read_address: + feedback: {} + goal: {} + goal_default: + address: null + data_len: null + id: null + handles: [] + result: {} + schema: + description: read_address的参数schema + properties: + feedback: {} + goal: + properties: + address: + type: string + data_len: + type: string + id: + type: string + required: + - id + - address + - data_len + type: object + result: {} + required: + - goal + title: read_address参数 + type: object + type: UniLabJsonCommand + auto-rotate_move_abs: + feedback: {} + goal: {} + goal_default: + force: null + pos: null + speed: null + handles: [] + result: {} + schema: + description: 夹爪绝对位置旋转控制函数。控制夹爪主轴旋转到指定的绝对角度位置,支持360度连续旋转。位置参数指定目标角度,速度参数控制旋转速率,力矩参数设定旋转阻力限制。该函数提供高精度的角度定位,适用于需要精确方向控制的操作场景。 + properties: + feedback: {} + goal: + properties: + force: + type: string + pos: + type: string + speed: + type: string + required: + - pos + - speed + - force + type: object + result: {} + required: + - goal + title: rotate_move_abs参数 + type: object + type: UniLabJsonCommand + auto-send_cmd: + feedback: {} + goal: {} + goal_default: + address: null + data: null + fun: null + id: null + handles: [] + result: {} + schema: + description: send_cmd的参数schema + properties: + feedback: {} + goal: + properties: + address: + type: string + data: + type: string + fun: + type: string + id: + type: string + required: + - id + - fun + - address + - data + type: object + result: {} + required: + - goal + title: send_cmd参数 + type: object + type: UniLabJsonCommand + auto-wait_for_gripper: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: wait_for_gripper的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: wait_for_gripper参数 + type: object + type: UniLabJsonCommand + auto-wait_for_gripper_init: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: wait_for_gripper_init的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: wait_for_gripper_init参数 + type: object + type: UniLabJsonCommand + auto-wait_for_rotate: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: wait_for_rotate的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: wait_for_rotate参数 + type: object + type: UniLabJsonCommand execute_command_from_outer: - type: SendCmd + feedback: {} goal: command: command - feedback: {} + goal_default: + command: '' + handles: [] result: success: success + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.motor.Grasp:EleGripper + status_types: + status: str + type: python + config_info: [] + description: Misumi RZ系列电子夹爪设备,集成旋转和抓取双重功能的精密夹爪系统。该设备通过Modbus RTU协议与控制系统通信,支持位置、速度、力矩的精确控制。具备高精度的位置反馈、实时状态监控和故障检测功能。适用于需要精密抓取和旋转操作的实验室自动化场景,如样品管理、精密装配、器件操作等应用。 + handles: [] + icon: '' + init_param_schema: + config: + properties: + baudrate: + default: 115200 + type: string + id: + default: 9 + type: string + port: + type: string + pos_error: + default: -11 + type: string + required: + - port + type: object + data: + properties: + status: + type: string + required: + - status + type: object + version: 1.0.0 +gripper.mock: + category: + - robot_gripper + class: + action_value_mappings: + auto-edit_id: + feedback: {} + goal: {} + goal_default: + params: '{}' + resource: + Gripper1: {} + wf_name: gripper_run + handles: [] + result: {} + schema: + description: 模拟夹爪资源ID编辑函数。用于测试和演示资源管理功能,模拟修改夹爪资源的标识信息。该函数接收工作流名称、参数和资源对象,模拟真实的资源更新过程并返回修改后的资源信息。适用于系统测试和开发调试场景。 + properties: + feedback: {} + goal: + properties: + params: + default: '{}' + type: string + resource: + default: + Gripper1: {} + type: object + wf_name: + default: gripper_run + type: string + required: [] + type: object + result: {} + required: + - goal + title: edit_id参数 + type: object + type: UniLabJsonCommand + push_to: + feedback: + effort: torque + position: position + goal: + command.max_effort: torque + command.position: position + goal_default: + command: + max_effort: 0.0 + position: 0.0 + handles: [] + result: + effort: torque + position: position + schema: + description: '' + properties: + feedback: + properties: + effort: + type: number + position: + type: number + reached_goal: + type: boolean + stalled: + type: boolean + required: + - position + - effort + - stalled + - reached_goal + title: GripperCommand_Feedback + type: object + goal: + properties: + command: + properties: + max_effort: + type: number + position: + type: number + required: + - position + - max_effort + title: GripperCommand + type: object + required: + - command + title: GripperCommand_Goal + type: object + result: + properties: + effort: + type: number + position: + type: number + reached_goal: + type: boolean + stalled: + type: boolean + required: + - position + - effort + - stalled + - reached_goal + title: GripperCommand_Result + type: object + required: + - goal + title: GripperCommand + type: object + type: GripperCommand + module: unilabos.devices.gripper.mock:MockGripper + status_types: + position: float + status: str + torque: float + velocity: float + type: python + config_info: [] + description: 模拟夹爪设备,用于系统测试和开发调试。该设备模拟真实夹爪的位置、速度、力矩等物理特性,支持虚拟的抓取和移动操作。提供与真实夹爪相同的接口和状态反馈,便于在没有实际硬件的情况下进行系统集成测试和算法验证。适用于软件开发、系统调试和培训演示等场景。 + handles: [] + icon: '' + init_param_schema: + config: + properties: {} + required: [] + type: object + data: + properties: + position: + type: number + status: + type: string + torque: + type: number + velocity: + type: number + required: + - position + - velocity + - torque + - status + type: object + version: 1.0.0 diff --git a/unilabos/registry/devices/robot_linear_motion.yaml b/unilabos/registry/devices/robot_linear_motion.yaml index 91e253d..3ca4e9a 100644 --- a/unilabos/registry/devices/robot_linear_motion.yaml +++ b/unilabos/registry/devices/robot_linear_motion.yaml @@ -1,57 +1,640 @@ linear_motion.grbl: - description: Grbl CNC + category: + - robot_linear_motion class: - module: unilabos.devices.cnc.grbl_sync:GrblCNC - type: python action_value_mappings: - move_through_points: &move_through_points - type: NavigateThroughPoses - goal: - poses[].pose.position: positions[] - feedback: - current_pose.pose.position: position - navigation_time.sec: time_spent - estimated_time_remaining.sec: time_remaining - number_of_poses_remaining: pose_number_remaining + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] result: {} - set_spindle_speed: - type: SingleJointPosition + schema: + description: CNC设备初始化函数。执行Grbl CNC的完整初始化流程,包括归零操作、轴校准和状态复位。该函数将所有轴移动到原点位置(0,0,0),确保设备处于已知的参考状态。初始化完成后设备进入空闲状态,可接收后续的运动指令。 + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize参数 + type: object + type: UniLabJsonCommand + auto-set_position: + feedback: {} + goal: {} + goal_default: + position: null + handles: [] + result: {} + schema: + description: CNC绝对位置设定函数。控制CNC设备移动到指定的三维坐标位置(x,y,z)。该函数支持安全限位检查,防止超出设备工作范围。移动过程中会监控设备状态,确保安全到达目标位置。适用于精确定位和轨迹控制操作。 + properties: + feedback: {} + goal: + properties: + position: + type: string + required: + - position + type: object + result: {} + required: + - goal + title: set_position参数 + type: object + type: UniLabJsonCommand + auto-stop_operation: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: CNC操作停止函数。立即停止当前正在执行的所有CNC运动,包括轴移动和主轴旋转。该函数用于紧急停止或任务中断,确保设备和工件的安全。停止后设备将保持当前位置,等待新的指令。 + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: stop_operation参数 + type: object + type: UniLabJsonCommand + auto-wait_error: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: wait_error的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: wait_error参数 + type: object + type: UniLabJsonCommandAsync + move_through_points: + feedback: + current_pose.pose.position: position + estimated_time_remaining.sec: time_remaining + navigation_time.sec: time_spent + number_of_poses_remaining: pose_number_remaining goal: - position: spindle_speed + poses[].pose.position: positions[] + goal_default: + behavior_tree: '' + poses: + - header: + frame_id: '' + stamp: + nanosec: 0 + sec: 0 + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: + current_pose: + properties: + header: + properties: + frame_id: + type: string + stamp: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Time + type: object + required: + - stamp + - frame_id + title: Header + type: object + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + required: + - header + - pose + title: PoseStamped + type: object + distance_remaining: + type: number + estimated_time_remaining: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + navigation_time: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + number_of_poses_remaining: + maximum: 32767 + minimum: -32768 + type: integer + number_of_recoveries: + maximum: 32767 + minimum: -32768 + type: integer + required: + - current_pose + - navigation_time + - estimated_time_remaining + - number_of_recoveries + - distance_remaining + - number_of_poses_remaining + title: NavigateThroughPoses_Feedback + type: object + goal: + properties: + behavior_tree: + type: string + poses: + items: + properties: + header: + properties: + frame_id: + type: string + stamp: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Time + type: object + required: + - stamp + - frame_id + title: Header + type: object + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + required: + - header + - pose + title: PoseStamped + type: object + type: array + required: + - poses + - behavior_tree + title: NavigateThroughPoses_Goal + type: object + result: + properties: + result: + properties: {} + required: [] + title: Empty + type: object + required: + - result + title: NavigateThroughPoses_Result + type: object + required: + - goal + title: NavigateThroughPoses + type: object + type: NavigateThroughPoses + set_spindle_speed: feedback: position: spindle_speed + goal: + position: spindle_speed + goal_default: + max_velocity: 0.0 + min_duration: + nanosec: 0 + sec: 0 + position: 0.0 + handles: [] result: {} - schema: - type: object - properties: - position: - type: array - items: + schema: + description: '' + properties: + feedback: + properties: + error: + type: number + header: + properties: + frame_id: + type: string + stamp: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Time + type: object + required: + - stamp + - frame_id + title: Header + type: object + position: + type: number + velocity: + type: number + required: + - header + - position + - velocity + - error + title: SingleJointPosition_Feedback + type: object + goal: + properties: + max_velocity: + type: number + min_duration: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + position: + type: number + required: + - position + - min_duration + - max_velocity + title: SingleJointPosition_Goal + type: object + result: + properties: {} + required: [] + title: SingleJointPosition_Result + type: object + required: + - goal + title: SingleJointPosition + type: object + type: SingleJointPosition + module: unilabos.devices.cnc.grbl_sync:GrblCNC + status_types: + position: unilabos.messages:Point3D + spindle_speed: float + status: str + type: python + config_info: [] + description: Grbl数控机床(CNC)设备,用于实验室精密加工和三轴定位操作。该设备基于Grbl固件,通过串口通信控制步进电机实现X、Y、Z三轴的精确运动。支持绝对定位、轨迹规划、主轴控制和实时状态监控。具备安全限位保护和运动平滑控制功能。适用于精密钻孔、铣削、雕刻、样品制备等需要高精度定位和加工的实验室应用场景。 + handles: [] + icon: '' + init_param_schema: + config: + properties: + address: + default: '1' + type: string + limits: + default: + - -150 + - 150 + - -200 + - 0 + - -80 + - 0 + type: array + port: + type: string + required: + - port + type: object + data: + properties: + position: + type: string + spindle_speed: type: number - description: The position of the device - spindle_speed: - type: number - description: The spindle speed of the device - required: + status: + type: string + required: + - status - position - spindle_speed - additionalProperties: false - - + type: object + version: 1.0.0 motor.iCL42: - description: iCL42 motor + category: + - robot_linear_motion class: - module: unilabos.devices.motor.iCL42:iCL42Driver - type: python - status_types: - motor_position: Int64 - is_executing_run: Bool - success: Bool action_value_mappings: + auto-execute_run_motor: + feedback: {} + goal: {} + goal_default: + mode: null + position: null + velocity: null + handles: [] + result: {} + schema: + description: 步进电机执行运动函数。直接执行电机运动命令,包括位置设定、速度控制和路径规划。该函数处理底层的电机控制协议,消除警告信息,设置运动参数并启动电机运行。适用于需要直接控制电机运动的应用场景。 + properties: + feedback: {} + goal: + properties: + mode: + type: string + position: + type: number + velocity: + type: integer + required: + - mode + - position + - velocity + type: object + result: {} + required: + - goal + title: execute_run_motor参数 + type: object + type: UniLabJsonCommand + auto-init_device: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: iCL42电机设备初始化函数。建立与iCL42步进电机驱动器的串口通信连接,配置通信参数包括波特率、数据位、校验位等。该函数是电机使用前的必要步骤,确保驱动器处于可控状态并准备接收运动指令。 + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: init_device参数 + type: object + type: UniLabJsonCommand + auto-run_motor: + feedback: {} + goal: {} + goal_default: + mode: null + position: null + velocity: null + handles: [] + result: {} + schema: + description: 步进电机运动控制函数。根据指定的运动模式、目标位置和速度参数控制电机运动。支持多种运动模式和精确的位置控制,自动处理运动轨迹规划和执行。该函数提供异步执行和状态反馈,确保运动的准确性和可靠性。 + properties: + feedback: {} + goal: + properties: + mode: + type: string + position: + type: number + velocity: + type: integer + required: + - mode + - position + - velocity + type: object + result: {} + required: + - goal + title: run_motor参数 + type: object + type: UniLabJsonCommand execute_command_from_outer: - type: SendCmd + feedback: {} goal: command: command - feedback: {} + goal_default: + command: '' + handles: [] result: - success: success \ No newline at end of file + success: success + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.motor.iCL42:iCL42Driver + status_types: + is_executing_run: bool + motor_position: int + success: bool + type: python + config_info: [] + description: iCL42步进电机驱动器,用于实验室设备的精密线性运动控制。该设备通过串口通信控制iCL42型步进电机驱动器,支持多种运动模式和精确的位置、速度控制。具备位置反馈、运行状态监控和故障检测功能。适用于自动进样器、样品传送、精密定位平台等需要准确线性运动控制的实验室自动化设备。 + handles: [] + icon: '' + init_param_schema: + config: + properties: + device_address: + default: 1 + type: integer + device_com: + default: COM9 + type: string + required: [] + type: object + data: + properties: + is_executing_run: + type: boolean + motor_position: + type: integer + success: + type: boolean + required: + - motor_position + - is_executing_run + - success + type: object + version: 1.0.0 diff --git a/unilabos/registry/devices/sim_nodes.yaml b/unilabos/registry/devices/sim_nodes.yaml index de4d110..f07966b 100644 --- a/unilabos/registry/devices/sim_nodes.yaml +++ b/unilabos/registry/devices/sim_nodes.yaml @@ -1,5 +1,315 @@ lh_joint_publisher: + category: + - sim_nodes class: + action_value_mappings: + auto-check_tf_update_actions: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: check_tf_update_actions的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: check_tf_update_actions参数 + type: object + type: UniLabJsonCommand + auto-find_resource_parent: + feedback: {} + goal: {} + goal_default: + resource_id: null + handles: [] + result: {} + schema: + description: find_resource_parent的参数schema + properties: + feedback: {} + goal: + properties: + resource_id: + type: string + required: + - resource_id + type: object + result: {} + required: + - goal + title: find_resource_parent参数 + type: object + type: UniLabJsonCommand + auto-inverse_kinematics: + feedback: {} + goal: {} + goal_default: + parent_id: null + x: null + x_joint: null + y: null + y_joint: null + z: null + z_joint: null + handles: [] + result: {} + schema: + description: inverse_kinematics的参数schema + properties: + feedback: {} + goal: + properties: + parent_id: + type: string + x: + type: string + x_joint: + type: object + y: + type: string + y_joint: + type: object + z: + type: string + z_joint: + type: object + required: + - x + - y + - z + - parent_id + - x_joint + - y_joint + - z_joint + type: object + result: {} + required: + - goal + title: inverse_kinematics参数 + type: object + type: UniLabJsonCommand + auto-lh_joint_action_callback: + feedback: {} + goal: {} + goal_default: + goal_handle: null + handles: [] + result: {} + schema: + description: lh_joint_action_callback的参数schema + properties: + feedback: {} + goal: + properties: + goal_handle: + type: string + required: + - goal_handle + type: object + result: {} + required: + - goal + title: lh_joint_action_callback参数 + type: object + type: UniLabJsonCommand + auto-lh_joint_pub_callback: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: lh_joint_pub_callback的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: lh_joint_pub_callback参数 + type: object + type: UniLabJsonCommand + auto-move_joints: + feedback: {} + goal: {} + goal_default: + option: null + resource_names: null + speed: 0.1 + x: null + x_joint: null + y: null + y_joint: null + z: null + z_joint: null + handles: [] + result: {} + schema: + description: move_joints的参数schema + properties: + feedback: {} + goal: + properties: + option: + type: string + resource_names: + type: string + speed: + default: 0.1 + type: string + x: + type: string + x_joint: + type: string + y: + type: string + y_joint: + type: string + z: + type: string + z_joint: + type: string + required: + - resource_names + - x + - y + - z + - option + type: object + result: {} + required: + - goal + title: move_joints参数 + type: object + type: UniLabJsonCommand + auto-move_to: + feedback: {} + goal: {} + goal_default: + joint_positions: null + parent_id: null + speed: null + handles: [] + result: {} + schema: + description: move_to的参数schema + properties: + feedback: {} + goal: + properties: + joint_positions: + type: string + parent_id: + type: string + speed: + type: string + required: + - joint_positions + - speed + - parent_id + type: object + result: {} + required: + - goal + title: move_to参数 + type: object + type: UniLabJsonCommand + auto-resource_move: + feedback: {} + goal: {} + goal_default: + channels: null + link_name: null + resource_id: null + handles: [] + result: {} + schema: + description: resource_move的参数schema + properties: + feedback: {} + goal: + properties: + channels: + type: array + link_name: + type: string + resource_id: + type: string + required: + - resource_id + - link_name + - channels + type: object + result: {} + required: + - goal + title: resource_move参数 + type: object + type: UniLabJsonCommand + auto-send_resource_action: + feedback: {} + goal: {} + goal_default: + link_name: null + resource_id_list: null + handles: [] + result: {} + schema: + description: send_resource_action的参数schema + properties: + feedback: {} + goal: + properties: + link_name: + type: string + resource_id_list: + type: array + required: + - resource_id_list + - link_name + type: object + result: {} + required: + - goal + title: send_resource_action参数 + type: object + type: UniLabJsonCommand module: unilabos.devices.ros_dev.liquid_handler_joint_publisher:LiquidHandlerJointPublisher + status_types: {} type: ros2 - + config_info: [] + description: 液体处理器关节发布器,用于ROS2仿真系统中的液体处理设备运动控制。该节点通过发布关节状态驱动仿真模型中的机械臂运动,支持三维坐标到关节空间的逆运动学转换、多关节协调控制、资源跟踪和TF变换。具备精确的位置控制、速度调节、pick-and-place操作等功能。适用于液体处理系统的虚拟仿真、运动规划验证、系统集成测试等应用场景。 + handles: [] + icon: '' + init_param_schema: + config: + properties: + device_id: + default: lh_joint_publisher + type: string + rate: + default: 50 + type: string + resource_tracker: + type: string + resources_config: + type: array + required: + - resources_config + - resource_tracker + type: object + data: + properties: {} + required: [] + type: object + version: 1.0.0 diff --git a/unilabos/registry/devices/temperature.yaml b/unilabos/registry/devices/temperature.yaml index 662ee01..95bdeed 100644 --- a/unilabos/registry/devices/temperature.yaml +++ b/unilabos/registry/devices/temperature.yaml @@ -1,65 +1,758 @@ -heaterstirrer.dalong: - description: DaLong heater stirrer +chiller: + category: + - temperature class: - module: unilabos.devices.heaterstirrer.dalong:HeaterStirrer_DaLong - type: python - status_types: - temp: Float64 - temp_warning: Float64 - stir_speed: Float64 action_value_mappings: - set_temp_warning: - type: SendCmd - goal: - command: temp + auto-build_modbus_frame: feedback: {} + goal: {} + goal_default: + device_address: null + function_code: null + register_address: null + value: null + handles: [] + result: {} + schema: + description: build_modbus_frame的参数schema + properties: + feedback: {} + goal: + properties: + device_address: + type: integer + function_code: + type: integer + register_address: + type: integer + value: + type: integer + required: + - device_address + - function_code + - register_address + - value + type: object + result: {} + required: + - goal + title: build_modbus_frame参数 + type: object + type: UniLabJsonCommand + auto-convert_temperature_to_modbus_value: + feedback: {} + goal: {} + goal_default: + decimal_points: 1 + temperature: null + handles: [] + result: {} + schema: + description: convert_temperature_to_modbus_value的参数schema + properties: + feedback: {} + goal: + properties: + decimal_points: + default: 1 + type: integer + temperature: + type: number + required: + - temperature + type: object + result: {} + required: + - goal + title: convert_temperature_to_modbus_value参数 + type: object + type: UniLabJsonCommand + auto-modbus_crc: + feedback: {} + goal: {} + goal_default: + data: null + handles: [] + result: {} + schema: + description: modbus_crc的参数schema + properties: + feedback: {} + goal: + properties: + data: + type: string + required: + - data + type: object + result: {} + required: + - goal + title: modbus_crc参数 + type: object + type: UniLabJsonCommand + auto-stop: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: stop的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: stop参数 + type: object + type: UniLabJsonCommand + set_temperature: + feedback: {} + goal: + command: command + goal_default: + command: '' + handles: [] result: success: success - set_temp_target: + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object type: SendCmd - goal: - command: temp + module: unilabos.devices.temperature.chiller:Chiller + status_types: {} + type: python + config_info: [] + description: 实验室制冷设备,用于精确的温度控制和冷却操作。该设备通过Modbus RTU协议与控制系统通信,支持精确的温度设定和监控。具备快速降温、恒温控制和温度保持功能,广泛应用于需要低温环境的化学反应、样品保存、结晶操作等实验场景。提供稳定可靠的冷却性能,确保实验过程的温度精度。 + handles: [] + icon: '' + init_param_schema: + config: + properties: + port: + type: string + rate: + default: 9600 + type: string + required: + - port + type: object + data: + properties: {} + required: [] + type: object + version: 1.0.0 +heaterstirrer.dalong: + category: + - temperature + class: + action_value_mappings: + auto-close: feedback: {} - result: - success: success + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: close的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: close参数 + type: object + type: UniLabJsonCommand + auto-set_stir_speed: + feedback: {} + goal: {} + goal_default: + speed: null + handles: [] + result: {} + schema: + description: set_stir_speed的参数schema + properties: + feedback: {} + goal: + properties: + speed: + type: number + required: + - speed + type: object + result: {} + required: + - goal + title: set_stir_speed参数 + type: object + type: UniLabJsonCommand + auto-set_temp_inner: + feedback: {} + goal: {} + goal_default: + temp: null + type: warning + handles: [] + result: {} + schema: + description: set_temp_inner的参数schema + properties: + feedback: {} + goal: + properties: + temp: + type: number + type: + default: warning + type: string + required: + - temp + type: object + result: {} + required: + - goal + title: set_temp_inner参数 + type: object + type: UniLabJsonCommand heatchill: - type: HeatChill - goal: - vessel: vessel - temp: temp - time: time - purpose: purpose feedback: status: status - result: - success: success - -chiller: - description: Chiller - class: - module: unilabos.devices.temperature.chiller:Chiller - type: python - action_value_mappings: - set_temperature: - type: SendCmd goal: - command: command - feedback: {} + purpose: purpose + temp: temp + time: time + vessel: vessel + goal_default: + pressure: '' + purpose: '' + reflux_solvent: '' + stir: false + stir_speed: 0.0 + temp: 0.0 + temp_spec: '' + time: '' + time_spec: '' + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] result: success: success -tempsensor: - description: Temperature sensor - class: - module: unilabos.devices.temperature.sensor_node:TempSensorNode - type: python + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: HeatChill_Feedback + type: object + goal: + properties: + pressure: + type: string + purpose: + type: string + reflux_solvent: + type: string + stir: + type: boolean + stir_speed: + type: number + temp: + type: number + temp_spec: + type: string + time: + type: string + time_spec: + type: string + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + - temp + - time + - temp_spec + - time_spec + - pressure + - reflux_solvent + - stir + - stir_speed + - purpose + title: HeatChill_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: HeatChill_Result + type: object + required: + - goal + title: HeatChill + type: object + type: HeatChill + set_temp_target: + feedback: {} + goal: + command: temp + goal_default: + command: '' + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + set_temp_warning: + feedback: {} + goal: + command: temp + goal_default: + command: '' + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.heaterstirrer.dalong:HeaterStirrer_DaLong status_types: - value: Float64 - warning: Float64 + status: str + stir_speed: float + temp: float + temp_target: float + temp_warning: float + type: python + config_info: [] + description: 大龙加热搅拌器,集成加热和搅拌双重功能的实验室设备。该设备通过串口通信控制,支持精确的温度调节、搅拌速度控制和安全保护功能。具备实时温度监测、目标温度设定、安全温度报警等特性。适用于化学合成、样品制备、反应控制等需要同时进行加热和搅拌的实验操作,提供稳定均匀的反应环境。 + handles: [] + icon: '' + init_param_schema: + config: + properties: + baudrate: + default: 9600 + type: integer + port: + default: COM6 + type: string + temp_warning: + default: 50.0 + type: string + required: [] + type: object + data: + properties: + status: + type: string + stir_speed: + type: number + temp: + type: number + temp_target: + type: number + temp_warning: + type: number + required: + - status + - stir_speed + - temp + - temp_warning + - temp_target + type: object + version: 1.0.0 +tempsensor: + category: + - temperature + class: action_value_mappings: + auto-build_modbus_request: + feedback: {} + goal: {} + goal_default: + device_id: null + function_code: null + register_address: null + register_count: null + handles: [] + result: {} + schema: + description: build_modbus_request的参数schema + properties: + feedback: {} + goal: + properties: + device_id: + type: string + function_code: + type: string + register_address: + type: string + register_count: + type: string + required: + - device_id + - function_code + - register_address + - register_count + type: object + result: {} + required: + - goal + title: build_modbus_request参数 + type: object + type: UniLabJsonCommand + auto-calculate_crc: + feedback: {} + goal: {} + goal_default: + data: null + handles: [] + result: {} + schema: + description: calculate_crc的参数schema + properties: + feedback: {} + goal: + properties: + data: + type: string + required: + - data + type: object + result: {} + required: + - goal + title: calculate_crc参数 + type: object + type: UniLabJsonCommand + auto-read_modbus_response: + feedback: {} + goal: {} + goal_default: + response: null + handles: [] + result: {} + schema: + description: read_modbus_response的参数schema + properties: + feedback: {} + goal: + properties: + response: + type: string + required: + - response + type: object + result: {} + required: + - goal + title: read_modbus_response参数 + type: object + type: UniLabJsonCommand + auto-send_prototype_command: + feedback: {} + goal: {} + goal_default: + command: null + handles: [] + result: {} + schema: + description: send_prototype_command的参数schema + properties: + feedback: {} + goal: + properties: + command: + type: string + required: + - command + type: object + result: {} + required: + - goal + title: send_prototype_command参数 + type: object + type: UniLabJsonCommand set_warning: - type: SendCmd + feedback: {} goal: command: command - feedback: {} + goal_default: + command: '' + handles: [] result: success: success + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.temperature.sensor_node:TempSensorNode + status_types: + value: float + type: python + config_info: [] + description: 高精度温度传感器设备,用于实验室环境和设备的温度监测。该传感器通过Modbus RTU协议与控制系统通信,提供实时准确的温度数据。具备高精度测量、报警温度设定、数据稳定性好等特点。适用于反应器监控、环境温度监测、设备保护等需要精确温度测量的实验场景,为实验安全和数据可靠性提供保障。 + handles: [] + icon: '' + init_param_schema: + config: + properties: + address: + type: string + baudrate: + default: 9600 + type: string + port: + type: string + warning: + type: string + required: + - port + - warning + - address + type: object + data: + properties: + value: + type: number + required: + - value + type: object + version: 1.0.0 diff --git a/unilabos/registry/devices/vacuum_and_purge.yaml b/unilabos/registry/devices/vacuum_and_purge.yaml index 84fb58c..a127a08 100644 --- a/unilabos/registry/devices/vacuum_and_purge.yaml +++ b/unilabos/registry/devices/vacuum_and_purge.yaml @@ -1,81 +1,358 @@ -vacuum_pump.mock: - description: Mock vacuum pump - class: - module: unilabos.devices.pump_and_valve.vacuum_pump_mock:VacuumPumpMock - type: python - status_types: - status: String - action_value_mappings: - open: - type: EmptyIn - goal: {} - feedback: {} - result: {} - close: - type: EmptyIn - goal: {} - feedback: {} - result: {} - set_status: - type: StrSingleInput - goal: - string: string - feedback: {} - result: {} - handles: - - handler_key: out - label: out - data_type: fluid - io_type: source - data_source: handle - data_key: fluid_in - init_param_schema: - type: object - properties: - port: - type: string - description: "通信端口" - default: "COM6" - required: - - port - gas_source.mock: - description: Mock gas source + category: + - vacuum_and_purge class: - module: unilabos.devices.pump_and_valve.vacuum_pump_mock:VacuumPumpMock - type: python - status_types: - status: String action_value_mappings: - open: - type: EmptyIn - goal: {} + auto-is_closed: feedback: {} + goal: {} + goal_default: {} + handles: [] result: {} + schema: + description: is_closed的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_closed参数 + type: object + type: UniLabJsonCommand + auto-is_open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: is_open的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_open参数 + type: object + type: UniLabJsonCommand close: - type: EmptyIn - goal: {} feedback: {} + goal: {} + goal_default: {} + handles: [] result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn set_status: - type: StrSingleInput + feedback: {} goal: string: string - feedback: {} + goal_default: + string: '' + handles: [] result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: StrSingleInput_Feedback + type: object + goal: + properties: + string: + type: string + required: + - string + title: StrSingleInput_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: StrSingleInput_Result + type: object + required: + - goal + title: StrSingleInput + type: object + type: StrSingleInput + module: unilabos.devices.pump_and_valve.vacuum_pump_mock:VacuumPumpMock + status_types: + status: str + type: python + config_info: [] + description: 模拟气体源设备,用于系统测试和开发调试。该设备模拟真实气体源的开关控制和状态监测功能,支持气体供应的启停操作。提供与真实气体源相同的接口和状态反馈,便于在没有实际硬件的情况下进行系统集成测试和算法验证。适用于气路系统调试、软件开发和实验流程验证等场景。 handles: - - handler_key: out - label: out - data_type: fluid - io_type: source - data_source: executor - data_key: fluid_out + - data_key: fluid_out + data_source: executor + data_type: fluid + handler_key: out + io_type: source + label: out + icon: '' init_param_schema: - type: object - properties: - port: - type: string - description: "通信端口" - default: "COM6" - required: - - port \ No newline at end of file + config: + properties: + port: + default: COM6 + type: string + required: [] + type: object + data: + properties: + status: + type: string + required: + - status + type: object + version: 1.0.0 +vacuum_pump.mock: + category: + - vacuum_and_purge + class: + action_value_mappings: + auto-is_closed: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: is_closed的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_closed参数 + type: object + type: UniLabJsonCommand + auto-is_open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: is_open的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_open参数 + type: object + type: UniLabJsonCommand + close: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + set_status: + feedback: {} + goal: + string: string + goal_default: + string: '' + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: StrSingleInput_Feedback + type: object + goal: + properties: + string: + type: string + required: + - string + title: StrSingleInput_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: StrSingleInput_Result + type: object + required: + - goal + title: StrSingleInput + type: object + type: StrSingleInput + module: unilabos.devices.pump_and_valve.vacuum_pump_mock:VacuumPumpMock + status_types: + status: str + type: python + config_info: [] + description: 模拟真空泵设备,用于系统测试和开发调试。该设备模拟真实真空泵的抽气功能和状态控制,支持真空系统的启停操作和状态监测。提供与真实真空泵相同的接口和控制逻辑,便于在没有实际硬件的情况下进行真空系统的集成测试。适用于真空工艺调试、软件开发和实验流程验证等场景。 + handles: + - data_key: fluid_in + data_source: handle + data_type: fluid + handler_key: out + io_type: source + label: out + icon: '' + init_param_schema: + config: + properties: + port: + default: COM6 + type: string + required: [] + type: object + data: + properties: + status: + type: string + required: + - status + type: object + version: 1.0.0 diff --git a/unilabos/registry/devices/virtual_device.yaml b/unilabos/registry/devices/virtual_device.yaml index e25c0d6..572456a 100644 --- a/unilabos/registry/devices/virtual_device.yaml +++ b/unilabos/registry/devices/virtual_device.yaml @@ -1,961 +1,6037 @@ -# 虚拟设备清单及连接特性 - -# 1. virtual_pump - 虚拟泵 -# 描述:具有多通道阀门特性的泵,根据valve_position可连接多个容器 -# 连接特性:1个输入口 + 1个输出口 -# 数据类型:fluid(流体连接) - -# 2. virtual_stirrer - 虚拟搅拌器 -# 描述:机械连接设备,提供搅拌功能 -# 连接特性:1个连接点 -# 数据类型:mechanical(机械连接) - -# 3a. virtual_valve - 虚拟八通阀门 -# 描述:8通阀门,可切换流向 -# 连接特性:1个口连接注射泵 + 多个输出口 -# 数据类型:fluid(流体连接) - -# 3b. virtual_solenoid_valve (电磁阀门) -# 描述:简单的开关型电磁阀,只有开启和关闭两个状态 -# 连接特性:1个输入口 + 1个输出口,控制通断 -# 数据类型:fluid(流体连接) - -# 4. virtual_centrifuge - 虚拟离心机 -# 描述:单个样品处理设备,原地处理样品 -# 连接特性:1个输入口 + 1个输出口 -# 数据类型:resource(资源/样品连接) - -# 5. virtual_filter - 虚拟过滤器 -# 描述:分离设备,将样品分离为滤液和滤渣 -# 连接特性:1个输入口 + 2个输出口(滤液和滤渣) -# 数据类型:resource(资源/样品连接) - -# 6. virtual_heatchill - 虚拟加热/冷却器 -# 描述:温控设备,容器直接放置在设备上进行温度控制 -# 连接特性:1个连接点 -# 数据类型:mechanical(机械/物理接触连接) - -# 7. virtual_transfer_pump - 虚拟转移泵(注射器式) -# 描述:注射器式转移泵,通过同一个口吸入和排出液体 -# 连接特性:1个连接点 -# 数据类型:fluid(流体连接) - -# 8. virtual_column - 虚拟色谱柱 -# 描述:分离纯化设备,用于样品纯化 -# 连接特性:1个输入口 + 1个输出口 -# 数据类型:resource(资源/样品连接) - -# 9. virtual_rotavap - 虚拟旋转蒸发仪 -# 描述:旋转蒸发仪用于溶剂蒸发和浓缩,具有加热、旋转和真空功能 -# 连接特性:1个输入口(样品),1个输出口(浓缩物),1个冷凝器出口(回收溶剂) -# 数据类型:resource(资源/样品连接) - -# 10. virtual_separator - 虚拟分液器 -# 描述:分液器用于两相液体的分离,可进行萃取和洗涤操作 -# 连接特性:1个输入口(混合液),2个输出口(上相和下相) -# 数据类型:fluid(流体连接) - -# 11. virtual_vacuum_pump - 虚拟真空泵 -# 描述:真空泵设备,用于抽真空操作和真空/充气循环 -# 连接特性:1个输出口(连接需要抽真空的系统) -# 数据类型:fluid(流体连接) - -# 12. virtual_gas_source - 虚拟气源 -# 描述:气源设备,用于充气操作和真空/充气循环 -# 连接特性:1个输出口(向系统提供加压气体) -# 数据类型:fluid(流体连接) - -virtual_pump: - description: Virtual Pump for PumpTransferProtocol Testing +virtual_centrifuge: + category: + - virtual_device class: - module: unilabos.devices.virtual.virtual_pump:VirtualPump - type: python - status_types: - status: String - position: Float64 - valve_position: Int32 - max_volume: Float64 - current_volume: Float64 action_value_mappings: - transfer: - type: PumpTransfer + auto-cleanup: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: cleanup的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: cleanup参数 + type: object + type: UniLabJsonCommandAsync + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: initialize的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize参数 + type: object + type: UniLabJsonCommandAsync + centrifuge: + feedback: + current_speed: current_speed + current_status: status + current_temp: current_temp + progress: progress goal: + speed: speed + temp: temp + time: time + vessel: vessel + goal_default: + speed: 0.0 + temp: 0.0 + time: 0.0 + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] + result: + message: message + success: success + schema: + description: '' + properties: + feedback: + properties: + current_speed: + type: number + current_status: + type: string + current_temp: + type: number + progress: + type: number + required: + - progress + - current_speed + - current_temp + - current_status + title: Centrifuge_Feedback + type: object + goal: + properties: + speed: + type: number + temp: + type: number + time: + type: number + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + - speed + - time + - temp + title: Centrifuge_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Centrifuge_Result + type: object + required: + - goal + title: Centrifuge + type: object + type: Centrifuge + module: unilabos.devices.virtual.virtual_centrifuge:VirtualCentrifuge + status_types: + centrifuge_state: str + current_speed: float + current_temp: float + max_speed: float + max_temp: float + message: str + min_temp: float + progress: float + status: str + target_speed: float + target_temp: float + time_remaining: float + type: python + config_info: [] + description: Virtual Centrifuge for CentrifugeProtocol Testing + handles: + - data_key: vessel + data_source: handle + data_type: transport + description: 需要离心的样品容器 + handler_key: centrifuge + io_type: target + label: centrifuge + side: NORTH + icon: '' + init_param_schema: + config: + properties: + config: + type: string + device_id: + type: string + required: [] + type: object + data: + properties: + centrifuge_state: + type: string + current_speed: + type: number + current_temp: + type: number + max_speed: + type: number + max_temp: + type: number + message: + type: string + min_temp: + type: number + progress: + type: number + status: + type: string + target_speed: + type: number + target_temp: + type: number + time_remaining: + type: number + required: + - status + - centrifuge_state + - current_speed + - target_speed + - current_temp + - target_temp + - max_speed + - max_temp + - min_temp + - time_remaining + - progress + - message + type: object + version: 1.0.0 +virtual_column: + category: + - virtual_device + class: + action_value_mappings: + auto-cleanup: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: cleanup的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: cleanup参数 + type: object + type: UniLabJsonCommandAsync + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: initialize的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize参数 + type: object + type: UniLabJsonCommandAsync + run_column: + feedback: + current_status: current_status + processed_volume: processed_volume + progress: progress + goal: + column: column from_vessel: from_vessel to_vessel: to_vessel - volume: volume - amount: amount - time: time - viscous: viscous - rinsing_solvent: rinsing_solvent - rinsing_volume: rinsing_volume - rinsing_repeats: rinsing_repeats - solid: solid - feedback: - status: status + goal_default: + column: '' + from_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + pct1: '' + pct2: '' + ratio: '' + rf: '' + solvent1: '' + solvent2: '' + to_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] result: + message: current_status + return_info: current_status success: success - set_valve_position: - type: FloatSingleInput - goal: - float_in: valve_position - feedback: - status: status - result: - success: success - handles: - - handler_key: pumpio - label: pumpio - data_type: fluid - io_type: source - data_source: handle - data_key: fluid_in - description: "泵的输出口" - schema: - type: object - properties: - port: - type: string - default: "VIRTUAL" - max_volume: - type: number - default: 25.0 - additionalProperties: false - -virtual_stirrer: - description: Virtual Stirrer for StirProtocol Testing - icon: Stirrer.webp - class: - module: unilabos.devices.virtual.virtual_stirrer:VirtualStirrer - type: python + schema: + description: '' + properties: + feedback: + properties: + progress: + type: number + status: + type: string + required: + - status + - progress + title: RunColumn_Feedback + type: object + goal: + properties: + column: + type: string + from_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + pct1: + type: string + pct2: + type: string + ratio: + type: string + rf: + type: string + solvent1: + type: string + solvent2: + type: string + to_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - from_vessel + - to_vessel + - column + - rf + - pct1 + - pct2 + - solvent1 + - solvent2 + - ratio + title: RunColumn_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: RunColumn_Result + type: object + required: + - goal + title: RunColumn + type: object + type: RunColumn + module: unilabos.devices.virtual.virtual_column:VirtualColumn status_types: - status: String - operation_mode: String - current_vessel: String - current_speed: Float64 - is_stirring: Bool - remaining_time: Float64 - action_value_mappings: - stir: - type: Stir - goal: - stir_time: stir_time - stir_speed: stir_speed - settling_time: settling_time - feedback: - status: status - result: - success: success - start_stir: - type: StartStir - goal: - vessel: vessel - stir_speed: stir_speed - purpose: purpose - feedback: - status: status - result: - success: success - stop_stir: - type: StopStir - goal: - vessel: vessel - feedback: - status: status - result: - success: success - handles: - - handler_key: stirrer - label: stirrer - data_type: mechanical - side: NORTH - io_type: source - data_source: handle - data_key: vessel - description: "搅拌器的机械连接口" - schema: - type: object - properties: - port: - type: string - default: "VIRTUAL" - max_speed: - type: number - default: 1500.0 - min_speed: - type: number - default: 50.0 - additionalProperties: false - -virtual_multiway_valve: - description: Virtual 8-Way Valve for flow direction control - icon: EightPipeline.webp - class: - module: unilabos.devices.virtual.virtual_multiway_valve:VirtualMultiwayValve + column_diameter: float + column_length: float + column_state: str + current_flow_rate: float + current_phase: str + current_status: str + final_volume: float + max_flow_rate: float + processed_volume: float + progress: float + status: str type: python - status_types: - status: String - valve_state: String - current_position: Int32 - target_position: Int32 - max_positions: Int32 - action_value_mappings: - set_position: - type: SendCmd - goal: - command: command - feedback: {} - result: - success: success - set_valve_position: - type: SendCmd - goal: - command: command - feedback: {} - result: - success: success + config_info: [] + description: Virtual Column Chromatography Device for RunColumn Protocol Testing handles: - - handler_key: transferpump - label: transferpump - data_type: fluid - side: NORTH - io_type: target + - data_key: from_vessel data_source: handle - data_key: fluid_in - description: "八通阀门进液口" - - handler_key: 1 - label: 1 - data_type: fluid - side: NORTH - io_type: source - data_source: executor - data_key: fluid_port_1 - description: "八通阀门端口1" - - handler_key: 2 - label: 2 - data_type: fluid - side: EAST - io_type: source - data_source: executor - data_key: fluid_port_2 - description: "八通阀门端口2" - - handler_key: 3 - label: 3 - data_type: fluid - side: EAST - io_type: source - data_source: executor - data_key: fluid_port_3 - description: "八通阀门端口3" - - handler_key: 4 - label: 4 - data_type: fluid - side: SOUTH - io_type: source - data_source: executor - data_key: fluid_port_4 - description: "八通阀门端口4" - - handler_key: 5 - label: 5 - data_type: fluid - side: SOUTH - io_type: source - data_source: executor - data_key: fluid_port_5 - description: "八通阀门端口5" - - handler_key: 6 - label: 6 - data_type: fluid - side: WEST - io_type: source - data_source: executor - data_key: fluid_port_6 - description: "八通阀门端口6" - - handler_key: 7 - label: 7 - data_type: fluid - side: WEST - io_type: source - data_source: executor - data_key: fluid_port_7 - description: "八通阀门端口7" - - handler_key: 8 - label: 8 - data_type: fluid - side: NORTH - io_type: source - data_source: executor - data_key: fluid_port_8 - description: "八通阀门端口8" - schema: - type: object - properties: - port: - type: string - default: "VIRTUAL" - positions: - type: integer - default: 8 - additionalProperties: false - -virtual_solenoid_valve: - description: Virtual Solenoid Valve for simple on/off flow control - class: - module: unilabos.devices.virtual.virtual_solenoid_valve:VirtualSolenoidValve - type: python - status_types: - status: String - valve_state: String - is_open: Bool - action_value_mappings: - set_valve_position: - type: SendCmd - goal: - command: command - feedback: {} - result: - success: success - open: - type: SendCmd - goal: - command: "OPEN" - feedback: {} - result: - success: success - close: - type: SendCmd - goal: - command: "CLOSED" - feedback: {} - result: - success: success - set_state: - type: SendCmd - goal: - command: command - feedback: {} - result: - success: success - handles: - - handler_key: in - label: in - data_type: fluid - side: NORTH - io_type: target - data_source: handle - data_key: fluid_port_in - description: "电磁阀的进液口" - - handler_key: out - label: out - data_type: fluid - side: SOUTH - io_type: source - data_source: handle - data_key: fluid_port_out - description: "电磁阀的出液口" - schema: - type: object - properties: - port: - type: string - default: "VIRTUAL" - voltage: - type: number - default: 12.0 - response_time: - type: number - default: 0.1 - additionalProperties: false - -virtual_centrifuge: - description: Virtual Centrifuge for CentrifugeProtocol Testing - class: - module: unilabos.devices.virtual.virtual_centrifuge:VirtualCentrifuge - type: python - status_types: - status: String - current_speed: Float64 - target_speed: Float64 - current_temp: Float64 - target_temp: Float64 - max_speed: Float64 - max_temp: Float64 - min_temp: Float64 - centrifuge_state: String - time_remaining: Float64 - progress: Float64 - message: String - action_value_mappings: - centrifuge: - type: Centrifuge - goal: - vessel: vessel - speed: speed - time: time - temp: temp - feedback: - progress: progress - current_speed: current_speed - current_temp: current_temp - current_status: status - result: - success: success - message: message - handles: - - handler_key: centrifuge - label: centrifuge data_type: transport - side: NORTH + description: 样品输入口 + handler_key: columnin io_type: target + label: columnin + side: WEST + - data_key: to_vessel data_source: handle - data_key: vessel - description: "需要离心的样品容器" - schema: - type: object - properties: - port: - type: string - default: "VIRTUAL" - max_speed: - type: number - default: 15000.0 - max_temp: - type: number - default: 40.0 - min_temp: - type: number - default: 4.0 - additionalProperties: false - + data_type: transport + description: 产物输出口 + handler_key: columnout + io_type: source + label: columnout + side: EAST + icon: '' + init_param_schema: + config: + properties: + config: + type: object + device_id: + type: string + required: [] + type: object + data: + properties: + column_diameter: + type: number + column_length: + type: number + column_state: + type: string + current_flow_rate: + type: number + current_phase: + type: string + current_status: + type: string + final_volume: + type: number + max_flow_rate: + type: number + processed_volume: + type: number + progress: + type: number + status: + type: string + required: + - status + - column_state + - current_flow_rate + - max_flow_rate + - column_length + - column_diameter + - processed_volume + - progress + - current_status + - current_phase + - final_volume + type: object + version: 1.0.0 virtual_filter: - description: Virtual Filter for FilterProtocol Testing + category: + - virtual_device class: - module: unilabos.devices.virtual.virtual_filter:VirtualFilter - type: python - status_types: - status: String - progress: Float64 - current_temp: Float64 - filtered_volume: Float64 - current_status: String - message: String - max_temp: Float64 - max_stir_speed: Float64 - max_volume: Float64 action_value_mappings: + auto-cleanup: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: cleanup的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: cleanup参数 + type: object + type: UniLabJsonCommandAsync + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: initialize的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize参数 + type: object + type: UniLabJsonCommandAsync filter: - type: Filter + feedback: + current_status: current_status + current_temp: current_temp + filtered_volume: filtered_volume + progress: progress goal: - vessel: vessel + continue_heatchill: continue_heatchill filtrate_vessel: filtrate_vessel stir: stir stir_speed: stir_speed temp: temp - continue_heatchill: continue_heatchill + vessel: vessel volume: volume - feedback: - progress: progress - current_temp: current_temp - filtered_volume: filtered_volume - current_status: current_status + goal_default: + continue_heatchill: false + filtrate_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + stir: false + stir_speed: 0.0 + temp: 0.0 + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + volume: 0.0 + handles: [] result: - success: success message: message return_info: message - handles: - - handler_key: filter_in - label: filter_in - data_type: transport - side: NORTH - io_type: target - data_source: handle - data_key: vessel_in - description: "需要过滤的样品容器" - - handler_key: filtrate_out - label: filtrate_out - data_type: transport - side: SOUTH - io_type: source - data_source: handle - data_key: filtrate_out - description: "滤液出口" - - handler_key: retentate_out - label: retentate_out - data_type: transport - side: EAST - io_type: source - data_source: handle - data_key: retentate_out - description: "滤渣/固体出口" - schema: - type: object - properties: - port: - type: string - default: "VIRTUAL" - max_temp: - type: number - default: 100.0 - max_stir_speed: - type: number - default: 1000.0 - max_volume: - type: number - default: 500.0 - additionalProperties: false - -virtual_heatchill: - description: Virtual HeatChill for HeatChillProtocol Testing - icon: Heater.webp - class: - module: unilabos.devices.virtual.virtual_heatchill:VirtualHeatChill - type: python + success: success + schema: + description: '' + properties: + feedback: + properties: + current_status: + type: string + current_temp: + type: number + filtered_volume: + type: number + progress: + type: number + required: + - progress + - current_temp + - filtered_volume + - current_status + title: Filter_Feedback + type: object + goal: + properties: + continue_heatchill: + type: boolean + filtrate_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + stir: + type: boolean + stir_speed: + type: number + temp: + type: number + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + volume: + type: number + required: + - vessel + - filtrate_vessel + - stir + - stir_speed + - temp + - continue_heatchill + - volume + title: Filter_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Filter_Result + type: object + required: + - goal + title: Filter + type: object + type: Filter + module: unilabos.devices.virtual.virtual_filter:VirtualFilter status_types: - status: String - operation_mode: String - is_stirring: Bool - stir_speed: Float64 + current_status: str + current_temp: float + filtered_volume: float + max_stir_speed: float + max_temp: float + max_volume: float + message: str + progress: float + status: str + type: python + config_info: [] + description: Virtual Filter for FilterProtocol Testing + handles: + - data_key: vessel_in + data_source: handle + data_type: transport + description: 需要过滤的样品容器 + handler_key: filterin + io_type: target + label: filter_in + side: NORTH + - data_key: filtrate_out + data_source: handle + data_type: transport + description: 滤液出口 + handler_key: filtrateout + io_type: source + label: filtrate_out + side: SOUTH + - data_key: retentate_out + data_source: handle + data_type: transport + description: 滤渣/固体出口 + handler_key: retentateout + io_type: source + label: retentate_out + side: EAST + icon: '' + init_param_schema: + config: + properties: + config: + type: string + device_id: + type: string + required: [] + type: object + data: + properties: + current_status: + type: string + current_temp: + type: number + filtered_volume: + type: number + max_stir_speed: + type: number + max_temp: + type: number + max_volume: + type: number + message: + type: string + progress: + type: number + status: + type: string + required: + - status + - progress + - current_temp + - filtered_volume + - current_status + - message + - max_temp + - max_stir_speed + - max_volume + type: object + version: 1.0.0 +virtual_gas_source: + category: + - virtual_device + class: action_value_mappings: - heat_chill: - type: HeatChill + auto-cleanup: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: cleanup的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: cleanup参数 + type: object + type: UniLabJsonCommandAsync + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: initialize的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize参数 + type: object + type: UniLabJsonCommandAsync + auto-is_closed: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: is_closed的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_closed参数 + type: object + type: UniLabJsonCommand + auto-is_open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: is_open的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_open参数 + type: object + type: UniLabJsonCommand + close: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + set_status: + feedback: {} goal: - vessel: vessel - temp: temp - time: time + string: string + goal_default: + string: '' + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: StrSingleInput_Feedback + type: object + goal: + properties: + string: + type: string + required: + - string + title: StrSingleInput_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: StrSingleInput_Result + type: object + required: + - goal + title: StrSingleInput + type: object + type: StrSingleInput + module: unilabos.devices.virtual.virtual_gas_source:VirtualGasSource + status_types: + status: str + type: python + config_info: [] + description: Virtual gas source + handles: + - data_key: fluid_out + data_source: executor + data_type: fluid + description: 气源出气口 + handler_key: gassource + io_type: source + label: gassource + side: SOUTH + icon: '' + init_param_schema: + config: + properties: + config: + type: string + device_id: + type: string + required: [] + type: object + data: + properties: + status: + type: string + required: + - status + type: object + version: 1.0.0 +virtual_heatchill: + category: + - virtual_device + class: + action_value_mappings: + auto-cleanup: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: cleanup的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: cleanup参数 + type: object + type: UniLabJsonCommandAsync + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: initialize的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize参数 + type: object + type: UniLabJsonCommandAsync + heat_chill: + feedback: + status: status + goal: + purpose: purpose stir: stir stir_speed: stir_speed - purpose: purpose - feedback: - status: status - result: - success: success - heat_chill_start: - type: HeatChillStart - goal: - vessel: vessel temp: temp - purpose: purpose - feedback: - status: status + time: time + vessel: vessel + goal_default: + pressure: '' + purpose: '' + reflux_solvent: '' + stir: false + stir_speed: 0.0 + temp: 0.0 + temp_spec: '' + time: '' + time_spec: '' + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] result: success: success + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: HeatChill_Feedback + type: object + goal: + properties: + pressure: + type: string + purpose: + type: string + reflux_solvent: + type: string + stir: + type: boolean + stir_speed: + type: number + temp: + type: number + temp_spec: + type: string + time: + type: string + time_spec: + type: string + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + - temp + - time + - temp_spec + - time_spec + - pressure + - reflux_solvent + - stir + - stir_speed + - purpose + title: HeatChill_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: HeatChill_Result + type: object + required: + - goal + title: HeatChill + type: object + type: HeatChill + heat_chill_start: + feedback: + status: status + goal: + purpose: purpose + temp: temp + vessel: vessel + goal_default: + purpose: '' + temp: 0.0 + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: HeatChillStart_Feedback + type: object + goal: + properties: + purpose: + type: string + temp: + type: number + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + - temp + - purpose + title: HeatChillStart_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: HeatChillStart_Result + type: object + required: + - goal + title: HeatChillStart + type: object + type: HeatChillStart heat_chill_stop: - type: HeatChillStop + feedback: + status: status goal: vessel: vessel - feedback: - status: status + goal_default: + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] result: success: success - handles: - - handler_key: heatchill - label: heatchill - data_type: mechanical - side: NORTH - io_type: source - data_source: handle - data_key: vessel - description: "加热/冷却器的物理连接口" - schema: - type: object - properties: - port: - type: string - default: "VIRTUAL" - max_temp: - type: number - default: 200.0 - min_temp: - type: number - default: -80 - max_stir_speed: - type: number - default: 1000.0 - additionalProperties: false - -virtual_transfer_pump: - description: Virtual Transfer Pump for TransferProtocol Testing (Syringe-style) - icon: Pump.webp - class: - module: unilabos.devices.virtual.virtual_transferpump:VirtualTransferPump - type: python + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: HeatChillStop_Feedback + type: object + goal: + properties: + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + title: HeatChillStop_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: HeatChillStop_Result + type: object + required: + - goal + title: HeatChillStop + type: object + type: HeatChillStop + module: unilabos.devices.virtual.virtual_heatchill:VirtualHeatChill status_types: - status: String - current_volume: Float64 - max_volume: Float64 - transfer_rate: Float64 - position: Float64 + is_stirring: bool + max_stir_speed: float + max_temp: float + min_temp: float + operation_mode: str + progress: float + remaining_time: float + status: str + stir_speed: float + type: python + config_info: [] + description: Virtual HeatChill for HeatChillProtocol Testing + handles: + - data_key: vessel + data_source: handle + data_type: mechanical + description: 加热/冷却器的物理连接口 + handler_key: heatchill + io_type: source + label: heatchill + side: NORTH + icon: Heater.webp + init_param_schema: + config: + properties: + config: + type: object + device_id: + type: string + required: [] + type: object + data: + properties: + is_stirring: + type: boolean + max_stir_speed: + type: number + max_temp: + type: number + min_temp: + type: number + operation_mode: + type: string + progress: + type: number + remaining_time: + type: number + status: + type: string + stir_speed: + type: number + required: + - status + - operation_mode + - is_stirring + - stir_speed + - remaining_time + - progress + - max_temp + - min_temp + - max_stir_speed + type: object + version: 1.0.0 +virtual_multiway_valve: + category: + - virtual_device + class: action_value_mappings: - transfer: - type: Transfer + auto-close: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: close的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: close参数 + type: object + type: UniLabJsonCommand + auto-is_at_port: + feedback: {} + goal: {} + goal_default: + port_number: null + handles: [] + result: {} + schema: + description: is_at_port的参数schema + properties: + feedback: {} + goal: + properties: + port_number: + type: integer + required: + - port_number + type: object + result: {} + required: + - goal + title: is_at_port参数 + type: object + type: UniLabJsonCommand + auto-is_at_position: + feedback: {} + goal: {} + goal_default: + position: null + handles: [] + result: {} + schema: + description: is_at_position的参数schema + properties: + feedback: {} + goal: + properties: + position: + type: integer + required: + - position + type: object + result: {} + required: + - goal + title: is_at_position参数 + type: object + type: UniLabJsonCommand + auto-is_at_pump_position: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: is_at_pump_position的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_at_pump_position参数 + type: object + type: UniLabJsonCommand + auto-open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: open参数 + type: object + type: UniLabJsonCommand + auto-reset: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: reset的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: reset参数 + type: object + type: UniLabJsonCommand + auto-set_to_port: + feedback: {} + goal: {} + goal_default: + port_number: null + handles: [] + result: {} + schema: + description: set_to_port的参数schema + properties: + feedback: {} + goal: + properties: + port_number: + type: integer + required: + - port_number + type: object + result: {} + required: + - goal + title: set_to_port参数 + type: object + type: UniLabJsonCommand + auto-set_to_pump_position: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: set_to_pump_position的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: set_to_pump_position参数 + type: object + type: UniLabJsonCommand + auto-switch_between_pump_and_port: + feedback: {} + goal: {} + goal_default: + port_number: null + handles: [] + result: {} + schema: + description: switch_between_pump_and_port的参数schema + properties: + feedback: {} + goal: + properties: + port_number: + type: integer + required: + - port_number + type: object + result: {} + required: + - goal + title: switch_between_pump_and_port参数 + type: object + type: UniLabJsonCommand + set_position: + feedback: {} + goal: + command: command + goal_default: + command: '' + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + set_valve_position: + feedback: {} + goal: + command: command + goal_default: + command: '' + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.virtual.virtual_multiway_valve:VirtualMultiwayValve + status_types: + available_ports: dict + available_positions: list + current_port: str + current_position: int + flow_path: str + info: dict + status: str + target_position: int + valve_position: int + valve_state: str + type: python + config_info: [] + description: Virtual 8-Way Valve for flow direction control + handles: + - data_key: fluid_in + data_source: handle + data_type: fluid + description: 八通阀门进液口 + handler_key: transferpump + io_type: target + label: transferpump + side: NORTH + - data_key: fluid_port_1 + data_source: executor + data_type: fluid + description: 八通阀门端口1 + handler_key: 1 + io_type: source + label: 1 + side: NORTH + - data_key: fluid_port_2 + data_source: executor + data_type: fluid + description: 八通阀门端口2 + handler_key: 2 + io_type: source + label: 2 + side: EAST + - data_key: fluid_port_3 + data_source: executor + data_type: fluid + description: 八通阀门端口3 + handler_key: 3 + io_type: source + label: 3 + side: EAST + - data_key: fluid_port_4 + data_source: executor + data_type: fluid + description: 八通阀门端口4 + handler_key: 4 + io_type: source + label: 4 + side: SOUTH + - data_key: fluid_port_5 + data_source: executor + data_type: fluid + description: 八通阀门端口5 + handler_key: 5 + io_type: source + label: 5 + side: SOUTH + - data_key: fluid_port_6 + data_source: executor + data_type: fluid + description: 八通阀门端口6 + handler_key: 6 + io_type: source + label: 6 + side: WEST + - data_key: fluid_port_7 + data_source: executor + data_type: fluid + description: 八通阀门端口7 + handler_key: 7 + io_type: source + label: 7 + side: WEST + - data_key: fluid_port_8 + data_source: executor + data_type: fluid + description: 八通阀门端口8 + handler_key: 8 + io_type: source + label: 8 + side: NORTH + icon: EightPipeline.webp + init_param_schema: + config: + properties: + port: + default: VIRTUAL + type: string + positions: + default: 8 + type: integer + required: [] + type: object + data: + properties: + available_ports: + type: object + available_positions: + type: array + current_port: + type: string + current_position: + type: integer + flow_path: + type: string + info: + type: object + status: + type: string + target_position: + type: integer + valve_position: + type: integer + valve_state: + type: string + required: + - status + - valve_state + - current_position + - target_position + - current_port + - valve_position + - available_positions + - available_ports + - flow_path + - info + type: object + version: 1.0.0 +virtual_pump: + category: + - virtual_device + class: + action_value_mappings: + auto-clean_vessel: + feedback: {} + goal: {} + goal_default: + repeats: 1 + solvent: null + temp: null + vessel: null + volume: null + handles: [] + result: {} + schema: + description: clean_vessel的参数schema + properties: + feedback: {} + goal: + properties: + repeats: + default: 1 + type: integer + solvent: + type: string + temp: + type: number + vessel: + type: string + volume: + type: number + required: + - vessel + - solvent + - volume + - temp + type: object + result: {} + required: + - goal + title: clean_vessel参数 + type: object + type: UniLabJsonCommandAsync + auto-cleanup: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: cleanup的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: cleanup参数 + type: object + type: UniLabJsonCommandAsync + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: initialize的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize参数 + type: object + type: UniLabJsonCommandAsync + set_valve_position: + feedback: + status: status + goal: + float_in: valve_position + goal_default: + float_in: 0.0 + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: FloatSingleInput_Feedback + type: object + goal: + properties: + float_in: + type: number + required: + - float_in + title: FloatSingleInput_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: FloatSingleInput_Result + type: object + required: + - goal + title: FloatSingleInput + type: object + type: FloatSingleInput + transfer: + feedback: + status: status goal: - from_vessel: from_vessel - to_vessel: to_vessel - volume: volume amount: amount - time: time - viscous: viscous + from_vessel: from_vessel + rinsing_repeats: rinsing_repeats rinsing_solvent: rinsing_solvent rinsing_volume: rinsing_volume - rinsing_repeats: rinsing_repeats solid: solid - feedback: - progress: progress - transferred_volume: transferred_volume - current_status: current_status - result: - success: success - message: message - set_position: - type: SetPumpPosition - goal: - position: position - max_velocity: max_velocity - feedback: - status: status - current_position: current_position - progress: progress - result: - success: success - message: message - handles: - - handler_key: transferpump - label: transferpump - data_type: fluid - side: SOUTH - io_type: source - data_source: handle - data_key: fluid_port - description: "注射器式转移泵的连接口" - schema: - type: object - properties: - port: - type: string - default: "VIRTUAL" - description: "通信端口" - max_volume: - type: number - default: 50.0 - description: "最大注射器容量 (mL)" - transfer_rate: - type: number - default: 5.0 - description: "默认转移速率 (mL/s)" - additionalProperties: false - -virtual_column: - description: Virtual Column Chromatography Device for RunColumn Protocol Testing - class: - module: unilabos.devices.virtual.virtual_column:VirtualColumn - type: python - status_types: - status: String - column_state: String - current_flow_rate: Float64 - max_flow_rate: Float64 - column_length: Float64 - column_diameter: Float64 - processed_volume: Float64 - progress: Float64 - current_status: String - action_value_mappings: - run_column: - type: RunColumn - goal: - from_vessel: from_vessel + time: time to_vessel: to_vessel - column: column - feedback: - progress: progress - processed_volume: processed_volume - current_status: current_status + viscous: viscous + volume: volume + goal_default: + amount: '' + event: '' + flowrate: 0.0 + from_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + rate_spec: '' + rinsing_repeats: 0 + rinsing_solvent: '' + rinsing_volume: 0.0 + solid: false + through: '' + time: 0.0 + to_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + transfer_flowrate: 0.0 + viscous: false + volume: 0.0 + handles: [] result: success: success - message: current_status - return_info: current_status - handles: - - handler_key: columnin - label: columnin - data_type: transport - side: WEST - io_type: target - data_source: handle - data_key: from_vessel - description: "样品输入口" - - handler_key: columnout - label: columnout - data_type: transport - side: EAST - io_type: source - data_source: handle - data_key: to_vessel - description: "产物输出口" - schema: - type: object - properties: - port: - type: string - default: "VIRTUAL" - max_flow_rate: - type: number - default: 10.0 - column_length: - type: number - default: 25.0 - column_diameter: - type: number - default: 2.0 - additionalProperties: false - -virtual_rotavap: - description: Virtual Rotary Evaporator for EvaporateProtocol Testing - icon: Rotaryevaporator.webp - class: - module: unilabos.devices.virtual.virtual_rotavap:VirtualRotavap - type: python + schema: + description: '' + properties: + feedback: + properties: + current_device: + type: string + status: + type: string + time_remaining: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + time_spent: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + required: + - status + - current_device + - time_spent + - time_remaining + title: PumpTransfer_Feedback + type: object + goal: + properties: + amount: + type: string + event: + type: string + flowrate: + type: number + from_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + rate_spec: + type: string + rinsing_repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + rinsing_solvent: + type: string + rinsing_volume: + type: number + solid: + type: boolean + through: + type: string + time: + type: number + to_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + transfer_flowrate: + type: number + viscous: + type: boolean + volume: + type: number + required: + - from_vessel + - to_vessel + - volume + - amount + - time + - viscous + - rinsing_solvent + - rinsing_volume + - rinsing_repeats + - solid + - flowrate + - transfer_flowrate + - rate_spec + - event + - through + title: PumpTransfer_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: PumpTransfer_Result + type: object + required: + - goal + title: PumpTransfer + type: object + type: PumpTransfer + module: unilabos.devices.virtual.virtual_pump:VirtualPump status_types: - status: String - rotavap_state: String - current_temp: Float64 - rotation_speed: Float64 - vacuum_pressure: Float64 - evaporated_volume: Float64 - progress: Float64 - remaining_time: Float64 - message: String - max_temp: Float64 - max_rotation_speed: Float64 + current_status: str + current_volume: float + from_vessel: str + max_volume: float + progress: float + status: str + to_vessel: str + transfer_rate: float + transferred_volume: float + valve_position: int + type: python + config_info: [] + description: Virtual Pump for PumpTransferProtocol Testing + handles: + - data_key: fluid_in + data_source: handle + data_type: fluid + description: 泵的输出口 + handler_key: pumpio + io_type: source + label: pumpio + icon: '' + init_param_schema: + config: + properties: + config: + type: object + device_id: + type: string + required: [] + type: object + data: + properties: + current_status: + type: string + current_volume: + type: number + from_vessel: + type: string + max_volume: + type: number + progress: + type: number + status: + type: string + to_vessel: + type: string + transfer_rate: + type: number + transferred_volume: + type: number + valve_position: + type: integer + required: + - status + - valve_position + - current_volume + - max_volume + - transfer_rate + - from_vessel + - to_vessel + - progress + - transferred_volume + - current_status + type: object + version: 1.0.0 +virtual_rotavap: + category: + - virtual_device + class: action_value_mappings: + auto-cleanup: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: cleanup的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: cleanup参数 + type: object + type: UniLabJsonCommandAsync + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: initialize的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize参数 + type: object + type: UniLabJsonCommandAsync evaporate: - type: Evaporate + feedback: + current_device: current_device + status: status goal: - vessel: vessel pressure: pressure + stir_speed: stir_speed temp: temp time: time - stir_speed: stir_speed - feedback: - progress: progress - current_temp: current_temp - evaporated_volume: evaporated_volume - status: status + vessel: vessel + goal_default: + pressure: 0.0 + solvent: '' + stir_speed: 0.0 + temp: 0.0 + time: '' + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] result: - success: success message: message - handles: - - handler_key: sample_in - label: sample_in - data_type: fluid - side: NORTH - io_type: target - data_source: handle - data_key: vessel_in - description: "样品连接口" - - handler_key: product_out - label: product_out - data_type: fluid - side: SOUTH - io_type: source - data_source: handle - data_key: product_out - description: "浓缩产物出口" - - handler_key: solvent_out - label: solvent_out - data_type: fluid - side: EAST - io_type: source - data_source: handle - data_key: solvent_out - description: "冷凝溶剂出口" - schema: - type: object - properties: - port: - type: string - default: "VIRTUAL" - max_temp: - type: number - default: 180.0 - max_rotation_speed: - type: number - default: 280.0 - additionalProperties: false - -virtual_separator: - description: Virtual Separator for SeparateProtocol Testing - icon: Separator.webp - class: - module: unilabos.devices.virtual.virtual_separator:VirtualSeparator - type: python + success: success + schema: + description: '' + properties: + feedback: + properties: + current_device: + type: string + status: + type: string + time_remaining: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + time_spent: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + required: + - status + - current_device + - time_spent + - time_remaining + title: Evaporate_Feedback + type: object + goal: + properties: + pressure: + type: number + solvent: + type: string + stir_speed: + type: number + temp: + type: number + time: + type: string + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + - pressure + - temp + - time + - stir_speed + - solvent + title: Evaporate_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: Evaporate_Result + type: object + required: + - goal + title: Evaporate + type: object + type: Evaporate + module: unilabos.devices.virtual.virtual_rotavap:VirtualRotavap status_types: - status: String - separator_state: String - volume: Float64 - has_phases: Bool - phase_separation: Bool - stir_speed: Float64 - settling_time: Float64 - progress: Float64 - message: String + current_temp: float + evaporated_volume: float + max_rotation_speed: float + max_temp: float + message: str + progress: float + remaining_time: float + rotation_speed: float + rotavap_state: str + status: str + vacuum_pressure: float + type: python + config_info: [] + description: Virtual Rotary Evaporator for EvaporateProtocol Testing + handles: + - data_key: vessel_in + data_source: handle + data_type: fluid + description: 样品连接口 + handler_key: samplein + io_type: target + label: sample_in + side: NORTH + - data_key: product_out + data_source: handle + data_type: fluid + description: 浓缩产物出口 + handler_key: productout + io_type: source + label: product_out + side: SOUTH + - data_key: solvent_out + data_source: handle + data_type: fluid + description: 冷凝溶剂出口 + handler_key: solventout + io_type: source + label: solvent_out + side: EAST + icon: Rotaryevaporator.webp + init_param_schema: + config: + properties: + config: + type: string + device_id: + type: string + required: [] + type: object + data: + properties: + current_temp: + type: number + evaporated_volume: + type: number + max_rotation_speed: + type: number + max_temp: + type: number + message: + type: string + progress: + type: number + remaining_time: + type: number + rotation_speed: + type: number + rotavap_state: + type: string + status: + type: string + vacuum_pressure: + type: number + required: + - status + - rotavap_state + - current_temp + - rotation_speed + - vacuum_pressure + - evaporated_volume + - progress + - message + - max_temp + - max_rotation_speed + - remaining_time + type: object + version: 1.0.0 +virtual_separator: + category: + - virtual_device + class: action_value_mappings: + auto-cleanup: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: cleanup的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: cleanup参数 + type: object + type: UniLabJsonCommandAsync + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: initialize的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize参数 + type: object + type: UniLabJsonCommandAsync separate: - type: Separate + feedback: + current_status: status + progress: progress goal: - purpose: purpose - product_phase: product_phase from_vessel: from_vessel + product_phase: product_phase + purpose: purpose + repeats: repeats separation_vessel: separation_vessel - to_vessel: to_vessel - waste_phase_to_vessel: waste_phase_to_vessel + settling_time: settling_time solvent: solvent solvent_volume: solvent_volume - through: through - repeats: repeats - stir_time: stir_time stir_speed: stir_speed - settling_time: settling_time - feedback: - progress: progress - current_status: status + stir_time: stir_time + through: through + to_vessel: to_vessel + waste_phase_to_vessel: waste_phase_to_vessel + goal_default: + from_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + product_phase: '' + product_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + purpose: '' + repeats: 0 + separation_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + settling_time: 0.0 + solvent: '' + solvent_volume: '' + stir_speed: 0.0 + stir_time: 0.0 + through: '' + to_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + volume: '' + waste_phase_to_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + waste_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] + result: + message: message + success: success + schema: + description: '' + properties: + feedback: + properties: + progress: + type: number + status: + type: string + required: + - status + - progress + title: Separate_Feedback + type: object + goal: + properties: + from_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + product_phase: + type: string + product_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + purpose: + type: string + repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + separation_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + settling_time: + type: number + solvent: + type: string + solvent_volume: + type: string + stir_speed: + type: number + stir_time: + type: number + through: + type: string + to_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + volume: + type: string + waste_phase_to_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + waste_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + - purpose + - product_phase + - from_vessel + - separation_vessel + - to_vessel + - waste_phase_to_vessel + - product_vessel + - waste_vessel + - solvent + - solvent_volume + - volume + - through + - repeats + - stir_time + - stir_speed + - settling_time + title: Separate_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Separate_Result + type: object + required: + - goal + title: Separate + type: object + type: Separate + module: unilabos.devices.virtual.virtual_separator:VirtualSeparator + status_types: + has_phases: bool + message: str + phase_separation: bool + progress: float + separator_state: str + settling_time: float + status: str + stir_speed: float + volume: float + type: python + config_info: [] + description: Virtual Separator for SeparateProtocol Testing + handles: + - data_key: from_vessel + data_source: handle + data_type: fluid + description: 需要分离的混合液体输入口 + handler_key: separatorin + io_type: target + label: separator_in + side: NORTH + - data_key: bottom_outlet + data_source: executor + data_type: fluid + description: 下相(重相)液体输出口 + handler_key: bottomphaseout + io_type: source + label: bottom_phase_out + side: SOUTH + - data_key: top_outlet + data_source: executor + data_type: fluid + description: 上相(轻相)液体输出口 + handler_key: topphaseout + io_type: source + label: top_phase_out + side: EAST + - data_key: mechanical_port + data_source: handle + data_type: mechanical + description: 用于连接搅拌器等机械设备的接口 + handler_key: bind + io_type: target + label: bind + side: WEST + icon: Separator.webp + init_param_schema: + config: + properties: + config: + type: string + device_id: + type: string + required: [] + type: object + data: + properties: + has_phases: + type: boolean + message: + type: string + phase_separation: + type: boolean + progress: + type: number + separator_state: + type: string + settling_time: + type: number + status: + type: string + stir_speed: + type: number + volume: + type: number + required: + - status + - separator_state + - volume + - has_phases + - phase_separation + - stir_speed + - settling_time + - progress + - message + type: object + version: 1.0.0 +virtual_solenoid_valve: + category: + - virtual_device + class: + action_value_mappings: + auto-cleanup: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: cleanup的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: cleanup参数 + type: object + type: UniLabJsonCommandAsync + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: initialize的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize参数 + type: object + type: UniLabJsonCommandAsync + auto-is_closed: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: is_closed的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_closed参数 + type: object + type: UniLabJsonCommand + auto-reset: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: reset的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: reset参数 + type: object + type: UniLabJsonCommandAsync + auto-toggle: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: toggle的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: toggle参数 + type: object + type: UniLabJsonCommand + close: + feedback: {} + goal: + command: CLOSED + goal_default: {} + handles: [] result: success: success + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + set_status: + feedback: {} + goal: + string: string + goal_default: + string: '' + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: StrSingleInput_Feedback + type: object + goal: + properties: + string: + type: string + required: + - string + title: StrSingleInput_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: StrSingleInput_Result + type: object + required: + - goal + title: StrSingleInput + type: object + type: StrSingleInput + set_valve_position: + feedback: {} + goal: + command: command + goal_default: + command: '' + handles: [] + result: message: message + success: success + valve_position: valve_position + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: SendCmd_Feedback + type: object + goal: + properties: + command: + type: string + required: + - command + title: SendCmd_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: SendCmd_Result + type: object + required: + - goal + title: SendCmd + type: object + type: SendCmd + module: unilabos.devices.virtual.virtual_solenoid_valve:VirtualSolenoidValve + status_types: + is_open: bool + state: dict + status: str + valve_position: str + valve_state: str + type: python + config_info: [] + description: Virtual Solenoid Valve for simple on/off flow control handles: - - handler_key: separator_in - label: separator_in + - data_key: fluid_port_in + data_source: handle data_type: fluid + description: 电磁阀的进液口 + handler_key: in + io_type: target + label: in side: NORTH - io_type: target + - data_key: fluid_port_out data_source: handle - data_key: from_vessel - description: "需要分离的混合液体输入口" - - handler_key: bottom_phase_out - label: bottom_phase_out data_type: fluid + description: 电磁阀的出液口 + handler_key: out + io_type: source + label: out side: SOUTH - io_type: source + icon: '' + init_param_schema: + config: + properties: + config: + type: object + device_id: + type: string + required: [] + type: object + data: + properties: + is_open: + type: boolean + state: + type: object + status: + type: string + valve_position: + type: string + valve_state: + type: string + required: + - status + - valve_state + - is_open + - valve_position + - state + type: object + version: 1.0.0 +virtual_solid_dispenser: + category: + - virtual_device + class: + action_value_mappings: + add_solid: + feedback: + current_status: status + progress: progress + goal: + equiv: equiv + event: event + mass: mass + mol: mol + purpose: purpose + rate_spec: rate_spec + ratio: ratio + reagent: reagent + vessel: vessel + goal_default: + amount: '' + equiv: '' + event: '' + mass: '' + mol: '' + purpose: '' + rate_spec: '' + ratio: '' + reagent: '' + stir: false + stir_speed: 0.0 + time: '' + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + viscous: false + volume: '' + handles: [] + result: + message: message + return_info: return_info + success: success + schema: + description: '' + properties: + feedback: + properties: + current_status: + type: string + progress: + type: number + required: + - progress + - current_status + title: Add_Feedback + type: object + goal: + properties: + amount: + type: string + equiv: + type: string + event: + type: string + mass: + type: string + mol: + type: string + purpose: + type: string + rate_spec: + type: string + ratio: + type: string + reagent: + type: string + stir: + type: boolean + stir_speed: + type: number + time: + type: string + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + viscous: + type: boolean + volume: + type: string + required: + - vessel + - reagent + - volume + - mass + - amount + - time + - stir + - stir_speed + - viscous + - purpose + - event + - mol + - rate_spec + - equiv + - ratio + title: Add_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Add_Result + type: object + required: + - goal + title: Add + type: object + type: Add + auto-cleanup: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: cleanup的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: cleanup参数 + type: object + type: UniLabJsonCommandAsync + auto-find_solid_reagent_bottle: + feedback: {} + goal: {} + goal_default: + reagent_name: null + handles: [] + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + reagent_name: + type: string + required: + - reagent_name + type: object + result: {} + required: + - goal + title: find_solid_reagent_bottle参数 + type: object + type: UniLabJsonCommand + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: initialize的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize参数 + type: object + type: UniLabJsonCommandAsync + auto-parse_mass_string: + feedback: {} + goal: {} + goal_default: + mass_str: null + handles: [] + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + mass_str: + type: string + required: + - mass_str + type: object + result: {} + required: + - goal + title: parse_mass_string参数 + type: object + type: UniLabJsonCommand + auto-parse_mol_string: + feedback: {} + goal: {} + goal_default: + mol_str: null + handles: [] + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + mol_str: + type: string + required: + - mol_str + type: object + result: {} + required: + - goal + title: parse_mol_string参数 + type: object + type: UniLabJsonCommand + module: unilabos.devices.virtual.virtual_solid_dispenser:VirtualSolidDispenser + status_types: + current_reagent: str + device_info: dict + dispensed_amount: float + status: str + total_operations: int + type: python + config_info: [] + description: Virtual Solid Dispenser for Add Protocol Testing - supports mass and + molar additions + handles: + - data_key: solid_out data_source: executor - data_key: bottom_outlet - description: "下相(重相)液体输出口" - - handler_key: top_phase_out - label: top_phase_out - data_type: fluid - side: EAST + data_type: resource + description: 固体试剂输出口 + handler_key: SolidOut io_type: source - data_source: executor - data_key: top_outlet - description: "上相(轻相)液体输出口" - - handler_key: bind - label: bind + label: SolidOut + side: SOUTH + - data_key: solid_in + data_source: handle + data_type: resource + description: 固体试剂输入口(连接试剂瓶) + handler_key: SolidIn io_type: target + label: SolidIn + side: NORTH + icon: '' + init_param_schema: + config: + properties: + config: + type: object + device_id: + type: string + required: [] + type: object + data: + properties: + current_reagent: + type: string + device_info: + type: object + dispensed_amount: + type: number + status: + type: string + total_operations: + type: integer + required: + - status + - current_reagent + - dispensed_amount + - total_operations + - device_info + type: object + version: 1.0.0 +virtual_stirrer: + category: + - virtual_device + class: + action_value_mappings: + auto-cleanup: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: cleanup的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: cleanup参数 + type: object + type: UniLabJsonCommandAsync + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: initialize的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize参数 + type: object + type: UniLabJsonCommandAsync + start_stir: + feedback: + status: status + goal: + purpose: purpose + stir_speed: stir_speed + vessel: vessel + goal_default: + purpose: '' + stir_speed: 0.0 + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: + current_speed: + type: number + current_status: + type: string + progress: + type: number + required: + - progress + - current_speed + - current_status + title: StartStir_Feedback + type: object + goal: + properties: + purpose: + type: string + stir_speed: + type: number + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + - stir_speed + - purpose + title: StartStir_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: StartStir_Result + type: object + required: + - goal + title: StartStir + type: object + type: StartStir + stir: + feedback: + status: status + goal: + settling_time: settling_time + stir_speed: stir_speed + stir_time: stir_time + goal_default: + event: '' + settling_time: '' + stir_speed: 0.0 + stir_time: 0.0 + time: '' + time_spec: '' + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: Stir_Feedback + type: object + goal: + properties: + event: + type: string + settling_time: + type: string + stir_speed: + type: number + stir_time: + type: number + time: + type: string + time_spec: + type: string + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + - time + - event + - time_spec + - stir_time + - stir_speed + - settling_time + title: Stir_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Stir_Result + type: object + required: + - goal + title: Stir + type: object + type: Stir + stop_stir: + feedback: + status: status + goal: + vessel: vessel + goal_default: + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: [] + result: + success: success + schema: + description: '' + properties: + feedback: + properties: + current_status: + type: string + progress: + type: number + required: + - progress + - current_status + title: StopStir_Feedback + type: object + goal: + properties: + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + title: StopStir_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: StopStir_Result + type: object + required: + - goal + title: StopStir + type: object + type: StopStir + module: unilabos.devices.virtual.virtual_stirrer:VirtualStirrer + status_types: + current_speed: float + current_vessel: str + device_info: dict + is_stirring: bool + max_speed: float + min_speed: float + operation_mode: str + remaining_time: float + status: str + type: python + config_info: [] + description: Virtual Stirrer for StirProtocol Testing + handles: + - data_key: vessel + data_source: handle data_type: mechanical - side: WEST + description: 搅拌器的机械连接口 + handler_key: stirrer + io_type: source + label: stirrer + side: NORTH + icon: Stirrer.webp + init_param_schema: + config: + properties: + config: + type: object + device_id: + type: string + required: [] + type: object + data: + properties: + current_speed: + type: number + current_vessel: + type: string + device_info: + type: object + is_stirring: + type: boolean + max_speed: + type: number + min_speed: + type: number + operation_mode: + type: string + remaining_time: + type: number + status: + type: string + required: + - status + - operation_mode + - current_vessel + - current_speed + - is_stirring + - remaining_time + - max_speed + - min_speed + - device_info + type: object + version: 1.0.0 +virtual_transfer_pump: + category: + - virtual_device + class: + action_value_mappings: + auto-aspirate: + feedback: {} + goal: {} + goal_default: + velocity: null + volume: null + handles: [] + result: {} + schema: + description: aspirate的参数schema + properties: + feedback: {} + goal: + properties: + velocity: + type: number + volume: + type: number + required: + - volume + type: object + result: {} + required: + - goal + title: aspirate参数 + type: object + type: UniLabJsonCommandAsync + auto-cleanup: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: cleanup的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: cleanup参数 + type: object + type: UniLabJsonCommandAsync + auto-dispense: + feedback: {} + goal: {} + goal_default: + velocity: null + volume: null + handles: [] + result: {} + schema: + description: dispense的参数schema + properties: + feedback: {} + goal: + properties: + velocity: + type: number + volume: + type: number + required: + - volume + type: object + result: {} + required: + - goal + title: dispense参数 + type: object + type: UniLabJsonCommandAsync + auto-empty_syringe: + feedback: {} + goal: {} + goal_default: + velocity: null + handles: [] + result: {} + schema: + description: empty_syringe的参数schema + properties: + feedback: {} + goal: + properties: + velocity: + type: number + required: [] + type: object + result: {} + required: + - goal + title: empty_syringe参数 + type: object + type: UniLabJsonCommandAsync + auto-fill_syringe: + feedback: {} + goal: {} + goal_default: + velocity: null + handles: [] + result: {} + schema: + description: fill_syringe的参数schema + properties: + feedback: {} + goal: + properties: + velocity: + type: number + required: [] + type: object + result: {} + required: + - goal + title: fill_syringe参数 + type: object + type: UniLabJsonCommandAsync + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: initialize的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize参数 + type: object + type: UniLabJsonCommandAsync + auto-is_empty: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: is_empty的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_empty参数 + type: object + type: UniLabJsonCommand + auto-is_full: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: is_full的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_full参数 + type: object + type: UniLabJsonCommand + auto-pull_plunger: + feedback: {} + goal: {} + goal_default: + velocity: null + volume: null + handles: [] + result: {} + schema: + description: pull_plunger的参数schema + properties: + feedback: {} + goal: + properties: + velocity: + type: number + volume: + type: number + required: + - volume + type: object + result: {} + required: + - goal + title: pull_plunger参数 + type: object + type: UniLabJsonCommandAsync + auto-push_plunger: + feedback: {} + goal: {} + goal_default: + velocity: null + volume: null + handles: [] + result: {} + schema: + description: push_plunger的参数schema + properties: + feedback: {} + goal: + properties: + velocity: + type: number + volume: + type: number + required: + - volume + type: object + result: {} + required: + - goal + title: push_plunger参数 + type: object + type: UniLabJsonCommandAsync + auto-set_max_velocity: + feedback: {} + goal: {} + goal_default: + velocity: null + handles: [] + result: {} + schema: + description: set_max_velocity的参数schema + properties: + feedback: {} + goal: + properties: + velocity: + type: number + required: + - velocity + type: object + result: {} + required: + - goal + title: set_max_velocity参数 + type: object + type: UniLabJsonCommand + auto-stop_operation: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: stop_operation的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: stop_operation参数 + type: object + type: UniLabJsonCommandAsync + set_position: + feedback: + current_position: current_position + progress: progress + status: status + goal: + max_velocity: max_velocity + position: position + goal_default: + max_velocity: 0.0 + position: 0.0 + handles: [] + result: + message: message + success: success + schema: + description: '' + properties: + feedback: + properties: + current_position: + type: number + progress: + type: number + status: + type: string + required: + - status + - current_position + - progress + title: SetPumpPosition_Feedback + type: object + goal: + properties: + max_velocity: + type: number + position: + type: number + required: + - position + - max_velocity + title: SetPumpPosition_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + - message + title: SetPumpPosition_Result + type: object + required: + - goal + title: SetPumpPosition + type: object + type: SetPumpPosition + transfer: + feedback: + current_status: current_status + progress: progress + transferred_volume: transferred_volume + goal: + amount: amount + from_vessel: from_vessel + rinsing_repeats: rinsing_repeats + rinsing_solvent: rinsing_solvent + rinsing_volume: rinsing_volume + solid: solid + time: time + to_vessel: to_vessel + viscous: viscous + volume: volume + goal_default: + amount: '' + from_vessel: '' + rinsing_repeats: 0 + rinsing_solvent: '' + rinsing_volume: 0.0 + solid: false + time: 0.0 + to_vessel: '' + viscous: false + volume: 0.0 + handles: [] + result: + message: message + success: success + schema: + description: '' + properties: + feedback: + properties: + current_status: + type: string + progress: + type: number + transferred_volume: + type: number + required: + - progress + - transferred_volume + - current_status + title: Transfer_Feedback + type: object + goal: + properties: + amount: + type: string + from_vessel: + type: string + rinsing_repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + rinsing_solvent: + type: string + rinsing_volume: + type: number + solid: + type: boolean + time: + type: number + to_vessel: + type: string + viscous: + type: boolean + volume: + type: number + required: + - from_vessel + - to_vessel + - volume + - amount + - time + - viscous + - rinsing_solvent + - rinsing_volume + - rinsing_repeats + - solid + title: Transfer_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Transfer_Result + type: object + required: + - goal + title: Transfer + type: object + type: Transfer + module: unilabos.devices.virtual.virtual_transferpump:VirtualTransferPump + status_types: + current_volume: float + max_velocity: float + position: float + pump_info: dict + remaining_capacity: float + status: str + transfer_rate: float + type: python + config_info: [] + description: Virtual Transfer Pump for TransferProtocol Testing (Syringe-style) + handles: + - data_key: fluid_port data_source: handle - data_key: mechanical_port - description: "用于连接搅拌器等机械设备的接口" - schema: - type: object - properties: - port: - type: string - default: "VIRTUAL" - volume: - type: number - default: 250.0 - has_phases: - type: boolean - default: true - additionalProperties: false - + data_type: fluid + description: 注射器式转移泵的连接口 + handler_key: transferpump + io_type: source + label: transferpump + side: SOUTH + icon: Pump.webp + init_param_schema: + config: + properties: + config: + type: object + device_id: + type: string + required: [] + type: object + data: + properties: + current_volume: + type: number + max_velocity: + type: number + position: + type: number + pump_info: + type: object + remaining_capacity: + type: number + status: + type: string + transfer_rate: + type: number + required: + - status + - position + - current_volume + - max_velocity + - transfer_rate + - remaining_capacity + - pump_info + type: object + version: 1.0.0 virtual_vacuum_pump: - description: Virtual vacuum pump - icon: Vacuum.webp + category: + - virtual_device class: + action_value_mappings: + auto-cleanup: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: cleanup的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: cleanup参数 + type: object + type: UniLabJsonCommandAsync + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: initialize的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: initialize参数 + type: object + type: UniLabJsonCommandAsync + auto-is_closed: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: is_closed的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_closed参数 + type: object + type: UniLabJsonCommand + auto-is_open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: is_open的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: is_open参数 + type: object + type: UniLabJsonCommand + close: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + open: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + set_status: + feedback: {} + goal: + string: string + goal_default: + string: '' + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: StrSingleInput_Feedback + type: object + goal: + properties: + string: + type: string + required: + - string + title: StrSingleInput_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: StrSingleInput_Result + type: object + required: + - goal + title: StrSingleInput + type: object + type: StrSingleInput module: unilabos.devices.virtual.virtual_vacuum_pump:VirtualVacuumPump - type: python status_types: - status: String - action_value_mappings: - open: - type: EmptyIn - goal: {} - feedback: {} - result: {} - close: - type: EmptyIn - goal: {} - feedback: {} - result: {} - set_status: - type: StrSingleInput - goal: - string: string - feedback: {} - result: {} + status: str + type: python + config_info: [] + description: Virtual vacuum pump handles: - - handler_key: vacuumpump - label: vacuumpump - data_type: fluid - side: SOUTH - io_type: source + - data_key: fluid_in data_source: handle - data_key: fluid_in - description: "真空泵进气口" - schema: - type: object - properties: - port: - type: string - default: "VIRTUAL" - description: "通信端口" - additionalProperties: false - -virtual_gas_source: - description: Virtual gas source - class: - module: unilabos.devices.virtual.virtual_gas_source:VirtualGasSource - type: python - status_types: - status: String - action_value_mappings: - open: - type: EmptyIn - goal: {} - feedback: {} - result: {} - close: - type: EmptyIn - goal: {} - feedback: {} - result: {} - set_status: - type: StrSingleInput - goal: - string: string - feedback: {} - result: {} - handles: - - handler_key: gassource - label: gassource data_type: fluid - side: SOUTH + description: 真空泵进气口 + handler_key: vacuumpump io_type: source - data_source: executor - data_key: fluid_out - description: "气源出气口" - schema: - type: object - properties: - port: - type: string - default: "VIRTUAL" - description: "通信端口" - gas_type: - type: string - default: "nitrogen" - description: "气体类型" - max_pressure: - type: number - default: 5.0 - description: "最大输出压力 (bar)" - additionalProperties: false \ No newline at end of file + label: vacuumpump + side: SOUTH + icon: Vacuum.webp + init_param_schema: + config: + properties: + config: + type: string + device_id: + type: string + required: [] + type: object + data: + properties: + status: + type: string + required: + - status + type: object + version: 1.0.0 diff --git a/unilabos/registry/devices/work_station.yaml b/unilabos/registry/devices/work_station.yaml index c8c0324..c1cc5aa 100644 --- a/unilabos/registry/devices/work_station.yaml +++ b/unilabos/registry/devices/work_station.yaml @@ -1,625 +1,6133 @@ workstation: - description: Workstation + category: + - work_station class: - module: unilabos.ros.nodes.presets.protocol_node:ROS2ProtocolNode - type: ros2 action_value_mappings: - AddProtocol: - type: Add - goal: - vessel: vessel - reagent: reagent - volume: volume - mass: mass - amount: amount - time: time - stir: stir - stir_speed: stir_speed - viscous: viscous - purpose: purpose - feedback: {} - result: {} - handles: - input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: reagent - label: Reagent - data_type: resource - data_source: handle - data_key: reagent - output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - AGVTransferProtocol: - type: AGVTransfer + feedback: {} goal: from_repo: from_repo from_repo_position: from_repo_position to_repo: to_repo to_repo_position: to_repo_position - feedback: {} + goal_default: + from_repo: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + from_repo_position: '' + to_repo: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + to_repo_position: '' + handles: [] result: {} - - CentrifugeProtocol: - type: Centrifuge - goal: - vessel: vessel - speed: speed - time: time - temp: temp + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: AGVTransfer_Feedback + type: object + goal: + properties: + from_repo: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + from_repo_position: + type: string + to_repo: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + to_repo_position: + type: string + required: + - from_repo + - from_repo_position + - to_repo + - to_repo_position + title: AGVTransfer_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: AGVTransfer_Result + type: object + required: + - goal + title: AGVTransfer + type: object + type: AGVTransfer + AddProtocol: feedback: {} - result: {} - handles: - input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel - output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - - CleanProtocol: - type: Clean goal: - vessel: vessel - solvent: solvent - volume: volume - temp: temp - repeats: repeats - feedback: {} - result: {} - handles: - input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: solvent - label: Solvent - data_type: resource - data_source: handle - data_key: solvent - output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - - CleanVesselProtocol: - type: CleanVessel - goal: - vessel: vessel - solvent: solvent - volume: volume - temp: temp - repeats: repeats - feedback: {} - result: {} - handles: - input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: solvent - label: Solvent - data_type: resource - data_source: handle - data_key: solvent - output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - - DissolveProtocol: - type: Dissolve - goal: - vessel: vessel - solvent: solvent - volume: volume amount: amount - temp: temp - time: time + equiv: equiv + event: event + mass: mass + mol: mol + purpose: purpose + rate_spec: rate_spec + ratio: ratio + reagent: reagent + stir: stir stir_speed: stir_speed - feedback: {} - result: {} + time: time + vessel: vessel + viscous: viscous + volume: volume + goal_default: + amount: '' + equiv: '' + event: '' + mass: '' + mol: '' + purpose: '' + rate_spec: '' + ratio: '' + reagent: '' + stir: false + stir_speed: 0.0 + time: '' + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + viscous: false + volume: '' handles: input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: solvent - label: Solvent - data_type: resource - data_source: handle - data_key: solvent + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + - data_key: reagent + data_source: handle + data_type: resource + handler_key: reagent + label: Reagent output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - - EvacuateAndRefillProtocol: - type: EvacuateAndRefill + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + placeholder_keys: + vessel: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: + current_status: + type: string + progress: + type: number + required: + - progress + - current_status + title: Add_Feedback + type: object + goal: + properties: + amount: + type: string + equiv: + type: string + event: + type: string + mass: + type: string + mol: + type: string + purpose: + type: string + rate_spec: + type: string + ratio: + type: string + reagent: + type: string + stir: + type: boolean + stir_speed: + type: number + time: + type: string + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + viscous: + type: boolean + volume: + type: string + required: + - vessel + - reagent + - volume + - mass + - amount + - time + - stir + - stir_speed + - viscous + - purpose + - event + - mol + - rate_spec + - equiv + - ratio + title: Add_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Add_Result + type: object + required: + - goal + title: Add + type: object + type: Add + AdjustPHProtocol: + feedback: {} goal: + ph_value: ph_value + reagent: reagent + settling_time: settling_time + stir: stir + stir_speed: stir_speed + stir_time: stir_time vessel: vessel - gas: gas + volume: volume + goal_default: + ph_value: 0.0 + reagent: '' + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: + input: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + - data_key: reagent + data_source: handle + data_type: resource + handler_key: reagent + label: Reagent + output: + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + placeholder_keys: + vessel: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: + progress: + type: number + status: + type: string + required: + - status + - progress + title: AdjustPH_Feedback + type: object + goal: + properties: + ph_value: + type: number + reagent: + type: string + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + - ph_value + - reagent + title: AdjustPH_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: AdjustPH_Result + type: object + required: + - goal + title: AdjustPH + type: object + type: AdjustPH + CentrifugeProtocol: + feedback: {} + goal: + speed: speed + temp: temp + time: time + vessel: vessel + goal_default: + speed: 0.0 + temp: 0.0 + time: 0.0 + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: + input: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + output: + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + placeholder_keys: + vessel: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: + current_speed: + type: number + current_status: + type: string + current_temp: + type: number + progress: + type: number + required: + - progress + - current_speed + - current_temp + - current_status + title: Centrifuge_Feedback + type: object + goal: + properties: + speed: + type: number + temp: + type: number + time: + type: number + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + - speed + - time + - temp + title: Centrifuge_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Centrifuge_Result + type: object + required: + - goal + title: Centrifuge + type: object + type: Centrifuge + CleanProtocol: + feedback: {} + goal: repeats: repeats - feedback: {} - result: {} + solvent: solvent + temp: temp + vessel: vessel + volume: volume + goal_default: + repeats: 0 + solvent: '' + temp: 0.0 + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + volume: 0.0 handles: input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + - data_key: solvent + data_source: handle + data_type: resource + handler_key: solvent + label: Solvent output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - - EvaporateProtocol: - type: Evaporate + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + placeholder_keys: + vessel: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: + current_device: + type: string + status: + type: string + time_remaining: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + time_spent: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + required: + - status + - current_device + - time_spent + - time_remaining + title: Clean_Feedback + type: object + goal: + properties: + repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + solvent: + type: string + temp: + type: number + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + volume: + type: number + required: + - vessel + - solvent + - volume + - temp + - repeats + title: Clean_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: Clean_Result + type: object + required: + - goal + title: Clean + type: object + type: Clean + CleanVesselProtocol: + feedback: {} goal: + repeats: repeats + solvent: solvent + temp: temp vessel: vessel - pressure: pressure + volume: volume + goal_default: + repeats: 0 + solvent: '' + temp: 0.0 + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + volume: 0.0 + handles: + input: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + - data_key: solvent + data_source: handle + data_type: resource + handler_key: solvent + label: Solvent + output: + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + placeholder_keys: + vessel: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: + progress: + type: number + status: + type: string + required: + - status + - progress + title: CleanVessel_Feedback + type: object + goal: + properties: + repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + solvent: + type: string + temp: + type: number + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + volume: + type: number + required: + - vessel + - solvent + - volume + - temp + - repeats + title: CleanVessel_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: CleanVessel_Result + type: object + required: + - goal + title: CleanVessel + type: object + type: CleanVessel + DissolveProtocol: + feedback: {} + goal: + amount: amount + event: event + mass: mass + mol: mol + reagent: reagent + solvent: solvent + stir_speed: stir_speed temp: temp time: time - stir_speed: stir_speed - feedback: {} - result: {} + vessel: vessel + volume: volume + goal_default: + amount: '' + event: '' + mass: '' + mol: '' + reagent: '' + solvent: '' + stir_speed: 0.0 + temp: '' + time: '' + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + volume: '' handles: input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + - data_key: solvent + data_source: handle + data_type: resource + handler_key: solvent + label: Solvent output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - - FilterProtocol: - type: Filter + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + placeholder_keys: + vessel: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: + progress: + type: number + status: + type: string + required: + - status + - progress + title: Dissolve_Feedback + type: object + goal: + properties: + amount: + type: string + event: + type: string + mass: + type: string + mol: + type: string + reagent: + type: string + solvent: + type: string + stir_speed: + type: number + temp: + type: string + time: + type: string + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + volume: + type: string + required: + - vessel + - solvent + - volume + - amount + - temp + - time + - stir_speed + - mass + - mol + - reagent + - event + title: Dissolve_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Dissolve_Result + type: object + required: + - goal + title: Dissolve + type: object + type: Dissolve + DryProtocol: + feedback: {} goal: + compound: compound vessel: vessel + goal_default: + compound: '' + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: + input: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + output: + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + placeholder_keys: + vessel: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: + progress: + type: number + status: + type: string + required: + - status + - progress + title: Dry_Feedback + type: object + goal: + properties: + compound: + type: string + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - compound + - vessel + title: Dry_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Dry_Result + type: object + required: + - goal + title: Dry + type: object + type: Dry + EvacuateAndRefillProtocol: + feedback: {} + goal: + gas: gas + vessel: vessel + goal_default: + gas: '' + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: + input: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + output: + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + placeholder_keys: + vessel: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: + current_device: + type: string + status: + type: string + time_remaining: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + time_spent: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + required: + - status + - current_device + - time_spent + - time_remaining + title: EvacuateAndRefill_Feedback + type: object + goal: + properties: + gas: + type: string + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + - gas + title: EvacuateAndRefill_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: EvacuateAndRefill_Result + type: object + required: + - goal + title: EvacuateAndRefill + type: object + type: EvacuateAndRefill + EvaporateProtocol: + feedback: {} + goal: + pressure: pressure + solvent: solvent + stir_speed: stir_speed + temp: temp + time: time + vessel: vessel + goal_default: + pressure: 0.0 + solvent: '' + stir_speed: 0.0 + temp: 0.0 + time: '' + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: + input: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: vessel + label: Evaporation Vessel + output: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: vessel_out + label: Evaporation Vessel + placeholder_keys: + vessel: unilabos_nodes + result: {} + schema: + description: '' + properties: + feedback: + properties: + current_device: + type: string + status: + type: string + time_remaining: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + time_spent: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + required: + - status + - current_device + - time_spent + - time_remaining + title: Evaporate_Feedback + type: object + goal: + properties: + pressure: + type: number + solvent: + type: string + stir_speed: + type: number + temp: + type: number + time: + type: string + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + - pressure + - temp + - time + - stir_speed + - solvent + title: Evaporate_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: Evaporate_Result + type: object + required: + - goal + title: Evaporate + type: object + type: Evaporate + FilterProtocol: + feedback: {} + goal: + continue_heatchill: continue_heatchill filtrate_vessel: filtrate_vessel stir: stir stir_speed: stir_speed temp: temp - continue_heatchill: continue_heatchill + vessel: vessel volume: volume - feedback: {} - result: {} + goal_default: + continue_heatchill: false + filtrate_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + stir: false + stir_speed: 0.0 + temp: 0.0 + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + volume: 0.0 handles: input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: filtrate_vessel - label: Filtrate Vessel - data_type: resource - data_source: handle - data_key: vessel + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + - data_key: filtrate_vessel + data_source: handle + data_type: resource + handler_key: filtrate_vessel + label: Filtrate Vessel output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - - handler_key: filtrate_out - label: Filtrate Vessel - data_type: resource - data_source: executor - data_key: vessel - + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + - data_key: filtrate_vessel + data_source: executor + data_type: resource + handler_key: filtrate_out + label: Filtrate Vessel + placeholder_keys: + filtrate_vessel: unilabos_resources + vessel: unilabos_nodes + result: {} + schema: + description: '' + properties: + feedback: + properties: + current_status: + type: string + current_temp: + type: number + filtered_volume: + type: number + progress: + type: number + required: + - progress + - current_temp + - filtered_volume + - current_status + title: Filter_Feedback + type: object + goal: + properties: + continue_heatchill: + type: boolean + filtrate_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + stir: + type: boolean + stir_speed: + type: number + temp: + type: number + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + volume: + type: number + required: + - vessel + - filtrate_vessel + - stir + - stir_speed + - temp + - continue_heatchill + - volume + title: Filter_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Filter_Result + type: object + required: + - goal + title: Filter + type: object + type: Filter FilterThroughProtocol: - type: FilterThrough + feedback: {} goal: - from_vessel: from_vessel - to_vessel: to_vessel - filter_through: filter_through + eluting_repeats: eluting_repeats eluting_solvent: eluting_solvent eluting_volume: eluting_volume - eluting_repeats: eluting_repeats + filter_through: filter_through + from_vessel: from_vessel residence_time: residence_time - feedback: {} - result: {} + to_vessel: to_vessel + goal_default: + eluting_repeats: 0 + eluting_solvent: '' + eluting_volume: 0.0 + filter_through: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + from_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + residence_time: 0.0 + to_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' handles: input: - - handler_key: from_vessel - label: From Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: to_vessel - label: To Vessel - data_type: resource - data_source: executor - data_key: vessel - - handler_key: solvent - label: Eluting Solvent - data_type: resource - data_source: handle - data_key: solvent + - data_key: vessel + data_source: handle + data_type: resource + handler_key: FromVessel + label: From Vessel + - data_key: vessel + data_source: executor + data_type: resource + handler_key: ToVessel + label: To Vessel + - data_key: solvent + data_source: handle + data_type: resource + handler_key: solvent + label: Eluting Solvent output: - - handler_key: from_vessel_out - label: From Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: to_vessel_out - label: To Vessel - data_type: resource - data_source: executor - data_key: vessel - + - data_key: vessel + data_source: handle + data_type: resource + handler_key: FromVesselOut + label: From Vessel + - data_key: vessel + data_source: executor + data_type: resource + handler_key: ToVesselOut + label: To Vessel + placeholder_keys: + from_vessel: unilabos_resources + to_vessel: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: + progress: + type: number + status: + type: string + required: + - status + - progress + title: FilterThrough_Feedback + type: object + goal: + properties: + eluting_repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + eluting_solvent: + type: string + eluting_volume: + type: number + filter_through: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + from_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + residence_time: + type: number + to_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - from_vessel + - to_vessel + - filter_through + - eluting_solvent + - eluting_volume + - eluting_repeats + - residence_time + title: FilterThrough_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: FilterThrough_Result + type: object + required: + - goal + title: FilterThrough + type: object + type: FilterThrough HeatChillProtocol: - type: HeatChill + feedback: {} goal: - vessel: vessel - temp: temp - time: time + pressure: pressure + purpose: purpose + reflux_solvent: reflux_solvent stir: stir stir_speed: stir_speed - purpose: purpose - feedback: {} - result: {} - handles: - input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel - output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - - HeatChillStartProtocol: - type: HeatChillStart - goal: - vessel: vessel temp: temp - purpose: purpose - feedback: {} - result: {} + temp_spec: temp_spec + time: time + time_spec: time_spec + vessel: vessel + goal_default: + pressure: '' + purpose: '' + reflux_solvent: '' + stir: false + stir_speed: 0.0 + temp: 0.0 + temp_spec: '' + time: '' + time_spec: '' + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' handles: input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + placeholder_keys: + vessel: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: HeatChill_Feedback + type: object + goal: + properties: + pressure: + type: string + purpose: + type: string + reflux_solvent: + type: string + stir: + type: boolean + stir_speed: + type: number + temp: + type: number + temp_spec: + type: string + time: + type: string + time_spec: + type: string + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + - temp + - time + - temp_spec + - time_spec + - pressure + - reflux_solvent + - stir + - stir_speed + - purpose + title: HeatChill_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: HeatChill_Result + type: object + required: + - goal + title: HeatChill + type: object + type: HeatChill + HeatChillStartProtocol: + feedback: {} + goal: + purpose: purpose + temp: temp + vessel: vessel + goal_default: + purpose: '' + temp: 0.0 + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: + input: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + output: + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + placeholder_keys: + vessel: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: HeatChillStart_Feedback + type: object + goal: + properties: + purpose: + type: string + temp: + type: number + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + - temp + - purpose + title: HeatChillStart_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: HeatChillStart_Result + type: object + required: + - goal + title: HeatChillStart + type: object + type: HeatChillStart HeatChillStopProtocol: - type: HeatChillStop + feedback: {} goal: vessel: vessel - feedback: {} - result: {} + goal_default: + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' handles: input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - - PumpTransferProtocol: - type: PumpTransfer + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + placeholder_keys: + vessel: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: HeatChillStop_Feedback + type: object + goal: + properties: + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + title: HeatChillStop_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: HeatChillStop_Result + type: object + required: + - goal + title: HeatChillStop + type: object + type: HeatChillStop + HydrogenateProtocol: + feedback: {} goal: - from_vessel: from_vessel - to_vessel: to_vessel - volume: volume - amount: amount + temp: temp time: time - viscous: viscous + vessel: vessel + goal_default: + temp: '' + time: '' + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: + input: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + output: + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + placeholder_keys: + vessel: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: + progress: + type: number + status: + type: string + required: + - status + - progress + title: Hydrogenate_Feedback + type: object + goal: + properties: + temp: + type: string + time: + type: string + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - temp + - time + - vessel + title: Hydrogenate_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Hydrogenate_Result + type: object + required: + - goal + title: Hydrogenate + type: object + type: Hydrogenate + PumpTransferProtocol: + feedback: {} + goal: + amount: amount + event: event + flowrate: flowrate + from_vessel: from_vessel + rate_spec: rate_spec + rinsing_repeats: rinsing_repeats rinsing_solvent: rinsing_solvent rinsing_volume: rinsing_volume - rinsing_repeats: rinsing_repeats solid: solid - feedback: {} - result: {} + through: through + time: time + to_vessel: to_vessel + transfer_flowrate: transfer_flowrate + viscous: viscous + volume: volume + goal_default: + amount: '' + event: '' + flowrate: 0.0 + from_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + rate_spec: '' + rinsing_repeats: 0 + rinsing_solvent: '' + rinsing_volume: 0.0 + solid: false + through: '' + time: 0.0 + to_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + transfer_flowrate: 0.0 + viscous: false + volume: 0.0 handles: input: - - handler_key: from_vessel - label: From Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: to_vessel - label: To Vessel - data_type: resource - data_source: executor - data_key: vessel - - handler_key: solvent - label: Rinsing Solvent - data_type: resource - data_source: handle - data_key: solvent + - data_key: vessel + data_source: handle + data_type: resource + handler_key: FromVessel + label: From Vessel + - data_key: vessel + data_source: executor + data_type: resource + handler_key: ToVessel + label: To Vessel + - data_key: solvent + data_source: handle + data_type: resource + handler_key: solvent + label: Rinsing Solvent output: - - handler_key: from_vessel_out - label: From Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: to_vessel_out - label: To Vessel - data_type: resource - data_source: executor - data_key: vessel - + - data_key: vessel + data_source: handle + data_type: resource + handler_key: FromVesselOut + label: From Vessel + - data_key: vessel + data_source: executor + data_type: resource + handler_key: ToVesselOut + label: To Vessel + placeholder_keys: + from_vessel: unilabos_nodes + to_vessel: unilabos_nodes + result: {} + schema: + description: '' + properties: + feedback: + properties: + current_device: + type: string + status: + type: string + time_remaining: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + time_spent: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + required: + - status + - current_device + - time_spent + - time_remaining + title: PumpTransfer_Feedback + type: object + goal: + properties: + amount: + type: string + event: + type: string + flowrate: + type: number + from_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + rate_spec: + type: string + rinsing_repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + rinsing_solvent: + type: string + rinsing_volume: + type: number + solid: + type: boolean + through: + type: string + time: + type: number + to_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + transfer_flowrate: + type: number + viscous: + type: boolean + volume: + type: number + required: + - from_vessel + - to_vessel + - volume + - amount + - time + - viscous + - rinsing_solvent + - rinsing_volume + - rinsing_repeats + - solid + - flowrate + - transfer_flowrate + - rate_spec + - event + - through + title: PumpTransfer_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: PumpTransfer_Result + type: object + required: + - goal + title: PumpTransfer + type: object + type: PumpTransfer + RecrystallizeProtocol: + feedback: {} + goal: + ratio: ratio + solvent1: solvent1 + solvent2: solvent2 + vessel: vessel + volume: volume + goal_default: + ratio: '' + solvent1: '' + solvent2: '' + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + volume: '' + handles: + input: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + - data_key: solvent1 + data_source: handle + data_type: resource + handler_key: solvent1 + label: Solvent 1 + - data_key: solvent2 + data_source: handle + data_type: resource + handler_key: solvent2 + label: Solvent 2 + output: + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + placeholder_keys: + vessel: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: + progress: + type: number + status: + type: string + required: + - status + - progress + title: Recrystallize_Feedback + type: object + goal: + properties: + ratio: + type: string + solvent1: + type: string + solvent2: + type: string + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + volume: + type: string + required: + - ratio + - solvent1 + - solvent2 + - vessel + - volume + title: Recrystallize_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Recrystallize_Result + type: object + required: + - goal + title: Recrystallize + type: object + type: Recrystallize + ResetHandlingProtocol: + feedback: {} + goal: + solvent: solvent + goal_default: + solvent: '' + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: + input: + - data_key: solvent + data_source: handle + data_type: resource + handler_key: solvent + label: Solvent + output: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: + progress: + type: number + status: + type: string + required: + - status + - progress + title: ResetHandling_Feedback + type: object + goal: + properties: + solvent: + type: string + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - solvent + - vessel + title: ResetHandling_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: ResetHandling_Result + type: object + required: + - goal + title: ResetHandling + type: object + type: ResetHandling RunColumnProtocol: - type: RunColumn + feedback: {} goal: + column: column from_vessel: from_vessel to_vessel: to_vessel - column: column - feedback: {} - result: {} + goal_default: + column: '' + from_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + pct1: '' + pct2: '' + ratio: '' + rf: '' + solvent1: '' + solvent2: '' + to_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' handles: input: - - handler_key: from_vessel - label: From Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: to_vessel - label: To Vessel - data_type: resource - data_source: executor - data_key: vessel + - data_key: vessel + data_source: handle + data_type: resource + handler_key: FromVessel + label: From Vessel + - data_key: vessel + data_source: executor + data_type: resource + handler_key: ToVessel + label: To Vessel output: - - handler_key: from_vessel_out - label: From Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: to_vessel_out - label: To Vessel - data_type: resource - data_source: executor - data_key: vessel - + - data_key: vessel + data_source: handle + data_type: resource + handler_key: FromVesselOut + label: From Vessel + - data_key: vessel + data_source: executor + data_type: resource + handler_key: ToVesselOut + label: To Vessel + placeholder_keys: + column: unilabos_devices + from_vessel: unilabos_resources + to_vessel: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: + progress: + type: number + status: + type: string + required: + - status + - progress + title: RunColumn_Feedback + type: object + goal: + properties: + column: + type: string + from_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + pct1: + type: string + pct2: + type: string + ratio: + type: string + rf: + type: string + solvent1: + type: string + solvent2: + type: string + to_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - from_vessel + - to_vessel + - column + - rf + - pct1 + - pct2 + - solvent1 + - solvent2 + - ratio + title: RunColumn_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: RunColumn_Result + type: object + required: + - goal + title: RunColumn + type: object + type: RunColumn SeparateProtocol: - type: Separate + feedback: {} goal: - purpose: purpose - product_phase: product_phase from_vessel: from_vessel + product_phase: product_phase + purpose: purpose + repeats: repeats separation_vessel: separation_vessel - to_vessel: to_vessel - waste_phase_to_vessel: waste_phase_to_vessel + settling_time: settling_time solvent: solvent solvent_volume: solvent_volume + stir_speed: stir_speed + stir_time: stir_time through: through - repeats: repeats - stir_time: stir_time - stir_speed: stir_speed - settling_time: settling_time - feedback: {} - result: {} - handles: - input: - - handler_key: from_vessel - label: From Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: to_vessel - label: To Vessel - data_type: resource - data_source: executor - data_key: vessel - - handler_key: solvent - label: Solvent - data_type: resource - data_source: handle - data_key: solvent - output: - - handler_key: from_vessel_out - label: From Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: to_vessel_out - label: To Vessel - data_type: resource - data_source: executor - data_key: vessel - - StartStirProtocol: - type: StartStir - goal: - vessel: vessel - stir_speed: stir_speed - purpose: purpose - feedback: {} - result: {} - handles: - input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel - output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - - StirProtocol: - type: Stir - goal: - stir_time: stir_time - stir_speed: stir_speed - settling_time: settling_time - feedback: {} - result: {} - handles: - input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel - output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - - StopStirProtocol: - type: StopStir - goal: - vessel: vessel - feedback: {} - result: {} - handles: - input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel - output: - - handler_key: vessel_out - label: Vessel - data_type: resource - data_source: executor - data_key: vessel - - TransferProtocol: - type: Transfer - goal: - from_vessel: from_vessel to_vessel: to_vessel - volume: volume - amount: amount + waste_phase_to_vessel: waste_phase_to_vessel + goal_default: + from_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + product_phase: '' + product_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + purpose: '' + repeats: 0 + separation_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + settling_time: 0.0 + solvent: '' + solvent_volume: '' + stir_speed: 0.0 + stir_time: 0.0 + through: '' + to_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + volume: '' + waste_phase_to_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + waste_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: + input: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: FromVessel + label: From Vessel + - data_key: vessel + data_source: executor + data_type: resource + handler_key: ToVessel + label: To Vessel + - data_key: solvent + data_source: handle + data_type: resource + handler_key: solvent + label: Solvent + output: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: FromVesselOut + label: From Vessel + - data_key: vessel + data_source: executor + data_type: resource + handler_key: ToVesselOut + label: To Vessel + placeholder_keys: + from_vessel: unilabos_resources + to_vessel: unilabos_resources + waste_phase_to_vessel: unilabos_resources + waste_vessel: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: + progress: + type: number + status: + type: string + required: + - status + - progress + title: Separate_Feedback + type: object + goal: + properties: + from_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + product_phase: + type: string + product_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + purpose: + type: string + repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + separation_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + settling_time: + type: number + solvent: + type: string + solvent_volume: + type: string + stir_speed: + type: number + stir_time: + type: number + through: + type: string + to_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + volume: + type: string + waste_phase_to_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + waste_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + - purpose + - product_phase + - from_vessel + - separation_vessel + - to_vessel + - waste_phase_to_vessel + - product_vessel + - waste_vessel + - solvent + - solvent_volume + - volume + - through + - repeats + - stir_time + - stir_speed + - settling_time + title: Separate_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Separate_Result + type: object + required: + - goal + title: Separate + type: object + type: Separate + StartStirProtocol: + feedback: {} + goal: + purpose: purpose + stir_speed: stir_speed + vessel: vessel + goal_default: + purpose: '' + stir_speed: 0.0 + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: + input: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + output: + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + placeholder_keys: + vessel: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: + current_speed: + type: number + current_status: + type: string + progress: + type: number + required: + - progress + - current_speed + - current_status + title: StartStir_Feedback + type: object + goal: + properties: + purpose: + type: string + stir_speed: + type: number + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + - stir_speed + - purpose + title: StartStir_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: StartStir_Result + type: object + required: + - goal + title: StartStir + type: object + type: StartStir + StirProtocol: + feedback: {} + goal: + event: event + settling_time: settling_time + stir_speed: stir_speed + stir_time: stir_time time: time - viscous: viscous + time_spec: time_spec + vessel: vessel + goal_default: + event: '' + settling_time: '' + stir_speed: 0.0 + stir_time: 0.0 + time: '' + time_spec: '' + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: + input: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + output: + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + placeholder_keys: + vessel: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: + status: + type: string + required: + - status + title: Stir_Feedback + type: object + goal: + properties: + event: + type: string + settling_time: + type: string + stir_speed: + type: number + stir_time: + type: number + time: + type: string + time_spec: + type: string + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + - time + - event + - time_spec + - stir_time + - stir_speed + - settling_time + title: Stir_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Stir_Result + type: object + required: + - goal + title: Stir + type: object + type: Stir + StopStirProtocol: + feedback: {} + goal: + vessel: vessel + goal_default: + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + handles: + input: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + output: + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + placeholder_keys: + vessel: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: + current_status: + type: string + progress: + type: number + required: + - progress + - current_status + title: StopStir_Feedback + type: object + goal: + properties: + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + required: + - vessel + title: StopStir_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: StopStir_Result + type: object + required: + - goal + title: StopStir + type: object + type: StopStir + TransferProtocol: + feedback: {} + goal: + amount: amount + from_vessel: from_vessel + rinsing_repeats: rinsing_repeats rinsing_solvent: rinsing_solvent rinsing_volume: rinsing_volume - rinsing_repeats: rinsing_repeats solid: solid - feedback: {} - result: {} + time: time + to_vessel: to_vessel + viscous: viscous + volume: volume + goal_default: + amount: '' + from_vessel: '' + rinsing_repeats: 0 + rinsing_solvent: '' + rinsing_volume: 0.0 + solid: false + time: 0.0 + to_vessel: '' + viscous: false + volume: 0.0 handles: input: - - handler_key: from_vessel - label: From Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: to_vessel - label: To Vessel - data_type: resource - data_source: executor - data_key: vessel - - handler_key: solvent - label: Rinsing Solvent - data_type: resource - data_source: handle - data_key: solvent + - data_key: vessel + data_source: handle + data_type: resource + handler_key: FromVessel + label: From Vessel + - data_key: vessel + data_source: executor + data_type: resource + handler_key: ToVessel + label: To Vessel + - data_key: solvent + data_source: handle + data_type: resource + handler_key: solvent + label: Rinsing Solvent output: - - handler_key: from_vessel_out - label: From Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: to_vessel_out - label: To Vessel - data_type: resource - data_source: executor - data_key: vessel - + - data_key: vessel + data_source: handle + data_type: resource + handler_key: FromVesselOut + label: From Vessel + - data_key: vessel + data_source: executor + data_type: resource + handler_key: ToVesselOut + label: To Vessel + placeholder_keys: + from_vessel: unilabos_nodes + to_vessel: unilabos_nodes + result: {} + schema: + description: '' + properties: + feedback: + properties: + current_status: + type: string + progress: + type: number + transferred_volume: + type: number + required: + - progress + - transferred_volume + - current_status + title: Transfer_Feedback + type: object + goal: + properties: + amount: + type: string + from_vessel: + type: string + rinsing_repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + rinsing_solvent: + type: string + rinsing_volume: + type: number + solid: + type: boolean + time: + type: number + to_vessel: + type: string + viscous: + type: boolean + volume: + type: number + required: + - from_vessel + - to_vessel + - volume + - amount + - time + - viscous + - rinsing_solvent + - rinsing_volume + - rinsing_repeats + - solid + title: Transfer_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Transfer_Result + type: object + required: + - goal + title: Transfer + type: object + type: Transfer WashSolidProtocol: - type: WashSolid + feedback: {} goal: - vessel: vessel - solvent: solvent - volume: volume filtrate_vessel: filtrate_vessel - temp: temp + repeats: repeats + solvent: solvent stir: stir stir_speed: stir_speed + temp: temp time: time - repeats: repeats - feedback: {} - result: {} + vessel: vessel + volume: volume + goal_default: + event: '' + filtrate_vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + mass: '' + repeats: 0 + repeats_spec: '' + solvent: '' + stir: false + stir_speed: 0.0 + temp: 0.0 + time: '' + vessel: + category: '' + children: [] + config: '' + data: '' + id: '' + name: '' + parent: '' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + sample_id: '' + type: '' + volume: '' + volume_spec: '' handles: input: - - handler_key: vessel - label: Vessel - data_type: resource - data_source: handle - data_key: vessel - - handler_key: solvent - label: Solvent - data_type: resource - data_source: handle - data_key: solvent - - handler_key: filtrate_vessel - label: Filtrate Vessel - data_type: resource - data_source: executor - data_key: vessel + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + - data_key: solvent + data_source: handle + data_type: resource + handler_key: solvent + label: Solvent + - data_key: filtrate_vessel + data_source: handle + data_type: resource + handler_key: filtrate_vessel + label: Filtrate Vessel output: - - handler_key: vessel_out - label: Vessel Out - data_type: resource - data_source: handle - data_key: vessel - - handler_key: filtrate_vessel_out - label: Filtrate Vessel - data_type: resource - data_source: executor - data_key: vessel \ No newline at end of file + - data_key: vessel + data_source: handle + data_type: resource + handler_key: VesselOut + label: Vessel Out + - data_key: filtrate_vessel + data_source: executor + data_type: resource + handler_key: filtrate_vessel_out + label: Filtrate Vessel + placeholder_keys: + filtrate_vessel: unilabos_resources + vessel: unilabos_resources + result: {} + schema: + description: '' + properties: + feedback: + properties: + progress: + type: number + status: + type: string + required: + - status + - progress + title: WashSolid_Feedback + type: object + goal: + properties: + event: + type: string + filtrate_vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + mass: + type: string + repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + repeats_spec: + type: string + solvent: + type: string + stir: + type: boolean + stir_speed: + type: number + temp: + type: number + time: + type: string + vessel: + properties: + category: + type: string + children: + items: + type: string + type: array + config: + type: string + data: + type: string + id: + type: string + name: + type: string + parent: + type: string + pose: + properties: + orientation: + properties: + w: + type: number + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + - w + title: Quaternion + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: Point + type: object + required: + - position + - orientation + title: Pose + type: object + sample_id: + type: string + type: + type: string + required: + - id + - name + - sample_id + - children + - parent + - type + - category + - pose + - config + - data + title: Resource + type: object + volume: + type: string + volume_spec: + type: string + required: + - vessel + - solvent + - volume + - filtrate_vessel + - temp + - stir + - stir_speed + - time + - repeats + - volume_spec + - repeats_spec + - mass + - event + title: WashSolid_Goal + type: object + result: + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: WashSolid_Result + type: object + required: + - goal + title: WashSolid + type: object + type: WashSolid + auto-create_ros_action_server: + feedback: {} + goal: {} + goal_default: + action_name: null + action_value_mapping: null + handles: [] + result: {} + schema: + description: create_ros_action_server的参数schema + properties: + feedback: {} + goal: + properties: + action_name: + type: string + action_value_mapping: + type: string + required: + - action_name + - action_value_mapping + type: object + result: {} + required: + - goal + title: create_ros_action_server参数 + type: object + type: UniLabJsonCommand + auto-execute_single_action: + feedback: {} + goal: {} + goal_default: + action_kwargs: null + action_name: null + device_id: null + handles: [] + result: {} + schema: + description: execute_single_action的参数schema + properties: + feedback: {} + goal: + properties: + action_kwargs: + type: string + action_name: + type: string + device_id: + type: string + required: + - device_id + - action_name + - action_kwargs + type: object + result: {} + required: + - goal + title: execute_single_action参数 + type: object + type: UniLabJsonCommandAsync + auto-initialize_device: + feedback: {} + goal: {} + goal_default: + device_config: null + device_id: null + handles: [] + result: {} + schema: + description: initialize_device的参数schema + properties: + feedback: {} + goal: + properties: + device_config: + type: string + device_id: + type: string + required: + - device_id + - device_config + type: object + result: {} + required: + - goal + title: initialize_device参数 + type: object + type: UniLabJsonCommand + module: unilabos.ros.nodes.presets.protocol_node:ROS2ProtocolNode + status_types: {} + type: ros2 + config_info: [] + description: Workstation + handles: [] + icon: '' + init_param_schema: + config: + properties: + children: + type: object + device_id: + type: string + protocol_type: + type: string + resource_tracker: + type: string + required: + - device_id + - children + - protocol_type + - resource_tracker + type: object + data: + properties: {} + required: [] + type: object + version: 1.0.0 diff --git a/unilabos/registry/devices/zhida_hplc.yaml b/unilabos/registry/devices/zhida_hplc.yaml index 1aed8a2..ade1c0f 100644 --- a/unilabos/registry/devices/zhida_hplc.yaml +++ b/unilabos/registry/devices/zhida_hplc.yaml @@ -1,27 +1,183 @@ zhida_hplc: - description: Zhida HPLC + category: + - zhida_hplc class: - module: unilabos.devices.zhida_hplc.zhida:ZhidaClient - type: python - status_types: - status: String action_value_mappings: + abort: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn + auto-close: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: HPLC设备连接关闭函数。安全地断开与智达HPLC设备的TCP socket连接,释放网络资源。该函数确保连接的正确关闭,避免网络资源泄露。通常在设备使用完毕或系统关闭时调用。 + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: close参数 + type: object + type: UniLabJsonCommand + auto-connect: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: HPLC设备连接建立函数。与智达HPLC设备建立TCP socket通信连接,配置通信超时参数。该函数是设备使用前的必要步骤,建立成功后可进行状态查询、方法获取、任务启动等操作。连接失败时会抛出异常。 + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: connect参数 + type: object + type: UniLabJsonCommand + get_methods: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: EmptyIn_Feedback + type: object + goal: + properties: {} + required: [] + title: EmptyIn_Goal + type: object + result: + properties: + return_info: + type: string + required: + - return_info + title: EmptyIn_Result + type: object + required: + - goal + title: EmptyIn + type: object + type: EmptyIn start: - type: StrSingleInput + feedback: {} goal: string: string - feedback: {} + goal_default: + string: '' + handles: [] result: {} - abort: - type: EmptyIn - goal: {} - feedback: {} - result: {} - get_methods: - type: EmptyIn - goal: {} - feedback: {} - result: {} - - schema: - properties: {} \ No newline at end of file + schema: + description: '' + properties: + feedback: + properties: {} + required: [] + title: StrSingleInput_Feedback + type: object + goal: + properties: + string: + type: string + required: + - string + title: StrSingleInput_Goal + type: object + result: + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: StrSingleInput_Result + type: object + required: + - goal + title: StrSingleInput + type: object + type: StrSingleInput + module: unilabos.devices.zhida_hplc.zhida:ZhidaClient + status_types: + methods: dict + status: dict + type: python + config_info: [] + description: 智达高效液相色谱(HPLC)分析设备,用于实验室样品的分离、检测和定量分析。该设备通过TCP socket与HPLC控制系统通信,支持远程控制和状态监控。具备自动进样、梯度洗脱、多检测器数据采集等功能,可执行复杂的色谱分析方法。适用于化学分析、药物检测、环境监测、生物样品分析等需要高精度分离分析的实验室应用场景。 + handles: [] + icon: '' + init_param_schema: + config: + properties: + host: + default: 192.168.1.47 + type: string + port: + default: 5792 + type: string + timeout: + default: 10.0 + type: string + required: [] + type: object + data: + properties: + methods: + type: object + status: + type: object + required: + - status + - methods + type: object + version: 1.0.0 diff --git a/unilabos/registry/registry.py b/unilabos/registry/registry.py index 03d4899..780ba90 100644 --- a/unilabos/registry/registry.py +++ b/unilabos/registry/registry.py @@ -1,14 +1,20 @@ +import copy import io import os import sys +import inspect +import importlib from pathlib import Path -from typing import Any +from typing import Any, Dict, List import yaml -from unilabos.ros.msgs.message_converter import msg_converter_manager, ros_action_to_json_schema +from unilabos.resources.graphio import resource_plr_to_ulab, tree_to_list +from unilabos.ros.msgs.message_converter import msg_converter_manager, ros_action_to_json_schema, String from unilabos.utils import logger from unilabos.utils.decorator import singleton +from unilabos.utils.import_manager import get_enhanced_class_info, get_class +from unilabos.utils.type_check import NoAliasDumper DEFAULT_PATHS = [Path(__file__).absolute().parent] @@ -32,7 +38,7 @@ class Registry: # 其他状态变量 # self.is_host_mode = False # 移至BasicConfig中 - def setup(self): + def setup(self, complete_registry=False): # 检查是否已调用过setup if self._setup_called: logger.critical("[UniLab Registry] setup方法已被调用过,不允许多次调用") @@ -60,7 +66,9 @@ class Registry: }, "feedback": {}, "result": {"success": "success"}, - "schema": ros_action_to_json_schema(self.ResourceCreateFromOuter), + "schema": ros_action_to_json_schema( + self.ResourceCreateFromOuter, "用于创建或更新物料资源,每次传入多个物料信息。" + ), "goal_default": yaml.safe_load( io.StringIO(get_yaml_from_goal_type(self.ResourceCreateFromOuter.Goal)) ), @@ -81,18 +89,28 @@ class Registry: }, "feedback": {}, "result": {"success": "success"}, - "schema": ros_action_to_json_schema(self.ResourceCreateFromOuterEasy), + "schema": ros_action_to_json_schema( + self.ResourceCreateFromOuterEasy, "用于创建或更新物料资源,每次传入一个物料信息。" + ), "goal_default": yaml.safe_load( io.StringIO(get_yaml_from_goal_type(self.ResourceCreateFromOuterEasy.Goal)) ), "handles": { - "output": [{ - "handler_key": "labware", - "label": "Labware", - "data_type": "resource", - "data_source": "handle", - "data_key": "liquid" - }] + "output": [ + { + "handler_key": "labware", + "label": "Labware", + "data_type": "resource", + "data_source": "handle", + "data_key": "liquid", + } + ] + }, + # todo: support nested keys, switch to non ros message schema + "placeholder_keys": { + "res_id": "unilabos_resources", # 将当前实验室的全部物料id作为下拉框可选择 + "device_id": "unilabos_devices", # 将当前实验室的全部设备id作为下拉框可选择 + "parent": "unilabos_resources", # 将当前实验室的全部物料id作为下拉框可选择 }, }, "test_latency": { @@ -100,17 +118,21 @@ class Registry: "goal": {}, "feedback": {}, "result": {"latency_ms": "latency_ms", "time_diff_ms": "time_diff_ms"}, - "schema": ros_action_to_json_schema(self.EmptyIn), + "schema": ros_action_to_json_schema( + self.EmptyIn, "用于测试延迟的动作,返回延迟时间和时间差。" + ), "goal_default": {}, "handles": {}, }, }, }, + "version": "1.0.0", + "category": [], + "config_info": [], "icon": "icon_device.webp", "registry_type": "device", "handles": [], "init_param_schema": {}, - "schema": {"properties": {}, "additionalProperties": False, "type": "object"}, "file_path": "/", } } @@ -121,33 +143,60 @@ class Registry: sys_path = path.parent logger.debug(f"[UniLab Registry] Path {i+1}/{len(self.registry_paths)}: {sys_path}") sys.path.append(str(sys_path)) - self.load_device_types(path) - self.load_resource_types(path) + self.load_device_types(path, complete_registry) + self.load_resource_types(path, complete_registry) logger.info("[UniLab Registry] 注册表设置完成") # 标记setup已被调用 self._setup_called = True - def load_resource_types(self, path: os.PathLike): + def load_resource_types(self, path: os.PathLike, complete_registry: bool): abs_path = Path(path).absolute() resource_path = abs_path / "resources" files = list(resource_path.glob("*/*.yaml")) logger.debug(f"[UniLab Registry] resources: {resource_path.exists()}, total: {len(files)}") current_resource_number = len(self.resource_type_registry) + 1 for i, file in enumerate(files): - data = yaml.safe_load(open(file, encoding="utf-8")) + with open(file, encoding="utf-8", mode="r") as f: + data = yaml.safe_load(io.StringIO(f.read())) + complete_data = {} if data: # 为每个资源添加文件路径信息 for resource_id, resource_info in data.items(): resource_info["file_path"] = str(file.absolute()).replace("\\", "/") - if "description" not in resource_info: - resource_info["description"] = "" + if "version" not in resource_info: + resource_info["version"] = "1.0.0" + if "category" not in resource_info: + resource_info["category"] = [file.stem] + elif file.stem not in resource_info["category"]: + resource_info["category"].append(file.stem) + if "config_info" not in resource_info: + resource_info["config_info"] = [] if "icon" not in resource_info: resource_info["icon"] = "" if "handles" not in resource_info: resource_info["handles"] = [] if "init_param_schema" not in resource_info: resource_info["init_param_schema"] = {} + if complete_registry: + class_info = resource_info.get("class", {}) + if len(class_info) and "module" in class_info: + if class_info.get("type") == "pylabrobot": + res_class = get_class(class_info["module"]) + if callable(res_class) and not isinstance( + res_class, type + ): # 有的是类,有的是函数,这里暂时只登记函数类的 + res_instance = res_class(res_class.__name__) + res_ulr = tree_to_list([resource_plr_to_ulab(res_instance)]) + resource_info["config_info"] = res_ulr resource_info["registry_type"] = "resource" + complete_data[resource_id] = copy.deepcopy(dict(sorted(resource_info.items()))) # 稍后dump到文件 + + complete_data = dict(sorted(complete_data.items())) + complete_data = copy.deepcopy(complete_data) + if complete_registry: + with open(file, "w", encoding="utf-8") as f: + yaml.dump(complete_data, f, allow_unicode=True, default_flow_style=False, Dumper=NoAliasDumper) + self.resource_type_registry.update(data) logger.debug( f"[UniLab Registry] Resource-{current_resource_number} File-{i+1}/{len(files)} " @@ -157,6 +206,54 @@ class Registry: else: logger.debug(f"[UniLab Registry] Res File-{i+1}/{len(files)} Not Valid YAML File: {file.absolute()}") + def _extract_class_docstrings(self, module_string: str) -> Dict[str, str]: + """ + 从模块字符串中提取类和方法的docstring信息 + + Args: + module_string: 模块字符串,格式为 "module.path:ClassName" + + Returns: + 包含类和方法docstring信息的字典 + """ + docstrings = {"class_docstring": "", "methods": {}} + + if not module_string or ":" not in module_string: + return docstrings + + try: + module_path, class_name = module_string.split(":", 1) + + # 动态导入模块 + module = importlib.import_module(module_path) + + # 获取类 + if hasattr(module, class_name): + cls = getattr(module, class_name) + + # 获取类的docstring + class_doc = inspect.getdoc(cls) + if class_doc: + docstrings["class_docstring"] = class_doc.strip() + + # 获取所有方法的docstring + for method_name, method in inspect.getmembers(cls, predicate=inspect.isfunction): + method_doc = inspect.getdoc(method) + if method_doc: + docstrings["methods"][method_name] = method_doc.strip() + + # 也获取属性方法的docstring + for method_name, method in inspect.getmembers(cls, predicate=lambda x: isinstance(x, property)): + if hasattr(method, "fget") and method.fget: + method_doc = inspect.getdoc(method.fget) + if method_doc: + docstrings["methods"][method_name] = method_doc.strip() + + except Exception as e: + logger.warning(f"[UniLab Registry] 无法提取docstring信息,模块: {module_string}, 错误: {str(e)}") + + return docstrings + def _replace_type_with_class(self, type_name: str, device_id: str, field_name: str) -> Any: """ 将类型名称替换为实际的类对象 @@ -176,7 +273,14 @@ class Registry: if not type_name or type_name == "": logger.warning(f"[UniLab Registry] 设备 {device_id} 的 {field_name} 类型为空,跳过替换") return type_name - if "." in type_name: + convert_manager = { # 将python基本对象转为ros2基本对象 + "str": "String", + "bool": "Bool", + "int": "Int64", + "float": "Float64", + } + type_name = convert_manager.get(type_name, type_name) # 替换为ROS2类型 + if ":" in type_name: type_class = msg_converter_manager.get_class(type_name) else: type_class = msg_converter_manager.search_class(type_name) @@ -186,7 +290,97 @@ class Registry: logger.error(f"[UniLab Registry] 无法找到类型 '{type_name}' 用于设备 {device_id} 的 {field_name}") sys.exit(1) - def load_device_types(self, path: os.PathLike): + def _generate_schema_from_info( + self, + param_name: str, + param_type: str, + param_default: Any, + ) -> Dict[str, Any]: + """ + 根据参数信息生成JSON Schema + """ + prop_schema = {} + # 根据类型设置schema FIXME 不完整 + if param_type: + param_type_lower = param_type.lower() + if param_type_lower in ["str", "string"]: + prop_schema["type"] = "string" + elif param_type_lower in ["int", "integer"]: + prop_schema["type"] = "integer" + elif param_type_lower in ["float", "number"]: + prop_schema["type"] = "number" + elif param_type_lower in ["bool", "boolean"]: + prop_schema["type"] = "boolean" + elif param_type_lower in ["list", "array"]: + prop_schema["type"] = "array" + elif param_type_lower in ["dict", "object"]: + prop_schema["type"] = "object" + else: + # 默认为字符串类型 + prop_schema["type"] = "string" + else: + # 如果没有类型信息,默认为字符串 + prop_schema["type"] = "string" + + # 设置默认值 + if param_default is not None: + prop_schema["default"] = param_default + + return prop_schema + + def _generate_status_types_schema(self, status_types: Dict[str, Any]) -> Dict[str, Any]: + """ + 根据状态类型生成JSON Schema + """ + status_schema = { + "type": "object", + "properties": {}, + "required": [], + } + for status_name, status_type in status_types.items(): + status_schema["properties"][status_name] = self._generate_schema_from_info( + status_name, status_type["return_type"], None + ) + status_schema["required"].append(status_name) + return status_schema + + def _generate_unilab_json_command_schema( + self, method_args: List[Dict[str, Any]], method_name: str + ) -> Dict[str, Any]: + """ + 根据UniLabJsonCommand方法信息生成JSON Schema,暂不支持嵌套类型 + + Args: + method_args: 方法信息字典,包含args等 + method_name: 方法名称 + + Returns: + JSON Schema格式的参数schema + """ + schema = { + "type": "object", + "properties": {}, + "required": [], + } + for arg_info in method_args: + param_name = arg_info.get("name", "") + param_type = arg_info.get("type", "") + param_default = arg_info.get("default") + param_required = arg_info.get("required", True) + schema["properties"][param_name] = self._generate_schema_from_info(param_name, param_type, param_default) + if param_required: + schema["required"].append(param_name) + + return { + "title": f"{method_name}参数", + "description": f"", + "type": "object", + "properties": {"goal": schema, "feedback": {}, "result": {}}, + "required": ["goal"], + } + + def load_device_types(self, path: os.PathLike, complete_registry: bool): + # return abs_path = Path(path).absolute() devices_path = abs_path / "devices" device_comms_path = abs_path / "device_comms" @@ -199,12 +393,26 @@ class Registry: from unilabos.app.web.utils.action_utils import get_yaml_from_goal_type for i, file in enumerate(files): - data = yaml.safe_load(open(file, encoding="utf-8")) + with open(file, encoding="utf-8", mode="r") as f: + data = yaml.safe_load(io.StringIO(f.read())) + complete_data = {} + action_str_type_mapping = { + "UniLabJsonCommand": "UniLabJsonCommand", + "UniLabJsonCommandAsync": "UniLabJsonCommandAsync", + } + status_str_type_mapping = {} if data: # 在添加到注册表前处理类型替换 for device_id, device_config in data.items(): # 添加文件路径信息 - 使用规范化的完整文件路径 - device_config["file_path"] = str(file.absolute()).replace("\\", "/") + if "version" not in device_config: + device_config["version"] = "1.0.0" + if "category" not in device_config: + device_config["category"] = [file.stem] + elif file.stem not in device_config["category"]: + device_config["category"].append(file.stem) + if "config_info" not in device_config: + device_config["config_info"] = [] if "description" not in device_config: device_config["description"] = "" if "icon" not in device_config: @@ -213,42 +421,145 @@ class Registry: device_config["handles"] = [] if "init_param_schema" not in device_config: device_config["init_param_schema"] = {} - device_config["registry_type"] = "device" if "class" in device_config: - # 处理状态类型 - if "status_types" in device_config["class"]: - for status_name, status_type in device_config["class"]["status_types"].items(): - device_config["class"]["status_types"][status_name] = self._replace_type_with_class( - status_type, device_id, f"状态 {status_name}" - ) - - # 处理动作值映射 - if "action_value_mappings" in device_config["class"]: + if "status_types" not in device_config["class"]: + device_config["class"]["status_types"] = {} + if "action_value_mappings" not in device_config["class"]: + device_config["class"]["action_value_mappings"] = {} + enhanced_info = {} + if complete_registry: + device_config["class"]["status_types"].clear() + enhanced_info = get_enhanced_class_info(device_config["class"]["module"], use_dynamic=True) + device_config["class"]["status_types"].update( + {k: v["return_type"] for k, v in enhanced_info["status_methods"].items()} + ) + for status_name, status_type in device_config["class"]["status_types"].items(): + if status_type in ["Any", "None", "Unknown"]: + status_type = "String" # 替换成ROS的String,便于显示 + device_config["class"]["status_types"][status_name] = status_type + target_type = self._replace_type_with_class(status_type, device_id, f"状态 {status_name}") + if target_type in [ + dict, + list, + ]: # 对于嵌套类型返回的对象,暂时处理成字符串,无法直接进行转换 + target_type = String + status_str_type_mapping[status_type] = target_type + device_config["class"]["status_types"] = dict( + sorted(device_config["class"]["status_types"].items()) + ) + if complete_registry: + # 保存原有的description信息 + old_descriptions = {} for action_name, action_config in device_config["class"]["action_value_mappings"].items(): - if "handles" not in action_config: - action_config["handles"] = [] - if "type" in action_config: - action_config["type"] = self._replace_type_with_class( - action_config["type"], device_id, f"动作 {action_name}" + if "description" in action_config.get("schema", {}): + description = action_config["schema"]["description"] + if len(description): + old_descriptions[action_name] = action_config["schema"]["description"] + + device_config["class"]["action_value_mappings"] = { + k: v + for k, v in device_config["class"]["action_value_mappings"].items() + if not k.startswith("auto-") + } + # 处理动作值映射 + device_config["class"]["action_value_mappings"].update( + { + f"auto-{k}": { + "type": "UniLabJsonCommandAsync" if v["is_async"] else "UniLabJsonCommand", + "goal": {}, + "feedback": {}, + "result": {}, + "schema": self._generate_unilab_json_command_schema(v["args"], k), + "goal_default": {i["name"]: i["default"] for i in v["args"]}, + "handles": [], + } + # 不生成已配置action的动作 + for k, v in enhanced_info["action_methods"].items() + if k not in device_config["class"]["action_value_mappings"] + } + ) + + # 恢复原有的description信息(auto开头的不修改) + for action_name, description in old_descriptions.items(): + if action_name in device_config["class"]["action_value_mappings"]: # 有一些会被删除 + device_config["class"]["action_value_mappings"][action_name]["schema"][ + "description" + ] = description + device_config["init_param_schema"] = {} + device_config["init_param_schema"]["config"] = self._generate_unilab_json_command_schema( + enhanced_info["init_params"], "__init__" + )["properties"]["goal"] + device_config["init_param_schema"]["data"] = self._generate_status_types_schema( + enhanced_info["status_methods"] + ) + + device_config.pop("schema", None) + device_config["class"]["action_value_mappings"] = dict( + sorted(device_config["class"]["action_value_mappings"].items()) + ) + for action_name, action_config in device_config["class"]["action_value_mappings"].items(): + if "handles" not in action_config: + action_config["handles"] = [] + if "type" in action_config: + action_type_str: str = action_config["type"] + # 通过Json发放指令,而不是通过特殊的ros action进行处理 + if not action_type_str.startswith("UniLabJsonCommand"): + target_type = self._replace_type_with_class( + action_type_str, device_id, f"动作 {action_name}" ) - if action_config["type"] is not None: + action_str_type_mapping[action_type_str] = target_type + if target_type is not None: action_config["goal_default"] = yaml.safe_load( - io.StringIO(get_yaml_from_goal_type(action_config["type"].Goal)) + io.StringIO(get_yaml_from_goal_type(target_type.Goal)) ) - action_config["schema"] = ros_action_to_json_schema(action_config["type"]) + action_config["schema"] = ros_action_to_json_schema(target_type) else: logger.warning( f"[UniLab Registry] 设备 {device_id} 的动作 {action_name} 类型为空,跳过替换" ) - - self.device_type_registry.update(data) - - for device_id in data.keys(): + complete_data[device_id] = copy.deepcopy(dict(sorted(device_config.items()))) # 稍后dump到文件 + for status_name, status_type in device_config["class"]["status_types"].items(): + device_config["class"]["status_types"][status_name] = status_str_type_mapping[status_type] + for action_name, action_config in device_config["class"]["action_value_mappings"].items(): + action_config["type"] = action_str_type_mapping[action_config["type"]] + for additional_action in ["_execute_driver_command", "_execute_driver_command_async"]: + device_config["class"]["action_value_mappings"][additional_action] = { + "type": self._replace_type_with_class( + "StrSingleInput", device_id, f"动作 {additional_action}" + ), + "goal": {"string": "string"}, + "feedback": {}, + "result": {}, + "schema": ros_action_to_json_schema( + self._replace_type_with_class( + "StrSingleInput", device_id, f"动作 {additional_action}" + ) + ), + "goal_default": yaml.safe_load( + io.StringIO( + get_yaml_from_goal_type( + self._replace_type_with_class( + "StrSingleInput", device_id, f"动作 {additional_action}" + ).Goal + ) + ) + ), + "handles": [], + } + if "registry_type" not in device_config: + device_config["registry_type"] = "device" + device_config["file_path"] = str(file.absolute()).replace("\\", "/") + device_config["registry_type"] = "device" logger.debug( f"[UniLab Registry] Device-{current_device_number} File-{i+1}/{len(files)} Add {device_id} " + f"[{data[device_id].get('name', '未命名设备')}]" ) current_device_number += 1 + complete_data = dict(sorted(complete_data.items())) + complete_data = copy.deepcopy(complete_data) + with open(file, "w", encoding="utf-8") as f: + yaml.dump(complete_data, f, allow_unicode=True, default_flow_style=False, Dumper=NoAliasDumper) + self.device_type_registry.update(data) else: logger.debug( f"[UniLab Registry] Device File-{i+1}/{len(files)} Not Valid YAML File: {file.absolute()}" @@ -257,7 +568,35 @@ class Registry: def obtain_registry_device_info(self): devices = [] for device_id, device_info in self.device_type_registry.items(): - msg = {"id": device_id, **device_info} + device_info_copy = copy.deepcopy(device_info) + if "class" in device_info_copy and "action_value_mappings" in device_info_copy["class"]: + action_mappings = device_info_copy["class"]["action_value_mappings"] + for action_name, action_config in action_mappings.items(): + if "schema" in action_config and action_config["schema"]: + schema = action_config["schema"] + # 确保schema结构存在 + if ( + "properties" in schema + and "goal" in schema["properties"] + and "properties" in schema["properties"]["goal"] + ): + schema["properties"]["goal"]["properties"] = { + "unilabos_device_id": { + "type": "string", + "default": "", + "description": "UniLabOS设备ID,用于指定执行动作的具体设备实例", + }, + **schema["properties"]["goal"]["properties"], + } + # 将 placeholder_keys 信息添加到 schema 中 + if "placeholder_keys" in action_config and action_config.get("schema", {}).get( + "properties", {} + ).get("goal", {}): + action_config["schema"]["properties"]["goal"]["_unilabos_placeholder_info"] = action_config[ + "placeholder_keys" + ] + + msg = {"id": device_id, **device_info_copy} devices.append(msg) return devices @@ -273,7 +612,7 @@ class Registry: lab_registry = Registry() -def build_registry(registry_paths=None): +def build_registry(registry_paths=None, complete_registry=False): """ 构建或获取Registry单例实例 @@ -297,6 +636,6 @@ def build_registry(registry_paths=None): lab_registry.registry_paths.append(path) # 初始化注册表 - lab_registry.setup() + lab_registry.setup(complete_registry) return lab_registry diff --git a/unilabos/registry/resources/opentrons/deck.yaml b/unilabos/registry/resources/opentrons/deck.yaml index 652240a..961b6e6 100644 --- a/unilabos/registry/resources/opentrons/deck.yaml +++ b/unilabos/registry/resources/opentrons/deck.yaml @@ -1,8 +1,17 @@ OTDeck: - description: Opentrons deck - class: + category: + - deck + class: module: pylabrobot.resources.opentrons.deck:OTDeck type: pylabrobot + config_info: [] + description: Opentrons deck + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/deck.yaml + handles: [] + icon: '' + init_param_schema: {} model: + mesh: opentrons_liquid_handler type: device - mesh: opentrons_liquid_handler \ No newline at end of file + registry_type: resource + version: 1.0.0 diff --git a/unilabos/registry/resources/opentrons/plate_adapters.yaml b/unilabos/registry/resources/opentrons/plate_adapters.yaml index e9c0d5a..806e5b3 100644 --- a/unilabos/registry/resources/opentrons/plate_adapters.yaml +++ b/unilabos/registry/resources/opentrons/plate_adapters.yaml @@ -1,5 +1,39 @@ Opentrons_96_adapter_Vb: - description: Opentrons 96 adapter Vb - class: + category: + - plate_adapters + class: module: pylabrobot.resources.opentrons.plate_adapters:Opentrons_96_adapter_Vb - type: pylabrobot \ No newline at end of file + type: pylabrobot + config_info: + - children: [] + class: '' + config: + barcode: null + category: plate_adapter + model: Opentrons_96_adapter_Vb + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.48 + size_z: 18.55 + type: PlateAdapter + data: {} + id: Opentrons_96_adapter_Vb + name: Opentrons_96_adapter_Vb + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + description: Opentrons 96 adapter Vb + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/plate_adapters.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 diff --git a/unilabos/registry/resources/opentrons/plates.yaml b/unilabos/registry/resources/opentrons/plates.yaml index 3783bc3..cc6d085 100644 --- a/unilabos/registry/resources/opentrons/plates.yaml +++ b/unilabos/registry/resources/opentrons/plates.yaml @@ -1,99 +1,72988 @@ -corning_6_wellplate_16point8ml_flat: - description: Corning 6 wellplate 16.8ml flat - class: - module: pylabrobot.resources.opentrons.plates:corning_6_wellplate_16point8ml_flat - type: pylabrobot - -corning_12_wellplate_6point9ml_flat: - description: Corning 12 wellplate 6.9ml flat - class: - module: pylabrobot.resources.opentrons.plates:corning_12_wellplate_6point9ml_flat - type: pylabrobot - -corning_24_wellplate_3point4ml_flat: - description: Corning 24 wellplate 3.4ml flat - class: - module: pylabrobot.resources.opentrons.plates:corning_24_wellplate_3point4ml_flat - type: pylabrobot - -corning_48_wellplate_1point6ml_flat: - description: Corning 48 wellplate 1.6ml flat - class: - module: pylabrobot.resources.opentrons.plates:corning_48_wellplate_1point6ml_flat - type: pylabrobot - -corning_96_wellplate_360ul_flat: - description: Corning 96 wellplate 360ul flat - class: - module: pylabrobot.resources.opentrons.plates:corning_96_wellplate_360ul_flat - type: pylabrobot - -corning_384_wellplate_112ul_flat: - description: Corning 384 wellplate 112ul flat - class: - module: pylabrobot.resources.opentrons.plates:corning_384_wellplate_112ul_flat - type: pylabrobot - -nest_96_wellplate_2ml_deep: - description: Nest 96 wellplate 2ml deep - class: - module: pylabrobot.resources.opentrons.plates:nest_96_wellplate_2ml_deep - type: pylabrobot - model: - type: resource - mesh: tecan_nested_tip_rack/meshes/plate.stl - mesh_tf: [0.064, 0.043, 0, -1.5708, 0, 1.5708] - -nest_96_wellplate_200ul_flat: - description: Nest 96 wellplate 200ul flat - class: - module: pylabrobot.resources.opentrons.plates:nest_96_wellplate_200ul_flat - type: pylabrobot - -nest_96_wellplate_100ul_pcr_full_skirt: - description: Nest 96 wellplate 100ul pcr full skirt - class: - module: pylabrobot.resources.opentrons.plates:nest_96_wellplate_100ul_pcr_full_skirt - type: pylabrobot - model: - type: resource - mesh: tecan_nested_tip_rack/meshes/plate.stl - mesh_tf: [0.064, 0.043, 0, -1.5708, 0, 1.5708] - children_mesh: generic_labware_tube_10_75/meshes/0_base.stl - children_mesh_tf: [0.0018, 0.0018, 0, -1.5708,0, 0] - appliedbiosystemsmicroamp_384_wellplate_40ul: - description: Applied Biosystems microamp 384 wellplate 40ul - class: + category: + - plates + class: module: pylabrobot.resources.opentrons.plates:appliedbiosystemsmicroamp_384_wellplate_40ul type: pylabrobot - -thermoscientificnunc_96_wellplate_1300ul: - description: Thermoscientific Nunc 96 wellplate 1300ul - class: - module: pylabrobot.resources.opentrons.plates:thermoscientificnunc_96_wellplate_1300ul - type: pylabrobot - -thermoscientificnunc_96_wellplate_2000ul: - description: Thermoscientific Nunc 96 wellplate 2000ul - class: - module: pylabrobot.resources.opentrons.plates:thermoscientificnunc_96_wellplate_2000ul - type: pylabrobot - -usascientific_96_wellplate_2point4ml_deep: - description: USAScientific 96 wellplate 2.4ml deep - class: - module: pylabrobot.resources.opentrons.plates:usascientific_96_wellplate_2point4ml_deep - type: pylabrobot - -biorad_96_wellplate_200ul_pcr: - description: BioRad 96 wellplate 200ul pcr - class: - module: pylabrobot.resources.opentrons.plates:biorad_96_wellplate_200ul_pcr - type: pylabrobot - + config_info: + - children: + - appliedbiosystemsmicroamp_384_wellplate_40ul_A1 + - appliedbiosystemsmicroamp_384_wellplate_40ul_B1 + - appliedbiosystemsmicroamp_384_wellplate_40ul_C1 + - appliedbiosystemsmicroamp_384_wellplate_40ul_D1 + - appliedbiosystemsmicroamp_384_wellplate_40ul_E1 + - appliedbiosystemsmicroamp_384_wellplate_40ul_F1 + - appliedbiosystemsmicroamp_384_wellplate_40ul_G1 + - appliedbiosystemsmicroamp_384_wellplate_40ul_H1 + - appliedbiosystemsmicroamp_384_wellplate_40ul_I1 + - appliedbiosystemsmicroamp_384_wellplate_40ul_J1 + - appliedbiosystemsmicroamp_384_wellplate_40ul_K1 + - appliedbiosystemsmicroamp_384_wellplate_40ul_L1 + - appliedbiosystemsmicroamp_384_wellplate_40ul_M1 + - appliedbiosystemsmicroamp_384_wellplate_40ul_N1 + - appliedbiosystemsmicroamp_384_wellplate_40ul_O1 + - appliedbiosystemsmicroamp_384_wellplate_40ul_P1 + - appliedbiosystemsmicroamp_384_wellplate_40ul_A2 + - appliedbiosystemsmicroamp_384_wellplate_40ul_B2 + - appliedbiosystemsmicroamp_384_wellplate_40ul_C2 + - appliedbiosystemsmicroamp_384_wellplate_40ul_D2 + - appliedbiosystemsmicroamp_384_wellplate_40ul_E2 + - appliedbiosystemsmicroamp_384_wellplate_40ul_F2 + - appliedbiosystemsmicroamp_384_wellplate_40ul_G2 + - appliedbiosystemsmicroamp_384_wellplate_40ul_H2 + - appliedbiosystemsmicroamp_384_wellplate_40ul_I2 + - appliedbiosystemsmicroamp_384_wellplate_40ul_J2 + - appliedbiosystemsmicroamp_384_wellplate_40ul_K2 + - appliedbiosystemsmicroamp_384_wellplate_40ul_L2 + - appliedbiosystemsmicroamp_384_wellplate_40ul_M2 + - appliedbiosystemsmicroamp_384_wellplate_40ul_N2 + - appliedbiosystemsmicroamp_384_wellplate_40ul_O2 + - appliedbiosystemsmicroamp_384_wellplate_40ul_P2 + - appliedbiosystemsmicroamp_384_wellplate_40ul_A3 + - appliedbiosystemsmicroamp_384_wellplate_40ul_B3 + - appliedbiosystemsmicroamp_384_wellplate_40ul_C3 + - appliedbiosystemsmicroamp_384_wellplate_40ul_D3 + - appliedbiosystemsmicroamp_384_wellplate_40ul_E3 + - appliedbiosystemsmicroamp_384_wellplate_40ul_F3 + - appliedbiosystemsmicroamp_384_wellplate_40ul_G3 + - appliedbiosystemsmicroamp_384_wellplate_40ul_H3 + - appliedbiosystemsmicroamp_384_wellplate_40ul_I3 + - appliedbiosystemsmicroamp_384_wellplate_40ul_J3 + - appliedbiosystemsmicroamp_384_wellplate_40ul_K3 + - appliedbiosystemsmicroamp_384_wellplate_40ul_L3 + - appliedbiosystemsmicroamp_384_wellplate_40ul_M3 + - appliedbiosystemsmicroamp_384_wellplate_40ul_N3 + - appliedbiosystemsmicroamp_384_wellplate_40ul_O3 + - appliedbiosystemsmicroamp_384_wellplate_40ul_P3 + - appliedbiosystemsmicroamp_384_wellplate_40ul_A4 + - appliedbiosystemsmicroamp_384_wellplate_40ul_B4 + - appliedbiosystemsmicroamp_384_wellplate_40ul_C4 + - appliedbiosystemsmicroamp_384_wellplate_40ul_D4 + - appliedbiosystemsmicroamp_384_wellplate_40ul_E4 + - appliedbiosystemsmicroamp_384_wellplate_40ul_F4 + - appliedbiosystemsmicroamp_384_wellplate_40ul_G4 + - appliedbiosystemsmicroamp_384_wellplate_40ul_H4 + - appliedbiosystemsmicroamp_384_wellplate_40ul_I4 + - appliedbiosystemsmicroamp_384_wellplate_40ul_J4 + - appliedbiosystemsmicroamp_384_wellplate_40ul_K4 + - appliedbiosystemsmicroamp_384_wellplate_40ul_L4 + - appliedbiosystemsmicroamp_384_wellplate_40ul_M4 + - appliedbiosystemsmicroamp_384_wellplate_40ul_N4 + - appliedbiosystemsmicroamp_384_wellplate_40ul_O4 + - appliedbiosystemsmicroamp_384_wellplate_40ul_P4 + - appliedbiosystemsmicroamp_384_wellplate_40ul_A5 + - appliedbiosystemsmicroamp_384_wellplate_40ul_B5 + - appliedbiosystemsmicroamp_384_wellplate_40ul_C5 + - appliedbiosystemsmicroamp_384_wellplate_40ul_D5 + - appliedbiosystemsmicroamp_384_wellplate_40ul_E5 + - appliedbiosystemsmicroamp_384_wellplate_40ul_F5 + - appliedbiosystemsmicroamp_384_wellplate_40ul_G5 + - appliedbiosystemsmicroamp_384_wellplate_40ul_H5 + - appliedbiosystemsmicroamp_384_wellplate_40ul_I5 + - appliedbiosystemsmicroamp_384_wellplate_40ul_J5 + - appliedbiosystemsmicroamp_384_wellplate_40ul_K5 + - appliedbiosystemsmicroamp_384_wellplate_40ul_L5 + - appliedbiosystemsmicroamp_384_wellplate_40ul_M5 + - appliedbiosystemsmicroamp_384_wellplate_40ul_N5 + - appliedbiosystemsmicroamp_384_wellplate_40ul_O5 + - appliedbiosystemsmicroamp_384_wellplate_40ul_P5 + - appliedbiosystemsmicroamp_384_wellplate_40ul_A6 + - appliedbiosystemsmicroamp_384_wellplate_40ul_B6 + - appliedbiosystemsmicroamp_384_wellplate_40ul_C6 + - appliedbiosystemsmicroamp_384_wellplate_40ul_D6 + - appliedbiosystemsmicroamp_384_wellplate_40ul_E6 + - appliedbiosystemsmicroamp_384_wellplate_40ul_F6 + - appliedbiosystemsmicroamp_384_wellplate_40ul_G6 + - appliedbiosystemsmicroamp_384_wellplate_40ul_H6 + - appliedbiosystemsmicroamp_384_wellplate_40ul_I6 + - appliedbiosystemsmicroamp_384_wellplate_40ul_J6 + - appliedbiosystemsmicroamp_384_wellplate_40ul_K6 + - appliedbiosystemsmicroamp_384_wellplate_40ul_L6 + - appliedbiosystemsmicroamp_384_wellplate_40ul_M6 + - appliedbiosystemsmicroamp_384_wellplate_40ul_N6 + - appliedbiosystemsmicroamp_384_wellplate_40ul_O6 + - appliedbiosystemsmicroamp_384_wellplate_40ul_P6 + - appliedbiosystemsmicroamp_384_wellplate_40ul_A7 + - appliedbiosystemsmicroamp_384_wellplate_40ul_B7 + - appliedbiosystemsmicroamp_384_wellplate_40ul_C7 + - appliedbiosystemsmicroamp_384_wellplate_40ul_D7 + - appliedbiosystemsmicroamp_384_wellplate_40ul_E7 + - appliedbiosystemsmicroamp_384_wellplate_40ul_F7 + - appliedbiosystemsmicroamp_384_wellplate_40ul_G7 + - appliedbiosystemsmicroamp_384_wellplate_40ul_H7 + - appliedbiosystemsmicroamp_384_wellplate_40ul_I7 + - appliedbiosystemsmicroamp_384_wellplate_40ul_J7 + - appliedbiosystemsmicroamp_384_wellplate_40ul_K7 + - appliedbiosystemsmicroamp_384_wellplate_40ul_L7 + - appliedbiosystemsmicroamp_384_wellplate_40ul_M7 + - appliedbiosystemsmicroamp_384_wellplate_40ul_N7 + - appliedbiosystemsmicroamp_384_wellplate_40ul_O7 + - appliedbiosystemsmicroamp_384_wellplate_40ul_P7 + - appliedbiosystemsmicroamp_384_wellplate_40ul_A8 + - appliedbiosystemsmicroamp_384_wellplate_40ul_B8 + - appliedbiosystemsmicroamp_384_wellplate_40ul_C8 + - appliedbiosystemsmicroamp_384_wellplate_40ul_D8 + - appliedbiosystemsmicroamp_384_wellplate_40ul_E8 + - appliedbiosystemsmicroamp_384_wellplate_40ul_F8 + - appliedbiosystemsmicroamp_384_wellplate_40ul_G8 + - appliedbiosystemsmicroamp_384_wellplate_40ul_H8 + - appliedbiosystemsmicroamp_384_wellplate_40ul_I8 + - appliedbiosystemsmicroamp_384_wellplate_40ul_J8 + - appliedbiosystemsmicroamp_384_wellplate_40ul_K8 + - appliedbiosystemsmicroamp_384_wellplate_40ul_L8 + - appliedbiosystemsmicroamp_384_wellplate_40ul_M8 + - appliedbiosystemsmicroamp_384_wellplate_40ul_N8 + - appliedbiosystemsmicroamp_384_wellplate_40ul_O8 + - appliedbiosystemsmicroamp_384_wellplate_40ul_P8 + - appliedbiosystemsmicroamp_384_wellplate_40ul_A9 + - appliedbiosystemsmicroamp_384_wellplate_40ul_B9 + - appliedbiosystemsmicroamp_384_wellplate_40ul_C9 + - appliedbiosystemsmicroamp_384_wellplate_40ul_D9 + - appliedbiosystemsmicroamp_384_wellplate_40ul_E9 + - appliedbiosystemsmicroamp_384_wellplate_40ul_F9 + - appliedbiosystemsmicroamp_384_wellplate_40ul_G9 + - appliedbiosystemsmicroamp_384_wellplate_40ul_H9 + - appliedbiosystemsmicroamp_384_wellplate_40ul_I9 + - appliedbiosystemsmicroamp_384_wellplate_40ul_J9 + - appliedbiosystemsmicroamp_384_wellplate_40ul_K9 + - appliedbiosystemsmicroamp_384_wellplate_40ul_L9 + - appliedbiosystemsmicroamp_384_wellplate_40ul_M9 + - appliedbiosystemsmicroamp_384_wellplate_40ul_N9 + - appliedbiosystemsmicroamp_384_wellplate_40ul_O9 + - appliedbiosystemsmicroamp_384_wellplate_40ul_P9 + - appliedbiosystemsmicroamp_384_wellplate_40ul_A10 + - appliedbiosystemsmicroamp_384_wellplate_40ul_B10 + - appliedbiosystemsmicroamp_384_wellplate_40ul_C10 + - appliedbiosystemsmicroamp_384_wellplate_40ul_D10 + - appliedbiosystemsmicroamp_384_wellplate_40ul_E10 + - appliedbiosystemsmicroamp_384_wellplate_40ul_F10 + - appliedbiosystemsmicroamp_384_wellplate_40ul_G10 + - appliedbiosystemsmicroamp_384_wellplate_40ul_H10 + - appliedbiosystemsmicroamp_384_wellplate_40ul_I10 + - appliedbiosystemsmicroamp_384_wellplate_40ul_J10 + - appliedbiosystemsmicroamp_384_wellplate_40ul_K10 + - appliedbiosystemsmicroamp_384_wellplate_40ul_L10 + - appliedbiosystemsmicroamp_384_wellplate_40ul_M10 + - appliedbiosystemsmicroamp_384_wellplate_40ul_N10 + - appliedbiosystemsmicroamp_384_wellplate_40ul_O10 + - appliedbiosystemsmicroamp_384_wellplate_40ul_P10 + - appliedbiosystemsmicroamp_384_wellplate_40ul_A11 + - appliedbiosystemsmicroamp_384_wellplate_40ul_B11 + - appliedbiosystemsmicroamp_384_wellplate_40ul_C11 + - appliedbiosystemsmicroamp_384_wellplate_40ul_D11 + - appliedbiosystemsmicroamp_384_wellplate_40ul_E11 + - appliedbiosystemsmicroamp_384_wellplate_40ul_F11 + - appliedbiosystemsmicroamp_384_wellplate_40ul_G11 + - appliedbiosystemsmicroamp_384_wellplate_40ul_H11 + - appliedbiosystemsmicroamp_384_wellplate_40ul_I11 + - appliedbiosystemsmicroamp_384_wellplate_40ul_J11 + - appliedbiosystemsmicroamp_384_wellplate_40ul_K11 + - appliedbiosystemsmicroamp_384_wellplate_40ul_L11 + - appliedbiosystemsmicroamp_384_wellplate_40ul_M11 + - appliedbiosystemsmicroamp_384_wellplate_40ul_N11 + - appliedbiosystemsmicroamp_384_wellplate_40ul_O11 + - appliedbiosystemsmicroamp_384_wellplate_40ul_P11 + - appliedbiosystemsmicroamp_384_wellplate_40ul_A12 + - appliedbiosystemsmicroamp_384_wellplate_40ul_B12 + - appliedbiosystemsmicroamp_384_wellplate_40ul_C12 + - appliedbiosystemsmicroamp_384_wellplate_40ul_D12 + - appliedbiosystemsmicroamp_384_wellplate_40ul_E12 + - appliedbiosystemsmicroamp_384_wellplate_40ul_F12 + - appliedbiosystemsmicroamp_384_wellplate_40ul_G12 + - appliedbiosystemsmicroamp_384_wellplate_40ul_H12 + - appliedbiosystemsmicroamp_384_wellplate_40ul_I12 + - appliedbiosystemsmicroamp_384_wellplate_40ul_J12 + - appliedbiosystemsmicroamp_384_wellplate_40ul_K12 + - appliedbiosystemsmicroamp_384_wellplate_40ul_L12 + - appliedbiosystemsmicroamp_384_wellplate_40ul_M12 + - appliedbiosystemsmicroamp_384_wellplate_40ul_N12 + - appliedbiosystemsmicroamp_384_wellplate_40ul_O12 + - appliedbiosystemsmicroamp_384_wellplate_40ul_P12 + - appliedbiosystemsmicroamp_384_wellplate_40ul_A13 + - appliedbiosystemsmicroamp_384_wellplate_40ul_B13 + - appliedbiosystemsmicroamp_384_wellplate_40ul_C13 + - appliedbiosystemsmicroamp_384_wellplate_40ul_D13 + - appliedbiosystemsmicroamp_384_wellplate_40ul_E13 + - appliedbiosystemsmicroamp_384_wellplate_40ul_F13 + - appliedbiosystemsmicroamp_384_wellplate_40ul_G13 + - appliedbiosystemsmicroamp_384_wellplate_40ul_H13 + - appliedbiosystemsmicroamp_384_wellplate_40ul_I13 + - appliedbiosystemsmicroamp_384_wellplate_40ul_J13 + - appliedbiosystemsmicroamp_384_wellplate_40ul_K13 + - appliedbiosystemsmicroamp_384_wellplate_40ul_L13 + - appliedbiosystemsmicroamp_384_wellplate_40ul_M13 + - appliedbiosystemsmicroamp_384_wellplate_40ul_N13 + - appliedbiosystemsmicroamp_384_wellplate_40ul_O13 + - appliedbiosystemsmicroamp_384_wellplate_40ul_P13 + - appliedbiosystemsmicroamp_384_wellplate_40ul_A14 + - appliedbiosystemsmicroamp_384_wellplate_40ul_B14 + - appliedbiosystemsmicroamp_384_wellplate_40ul_C14 + - appliedbiosystemsmicroamp_384_wellplate_40ul_D14 + - appliedbiosystemsmicroamp_384_wellplate_40ul_E14 + - appliedbiosystemsmicroamp_384_wellplate_40ul_F14 + - appliedbiosystemsmicroamp_384_wellplate_40ul_G14 + - appliedbiosystemsmicroamp_384_wellplate_40ul_H14 + - appliedbiosystemsmicroamp_384_wellplate_40ul_I14 + - appliedbiosystemsmicroamp_384_wellplate_40ul_J14 + - appliedbiosystemsmicroamp_384_wellplate_40ul_K14 + - appliedbiosystemsmicroamp_384_wellplate_40ul_L14 + - appliedbiosystemsmicroamp_384_wellplate_40ul_M14 + - appliedbiosystemsmicroamp_384_wellplate_40ul_N14 + - appliedbiosystemsmicroamp_384_wellplate_40ul_O14 + - appliedbiosystemsmicroamp_384_wellplate_40ul_P14 + - appliedbiosystemsmicroamp_384_wellplate_40ul_A15 + - appliedbiosystemsmicroamp_384_wellplate_40ul_B15 + - appliedbiosystemsmicroamp_384_wellplate_40ul_C15 + - appliedbiosystemsmicroamp_384_wellplate_40ul_D15 + - appliedbiosystemsmicroamp_384_wellplate_40ul_E15 + - appliedbiosystemsmicroamp_384_wellplate_40ul_F15 + - appliedbiosystemsmicroamp_384_wellplate_40ul_G15 + - appliedbiosystemsmicroamp_384_wellplate_40ul_H15 + - appliedbiosystemsmicroamp_384_wellplate_40ul_I15 + - appliedbiosystemsmicroamp_384_wellplate_40ul_J15 + - appliedbiosystemsmicroamp_384_wellplate_40ul_K15 + - appliedbiosystemsmicroamp_384_wellplate_40ul_L15 + - appliedbiosystemsmicroamp_384_wellplate_40ul_M15 + - appliedbiosystemsmicroamp_384_wellplate_40ul_N15 + - appliedbiosystemsmicroamp_384_wellplate_40ul_O15 + - appliedbiosystemsmicroamp_384_wellplate_40ul_P15 + - appliedbiosystemsmicroamp_384_wellplate_40ul_A16 + - appliedbiosystemsmicroamp_384_wellplate_40ul_B16 + - appliedbiosystemsmicroamp_384_wellplate_40ul_C16 + - appliedbiosystemsmicroamp_384_wellplate_40ul_D16 + - appliedbiosystemsmicroamp_384_wellplate_40ul_E16 + - appliedbiosystemsmicroamp_384_wellplate_40ul_F16 + - appliedbiosystemsmicroamp_384_wellplate_40ul_G16 + - appliedbiosystemsmicroamp_384_wellplate_40ul_H16 + - appliedbiosystemsmicroamp_384_wellplate_40ul_I16 + - appliedbiosystemsmicroamp_384_wellplate_40ul_J16 + - appliedbiosystemsmicroamp_384_wellplate_40ul_K16 + - appliedbiosystemsmicroamp_384_wellplate_40ul_L16 + - appliedbiosystemsmicroamp_384_wellplate_40ul_M16 + - appliedbiosystemsmicroamp_384_wellplate_40ul_N16 + - appliedbiosystemsmicroamp_384_wellplate_40ul_O16 + - appliedbiosystemsmicroamp_384_wellplate_40ul_P16 + - appliedbiosystemsmicroamp_384_wellplate_40ul_A17 + - appliedbiosystemsmicroamp_384_wellplate_40ul_B17 + - appliedbiosystemsmicroamp_384_wellplate_40ul_C17 + - appliedbiosystemsmicroamp_384_wellplate_40ul_D17 + - appliedbiosystemsmicroamp_384_wellplate_40ul_E17 + - appliedbiosystemsmicroamp_384_wellplate_40ul_F17 + - appliedbiosystemsmicroamp_384_wellplate_40ul_G17 + - appliedbiosystemsmicroamp_384_wellplate_40ul_H17 + - appliedbiosystemsmicroamp_384_wellplate_40ul_I17 + - appliedbiosystemsmicroamp_384_wellplate_40ul_J17 + - appliedbiosystemsmicroamp_384_wellplate_40ul_K17 + - appliedbiosystemsmicroamp_384_wellplate_40ul_L17 + - appliedbiosystemsmicroamp_384_wellplate_40ul_M17 + - appliedbiosystemsmicroamp_384_wellplate_40ul_N17 + - appliedbiosystemsmicroamp_384_wellplate_40ul_O17 + - appliedbiosystemsmicroamp_384_wellplate_40ul_P17 + - appliedbiosystemsmicroamp_384_wellplate_40ul_A18 + - appliedbiosystemsmicroamp_384_wellplate_40ul_B18 + - appliedbiosystemsmicroamp_384_wellplate_40ul_C18 + - appliedbiosystemsmicroamp_384_wellplate_40ul_D18 + - appliedbiosystemsmicroamp_384_wellplate_40ul_E18 + - appliedbiosystemsmicroamp_384_wellplate_40ul_F18 + - appliedbiosystemsmicroamp_384_wellplate_40ul_G18 + - appliedbiosystemsmicroamp_384_wellplate_40ul_H18 + - appliedbiosystemsmicroamp_384_wellplate_40ul_I18 + - appliedbiosystemsmicroamp_384_wellplate_40ul_J18 + - appliedbiosystemsmicroamp_384_wellplate_40ul_K18 + - appliedbiosystemsmicroamp_384_wellplate_40ul_L18 + - appliedbiosystemsmicroamp_384_wellplate_40ul_M18 + - appliedbiosystemsmicroamp_384_wellplate_40ul_N18 + - appliedbiosystemsmicroamp_384_wellplate_40ul_O18 + - appliedbiosystemsmicroamp_384_wellplate_40ul_P18 + - appliedbiosystemsmicroamp_384_wellplate_40ul_A19 + - appliedbiosystemsmicroamp_384_wellplate_40ul_B19 + - appliedbiosystemsmicroamp_384_wellplate_40ul_C19 + - appliedbiosystemsmicroamp_384_wellplate_40ul_D19 + - appliedbiosystemsmicroamp_384_wellplate_40ul_E19 + - appliedbiosystemsmicroamp_384_wellplate_40ul_F19 + - appliedbiosystemsmicroamp_384_wellplate_40ul_G19 + - appliedbiosystemsmicroamp_384_wellplate_40ul_H19 + - appliedbiosystemsmicroamp_384_wellplate_40ul_I19 + - appliedbiosystemsmicroamp_384_wellplate_40ul_J19 + - appliedbiosystemsmicroamp_384_wellplate_40ul_K19 + - appliedbiosystemsmicroamp_384_wellplate_40ul_L19 + - appliedbiosystemsmicroamp_384_wellplate_40ul_M19 + - appliedbiosystemsmicroamp_384_wellplate_40ul_N19 + - appliedbiosystemsmicroamp_384_wellplate_40ul_O19 + - appliedbiosystemsmicroamp_384_wellplate_40ul_P19 + - appliedbiosystemsmicroamp_384_wellplate_40ul_A20 + - appliedbiosystemsmicroamp_384_wellplate_40ul_B20 + - appliedbiosystemsmicroamp_384_wellplate_40ul_C20 + - appliedbiosystemsmicroamp_384_wellplate_40ul_D20 + - appliedbiosystemsmicroamp_384_wellplate_40ul_E20 + - appliedbiosystemsmicroamp_384_wellplate_40ul_F20 + - appliedbiosystemsmicroamp_384_wellplate_40ul_G20 + - appliedbiosystemsmicroamp_384_wellplate_40ul_H20 + - appliedbiosystemsmicroamp_384_wellplate_40ul_I20 + - appliedbiosystemsmicroamp_384_wellplate_40ul_J20 + - appliedbiosystemsmicroamp_384_wellplate_40ul_K20 + - appliedbiosystemsmicroamp_384_wellplate_40ul_L20 + - appliedbiosystemsmicroamp_384_wellplate_40ul_M20 + - appliedbiosystemsmicroamp_384_wellplate_40ul_N20 + - appliedbiosystemsmicroamp_384_wellplate_40ul_O20 + - appliedbiosystemsmicroamp_384_wellplate_40ul_P20 + - appliedbiosystemsmicroamp_384_wellplate_40ul_A21 + - appliedbiosystemsmicroamp_384_wellplate_40ul_B21 + - appliedbiosystemsmicroamp_384_wellplate_40ul_C21 + - appliedbiosystemsmicroamp_384_wellplate_40ul_D21 + - appliedbiosystemsmicroamp_384_wellplate_40ul_E21 + - appliedbiosystemsmicroamp_384_wellplate_40ul_F21 + - appliedbiosystemsmicroamp_384_wellplate_40ul_G21 + - appliedbiosystemsmicroamp_384_wellplate_40ul_H21 + - appliedbiosystemsmicroamp_384_wellplate_40ul_I21 + - appliedbiosystemsmicroamp_384_wellplate_40ul_J21 + - appliedbiosystemsmicroamp_384_wellplate_40ul_K21 + - appliedbiosystemsmicroamp_384_wellplate_40ul_L21 + - appliedbiosystemsmicroamp_384_wellplate_40ul_M21 + - appliedbiosystemsmicroamp_384_wellplate_40ul_N21 + - appliedbiosystemsmicroamp_384_wellplate_40ul_O21 + - appliedbiosystemsmicroamp_384_wellplate_40ul_P21 + - appliedbiosystemsmicroamp_384_wellplate_40ul_A22 + - appliedbiosystemsmicroamp_384_wellplate_40ul_B22 + - appliedbiosystemsmicroamp_384_wellplate_40ul_C22 + - appliedbiosystemsmicroamp_384_wellplate_40ul_D22 + - appliedbiosystemsmicroamp_384_wellplate_40ul_E22 + - appliedbiosystemsmicroamp_384_wellplate_40ul_F22 + - appliedbiosystemsmicroamp_384_wellplate_40ul_G22 + - appliedbiosystemsmicroamp_384_wellplate_40ul_H22 + - appliedbiosystemsmicroamp_384_wellplate_40ul_I22 + - appliedbiosystemsmicroamp_384_wellplate_40ul_J22 + - appliedbiosystemsmicroamp_384_wellplate_40ul_K22 + - appliedbiosystemsmicroamp_384_wellplate_40ul_L22 + - appliedbiosystemsmicroamp_384_wellplate_40ul_M22 + - appliedbiosystemsmicroamp_384_wellplate_40ul_N22 + - appliedbiosystemsmicroamp_384_wellplate_40ul_O22 + - appliedbiosystemsmicroamp_384_wellplate_40ul_P22 + - appliedbiosystemsmicroamp_384_wellplate_40ul_A23 + - appliedbiosystemsmicroamp_384_wellplate_40ul_B23 + - appliedbiosystemsmicroamp_384_wellplate_40ul_C23 + - appliedbiosystemsmicroamp_384_wellplate_40ul_D23 + - appliedbiosystemsmicroamp_384_wellplate_40ul_E23 + - appliedbiosystemsmicroamp_384_wellplate_40ul_F23 + - appliedbiosystemsmicroamp_384_wellplate_40ul_G23 + - appliedbiosystemsmicroamp_384_wellplate_40ul_H23 + - appliedbiosystemsmicroamp_384_wellplate_40ul_I23 + - appliedbiosystemsmicroamp_384_wellplate_40ul_J23 + - appliedbiosystemsmicroamp_384_wellplate_40ul_K23 + - appliedbiosystemsmicroamp_384_wellplate_40ul_L23 + - appliedbiosystemsmicroamp_384_wellplate_40ul_M23 + - appliedbiosystemsmicroamp_384_wellplate_40ul_N23 + - appliedbiosystemsmicroamp_384_wellplate_40ul_O23 + - appliedbiosystemsmicroamp_384_wellplate_40ul_P23 + - appliedbiosystemsmicroamp_384_wellplate_40ul_A24 + - appliedbiosystemsmicroamp_384_wellplate_40ul_B24 + - appliedbiosystemsmicroamp_384_wellplate_40ul_C24 + - appliedbiosystemsmicroamp_384_wellplate_40ul_D24 + - appliedbiosystemsmicroamp_384_wellplate_40ul_E24 + - appliedbiosystemsmicroamp_384_wellplate_40ul_F24 + - appliedbiosystemsmicroamp_384_wellplate_40ul_G24 + - appliedbiosystemsmicroamp_384_wellplate_40ul_H24 + - appliedbiosystemsmicroamp_384_wellplate_40ul_I24 + - appliedbiosystemsmicroamp_384_wellplate_40ul_J24 + - appliedbiosystemsmicroamp_384_wellplate_40ul_K24 + - appliedbiosystemsmicroamp_384_wellplate_40ul_L24 + - appliedbiosystemsmicroamp_384_wellplate_40ul_M24 + - appliedbiosystemsmicroamp_384_wellplate_40ul_N24 + - appliedbiosystemsmicroamp_384_wellplate_40ul_O24 + - appliedbiosystemsmicroamp_384_wellplate_40ul_P24 + class: '' + config: + barcode: null + category: plate + model: Applied Biosystems MicroAmp 384 Well Plate 40 µL + ordering: + A1: appliedbiosystemsmicroamp_384_wellplate_40ul_A1 + B1: appliedbiosystemsmicroamp_384_wellplate_40ul_B1 + C1: appliedbiosystemsmicroamp_384_wellplate_40ul_C1 + D1: appliedbiosystemsmicroamp_384_wellplate_40ul_D1 + E1: appliedbiosystemsmicroamp_384_wellplate_40ul_E1 + F1: appliedbiosystemsmicroamp_384_wellplate_40ul_F1 + G1: appliedbiosystemsmicroamp_384_wellplate_40ul_G1 + H1: appliedbiosystemsmicroamp_384_wellplate_40ul_H1 + I1: appliedbiosystemsmicroamp_384_wellplate_40ul_I1 + J1: appliedbiosystemsmicroamp_384_wellplate_40ul_J1 + K1: appliedbiosystemsmicroamp_384_wellplate_40ul_K1 + L1: appliedbiosystemsmicroamp_384_wellplate_40ul_L1 + M1: appliedbiosystemsmicroamp_384_wellplate_40ul_M1 + N1: appliedbiosystemsmicroamp_384_wellplate_40ul_N1 + O1: appliedbiosystemsmicroamp_384_wellplate_40ul_O1 + P1: appliedbiosystemsmicroamp_384_wellplate_40ul_P1 + A2: appliedbiosystemsmicroamp_384_wellplate_40ul_A2 + B2: appliedbiosystemsmicroamp_384_wellplate_40ul_B2 + C2: appliedbiosystemsmicroamp_384_wellplate_40ul_C2 + D2: appliedbiosystemsmicroamp_384_wellplate_40ul_D2 + E2: appliedbiosystemsmicroamp_384_wellplate_40ul_E2 + F2: appliedbiosystemsmicroamp_384_wellplate_40ul_F2 + G2: appliedbiosystemsmicroamp_384_wellplate_40ul_G2 + H2: appliedbiosystemsmicroamp_384_wellplate_40ul_H2 + I2: appliedbiosystemsmicroamp_384_wellplate_40ul_I2 + J2: appliedbiosystemsmicroamp_384_wellplate_40ul_J2 + K2: appliedbiosystemsmicroamp_384_wellplate_40ul_K2 + L2: appliedbiosystemsmicroamp_384_wellplate_40ul_L2 + M2: appliedbiosystemsmicroamp_384_wellplate_40ul_M2 + N2: appliedbiosystemsmicroamp_384_wellplate_40ul_N2 + O2: appliedbiosystemsmicroamp_384_wellplate_40ul_O2 + P2: appliedbiosystemsmicroamp_384_wellplate_40ul_P2 + A3: appliedbiosystemsmicroamp_384_wellplate_40ul_A3 + B3: appliedbiosystemsmicroamp_384_wellplate_40ul_B3 + C3: appliedbiosystemsmicroamp_384_wellplate_40ul_C3 + D3: appliedbiosystemsmicroamp_384_wellplate_40ul_D3 + E3: appliedbiosystemsmicroamp_384_wellplate_40ul_E3 + F3: appliedbiosystemsmicroamp_384_wellplate_40ul_F3 + G3: appliedbiosystemsmicroamp_384_wellplate_40ul_G3 + H3: appliedbiosystemsmicroamp_384_wellplate_40ul_H3 + I3: appliedbiosystemsmicroamp_384_wellplate_40ul_I3 + J3: appliedbiosystemsmicroamp_384_wellplate_40ul_J3 + K3: appliedbiosystemsmicroamp_384_wellplate_40ul_K3 + L3: appliedbiosystemsmicroamp_384_wellplate_40ul_L3 + M3: appliedbiosystemsmicroamp_384_wellplate_40ul_M3 + N3: appliedbiosystemsmicroamp_384_wellplate_40ul_N3 + O3: appliedbiosystemsmicroamp_384_wellplate_40ul_O3 + P3: appliedbiosystemsmicroamp_384_wellplate_40ul_P3 + A4: appliedbiosystemsmicroamp_384_wellplate_40ul_A4 + B4: appliedbiosystemsmicroamp_384_wellplate_40ul_B4 + C4: appliedbiosystemsmicroamp_384_wellplate_40ul_C4 + D4: appliedbiosystemsmicroamp_384_wellplate_40ul_D4 + E4: appliedbiosystemsmicroamp_384_wellplate_40ul_E4 + F4: appliedbiosystemsmicroamp_384_wellplate_40ul_F4 + G4: appliedbiosystemsmicroamp_384_wellplate_40ul_G4 + H4: appliedbiosystemsmicroamp_384_wellplate_40ul_H4 + I4: appliedbiosystemsmicroamp_384_wellplate_40ul_I4 + J4: appliedbiosystemsmicroamp_384_wellplate_40ul_J4 + K4: appliedbiosystemsmicroamp_384_wellplate_40ul_K4 + L4: appliedbiosystemsmicroamp_384_wellplate_40ul_L4 + M4: appliedbiosystemsmicroamp_384_wellplate_40ul_M4 + N4: appliedbiosystemsmicroamp_384_wellplate_40ul_N4 + O4: appliedbiosystemsmicroamp_384_wellplate_40ul_O4 + P4: appliedbiosystemsmicroamp_384_wellplate_40ul_P4 + A5: appliedbiosystemsmicroamp_384_wellplate_40ul_A5 + B5: appliedbiosystemsmicroamp_384_wellplate_40ul_B5 + C5: appliedbiosystemsmicroamp_384_wellplate_40ul_C5 + D5: appliedbiosystemsmicroamp_384_wellplate_40ul_D5 + E5: appliedbiosystemsmicroamp_384_wellplate_40ul_E5 + F5: appliedbiosystemsmicroamp_384_wellplate_40ul_F5 + G5: appliedbiosystemsmicroamp_384_wellplate_40ul_G5 + H5: appliedbiosystemsmicroamp_384_wellplate_40ul_H5 + I5: appliedbiosystemsmicroamp_384_wellplate_40ul_I5 + J5: appliedbiosystemsmicroamp_384_wellplate_40ul_J5 + K5: appliedbiosystemsmicroamp_384_wellplate_40ul_K5 + L5: appliedbiosystemsmicroamp_384_wellplate_40ul_L5 + M5: appliedbiosystemsmicroamp_384_wellplate_40ul_M5 + N5: appliedbiosystemsmicroamp_384_wellplate_40ul_N5 + O5: appliedbiosystemsmicroamp_384_wellplate_40ul_O5 + P5: appliedbiosystemsmicroamp_384_wellplate_40ul_P5 + A6: appliedbiosystemsmicroamp_384_wellplate_40ul_A6 + B6: appliedbiosystemsmicroamp_384_wellplate_40ul_B6 + C6: appliedbiosystemsmicroamp_384_wellplate_40ul_C6 + D6: appliedbiosystemsmicroamp_384_wellplate_40ul_D6 + E6: appliedbiosystemsmicroamp_384_wellplate_40ul_E6 + F6: appliedbiosystemsmicroamp_384_wellplate_40ul_F6 + G6: appliedbiosystemsmicroamp_384_wellplate_40ul_G6 + H6: appliedbiosystemsmicroamp_384_wellplate_40ul_H6 + I6: appliedbiosystemsmicroamp_384_wellplate_40ul_I6 + J6: appliedbiosystemsmicroamp_384_wellplate_40ul_J6 + K6: appliedbiosystemsmicroamp_384_wellplate_40ul_K6 + L6: appliedbiosystemsmicroamp_384_wellplate_40ul_L6 + M6: appliedbiosystemsmicroamp_384_wellplate_40ul_M6 + N6: appliedbiosystemsmicroamp_384_wellplate_40ul_N6 + O6: appliedbiosystemsmicroamp_384_wellplate_40ul_O6 + P6: appliedbiosystemsmicroamp_384_wellplate_40ul_P6 + A7: appliedbiosystemsmicroamp_384_wellplate_40ul_A7 + B7: appliedbiosystemsmicroamp_384_wellplate_40ul_B7 + C7: appliedbiosystemsmicroamp_384_wellplate_40ul_C7 + D7: appliedbiosystemsmicroamp_384_wellplate_40ul_D7 + E7: appliedbiosystemsmicroamp_384_wellplate_40ul_E7 + F7: appliedbiosystemsmicroamp_384_wellplate_40ul_F7 + G7: appliedbiosystemsmicroamp_384_wellplate_40ul_G7 + H7: appliedbiosystemsmicroamp_384_wellplate_40ul_H7 + I7: appliedbiosystemsmicroamp_384_wellplate_40ul_I7 + J7: appliedbiosystemsmicroamp_384_wellplate_40ul_J7 + K7: appliedbiosystemsmicroamp_384_wellplate_40ul_K7 + L7: appliedbiosystemsmicroamp_384_wellplate_40ul_L7 + M7: appliedbiosystemsmicroamp_384_wellplate_40ul_M7 + N7: appliedbiosystemsmicroamp_384_wellplate_40ul_N7 + O7: appliedbiosystemsmicroamp_384_wellplate_40ul_O7 + P7: appliedbiosystemsmicroamp_384_wellplate_40ul_P7 + A8: appliedbiosystemsmicroamp_384_wellplate_40ul_A8 + B8: appliedbiosystemsmicroamp_384_wellplate_40ul_B8 + C8: appliedbiosystemsmicroamp_384_wellplate_40ul_C8 + D8: appliedbiosystemsmicroamp_384_wellplate_40ul_D8 + E8: appliedbiosystemsmicroamp_384_wellplate_40ul_E8 + F8: appliedbiosystemsmicroamp_384_wellplate_40ul_F8 + G8: appliedbiosystemsmicroamp_384_wellplate_40ul_G8 + H8: appliedbiosystemsmicroamp_384_wellplate_40ul_H8 + I8: appliedbiosystemsmicroamp_384_wellplate_40ul_I8 + J8: appliedbiosystemsmicroamp_384_wellplate_40ul_J8 + K8: appliedbiosystemsmicroamp_384_wellplate_40ul_K8 + L8: appliedbiosystemsmicroamp_384_wellplate_40ul_L8 + M8: appliedbiosystemsmicroamp_384_wellplate_40ul_M8 + N8: appliedbiosystemsmicroamp_384_wellplate_40ul_N8 + O8: appliedbiosystemsmicroamp_384_wellplate_40ul_O8 + P8: appliedbiosystemsmicroamp_384_wellplate_40ul_P8 + A9: appliedbiosystemsmicroamp_384_wellplate_40ul_A9 + B9: appliedbiosystemsmicroamp_384_wellplate_40ul_B9 + C9: appliedbiosystemsmicroamp_384_wellplate_40ul_C9 + D9: appliedbiosystemsmicroamp_384_wellplate_40ul_D9 + E9: appliedbiosystemsmicroamp_384_wellplate_40ul_E9 + F9: appliedbiosystemsmicroamp_384_wellplate_40ul_F9 + G9: appliedbiosystemsmicroamp_384_wellplate_40ul_G9 + H9: appliedbiosystemsmicroamp_384_wellplate_40ul_H9 + I9: appliedbiosystemsmicroamp_384_wellplate_40ul_I9 + J9: appliedbiosystemsmicroamp_384_wellplate_40ul_J9 + K9: appliedbiosystemsmicroamp_384_wellplate_40ul_K9 + L9: appliedbiosystemsmicroamp_384_wellplate_40ul_L9 + M9: appliedbiosystemsmicroamp_384_wellplate_40ul_M9 + N9: appliedbiosystemsmicroamp_384_wellplate_40ul_N9 + O9: appliedbiosystemsmicroamp_384_wellplate_40ul_O9 + P9: appliedbiosystemsmicroamp_384_wellplate_40ul_P9 + A10: appliedbiosystemsmicroamp_384_wellplate_40ul_A10 + B10: appliedbiosystemsmicroamp_384_wellplate_40ul_B10 + C10: appliedbiosystemsmicroamp_384_wellplate_40ul_C10 + D10: appliedbiosystemsmicroamp_384_wellplate_40ul_D10 + E10: appliedbiosystemsmicroamp_384_wellplate_40ul_E10 + F10: appliedbiosystemsmicroamp_384_wellplate_40ul_F10 + G10: appliedbiosystemsmicroamp_384_wellplate_40ul_G10 + H10: appliedbiosystemsmicroamp_384_wellplate_40ul_H10 + I10: appliedbiosystemsmicroamp_384_wellplate_40ul_I10 + J10: appliedbiosystemsmicroamp_384_wellplate_40ul_J10 + K10: appliedbiosystemsmicroamp_384_wellplate_40ul_K10 + L10: appliedbiosystemsmicroamp_384_wellplate_40ul_L10 + M10: appliedbiosystemsmicroamp_384_wellplate_40ul_M10 + N10: appliedbiosystemsmicroamp_384_wellplate_40ul_N10 + O10: appliedbiosystemsmicroamp_384_wellplate_40ul_O10 + P10: appliedbiosystemsmicroamp_384_wellplate_40ul_P10 + A11: appliedbiosystemsmicroamp_384_wellplate_40ul_A11 + B11: appliedbiosystemsmicroamp_384_wellplate_40ul_B11 + C11: appliedbiosystemsmicroamp_384_wellplate_40ul_C11 + D11: appliedbiosystemsmicroamp_384_wellplate_40ul_D11 + E11: appliedbiosystemsmicroamp_384_wellplate_40ul_E11 + F11: appliedbiosystemsmicroamp_384_wellplate_40ul_F11 + G11: appliedbiosystemsmicroamp_384_wellplate_40ul_G11 + H11: appliedbiosystemsmicroamp_384_wellplate_40ul_H11 + I11: appliedbiosystemsmicroamp_384_wellplate_40ul_I11 + J11: appliedbiosystemsmicroamp_384_wellplate_40ul_J11 + K11: appliedbiosystemsmicroamp_384_wellplate_40ul_K11 + L11: appliedbiosystemsmicroamp_384_wellplate_40ul_L11 + M11: appliedbiosystemsmicroamp_384_wellplate_40ul_M11 + N11: appliedbiosystemsmicroamp_384_wellplate_40ul_N11 + O11: appliedbiosystemsmicroamp_384_wellplate_40ul_O11 + P11: appliedbiosystemsmicroamp_384_wellplate_40ul_P11 + A12: appliedbiosystemsmicroamp_384_wellplate_40ul_A12 + B12: appliedbiosystemsmicroamp_384_wellplate_40ul_B12 + C12: appliedbiosystemsmicroamp_384_wellplate_40ul_C12 + D12: appliedbiosystemsmicroamp_384_wellplate_40ul_D12 + E12: appliedbiosystemsmicroamp_384_wellplate_40ul_E12 + F12: appliedbiosystemsmicroamp_384_wellplate_40ul_F12 + G12: appliedbiosystemsmicroamp_384_wellplate_40ul_G12 + H12: appliedbiosystemsmicroamp_384_wellplate_40ul_H12 + I12: appliedbiosystemsmicroamp_384_wellplate_40ul_I12 + J12: appliedbiosystemsmicroamp_384_wellplate_40ul_J12 + K12: appliedbiosystemsmicroamp_384_wellplate_40ul_K12 + L12: appliedbiosystemsmicroamp_384_wellplate_40ul_L12 + M12: appliedbiosystemsmicroamp_384_wellplate_40ul_M12 + N12: appliedbiosystemsmicroamp_384_wellplate_40ul_N12 + O12: appliedbiosystemsmicroamp_384_wellplate_40ul_O12 + P12: appliedbiosystemsmicroamp_384_wellplate_40ul_P12 + A13: appliedbiosystemsmicroamp_384_wellplate_40ul_A13 + B13: appliedbiosystemsmicroamp_384_wellplate_40ul_B13 + C13: appliedbiosystemsmicroamp_384_wellplate_40ul_C13 + D13: appliedbiosystemsmicroamp_384_wellplate_40ul_D13 + E13: appliedbiosystemsmicroamp_384_wellplate_40ul_E13 + F13: appliedbiosystemsmicroamp_384_wellplate_40ul_F13 + G13: appliedbiosystemsmicroamp_384_wellplate_40ul_G13 + H13: appliedbiosystemsmicroamp_384_wellplate_40ul_H13 + I13: appliedbiosystemsmicroamp_384_wellplate_40ul_I13 + J13: appliedbiosystemsmicroamp_384_wellplate_40ul_J13 + K13: appliedbiosystemsmicroamp_384_wellplate_40ul_K13 + L13: appliedbiosystemsmicroamp_384_wellplate_40ul_L13 + M13: appliedbiosystemsmicroamp_384_wellplate_40ul_M13 + N13: appliedbiosystemsmicroamp_384_wellplate_40ul_N13 + O13: appliedbiosystemsmicroamp_384_wellplate_40ul_O13 + P13: appliedbiosystemsmicroamp_384_wellplate_40ul_P13 + A14: appliedbiosystemsmicroamp_384_wellplate_40ul_A14 + B14: appliedbiosystemsmicroamp_384_wellplate_40ul_B14 + C14: appliedbiosystemsmicroamp_384_wellplate_40ul_C14 + D14: appliedbiosystemsmicroamp_384_wellplate_40ul_D14 + E14: appliedbiosystemsmicroamp_384_wellplate_40ul_E14 + F14: appliedbiosystemsmicroamp_384_wellplate_40ul_F14 + G14: appliedbiosystemsmicroamp_384_wellplate_40ul_G14 + H14: appliedbiosystemsmicroamp_384_wellplate_40ul_H14 + I14: appliedbiosystemsmicroamp_384_wellplate_40ul_I14 + J14: appliedbiosystemsmicroamp_384_wellplate_40ul_J14 + K14: appliedbiosystemsmicroamp_384_wellplate_40ul_K14 + L14: appliedbiosystemsmicroamp_384_wellplate_40ul_L14 + M14: appliedbiosystemsmicroamp_384_wellplate_40ul_M14 + N14: appliedbiosystemsmicroamp_384_wellplate_40ul_N14 + O14: appliedbiosystemsmicroamp_384_wellplate_40ul_O14 + P14: appliedbiosystemsmicroamp_384_wellplate_40ul_P14 + A15: appliedbiosystemsmicroamp_384_wellplate_40ul_A15 + B15: appliedbiosystemsmicroamp_384_wellplate_40ul_B15 + C15: appliedbiosystemsmicroamp_384_wellplate_40ul_C15 + D15: appliedbiosystemsmicroamp_384_wellplate_40ul_D15 + E15: appliedbiosystemsmicroamp_384_wellplate_40ul_E15 + F15: appliedbiosystemsmicroamp_384_wellplate_40ul_F15 + G15: appliedbiosystemsmicroamp_384_wellplate_40ul_G15 + H15: appliedbiosystemsmicroamp_384_wellplate_40ul_H15 + I15: appliedbiosystemsmicroamp_384_wellplate_40ul_I15 + J15: appliedbiosystemsmicroamp_384_wellplate_40ul_J15 + K15: appliedbiosystemsmicroamp_384_wellplate_40ul_K15 + L15: appliedbiosystemsmicroamp_384_wellplate_40ul_L15 + M15: appliedbiosystemsmicroamp_384_wellplate_40ul_M15 + N15: appliedbiosystemsmicroamp_384_wellplate_40ul_N15 + O15: appliedbiosystemsmicroamp_384_wellplate_40ul_O15 + P15: appliedbiosystemsmicroamp_384_wellplate_40ul_P15 + A16: appliedbiosystemsmicroamp_384_wellplate_40ul_A16 + B16: appliedbiosystemsmicroamp_384_wellplate_40ul_B16 + C16: appliedbiosystemsmicroamp_384_wellplate_40ul_C16 + D16: appliedbiosystemsmicroamp_384_wellplate_40ul_D16 + E16: appliedbiosystemsmicroamp_384_wellplate_40ul_E16 + F16: appliedbiosystemsmicroamp_384_wellplate_40ul_F16 + G16: appliedbiosystemsmicroamp_384_wellplate_40ul_G16 + H16: appliedbiosystemsmicroamp_384_wellplate_40ul_H16 + I16: appliedbiosystemsmicroamp_384_wellplate_40ul_I16 + J16: appliedbiosystemsmicroamp_384_wellplate_40ul_J16 + K16: appliedbiosystemsmicroamp_384_wellplate_40ul_K16 + L16: appliedbiosystemsmicroamp_384_wellplate_40ul_L16 + M16: appliedbiosystemsmicroamp_384_wellplate_40ul_M16 + N16: appliedbiosystemsmicroamp_384_wellplate_40ul_N16 + O16: appliedbiosystemsmicroamp_384_wellplate_40ul_O16 + P16: appliedbiosystemsmicroamp_384_wellplate_40ul_P16 + A17: appliedbiosystemsmicroamp_384_wellplate_40ul_A17 + B17: appliedbiosystemsmicroamp_384_wellplate_40ul_B17 + C17: appliedbiosystemsmicroamp_384_wellplate_40ul_C17 + D17: appliedbiosystemsmicroamp_384_wellplate_40ul_D17 + E17: appliedbiosystemsmicroamp_384_wellplate_40ul_E17 + F17: appliedbiosystemsmicroamp_384_wellplate_40ul_F17 + G17: appliedbiosystemsmicroamp_384_wellplate_40ul_G17 + H17: appliedbiosystemsmicroamp_384_wellplate_40ul_H17 + I17: appliedbiosystemsmicroamp_384_wellplate_40ul_I17 + J17: appliedbiosystemsmicroamp_384_wellplate_40ul_J17 + K17: appliedbiosystemsmicroamp_384_wellplate_40ul_K17 + L17: appliedbiosystemsmicroamp_384_wellplate_40ul_L17 + M17: appliedbiosystemsmicroamp_384_wellplate_40ul_M17 + N17: appliedbiosystemsmicroamp_384_wellplate_40ul_N17 + O17: appliedbiosystemsmicroamp_384_wellplate_40ul_O17 + P17: appliedbiosystemsmicroamp_384_wellplate_40ul_P17 + A18: appliedbiosystemsmicroamp_384_wellplate_40ul_A18 + B18: appliedbiosystemsmicroamp_384_wellplate_40ul_B18 + C18: appliedbiosystemsmicroamp_384_wellplate_40ul_C18 + D18: appliedbiosystemsmicroamp_384_wellplate_40ul_D18 + E18: appliedbiosystemsmicroamp_384_wellplate_40ul_E18 + F18: appliedbiosystemsmicroamp_384_wellplate_40ul_F18 + G18: appliedbiosystemsmicroamp_384_wellplate_40ul_G18 + H18: appliedbiosystemsmicroamp_384_wellplate_40ul_H18 + I18: appliedbiosystemsmicroamp_384_wellplate_40ul_I18 + J18: appliedbiosystemsmicroamp_384_wellplate_40ul_J18 + K18: appliedbiosystemsmicroamp_384_wellplate_40ul_K18 + L18: appliedbiosystemsmicroamp_384_wellplate_40ul_L18 + M18: appliedbiosystemsmicroamp_384_wellplate_40ul_M18 + N18: appliedbiosystemsmicroamp_384_wellplate_40ul_N18 + O18: appliedbiosystemsmicroamp_384_wellplate_40ul_O18 + P18: appliedbiosystemsmicroamp_384_wellplate_40ul_P18 + A19: appliedbiosystemsmicroamp_384_wellplate_40ul_A19 + B19: appliedbiosystemsmicroamp_384_wellplate_40ul_B19 + C19: appliedbiosystemsmicroamp_384_wellplate_40ul_C19 + D19: appliedbiosystemsmicroamp_384_wellplate_40ul_D19 + E19: appliedbiosystemsmicroamp_384_wellplate_40ul_E19 + F19: appliedbiosystemsmicroamp_384_wellplate_40ul_F19 + G19: appliedbiosystemsmicroamp_384_wellplate_40ul_G19 + H19: appliedbiosystemsmicroamp_384_wellplate_40ul_H19 + I19: appliedbiosystemsmicroamp_384_wellplate_40ul_I19 + J19: appliedbiosystemsmicroamp_384_wellplate_40ul_J19 + K19: appliedbiosystemsmicroamp_384_wellplate_40ul_K19 + L19: appliedbiosystemsmicroamp_384_wellplate_40ul_L19 + M19: appliedbiosystemsmicroamp_384_wellplate_40ul_M19 + N19: appliedbiosystemsmicroamp_384_wellplate_40ul_N19 + O19: appliedbiosystemsmicroamp_384_wellplate_40ul_O19 + P19: appliedbiosystemsmicroamp_384_wellplate_40ul_P19 + A20: appliedbiosystemsmicroamp_384_wellplate_40ul_A20 + B20: appliedbiosystemsmicroamp_384_wellplate_40ul_B20 + C20: appliedbiosystemsmicroamp_384_wellplate_40ul_C20 + D20: appliedbiosystemsmicroamp_384_wellplate_40ul_D20 + E20: appliedbiosystemsmicroamp_384_wellplate_40ul_E20 + F20: appliedbiosystemsmicroamp_384_wellplate_40ul_F20 + G20: appliedbiosystemsmicroamp_384_wellplate_40ul_G20 + H20: appliedbiosystemsmicroamp_384_wellplate_40ul_H20 + I20: appliedbiosystemsmicroamp_384_wellplate_40ul_I20 + J20: appliedbiosystemsmicroamp_384_wellplate_40ul_J20 + K20: appliedbiosystemsmicroamp_384_wellplate_40ul_K20 + L20: appliedbiosystemsmicroamp_384_wellplate_40ul_L20 + M20: appliedbiosystemsmicroamp_384_wellplate_40ul_M20 + N20: appliedbiosystemsmicroamp_384_wellplate_40ul_N20 + O20: appliedbiosystemsmicroamp_384_wellplate_40ul_O20 + P20: appliedbiosystemsmicroamp_384_wellplate_40ul_P20 + A21: appliedbiosystemsmicroamp_384_wellplate_40ul_A21 + B21: appliedbiosystemsmicroamp_384_wellplate_40ul_B21 + C21: appliedbiosystemsmicroamp_384_wellplate_40ul_C21 + D21: appliedbiosystemsmicroamp_384_wellplate_40ul_D21 + E21: appliedbiosystemsmicroamp_384_wellplate_40ul_E21 + F21: appliedbiosystemsmicroamp_384_wellplate_40ul_F21 + G21: appliedbiosystemsmicroamp_384_wellplate_40ul_G21 + H21: appliedbiosystemsmicroamp_384_wellplate_40ul_H21 + I21: appliedbiosystemsmicroamp_384_wellplate_40ul_I21 + J21: appliedbiosystemsmicroamp_384_wellplate_40ul_J21 + K21: appliedbiosystemsmicroamp_384_wellplate_40ul_K21 + L21: appliedbiosystemsmicroamp_384_wellplate_40ul_L21 + M21: appliedbiosystemsmicroamp_384_wellplate_40ul_M21 + N21: appliedbiosystemsmicroamp_384_wellplate_40ul_N21 + O21: appliedbiosystemsmicroamp_384_wellplate_40ul_O21 + P21: appliedbiosystemsmicroamp_384_wellplate_40ul_P21 + A22: appliedbiosystemsmicroamp_384_wellplate_40ul_A22 + B22: appliedbiosystemsmicroamp_384_wellplate_40ul_B22 + C22: appliedbiosystemsmicroamp_384_wellplate_40ul_C22 + D22: appliedbiosystemsmicroamp_384_wellplate_40ul_D22 + E22: appliedbiosystemsmicroamp_384_wellplate_40ul_E22 + F22: appliedbiosystemsmicroamp_384_wellplate_40ul_F22 + G22: appliedbiosystemsmicroamp_384_wellplate_40ul_G22 + H22: appliedbiosystemsmicroamp_384_wellplate_40ul_H22 + I22: appliedbiosystemsmicroamp_384_wellplate_40ul_I22 + J22: appliedbiosystemsmicroamp_384_wellplate_40ul_J22 + K22: appliedbiosystemsmicroamp_384_wellplate_40ul_K22 + L22: appliedbiosystemsmicroamp_384_wellplate_40ul_L22 + M22: appliedbiosystemsmicroamp_384_wellplate_40ul_M22 + N22: appliedbiosystemsmicroamp_384_wellplate_40ul_N22 + O22: appliedbiosystemsmicroamp_384_wellplate_40ul_O22 + P22: appliedbiosystemsmicroamp_384_wellplate_40ul_P22 + A23: appliedbiosystemsmicroamp_384_wellplate_40ul_A23 + B23: appliedbiosystemsmicroamp_384_wellplate_40ul_B23 + C23: appliedbiosystemsmicroamp_384_wellplate_40ul_C23 + D23: appliedbiosystemsmicroamp_384_wellplate_40ul_D23 + E23: appliedbiosystemsmicroamp_384_wellplate_40ul_E23 + F23: appliedbiosystemsmicroamp_384_wellplate_40ul_F23 + G23: appliedbiosystemsmicroamp_384_wellplate_40ul_G23 + H23: appliedbiosystemsmicroamp_384_wellplate_40ul_H23 + I23: appliedbiosystemsmicroamp_384_wellplate_40ul_I23 + J23: appliedbiosystemsmicroamp_384_wellplate_40ul_J23 + K23: appliedbiosystemsmicroamp_384_wellplate_40ul_K23 + L23: appliedbiosystemsmicroamp_384_wellplate_40ul_L23 + M23: appliedbiosystemsmicroamp_384_wellplate_40ul_M23 + N23: appliedbiosystemsmicroamp_384_wellplate_40ul_N23 + O23: appliedbiosystemsmicroamp_384_wellplate_40ul_O23 + P23: appliedbiosystemsmicroamp_384_wellplate_40ul_P23 + A24: appliedbiosystemsmicroamp_384_wellplate_40ul_A24 + B24: appliedbiosystemsmicroamp_384_wellplate_40ul_B24 + C24: appliedbiosystemsmicroamp_384_wellplate_40ul_C24 + D24: appliedbiosystemsmicroamp_384_wellplate_40ul_D24 + E24: appliedbiosystemsmicroamp_384_wellplate_40ul_E24 + F24: appliedbiosystemsmicroamp_384_wellplate_40ul_F24 + G24: appliedbiosystemsmicroamp_384_wellplate_40ul_G24 + H24: appliedbiosystemsmicroamp_384_wellplate_40ul_H24 + I24: appliedbiosystemsmicroamp_384_wellplate_40ul_I24 + J24: appliedbiosystemsmicroamp_384_wellplate_40ul_J24 + K24: appliedbiosystemsmicroamp_384_wellplate_40ul_K24 + L24: appliedbiosystemsmicroamp_384_wellplate_40ul_L24 + M24: appliedbiosystemsmicroamp_384_wellplate_40ul_M24 + N24: appliedbiosystemsmicroamp_384_wellplate_40ul_N24 + O24: appliedbiosystemsmicroamp_384_wellplate_40ul_O24 + P24: appliedbiosystemsmicroamp_384_wellplate_40ul_P24 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.8 + size_y: 85.5 + size_z: 9.7 + type: Plate + data: {} + id: appliedbiosystemsmicroamp_384_wellplate_40ul + name: appliedbiosystemsmicroamp_384_wellplate_40ul + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: plate + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_A1 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_A1 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 11.029 + y: 75.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_B1 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_B1 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 11.029 + y: 70.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_C1 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_C1 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 11.029 + y: 66.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_D1 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_D1 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 11.029 + y: 61.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_E1 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_E1 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 11.029 + y: 57.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_F1 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_F1 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 11.029 + y: 52.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_G1 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_G1 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 11.029 + y: 48.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_H1 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_H1 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 11.029 + y: 43.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_I1 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_I1 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 11.029 + y: 39.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_J1 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_J1 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 11.029 + y: 34.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_K1 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_K1 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 11.029 + y: 30.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_L1 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_L1 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 11.029 + y: 25.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_M1 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_M1 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 11.029 + y: 21.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_N1 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_N1 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 11.029 + y: 16.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_O1 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_O1 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 11.029 + y: 12.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_P1 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_P1 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 11.029 + y: 7.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_A2 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_A2 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 15.529 + y: 75.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_B2 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_B2 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 15.529 + y: 70.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_C2 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_C2 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 15.529 + y: 66.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_D2 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_D2 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 15.529 + y: 61.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_E2 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_E2 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 15.529 + y: 57.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_F2 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_F2 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 15.529 + y: 52.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_G2 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_G2 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 15.529 + y: 48.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_H2 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_H2 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 15.529 + y: 43.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_I2 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_I2 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 15.529 + y: 39.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_J2 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_J2 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 15.529 + y: 34.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_K2 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_K2 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 15.529 + y: 30.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_L2 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_L2 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 15.529 + y: 25.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_M2 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_M2 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 15.529 + y: 21.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_N2 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_N2 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 15.529 + y: 16.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_O2 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_O2 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 15.529 + y: 12.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_P2 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_P2 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 15.529 + y: 7.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_A3 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_A3 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 20.029 + y: 75.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_B3 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_B3 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 20.029 + y: 70.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_C3 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_C3 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 20.029 + y: 66.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_D3 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_D3 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 20.029 + y: 61.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_E3 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_E3 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 20.029 + y: 57.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_F3 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_F3 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 20.029 + y: 52.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_G3 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_G3 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 20.029 + y: 48.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_H3 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_H3 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 20.029 + y: 43.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_I3 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_I3 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 20.029 + y: 39.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_J3 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_J3 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 20.029 + y: 34.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_K3 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_K3 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 20.029 + y: 30.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_L3 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_L3 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 20.029 + y: 25.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_M3 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_M3 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 20.029 + y: 21.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_N3 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_N3 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 20.029 + y: 16.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_O3 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_O3 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 20.029 + y: 12.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_P3 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_P3 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 20.029 + y: 7.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_A4 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_A4 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 24.529 + y: 75.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_B4 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_B4 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 24.529 + y: 70.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_C4 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_C4 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 24.529 + y: 66.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_D4 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_D4 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 24.529 + y: 61.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_E4 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_E4 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 24.529 + y: 57.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_F4 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_F4 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 24.529 + y: 52.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_G4 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_G4 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 24.529 + y: 48.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_H4 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_H4 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 24.529 + y: 43.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_I4 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_I4 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 24.529 + y: 39.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_J4 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_J4 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 24.529 + y: 34.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_K4 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_K4 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 24.529 + y: 30.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_L4 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_L4 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 24.529 + y: 25.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_M4 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_M4 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 24.529 + y: 21.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_N4 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_N4 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 24.529 + y: 16.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_O4 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_O4 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 24.529 + y: 12.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_P4 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_P4 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 24.529 + y: 7.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_A5 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_A5 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 29.029 + y: 75.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_B5 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_B5 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 29.029 + y: 70.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_C5 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_C5 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 29.029 + y: 66.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_D5 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_D5 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 29.029 + y: 61.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_E5 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_E5 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 29.029 + y: 57.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_F5 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_F5 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 29.029 + y: 52.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_G5 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_G5 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 29.029 + y: 48.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_H5 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_H5 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 29.029 + y: 43.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_I5 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_I5 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 29.029 + y: 39.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_J5 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_J5 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 29.029 + y: 34.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_K5 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_K5 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 29.029 + y: 30.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_L5 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_L5 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 29.029 + y: 25.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_M5 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_M5 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 29.029 + y: 21.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_N5 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_N5 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 29.029 + y: 16.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_O5 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_O5 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 29.029 + y: 12.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_P5 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_P5 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 29.029 + y: 7.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_A6 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_A6 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 33.529 + y: 75.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_B6 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_B6 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 33.529 + y: 70.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_C6 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_C6 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 33.529 + y: 66.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_D6 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_D6 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 33.529 + y: 61.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_E6 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_E6 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 33.529 + y: 57.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_F6 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_F6 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 33.529 + y: 52.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_G6 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_G6 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 33.529 + y: 48.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_H6 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_H6 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 33.529 + y: 43.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_I6 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_I6 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 33.529 + y: 39.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_J6 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_J6 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 33.529 + y: 34.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_K6 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_K6 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 33.529 + y: 30.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_L6 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_L6 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 33.529 + y: 25.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_M6 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_M6 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 33.529 + y: 21.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_N6 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_N6 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 33.529 + y: 16.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_O6 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_O6 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 33.529 + y: 12.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_P6 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_P6 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 33.529 + y: 7.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_A7 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_A7 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 38.029 + y: 75.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_B7 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_B7 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 38.029 + y: 70.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_C7 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_C7 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 38.029 + y: 66.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_D7 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_D7 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 38.029 + y: 61.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_E7 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_E7 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 38.029 + y: 57.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_F7 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_F7 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 38.029 + y: 52.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_G7 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_G7 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 38.029 + y: 48.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_H7 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_H7 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 38.029 + y: 43.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_I7 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_I7 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 38.029 + y: 39.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_J7 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_J7 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 38.029 + y: 34.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_K7 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_K7 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 38.029 + y: 30.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_L7 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_L7 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 38.029 + y: 25.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_M7 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_M7 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 38.029 + y: 21.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_N7 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_N7 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 38.029 + y: 16.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_O7 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_O7 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 38.029 + y: 12.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_P7 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_P7 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 38.029 + y: 7.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_A8 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_A8 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 42.529 + y: 75.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_B8 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_B8 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 42.529 + y: 70.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_C8 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_C8 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 42.529 + y: 66.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_D8 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_D8 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 42.529 + y: 61.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_E8 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_E8 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 42.529 + y: 57.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_F8 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_F8 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 42.529 + y: 52.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_G8 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_G8 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 42.529 + y: 48.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_H8 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_H8 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 42.529 + y: 43.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_I8 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_I8 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 42.529 + y: 39.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_J8 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_J8 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 42.529 + y: 34.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_K8 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_K8 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 42.529 + y: 30.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_L8 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_L8 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 42.529 + y: 25.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_M8 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_M8 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 42.529 + y: 21.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_N8 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_N8 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 42.529 + y: 16.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_O8 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_O8 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 42.529 + y: 12.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_P8 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_P8 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 42.529 + y: 7.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_A9 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_A9 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 47.029 + y: 75.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_B9 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_B9 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 47.029 + y: 70.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_C9 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_C9 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 47.029 + y: 66.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_D9 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_D9 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 47.029 + y: 61.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_E9 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_E9 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 47.029 + y: 57.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_F9 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_F9 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 47.029 + y: 52.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_G9 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_G9 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 47.029 + y: 48.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_H9 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_H9 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 47.029 + y: 43.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_I9 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_I9 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 47.029 + y: 39.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_J9 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_J9 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 47.029 + y: 34.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_K9 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_K9 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 47.029 + y: 30.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_L9 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_L9 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 47.029 + y: 25.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_M9 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_M9 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 47.029 + y: 21.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_N9 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_N9 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 47.029 + y: 16.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_O9 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_O9 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 47.029 + y: 12.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_P9 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_P9 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 47.029 + y: 7.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_A10 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_A10 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 51.529 + y: 75.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_B10 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_B10 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 51.529 + y: 70.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_C10 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_C10 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 51.529 + y: 66.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_D10 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_D10 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 51.529 + y: 61.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_E10 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_E10 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 51.529 + y: 57.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_F10 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_F10 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 51.529 + y: 52.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_G10 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_G10 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 51.529 + y: 48.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_H10 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_H10 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 51.529 + y: 43.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_I10 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_I10 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 51.529 + y: 39.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_J10 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_J10 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 51.529 + y: 34.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_K10 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_K10 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 51.529 + y: 30.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_L10 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_L10 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 51.529 + y: 25.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_M10 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_M10 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 51.529 + y: 21.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_N10 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_N10 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 51.529 + y: 16.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_O10 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_O10 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 51.529 + y: 12.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_P10 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_P10 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 51.529 + y: 7.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_A11 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_A11 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 56.029 + y: 75.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_B11 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_B11 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 56.029 + y: 70.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_C11 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_C11 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 56.029 + y: 66.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_D11 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_D11 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 56.029 + y: 61.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_E11 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_E11 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 56.029 + y: 57.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_F11 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_F11 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 56.029 + y: 52.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_G11 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_G11 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 56.029 + y: 48.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_H11 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_H11 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 56.029 + y: 43.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_I11 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_I11 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 56.029 + y: 39.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_J11 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_J11 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 56.029 + y: 34.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_K11 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_K11 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 56.029 + y: 30.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_L11 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_L11 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 56.029 + y: 25.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_M11 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_M11 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 56.029 + y: 21.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_N11 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_N11 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 56.029 + y: 16.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_O11 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_O11 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 56.029 + y: 12.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_P11 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_P11 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 56.029 + y: 7.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_A12 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_A12 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 60.529 + y: 75.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_B12 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_B12 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 60.529 + y: 70.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_C12 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_C12 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 60.529 + y: 66.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_D12 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_D12 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 60.529 + y: 61.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_E12 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_E12 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 60.529 + y: 57.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_F12 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_F12 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 60.529 + y: 52.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_G12 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_G12 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 60.529 + y: 48.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_H12 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_H12 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 60.529 + y: 43.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_I12 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_I12 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 60.529 + y: 39.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_J12 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_J12 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 60.529 + y: 34.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_K12 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_K12 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 60.529 + y: 30.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_L12 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_L12 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 60.529 + y: 25.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_M12 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_M12 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 60.529 + y: 21.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_N12 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_N12 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 60.529 + y: 16.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_O12 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_O12 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 60.529 + y: 12.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_P12 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_P12 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 60.529 + y: 7.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_A13 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_A13 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 65.029 + y: 75.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_B13 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_B13 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 65.029 + y: 70.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_C13 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_C13 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 65.029 + y: 66.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_D13 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_D13 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 65.029 + y: 61.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_E13 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_E13 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 65.029 + y: 57.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_F13 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_F13 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 65.029 + y: 52.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_G13 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_G13 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 65.029 + y: 48.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_H13 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_H13 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 65.029 + y: 43.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_I13 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_I13 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 65.029 + y: 39.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_J13 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_J13 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 65.029 + y: 34.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_K13 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_K13 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 65.029 + y: 30.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_L13 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_L13 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 65.029 + y: 25.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_M13 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_M13 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 65.029 + y: 21.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_N13 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_N13 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 65.029 + y: 16.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_O13 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_O13 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 65.029 + y: 12.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_P13 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_P13 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 65.029 + y: 7.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_A14 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_A14 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 69.529 + y: 75.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_B14 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_B14 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 69.529 + y: 70.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_C14 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_C14 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 69.529 + y: 66.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_D14 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_D14 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 69.529 + y: 61.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_E14 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_E14 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 69.529 + y: 57.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_F14 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_F14 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 69.529 + y: 52.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_G14 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_G14 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 69.529 + y: 48.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_H14 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_H14 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 69.529 + y: 43.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_I14 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_I14 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 69.529 + y: 39.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_J14 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_J14 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 69.529 + y: 34.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_K14 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_K14 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 69.529 + y: 30.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_L14 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_L14 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 69.529 + y: 25.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_M14 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_M14 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 69.529 + y: 21.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_N14 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_N14 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 69.529 + y: 16.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_O14 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_O14 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 69.529 + y: 12.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_P14 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_P14 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 69.529 + y: 7.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_A15 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_A15 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 74.029 + y: 75.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_B15 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_B15 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 74.029 + y: 70.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_C15 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_C15 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 74.029 + y: 66.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_D15 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_D15 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 74.029 + y: 61.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_E15 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_E15 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 74.029 + y: 57.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_F15 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_F15 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 74.029 + y: 52.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_G15 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_G15 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 74.029 + y: 48.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_H15 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_H15 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 74.029 + y: 43.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_I15 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_I15 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 74.029 + y: 39.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_J15 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_J15 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 74.029 + y: 34.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_K15 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_K15 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 74.029 + y: 30.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_L15 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_L15 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 74.029 + y: 25.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_M15 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_M15 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 74.029 + y: 21.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_N15 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_N15 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 74.029 + y: 16.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_O15 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_O15 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 74.029 + y: 12.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_P15 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_P15 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 74.029 + y: 7.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_A16 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_A16 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 78.529 + y: 75.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_B16 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_B16 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 78.529 + y: 70.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_C16 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_C16 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 78.529 + y: 66.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_D16 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_D16 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 78.529 + y: 61.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_E16 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_E16 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 78.529 + y: 57.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_F16 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_F16 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 78.529 + y: 52.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_G16 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_G16 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 78.529 + y: 48.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_H16 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_H16 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 78.529 + y: 43.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_I16 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_I16 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 78.529 + y: 39.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_J16 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_J16 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 78.529 + y: 34.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_K16 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_K16 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 78.529 + y: 30.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_L16 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_L16 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 78.529 + y: 25.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_M16 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_M16 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 78.529 + y: 21.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_N16 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_N16 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 78.529 + y: 16.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_O16 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_O16 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 78.529 + y: 12.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_P16 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_P16 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 78.529 + y: 7.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_A17 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_A17 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 83.029 + y: 75.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_B17 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_B17 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 83.029 + y: 70.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_C17 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_C17 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 83.029 + y: 66.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_D17 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_D17 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 83.029 + y: 61.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_E17 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_E17 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 83.029 + y: 57.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_F17 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_F17 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 83.029 + y: 52.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_G17 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_G17 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 83.029 + y: 48.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_H17 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_H17 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 83.029 + y: 43.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_I17 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_I17 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 83.029 + y: 39.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_J17 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_J17 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 83.029 + y: 34.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_K17 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_K17 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 83.029 + y: 30.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_L17 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_L17 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 83.029 + y: 25.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_M17 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_M17 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 83.029 + y: 21.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_N17 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_N17 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 83.029 + y: 16.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_O17 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_O17 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 83.029 + y: 12.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_P17 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_P17 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 83.029 + y: 7.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_A18 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_A18 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 87.529 + y: 75.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_B18 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_B18 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 87.529 + y: 70.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_C18 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_C18 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 87.529 + y: 66.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_D18 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_D18 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 87.529 + y: 61.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_E18 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_E18 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 87.529 + y: 57.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_F18 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_F18 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 87.529 + y: 52.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_G18 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_G18 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 87.529 + y: 48.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_H18 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_H18 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 87.529 + y: 43.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_I18 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_I18 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 87.529 + y: 39.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_J18 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_J18 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 87.529 + y: 34.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_K18 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_K18 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 87.529 + y: 30.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_L18 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_L18 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 87.529 + y: 25.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_M18 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_M18 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 87.529 + y: 21.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_N18 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_N18 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 87.529 + y: 16.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_O18 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_O18 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 87.529 + y: 12.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_P18 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_P18 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 87.529 + y: 7.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_A19 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_A19 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 92.029 + y: 75.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_B19 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_B19 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 92.029 + y: 70.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_C19 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_C19 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 92.029 + y: 66.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_D19 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_D19 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 92.029 + y: 61.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_E19 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_E19 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 92.029 + y: 57.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_F19 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_F19 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 92.029 + y: 52.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_G19 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_G19 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 92.029 + y: 48.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_H19 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_H19 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 92.029 + y: 43.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_I19 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_I19 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 92.029 + y: 39.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_J19 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_J19 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 92.029 + y: 34.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_K19 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_K19 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 92.029 + y: 30.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_L19 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_L19 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 92.029 + y: 25.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_M19 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_M19 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 92.029 + y: 21.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_N19 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_N19 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 92.029 + y: 16.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_O19 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_O19 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 92.029 + y: 12.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_P19 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_P19 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 92.029 + y: 7.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_A20 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_A20 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 96.529 + y: 75.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_B20 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_B20 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 96.529 + y: 70.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_C20 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_C20 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 96.529 + y: 66.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_D20 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_D20 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 96.529 + y: 61.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_E20 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_E20 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 96.529 + y: 57.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_F20 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_F20 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 96.529 + y: 52.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_G20 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_G20 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 96.529 + y: 48.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_H20 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_H20 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 96.529 + y: 43.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_I20 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_I20 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 96.529 + y: 39.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_J20 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_J20 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 96.529 + y: 34.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_K20 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_K20 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 96.529 + y: 30.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_L20 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_L20 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 96.529 + y: 25.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_M20 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_M20 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 96.529 + y: 21.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_N20 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_N20 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 96.529 + y: 16.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_O20 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_O20 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 96.529 + y: 12.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_P20 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_P20 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 96.529 + y: 7.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_A21 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_A21 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 101.029 + y: 75.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_B21 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_B21 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 101.029 + y: 70.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_C21 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_C21 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 101.029 + y: 66.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_D21 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_D21 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 101.029 + y: 61.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_E21 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_E21 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 101.029 + y: 57.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_F21 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_F21 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 101.029 + y: 52.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_G21 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_G21 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 101.029 + y: 48.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_H21 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_H21 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 101.029 + y: 43.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_I21 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_I21 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 101.029 + y: 39.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_J21 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_J21 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 101.029 + y: 34.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_K21 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_K21 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 101.029 + y: 30.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_L21 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_L21 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 101.029 + y: 25.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_M21 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_M21 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 101.029 + y: 21.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_N21 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_N21 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 101.029 + y: 16.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_O21 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_O21 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 101.029 + y: 12.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_P21 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_P21 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 101.029 + y: 7.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_A22 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_A22 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 105.529 + y: 75.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_B22 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_B22 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 105.529 + y: 70.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_C22 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_C22 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 105.529 + y: 66.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_D22 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_D22 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 105.529 + y: 61.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_E22 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_E22 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 105.529 + y: 57.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_F22 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_F22 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 105.529 + y: 52.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_G22 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_G22 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 105.529 + y: 48.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_H22 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_H22 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 105.529 + y: 43.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_I22 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_I22 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 105.529 + y: 39.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_J22 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_J22 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 105.529 + y: 34.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_K22 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_K22 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 105.529 + y: 30.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_L22 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_L22 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 105.529 + y: 25.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_M22 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_M22 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 105.529 + y: 21.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_N22 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_N22 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 105.529 + y: 16.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_O22 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_O22 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 105.529 + y: 12.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_P22 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_P22 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 105.529 + y: 7.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_A23 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_A23 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 110.029 + y: 75.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_B23 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_B23 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 110.029 + y: 70.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_C23 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_C23 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 110.029 + y: 66.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_D23 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_D23 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 110.029 + y: 61.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_E23 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_E23 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 110.029 + y: 57.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_F23 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_F23 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 110.029 + y: 52.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_G23 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_G23 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 110.029 + y: 48.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_H23 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_H23 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 110.029 + y: 43.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_I23 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_I23 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 110.029 + y: 39.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_J23 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_J23 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 110.029 + y: 34.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_K23 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_K23 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 110.029 + y: 30.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_L23 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_L23 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 110.029 + y: 25.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_M23 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_M23 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 110.029 + y: 21.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_N23 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_N23 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 110.029 + y: 16.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_O23 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_O23 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 110.029 + y: 12.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_P23 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_P23 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 110.029 + y: 7.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_A24 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_A24 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 114.529 + y: 75.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_B24 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_B24 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 114.529 + y: 70.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_C24 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_C24 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 114.529 + y: 66.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_D24 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_D24 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 114.529 + y: 61.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_E24 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_E24 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 114.529 + y: 57.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_F24 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_F24 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 114.529 + y: 52.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_G24 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_G24 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 114.529 + y: 48.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_H24 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_H24 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 114.529 + y: 43.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_I24 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_I24 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 114.529 + y: 39.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_J24 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_J24 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 114.529 + y: 34.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_K24 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_K24 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 114.529 + y: 30.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_L24 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_L24 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 114.529 + y: 25.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_M24 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_M24 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 114.529 + y: 21.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_N24 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_N24 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 114.529 + y: 16.879 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_O24 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_O24 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 114.529 + y: 12.379 + z: 0.61 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 40 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.242 + size_y: 2.242 + size_z: 9.09 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: appliedbiosystemsmicroamp_384_wellplate_40ul_P24 + name: appliedbiosystemsmicroamp_384_wellplate_40ul_P24 + parent: appliedbiosystemsmicroamp_384_wellplate_40ul + position: + x: 114.529 + y: 7.879 + z: 0.61 + sample_id: null + type: well + description: Applied Biosystems microamp 384 wellplate 40ul + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/plates.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 biorad_384_wellplate_50ul: - description: BioRad 384 wellplate 50ul - class: + category: + - plates + class: module: pylabrobot.resources.opentrons.plates:biorad_384_wellplate_50ul type: pylabrobot + config_info: + - children: + - biorad_384_wellplate_50ul_A1 + - biorad_384_wellplate_50ul_B1 + - biorad_384_wellplate_50ul_C1 + - biorad_384_wellplate_50ul_D1 + - biorad_384_wellplate_50ul_E1 + - biorad_384_wellplate_50ul_F1 + - biorad_384_wellplate_50ul_G1 + - biorad_384_wellplate_50ul_H1 + - biorad_384_wellplate_50ul_I1 + - biorad_384_wellplate_50ul_J1 + - biorad_384_wellplate_50ul_K1 + - biorad_384_wellplate_50ul_L1 + - biorad_384_wellplate_50ul_M1 + - biorad_384_wellplate_50ul_N1 + - biorad_384_wellplate_50ul_O1 + - biorad_384_wellplate_50ul_P1 + - biorad_384_wellplate_50ul_A2 + - biorad_384_wellplate_50ul_B2 + - biorad_384_wellplate_50ul_C2 + - biorad_384_wellplate_50ul_D2 + - biorad_384_wellplate_50ul_E2 + - biorad_384_wellplate_50ul_F2 + - biorad_384_wellplate_50ul_G2 + - biorad_384_wellplate_50ul_H2 + - biorad_384_wellplate_50ul_I2 + - biorad_384_wellplate_50ul_J2 + - biorad_384_wellplate_50ul_K2 + - biorad_384_wellplate_50ul_L2 + - biorad_384_wellplate_50ul_M2 + - biorad_384_wellplate_50ul_N2 + - biorad_384_wellplate_50ul_O2 + - biorad_384_wellplate_50ul_P2 + - biorad_384_wellplate_50ul_A3 + - biorad_384_wellplate_50ul_B3 + - biorad_384_wellplate_50ul_C3 + - biorad_384_wellplate_50ul_D3 + - biorad_384_wellplate_50ul_E3 + - biorad_384_wellplate_50ul_F3 + - biorad_384_wellplate_50ul_G3 + - biorad_384_wellplate_50ul_H3 + - biorad_384_wellplate_50ul_I3 + - biorad_384_wellplate_50ul_J3 + - biorad_384_wellplate_50ul_K3 + - biorad_384_wellplate_50ul_L3 + - biorad_384_wellplate_50ul_M3 + - biorad_384_wellplate_50ul_N3 + - biorad_384_wellplate_50ul_O3 + - biorad_384_wellplate_50ul_P3 + - biorad_384_wellplate_50ul_A4 + - biorad_384_wellplate_50ul_B4 + - biorad_384_wellplate_50ul_C4 + - biorad_384_wellplate_50ul_D4 + - biorad_384_wellplate_50ul_E4 + - biorad_384_wellplate_50ul_F4 + - biorad_384_wellplate_50ul_G4 + - biorad_384_wellplate_50ul_H4 + - biorad_384_wellplate_50ul_I4 + - biorad_384_wellplate_50ul_J4 + - biorad_384_wellplate_50ul_K4 + - biorad_384_wellplate_50ul_L4 + - biorad_384_wellplate_50ul_M4 + - biorad_384_wellplate_50ul_N4 + - biorad_384_wellplate_50ul_O4 + - biorad_384_wellplate_50ul_P4 + - biorad_384_wellplate_50ul_A5 + - biorad_384_wellplate_50ul_B5 + - biorad_384_wellplate_50ul_C5 + - biorad_384_wellplate_50ul_D5 + - biorad_384_wellplate_50ul_E5 + - biorad_384_wellplate_50ul_F5 + - biorad_384_wellplate_50ul_G5 + - biorad_384_wellplate_50ul_H5 + - biorad_384_wellplate_50ul_I5 + - biorad_384_wellplate_50ul_J5 + - biorad_384_wellplate_50ul_K5 + - biorad_384_wellplate_50ul_L5 + - biorad_384_wellplate_50ul_M5 + - biorad_384_wellplate_50ul_N5 + - biorad_384_wellplate_50ul_O5 + - biorad_384_wellplate_50ul_P5 + - biorad_384_wellplate_50ul_A6 + - biorad_384_wellplate_50ul_B6 + - biorad_384_wellplate_50ul_C6 + - biorad_384_wellplate_50ul_D6 + - biorad_384_wellplate_50ul_E6 + - biorad_384_wellplate_50ul_F6 + - biorad_384_wellplate_50ul_G6 + - biorad_384_wellplate_50ul_H6 + - biorad_384_wellplate_50ul_I6 + - biorad_384_wellplate_50ul_J6 + - biorad_384_wellplate_50ul_K6 + - biorad_384_wellplate_50ul_L6 + - biorad_384_wellplate_50ul_M6 + - biorad_384_wellplate_50ul_N6 + - biorad_384_wellplate_50ul_O6 + - biorad_384_wellplate_50ul_P6 + - biorad_384_wellplate_50ul_A7 + - biorad_384_wellplate_50ul_B7 + - biorad_384_wellplate_50ul_C7 + - biorad_384_wellplate_50ul_D7 + - biorad_384_wellplate_50ul_E7 + - biorad_384_wellplate_50ul_F7 + - biorad_384_wellplate_50ul_G7 + - biorad_384_wellplate_50ul_H7 + - biorad_384_wellplate_50ul_I7 + - biorad_384_wellplate_50ul_J7 + - biorad_384_wellplate_50ul_K7 + - biorad_384_wellplate_50ul_L7 + - biorad_384_wellplate_50ul_M7 + - biorad_384_wellplate_50ul_N7 + - biorad_384_wellplate_50ul_O7 + - biorad_384_wellplate_50ul_P7 + - biorad_384_wellplate_50ul_A8 + - biorad_384_wellplate_50ul_B8 + - biorad_384_wellplate_50ul_C8 + - biorad_384_wellplate_50ul_D8 + - biorad_384_wellplate_50ul_E8 + - biorad_384_wellplate_50ul_F8 + - biorad_384_wellplate_50ul_G8 + - biorad_384_wellplate_50ul_H8 + - biorad_384_wellplate_50ul_I8 + - biorad_384_wellplate_50ul_J8 + - biorad_384_wellplate_50ul_K8 + - biorad_384_wellplate_50ul_L8 + - biorad_384_wellplate_50ul_M8 + - biorad_384_wellplate_50ul_N8 + - biorad_384_wellplate_50ul_O8 + - biorad_384_wellplate_50ul_P8 + - biorad_384_wellplate_50ul_A9 + - biorad_384_wellplate_50ul_B9 + - biorad_384_wellplate_50ul_C9 + - biorad_384_wellplate_50ul_D9 + - biorad_384_wellplate_50ul_E9 + - biorad_384_wellplate_50ul_F9 + - biorad_384_wellplate_50ul_G9 + - biorad_384_wellplate_50ul_H9 + - biorad_384_wellplate_50ul_I9 + - biorad_384_wellplate_50ul_J9 + - biorad_384_wellplate_50ul_K9 + - biorad_384_wellplate_50ul_L9 + - biorad_384_wellplate_50ul_M9 + - biorad_384_wellplate_50ul_N9 + - biorad_384_wellplate_50ul_O9 + - biorad_384_wellplate_50ul_P9 + - biorad_384_wellplate_50ul_A10 + - biorad_384_wellplate_50ul_B10 + - biorad_384_wellplate_50ul_C10 + - biorad_384_wellplate_50ul_D10 + - biorad_384_wellplate_50ul_E10 + - biorad_384_wellplate_50ul_F10 + - biorad_384_wellplate_50ul_G10 + - biorad_384_wellplate_50ul_H10 + - biorad_384_wellplate_50ul_I10 + - biorad_384_wellplate_50ul_J10 + - biorad_384_wellplate_50ul_K10 + - biorad_384_wellplate_50ul_L10 + - biorad_384_wellplate_50ul_M10 + - biorad_384_wellplate_50ul_N10 + - biorad_384_wellplate_50ul_O10 + - biorad_384_wellplate_50ul_P10 + - biorad_384_wellplate_50ul_A11 + - biorad_384_wellplate_50ul_B11 + - biorad_384_wellplate_50ul_C11 + - biorad_384_wellplate_50ul_D11 + - biorad_384_wellplate_50ul_E11 + - biorad_384_wellplate_50ul_F11 + - biorad_384_wellplate_50ul_G11 + - biorad_384_wellplate_50ul_H11 + - biorad_384_wellplate_50ul_I11 + - biorad_384_wellplate_50ul_J11 + - biorad_384_wellplate_50ul_K11 + - biorad_384_wellplate_50ul_L11 + - biorad_384_wellplate_50ul_M11 + - biorad_384_wellplate_50ul_N11 + - biorad_384_wellplate_50ul_O11 + - biorad_384_wellplate_50ul_P11 + - biorad_384_wellplate_50ul_A12 + - biorad_384_wellplate_50ul_B12 + - biorad_384_wellplate_50ul_C12 + - biorad_384_wellplate_50ul_D12 + - biorad_384_wellplate_50ul_E12 + - biorad_384_wellplate_50ul_F12 + - biorad_384_wellplate_50ul_G12 + - biorad_384_wellplate_50ul_H12 + - biorad_384_wellplate_50ul_I12 + - biorad_384_wellplate_50ul_J12 + - biorad_384_wellplate_50ul_K12 + - biorad_384_wellplate_50ul_L12 + - biorad_384_wellplate_50ul_M12 + - biorad_384_wellplate_50ul_N12 + - biorad_384_wellplate_50ul_O12 + - biorad_384_wellplate_50ul_P12 + - biorad_384_wellplate_50ul_A13 + - biorad_384_wellplate_50ul_B13 + - biorad_384_wellplate_50ul_C13 + - biorad_384_wellplate_50ul_D13 + - biorad_384_wellplate_50ul_E13 + - biorad_384_wellplate_50ul_F13 + - biorad_384_wellplate_50ul_G13 + - biorad_384_wellplate_50ul_H13 + - biorad_384_wellplate_50ul_I13 + - biorad_384_wellplate_50ul_J13 + - biorad_384_wellplate_50ul_K13 + - biorad_384_wellplate_50ul_L13 + - biorad_384_wellplate_50ul_M13 + - biorad_384_wellplate_50ul_N13 + - biorad_384_wellplate_50ul_O13 + - biorad_384_wellplate_50ul_P13 + - biorad_384_wellplate_50ul_A14 + - biorad_384_wellplate_50ul_B14 + - biorad_384_wellplate_50ul_C14 + - biorad_384_wellplate_50ul_D14 + - biorad_384_wellplate_50ul_E14 + - biorad_384_wellplate_50ul_F14 + - biorad_384_wellplate_50ul_G14 + - biorad_384_wellplate_50ul_H14 + - biorad_384_wellplate_50ul_I14 + - biorad_384_wellplate_50ul_J14 + - biorad_384_wellplate_50ul_K14 + - biorad_384_wellplate_50ul_L14 + - biorad_384_wellplate_50ul_M14 + - biorad_384_wellplate_50ul_N14 + - biorad_384_wellplate_50ul_O14 + - biorad_384_wellplate_50ul_P14 + - biorad_384_wellplate_50ul_A15 + - biorad_384_wellplate_50ul_B15 + - biorad_384_wellplate_50ul_C15 + - biorad_384_wellplate_50ul_D15 + - biorad_384_wellplate_50ul_E15 + - biorad_384_wellplate_50ul_F15 + - biorad_384_wellplate_50ul_G15 + - biorad_384_wellplate_50ul_H15 + - biorad_384_wellplate_50ul_I15 + - biorad_384_wellplate_50ul_J15 + - biorad_384_wellplate_50ul_K15 + - biorad_384_wellplate_50ul_L15 + - biorad_384_wellplate_50ul_M15 + - biorad_384_wellplate_50ul_N15 + - biorad_384_wellplate_50ul_O15 + - biorad_384_wellplate_50ul_P15 + - biorad_384_wellplate_50ul_A16 + - biorad_384_wellplate_50ul_B16 + - biorad_384_wellplate_50ul_C16 + - biorad_384_wellplate_50ul_D16 + - biorad_384_wellplate_50ul_E16 + - biorad_384_wellplate_50ul_F16 + - biorad_384_wellplate_50ul_G16 + - biorad_384_wellplate_50ul_H16 + - biorad_384_wellplate_50ul_I16 + - biorad_384_wellplate_50ul_J16 + - biorad_384_wellplate_50ul_K16 + - biorad_384_wellplate_50ul_L16 + - biorad_384_wellplate_50ul_M16 + - biorad_384_wellplate_50ul_N16 + - biorad_384_wellplate_50ul_O16 + - biorad_384_wellplate_50ul_P16 + - biorad_384_wellplate_50ul_A17 + - biorad_384_wellplate_50ul_B17 + - biorad_384_wellplate_50ul_C17 + - biorad_384_wellplate_50ul_D17 + - biorad_384_wellplate_50ul_E17 + - biorad_384_wellplate_50ul_F17 + - biorad_384_wellplate_50ul_G17 + - biorad_384_wellplate_50ul_H17 + - biorad_384_wellplate_50ul_I17 + - biorad_384_wellplate_50ul_J17 + - biorad_384_wellplate_50ul_K17 + - biorad_384_wellplate_50ul_L17 + - biorad_384_wellplate_50ul_M17 + - biorad_384_wellplate_50ul_N17 + - biorad_384_wellplate_50ul_O17 + - biorad_384_wellplate_50ul_P17 + - biorad_384_wellplate_50ul_A18 + - biorad_384_wellplate_50ul_B18 + - biorad_384_wellplate_50ul_C18 + - biorad_384_wellplate_50ul_D18 + - biorad_384_wellplate_50ul_E18 + - biorad_384_wellplate_50ul_F18 + - biorad_384_wellplate_50ul_G18 + - biorad_384_wellplate_50ul_H18 + - biorad_384_wellplate_50ul_I18 + - biorad_384_wellplate_50ul_J18 + - biorad_384_wellplate_50ul_K18 + - biorad_384_wellplate_50ul_L18 + - biorad_384_wellplate_50ul_M18 + - biorad_384_wellplate_50ul_N18 + - biorad_384_wellplate_50ul_O18 + - biorad_384_wellplate_50ul_P18 + - biorad_384_wellplate_50ul_A19 + - biorad_384_wellplate_50ul_B19 + - biorad_384_wellplate_50ul_C19 + - biorad_384_wellplate_50ul_D19 + - biorad_384_wellplate_50ul_E19 + - biorad_384_wellplate_50ul_F19 + - biorad_384_wellplate_50ul_G19 + - biorad_384_wellplate_50ul_H19 + - biorad_384_wellplate_50ul_I19 + - biorad_384_wellplate_50ul_J19 + - biorad_384_wellplate_50ul_K19 + - biorad_384_wellplate_50ul_L19 + - biorad_384_wellplate_50ul_M19 + - biorad_384_wellplate_50ul_N19 + - biorad_384_wellplate_50ul_O19 + - biorad_384_wellplate_50ul_P19 + - biorad_384_wellplate_50ul_A20 + - biorad_384_wellplate_50ul_B20 + - biorad_384_wellplate_50ul_C20 + - biorad_384_wellplate_50ul_D20 + - biorad_384_wellplate_50ul_E20 + - biorad_384_wellplate_50ul_F20 + - biorad_384_wellplate_50ul_G20 + - biorad_384_wellplate_50ul_H20 + - biorad_384_wellplate_50ul_I20 + - biorad_384_wellplate_50ul_J20 + - biorad_384_wellplate_50ul_K20 + - biorad_384_wellplate_50ul_L20 + - biorad_384_wellplate_50ul_M20 + - biorad_384_wellplate_50ul_N20 + - biorad_384_wellplate_50ul_O20 + - biorad_384_wellplate_50ul_P20 + - biorad_384_wellplate_50ul_A21 + - biorad_384_wellplate_50ul_B21 + - biorad_384_wellplate_50ul_C21 + - biorad_384_wellplate_50ul_D21 + - biorad_384_wellplate_50ul_E21 + - biorad_384_wellplate_50ul_F21 + - biorad_384_wellplate_50ul_G21 + - biorad_384_wellplate_50ul_H21 + - biorad_384_wellplate_50ul_I21 + - biorad_384_wellplate_50ul_J21 + - biorad_384_wellplate_50ul_K21 + - biorad_384_wellplate_50ul_L21 + - biorad_384_wellplate_50ul_M21 + - biorad_384_wellplate_50ul_N21 + - biorad_384_wellplate_50ul_O21 + - biorad_384_wellplate_50ul_P21 + - biorad_384_wellplate_50ul_A22 + - biorad_384_wellplate_50ul_B22 + - biorad_384_wellplate_50ul_C22 + - biorad_384_wellplate_50ul_D22 + - biorad_384_wellplate_50ul_E22 + - biorad_384_wellplate_50ul_F22 + - biorad_384_wellplate_50ul_G22 + - biorad_384_wellplate_50ul_H22 + - biorad_384_wellplate_50ul_I22 + - biorad_384_wellplate_50ul_J22 + - biorad_384_wellplate_50ul_K22 + - biorad_384_wellplate_50ul_L22 + - biorad_384_wellplate_50ul_M22 + - biorad_384_wellplate_50ul_N22 + - biorad_384_wellplate_50ul_O22 + - biorad_384_wellplate_50ul_P22 + - biorad_384_wellplate_50ul_A23 + - biorad_384_wellplate_50ul_B23 + - biorad_384_wellplate_50ul_C23 + - biorad_384_wellplate_50ul_D23 + - biorad_384_wellplate_50ul_E23 + - biorad_384_wellplate_50ul_F23 + - biorad_384_wellplate_50ul_G23 + - biorad_384_wellplate_50ul_H23 + - biorad_384_wellplate_50ul_I23 + - biorad_384_wellplate_50ul_J23 + - biorad_384_wellplate_50ul_K23 + - biorad_384_wellplate_50ul_L23 + - biorad_384_wellplate_50ul_M23 + - biorad_384_wellplate_50ul_N23 + - biorad_384_wellplate_50ul_O23 + - biorad_384_wellplate_50ul_P23 + - biorad_384_wellplate_50ul_A24 + - biorad_384_wellplate_50ul_B24 + - biorad_384_wellplate_50ul_C24 + - biorad_384_wellplate_50ul_D24 + - biorad_384_wellplate_50ul_E24 + - biorad_384_wellplate_50ul_F24 + - biorad_384_wellplate_50ul_G24 + - biorad_384_wellplate_50ul_H24 + - biorad_384_wellplate_50ul_I24 + - biorad_384_wellplate_50ul_J24 + - biorad_384_wellplate_50ul_K24 + - biorad_384_wellplate_50ul_L24 + - biorad_384_wellplate_50ul_M24 + - biorad_384_wellplate_50ul_N24 + - biorad_384_wellplate_50ul_O24 + - biorad_384_wellplate_50ul_P24 + class: '' + config: + barcode: null + category: plate + model: Bio-Rad 384 Well Plate 50 µL + ordering: + A1: biorad_384_wellplate_50ul_A1 + B1: biorad_384_wellplate_50ul_B1 + C1: biorad_384_wellplate_50ul_C1 + D1: biorad_384_wellplate_50ul_D1 + E1: biorad_384_wellplate_50ul_E1 + F1: biorad_384_wellplate_50ul_F1 + G1: biorad_384_wellplate_50ul_G1 + H1: biorad_384_wellplate_50ul_H1 + I1: biorad_384_wellplate_50ul_I1 + J1: biorad_384_wellplate_50ul_J1 + K1: biorad_384_wellplate_50ul_K1 + L1: biorad_384_wellplate_50ul_L1 + M1: biorad_384_wellplate_50ul_M1 + N1: biorad_384_wellplate_50ul_N1 + O1: biorad_384_wellplate_50ul_O1 + P1: biorad_384_wellplate_50ul_P1 + A2: biorad_384_wellplate_50ul_A2 + B2: biorad_384_wellplate_50ul_B2 + C2: biorad_384_wellplate_50ul_C2 + D2: biorad_384_wellplate_50ul_D2 + E2: biorad_384_wellplate_50ul_E2 + F2: biorad_384_wellplate_50ul_F2 + G2: biorad_384_wellplate_50ul_G2 + H2: biorad_384_wellplate_50ul_H2 + I2: biorad_384_wellplate_50ul_I2 + J2: biorad_384_wellplate_50ul_J2 + K2: biorad_384_wellplate_50ul_K2 + L2: biorad_384_wellplate_50ul_L2 + M2: biorad_384_wellplate_50ul_M2 + N2: biorad_384_wellplate_50ul_N2 + O2: biorad_384_wellplate_50ul_O2 + P2: biorad_384_wellplate_50ul_P2 + A3: biorad_384_wellplate_50ul_A3 + B3: biorad_384_wellplate_50ul_B3 + C3: biorad_384_wellplate_50ul_C3 + D3: biorad_384_wellplate_50ul_D3 + E3: biorad_384_wellplate_50ul_E3 + F3: biorad_384_wellplate_50ul_F3 + G3: biorad_384_wellplate_50ul_G3 + H3: biorad_384_wellplate_50ul_H3 + I3: biorad_384_wellplate_50ul_I3 + J3: biorad_384_wellplate_50ul_J3 + K3: biorad_384_wellplate_50ul_K3 + L3: biorad_384_wellplate_50ul_L3 + M3: biorad_384_wellplate_50ul_M3 + N3: biorad_384_wellplate_50ul_N3 + O3: biorad_384_wellplate_50ul_O3 + P3: biorad_384_wellplate_50ul_P3 + A4: biorad_384_wellplate_50ul_A4 + B4: biorad_384_wellplate_50ul_B4 + C4: biorad_384_wellplate_50ul_C4 + D4: biorad_384_wellplate_50ul_D4 + E4: biorad_384_wellplate_50ul_E4 + F4: biorad_384_wellplate_50ul_F4 + G4: biorad_384_wellplate_50ul_G4 + H4: biorad_384_wellplate_50ul_H4 + I4: biorad_384_wellplate_50ul_I4 + J4: biorad_384_wellplate_50ul_J4 + K4: biorad_384_wellplate_50ul_K4 + L4: biorad_384_wellplate_50ul_L4 + M4: biorad_384_wellplate_50ul_M4 + N4: biorad_384_wellplate_50ul_N4 + O4: biorad_384_wellplate_50ul_O4 + P4: biorad_384_wellplate_50ul_P4 + A5: biorad_384_wellplate_50ul_A5 + B5: biorad_384_wellplate_50ul_B5 + C5: biorad_384_wellplate_50ul_C5 + D5: biorad_384_wellplate_50ul_D5 + E5: biorad_384_wellplate_50ul_E5 + F5: biorad_384_wellplate_50ul_F5 + G5: biorad_384_wellplate_50ul_G5 + H5: biorad_384_wellplate_50ul_H5 + I5: biorad_384_wellplate_50ul_I5 + J5: biorad_384_wellplate_50ul_J5 + K5: biorad_384_wellplate_50ul_K5 + L5: biorad_384_wellplate_50ul_L5 + M5: biorad_384_wellplate_50ul_M5 + N5: biorad_384_wellplate_50ul_N5 + O5: biorad_384_wellplate_50ul_O5 + P5: biorad_384_wellplate_50ul_P5 + A6: biorad_384_wellplate_50ul_A6 + B6: biorad_384_wellplate_50ul_B6 + C6: biorad_384_wellplate_50ul_C6 + D6: biorad_384_wellplate_50ul_D6 + E6: biorad_384_wellplate_50ul_E6 + F6: biorad_384_wellplate_50ul_F6 + G6: biorad_384_wellplate_50ul_G6 + H6: biorad_384_wellplate_50ul_H6 + I6: biorad_384_wellplate_50ul_I6 + J6: biorad_384_wellplate_50ul_J6 + K6: biorad_384_wellplate_50ul_K6 + L6: biorad_384_wellplate_50ul_L6 + M6: biorad_384_wellplate_50ul_M6 + N6: biorad_384_wellplate_50ul_N6 + O6: biorad_384_wellplate_50ul_O6 + P6: biorad_384_wellplate_50ul_P6 + A7: biorad_384_wellplate_50ul_A7 + B7: biorad_384_wellplate_50ul_B7 + C7: biorad_384_wellplate_50ul_C7 + D7: biorad_384_wellplate_50ul_D7 + E7: biorad_384_wellplate_50ul_E7 + F7: biorad_384_wellplate_50ul_F7 + G7: biorad_384_wellplate_50ul_G7 + H7: biorad_384_wellplate_50ul_H7 + I7: biorad_384_wellplate_50ul_I7 + J7: biorad_384_wellplate_50ul_J7 + K7: biorad_384_wellplate_50ul_K7 + L7: biorad_384_wellplate_50ul_L7 + M7: biorad_384_wellplate_50ul_M7 + N7: biorad_384_wellplate_50ul_N7 + O7: biorad_384_wellplate_50ul_O7 + P7: biorad_384_wellplate_50ul_P7 + A8: biorad_384_wellplate_50ul_A8 + B8: biorad_384_wellplate_50ul_B8 + C8: biorad_384_wellplate_50ul_C8 + D8: biorad_384_wellplate_50ul_D8 + E8: biorad_384_wellplate_50ul_E8 + F8: biorad_384_wellplate_50ul_F8 + G8: biorad_384_wellplate_50ul_G8 + H8: biorad_384_wellplate_50ul_H8 + I8: biorad_384_wellplate_50ul_I8 + J8: biorad_384_wellplate_50ul_J8 + K8: biorad_384_wellplate_50ul_K8 + L8: biorad_384_wellplate_50ul_L8 + M8: biorad_384_wellplate_50ul_M8 + N8: biorad_384_wellplate_50ul_N8 + O8: biorad_384_wellplate_50ul_O8 + P8: biorad_384_wellplate_50ul_P8 + A9: biorad_384_wellplate_50ul_A9 + B9: biorad_384_wellplate_50ul_B9 + C9: biorad_384_wellplate_50ul_C9 + D9: biorad_384_wellplate_50ul_D9 + E9: biorad_384_wellplate_50ul_E9 + F9: biorad_384_wellplate_50ul_F9 + G9: biorad_384_wellplate_50ul_G9 + H9: biorad_384_wellplate_50ul_H9 + I9: biorad_384_wellplate_50ul_I9 + J9: biorad_384_wellplate_50ul_J9 + K9: biorad_384_wellplate_50ul_K9 + L9: biorad_384_wellplate_50ul_L9 + M9: biorad_384_wellplate_50ul_M9 + N9: biorad_384_wellplate_50ul_N9 + O9: biorad_384_wellplate_50ul_O9 + P9: biorad_384_wellplate_50ul_P9 + A10: biorad_384_wellplate_50ul_A10 + B10: biorad_384_wellplate_50ul_B10 + C10: biorad_384_wellplate_50ul_C10 + D10: biorad_384_wellplate_50ul_D10 + E10: biorad_384_wellplate_50ul_E10 + F10: biorad_384_wellplate_50ul_F10 + G10: biorad_384_wellplate_50ul_G10 + H10: biorad_384_wellplate_50ul_H10 + I10: biorad_384_wellplate_50ul_I10 + J10: biorad_384_wellplate_50ul_J10 + K10: biorad_384_wellplate_50ul_K10 + L10: biorad_384_wellplate_50ul_L10 + M10: biorad_384_wellplate_50ul_M10 + N10: biorad_384_wellplate_50ul_N10 + O10: biorad_384_wellplate_50ul_O10 + P10: biorad_384_wellplate_50ul_P10 + A11: biorad_384_wellplate_50ul_A11 + B11: biorad_384_wellplate_50ul_B11 + C11: biorad_384_wellplate_50ul_C11 + D11: biorad_384_wellplate_50ul_D11 + E11: biorad_384_wellplate_50ul_E11 + F11: biorad_384_wellplate_50ul_F11 + G11: biorad_384_wellplate_50ul_G11 + H11: biorad_384_wellplate_50ul_H11 + I11: biorad_384_wellplate_50ul_I11 + J11: biorad_384_wellplate_50ul_J11 + K11: biorad_384_wellplate_50ul_K11 + L11: biorad_384_wellplate_50ul_L11 + M11: biorad_384_wellplate_50ul_M11 + N11: biorad_384_wellplate_50ul_N11 + O11: biorad_384_wellplate_50ul_O11 + P11: biorad_384_wellplate_50ul_P11 + A12: biorad_384_wellplate_50ul_A12 + B12: biorad_384_wellplate_50ul_B12 + C12: biorad_384_wellplate_50ul_C12 + D12: biorad_384_wellplate_50ul_D12 + E12: biorad_384_wellplate_50ul_E12 + F12: biorad_384_wellplate_50ul_F12 + G12: biorad_384_wellplate_50ul_G12 + H12: biorad_384_wellplate_50ul_H12 + I12: biorad_384_wellplate_50ul_I12 + J12: biorad_384_wellplate_50ul_J12 + K12: biorad_384_wellplate_50ul_K12 + L12: biorad_384_wellplate_50ul_L12 + M12: biorad_384_wellplate_50ul_M12 + N12: biorad_384_wellplate_50ul_N12 + O12: biorad_384_wellplate_50ul_O12 + P12: biorad_384_wellplate_50ul_P12 + A13: biorad_384_wellplate_50ul_A13 + B13: biorad_384_wellplate_50ul_B13 + C13: biorad_384_wellplate_50ul_C13 + D13: biorad_384_wellplate_50ul_D13 + E13: biorad_384_wellplate_50ul_E13 + F13: biorad_384_wellplate_50ul_F13 + G13: biorad_384_wellplate_50ul_G13 + H13: biorad_384_wellplate_50ul_H13 + I13: biorad_384_wellplate_50ul_I13 + J13: biorad_384_wellplate_50ul_J13 + K13: biorad_384_wellplate_50ul_K13 + L13: biorad_384_wellplate_50ul_L13 + M13: biorad_384_wellplate_50ul_M13 + N13: biorad_384_wellplate_50ul_N13 + O13: biorad_384_wellplate_50ul_O13 + P13: biorad_384_wellplate_50ul_P13 + A14: biorad_384_wellplate_50ul_A14 + B14: biorad_384_wellplate_50ul_B14 + C14: biorad_384_wellplate_50ul_C14 + D14: biorad_384_wellplate_50ul_D14 + E14: biorad_384_wellplate_50ul_E14 + F14: biorad_384_wellplate_50ul_F14 + G14: biorad_384_wellplate_50ul_G14 + H14: biorad_384_wellplate_50ul_H14 + I14: biorad_384_wellplate_50ul_I14 + J14: biorad_384_wellplate_50ul_J14 + K14: biorad_384_wellplate_50ul_K14 + L14: biorad_384_wellplate_50ul_L14 + M14: biorad_384_wellplate_50ul_M14 + N14: biorad_384_wellplate_50ul_N14 + O14: biorad_384_wellplate_50ul_O14 + P14: biorad_384_wellplate_50ul_P14 + A15: biorad_384_wellplate_50ul_A15 + B15: biorad_384_wellplate_50ul_B15 + C15: biorad_384_wellplate_50ul_C15 + D15: biorad_384_wellplate_50ul_D15 + E15: biorad_384_wellplate_50ul_E15 + F15: biorad_384_wellplate_50ul_F15 + G15: biorad_384_wellplate_50ul_G15 + H15: biorad_384_wellplate_50ul_H15 + I15: biorad_384_wellplate_50ul_I15 + J15: biorad_384_wellplate_50ul_J15 + K15: biorad_384_wellplate_50ul_K15 + L15: biorad_384_wellplate_50ul_L15 + M15: biorad_384_wellplate_50ul_M15 + N15: biorad_384_wellplate_50ul_N15 + O15: biorad_384_wellplate_50ul_O15 + P15: biorad_384_wellplate_50ul_P15 + A16: biorad_384_wellplate_50ul_A16 + B16: biorad_384_wellplate_50ul_B16 + C16: biorad_384_wellplate_50ul_C16 + D16: biorad_384_wellplate_50ul_D16 + E16: biorad_384_wellplate_50ul_E16 + F16: biorad_384_wellplate_50ul_F16 + G16: biorad_384_wellplate_50ul_G16 + H16: biorad_384_wellplate_50ul_H16 + I16: biorad_384_wellplate_50ul_I16 + J16: biorad_384_wellplate_50ul_J16 + K16: biorad_384_wellplate_50ul_K16 + L16: biorad_384_wellplate_50ul_L16 + M16: biorad_384_wellplate_50ul_M16 + N16: biorad_384_wellplate_50ul_N16 + O16: biorad_384_wellplate_50ul_O16 + P16: biorad_384_wellplate_50ul_P16 + A17: biorad_384_wellplate_50ul_A17 + B17: biorad_384_wellplate_50ul_B17 + C17: biorad_384_wellplate_50ul_C17 + D17: biorad_384_wellplate_50ul_D17 + E17: biorad_384_wellplate_50ul_E17 + F17: biorad_384_wellplate_50ul_F17 + G17: biorad_384_wellplate_50ul_G17 + H17: biorad_384_wellplate_50ul_H17 + I17: biorad_384_wellplate_50ul_I17 + J17: biorad_384_wellplate_50ul_J17 + K17: biorad_384_wellplate_50ul_K17 + L17: biorad_384_wellplate_50ul_L17 + M17: biorad_384_wellplate_50ul_M17 + N17: biorad_384_wellplate_50ul_N17 + O17: biorad_384_wellplate_50ul_O17 + P17: biorad_384_wellplate_50ul_P17 + A18: biorad_384_wellplate_50ul_A18 + B18: biorad_384_wellplate_50ul_B18 + C18: biorad_384_wellplate_50ul_C18 + D18: biorad_384_wellplate_50ul_D18 + E18: biorad_384_wellplate_50ul_E18 + F18: biorad_384_wellplate_50ul_F18 + G18: biorad_384_wellplate_50ul_G18 + H18: biorad_384_wellplate_50ul_H18 + I18: biorad_384_wellplate_50ul_I18 + J18: biorad_384_wellplate_50ul_J18 + K18: biorad_384_wellplate_50ul_K18 + L18: biorad_384_wellplate_50ul_L18 + M18: biorad_384_wellplate_50ul_M18 + N18: biorad_384_wellplate_50ul_N18 + O18: biorad_384_wellplate_50ul_O18 + P18: biorad_384_wellplate_50ul_P18 + A19: biorad_384_wellplate_50ul_A19 + B19: biorad_384_wellplate_50ul_B19 + C19: biorad_384_wellplate_50ul_C19 + D19: biorad_384_wellplate_50ul_D19 + E19: biorad_384_wellplate_50ul_E19 + F19: biorad_384_wellplate_50ul_F19 + G19: biorad_384_wellplate_50ul_G19 + H19: biorad_384_wellplate_50ul_H19 + I19: biorad_384_wellplate_50ul_I19 + J19: biorad_384_wellplate_50ul_J19 + K19: biorad_384_wellplate_50ul_K19 + L19: biorad_384_wellplate_50ul_L19 + M19: biorad_384_wellplate_50ul_M19 + N19: biorad_384_wellplate_50ul_N19 + O19: biorad_384_wellplate_50ul_O19 + P19: biorad_384_wellplate_50ul_P19 + A20: biorad_384_wellplate_50ul_A20 + B20: biorad_384_wellplate_50ul_B20 + C20: biorad_384_wellplate_50ul_C20 + D20: biorad_384_wellplate_50ul_D20 + E20: biorad_384_wellplate_50ul_E20 + F20: biorad_384_wellplate_50ul_F20 + G20: biorad_384_wellplate_50ul_G20 + H20: biorad_384_wellplate_50ul_H20 + I20: biorad_384_wellplate_50ul_I20 + J20: biorad_384_wellplate_50ul_J20 + K20: biorad_384_wellplate_50ul_K20 + L20: biorad_384_wellplate_50ul_L20 + M20: biorad_384_wellplate_50ul_M20 + N20: biorad_384_wellplate_50ul_N20 + O20: biorad_384_wellplate_50ul_O20 + P20: biorad_384_wellplate_50ul_P20 + A21: biorad_384_wellplate_50ul_A21 + B21: biorad_384_wellplate_50ul_B21 + C21: biorad_384_wellplate_50ul_C21 + D21: biorad_384_wellplate_50ul_D21 + E21: biorad_384_wellplate_50ul_E21 + F21: biorad_384_wellplate_50ul_F21 + G21: biorad_384_wellplate_50ul_G21 + H21: biorad_384_wellplate_50ul_H21 + I21: biorad_384_wellplate_50ul_I21 + J21: biorad_384_wellplate_50ul_J21 + K21: biorad_384_wellplate_50ul_K21 + L21: biorad_384_wellplate_50ul_L21 + M21: biorad_384_wellplate_50ul_M21 + N21: biorad_384_wellplate_50ul_N21 + O21: biorad_384_wellplate_50ul_O21 + P21: biorad_384_wellplate_50ul_P21 + A22: biorad_384_wellplate_50ul_A22 + B22: biorad_384_wellplate_50ul_B22 + C22: biorad_384_wellplate_50ul_C22 + D22: biorad_384_wellplate_50ul_D22 + E22: biorad_384_wellplate_50ul_E22 + F22: biorad_384_wellplate_50ul_F22 + G22: biorad_384_wellplate_50ul_G22 + H22: biorad_384_wellplate_50ul_H22 + I22: biorad_384_wellplate_50ul_I22 + J22: biorad_384_wellplate_50ul_J22 + K22: biorad_384_wellplate_50ul_K22 + L22: biorad_384_wellplate_50ul_L22 + M22: biorad_384_wellplate_50ul_M22 + N22: biorad_384_wellplate_50ul_N22 + O22: biorad_384_wellplate_50ul_O22 + P22: biorad_384_wellplate_50ul_P22 + A23: biorad_384_wellplate_50ul_A23 + B23: biorad_384_wellplate_50ul_B23 + C23: biorad_384_wellplate_50ul_C23 + D23: biorad_384_wellplate_50ul_D23 + E23: biorad_384_wellplate_50ul_E23 + F23: biorad_384_wellplate_50ul_F23 + G23: biorad_384_wellplate_50ul_G23 + H23: biorad_384_wellplate_50ul_H23 + I23: biorad_384_wellplate_50ul_I23 + J23: biorad_384_wellplate_50ul_J23 + K23: biorad_384_wellplate_50ul_K23 + L23: biorad_384_wellplate_50ul_L23 + M23: biorad_384_wellplate_50ul_M23 + N23: biorad_384_wellplate_50ul_N23 + O23: biorad_384_wellplate_50ul_O23 + P23: biorad_384_wellplate_50ul_P23 + A24: biorad_384_wellplate_50ul_A24 + B24: biorad_384_wellplate_50ul_B24 + C24: biorad_384_wellplate_50ul_C24 + D24: biorad_384_wellplate_50ul_D24 + E24: biorad_384_wellplate_50ul_E24 + F24: biorad_384_wellplate_50ul_F24 + G24: biorad_384_wellplate_50ul_G24 + H24: biorad_384_wellplate_50ul_H24 + I24: biorad_384_wellplate_50ul_I24 + J24: biorad_384_wellplate_50ul_J24 + K24: biorad_384_wellplate_50ul_K24 + L24: biorad_384_wellplate_50ul_L24 + M24: biorad_384_wellplate_50ul_M24 + N24: biorad_384_wellplate_50ul_N24 + O24: biorad_384_wellplate_50ul_O24 + P24: biorad_384_wellplate_50ul_P24 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.48 + size_z: 10.4 + type: Plate + data: {} + id: biorad_384_wellplate_50ul + name: biorad_384_wellplate_50ul + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: plate + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_A1 + name: biorad_384_wellplate_50ul_A1 + parent: biorad_384_wellplate_50ul + position: + x: 11.034 + y: 75.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_B1 + name: biorad_384_wellplate_50ul_B1 + parent: biorad_384_wellplate_50ul + position: + x: 11.034 + y: 70.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_C1 + name: biorad_384_wellplate_50ul_C1 + parent: biorad_384_wellplate_50ul + position: + x: 11.034 + y: 66.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_D1 + name: biorad_384_wellplate_50ul_D1 + parent: biorad_384_wellplate_50ul + position: + x: 11.034 + y: 61.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_E1 + name: biorad_384_wellplate_50ul_E1 + parent: biorad_384_wellplate_50ul + position: + x: 11.034 + y: 57.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_F1 + name: biorad_384_wellplate_50ul_F1 + parent: biorad_384_wellplate_50ul + position: + x: 11.034 + y: 52.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_G1 + name: biorad_384_wellplate_50ul_G1 + parent: biorad_384_wellplate_50ul + position: + x: 11.034 + y: 48.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_H1 + name: biorad_384_wellplate_50ul_H1 + parent: biorad_384_wellplate_50ul + position: + x: 11.034 + y: 43.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_I1 + name: biorad_384_wellplate_50ul_I1 + parent: biorad_384_wellplate_50ul + position: + x: 11.034 + y: 39.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_J1 + name: biorad_384_wellplate_50ul_J1 + parent: biorad_384_wellplate_50ul + position: + x: 11.034 + y: 34.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_K1 + name: biorad_384_wellplate_50ul_K1 + parent: biorad_384_wellplate_50ul + position: + x: 11.034 + y: 30.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_L1 + name: biorad_384_wellplate_50ul_L1 + parent: biorad_384_wellplate_50ul + position: + x: 11.034 + y: 25.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_M1 + name: biorad_384_wellplate_50ul_M1 + parent: biorad_384_wellplate_50ul + position: + x: 11.034 + y: 21.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_N1 + name: biorad_384_wellplate_50ul_N1 + parent: biorad_384_wellplate_50ul + position: + x: 11.034 + y: 16.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_O1 + name: biorad_384_wellplate_50ul_O1 + parent: biorad_384_wellplate_50ul + position: + x: 11.034 + y: 12.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_P1 + name: biorad_384_wellplate_50ul_P1 + parent: biorad_384_wellplate_50ul + position: + x: 11.034 + y: 7.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_A2 + name: biorad_384_wellplate_50ul_A2 + parent: biorad_384_wellplate_50ul + position: + x: 15.534 + y: 75.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_B2 + name: biorad_384_wellplate_50ul_B2 + parent: biorad_384_wellplate_50ul + position: + x: 15.534 + y: 70.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_C2 + name: biorad_384_wellplate_50ul_C2 + parent: biorad_384_wellplate_50ul + position: + x: 15.534 + y: 66.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_D2 + name: biorad_384_wellplate_50ul_D2 + parent: biorad_384_wellplate_50ul + position: + x: 15.534 + y: 61.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_E2 + name: biorad_384_wellplate_50ul_E2 + parent: biorad_384_wellplate_50ul + position: + x: 15.534 + y: 57.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_F2 + name: biorad_384_wellplate_50ul_F2 + parent: biorad_384_wellplate_50ul + position: + x: 15.534 + y: 52.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_G2 + name: biorad_384_wellplate_50ul_G2 + parent: biorad_384_wellplate_50ul + position: + x: 15.534 + y: 48.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_H2 + name: biorad_384_wellplate_50ul_H2 + parent: biorad_384_wellplate_50ul + position: + x: 15.534 + y: 43.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_I2 + name: biorad_384_wellplate_50ul_I2 + parent: biorad_384_wellplate_50ul + position: + x: 15.534 + y: 39.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_J2 + name: biorad_384_wellplate_50ul_J2 + parent: biorad_384_wellplate_50ul + position: + x: 15.534 + y: 34.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_K2 + name: biorad_384_wellplate_50ul_K2 + parent: biorad_384_wellplate_50ul + position: + x: 15.534 + y: 30.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_L2 + name: biorad_384_wellplate_50ul_L2 + parent: biorad_384_wellplate_50ul + position: + x: 15.534 + y: 25.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_M2 + name: biorad_384_wellplate_50ul_M2 + parent: biorad_384_wellplate_50ul + position: + x: 15.534 + y: 21.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_N2 + name: biorad_384_wellplate_50ul_N2 + parent: biorad_384_wellplate_50ul + position: + x: 15.534 + y: 16.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_O2 + name: biorad_384_wellplate_50ul_O2 + parent: biorad_384_wellplate_50ul + position: + x: 15.534 + y: 12.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_P2 + name: biorad_384_wellplate_50ul_P2 + parent: biorad_384_wellplate_50ul + position: + x: 15.534 + y: 7.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_A3 + name: biorad_384_wellplate_50ul_A3 + parent: biorad_384_wellplate_50ul + position: + x: 20.034 + y: 75.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_B3 + name: biorad_384_wellplate_50ul_B3 + parent: biorad_384_wellplate_50ul + position: + x: 20.034 + y: 70.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_C3 + name: biorad_384_wellplate_50ul_C3 + parent: biorad_384_wellplate_50ul + position: + x: 20.034 + y: 66.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_D3 + name: biorad_384_wellplate_50ul_D3 + parent: biorad_384_wellplate_50ul + position: + x: 20.034 + y: 61.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_E3 + name: biorad_384_wellplate_50ul_E3 + parent: biorad_384_wellplate_50ul + position: + x: 20.034 + y: 57.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_F3 + name: biorad_384_wellplate_50ul_F3 + parent: biorad_384_wellplate_50ul + position: + x: 20.034 + y: 52.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_G3 + name: biorad_384_wellplate_50ul_G3 + parent: biorad_384_wellplate_50ul + position: + x: 20.034 + y: 48.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_H3 + name: biorad_384_wellplate_50ul_H3 + parent: biorad_384_wellplate_50ul + position: + x: 20.034 + y: 43.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_I3 + name: biorad_384_wellplate_50ul_I3 + parent: biorad_384_wellplate_50ul + position: + x: 20.034 + y: 39.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_J3 + name: biorad_384_wellplate_50ul_J3 + parent: biorad_384_wellplate_50ul + position: + x: 20.034 + y: 34.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_K3 + name: biorad_384_wellplate_50ul_K3 + parent: biorad_384_wellplate_50ul + position: + x: 20.034 + y: 30.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_L3 + name: biorad_384_wellplate_50ul_L3 + parent: biorad_384_wellplate_50ul + position: + x: 20.034 + y: 25.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_M3 + name: biorad_384_wellplate_50ul_M3 + parent: biorad_384_wellplate_50ul + position: + x: 20.034 + y: 21.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_N3 + name: biorad_384_wellplate_50ul_N3 + parent: biorad_384_wellplate_50ul + position: + x: 20.034 + y: 16.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_O3 + name: biorad_384_wellplate_50ul_O3 + parent: biorad_384_wellplate_50ul + position: + x: 20.034 + y: 12.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_P3 + name: biorad_384_wellplate_50ul_P3 + parent: biorad_384_wellplate_50ul + position: + x: 20.034 + y: 7.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_A4 + name: biorad_384_wellplate_50ul_A4 + parent: biorad_384_wellplate_50ul + position: + x: 24.534 + y: 75.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_B4 + name: biorad_384_wellplate_50ul_B4 + parent: biorad_384_wellplate_50ul + position: + x: 24.534 + y: 70.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_C4 + name: biorad_384_wellplate_50ul_C4 + parent: biorad_384_wellplate_50ul + position: + x: 24.534 + y: 66.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_D4 + name: biorad_384_wellplate_50ul_D4 + parent: biorad_384_wellplate_50ul + position: + x: 24.534 + y: 61.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_E4 + name: biorad_384_wellplate_50ul_E4 + parent: biorad_384_wellplate_50ul + position: + x: 24.534 + y: 57.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_F4 + name: biorad_384_wellplate_50ul_F4 + parent: biorad_384_wellplate_50ul + position: + x: 24.534 + y: 52.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_G4 + name: biorad_384_wellplate_50ul_G4 + parent: biorad_384_wellplate_50ul + position: + x: 24.534 + y: 48.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_H4 + name: biorad_384_wellplate_50ul_H4 + parent: biorad_384_wellplate_50ul + position: + x: 24.534 + y: 43.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_I4 + name: biorad_384_wellplate_50ul_I4 + parent: biorad_384_wellplate_50ul + position: + x: 24.534 + y: 39.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_J4 + name: biorad_384_wellplate_50ul_J4 + parent: biorad_384_wellplate_50ul + position: + x: 24.534 + y: 34.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_K4 + name: biorad_384_wellplate_50ul_K4 + parent: biorad_384_wellplate_50ul + position: + x: 24.534 + y: 30.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_L4 + name: biorad_384_wellplate_50ul_L4 + parent: biorad_384_wellplate_50ul + position: + x: 24.534 + y: 25.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_M4 + name: biorad_384_wellplate_50ul_M4 + parent: biorad_384_wellplate_50ul + position: + x: 24.534 + y: 21.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_N4 + name: biorad_384_wellplate_50ul_N4 + parent: biorad_384_wellplate_50ul + position: + x: 24.534 + y: 16.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_O4 + name: biorad_384_wellplate_50ul_O4 + parent: biorad_384_wellplate_50ul + position: + x: 24.534 + y: 12.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_P4 + name: biorad_384_wellplate_50ul_P4 + parent: biorad_384_wellplate_50ul + position: + x: 24.534 + y: 7.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_A5 + name: biorad_384_wellplate_50ul_A5 + parent: biorad_384_wellplate_50ul + position: + x: 29.034 + y: 75.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_B5 + name: biorad_384_wellplate_50ul_B5 + parent: biorad_384_wellplate_50ul + position: + x: 29.034 + y: 70.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_C5 + name: biorad_384_wellplate_50ul_C5 + parent: biorad_384_wellplate_50ul + position: + x: 29.034 + y: 66.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_D5 + name: biorad_384_wellplate_50ul_D5 + parent: biorad_384_wellplate_50ul + position: + x: 29.034 + y: 61.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_E5 + name: biorad_384_wellplate_50ul_E5 + parent: biorad_384_wellplate_50ul + position: + x: 29.034 + y: 57.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_F5 + name: biorad_384_wellplate_50ul_F5 + parent: biorad_384_wellplate_50ul + position: + x: 29.034 + y: 52.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_G5 + name: biorad_384_wellplate_50ul_G5 + parent: biorad_384_wellplate_50ul + position: + x: 29.034 + y: 48.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_H5 + name: biorad_384_wellplate_50ul_H5 + parent: biorad_384_wellplate_50ul + position: + x: 29.034 + y: 43.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_I5 + name: biorad_384_wellplate_50ul_I5 + parent: biorad_384_wellplate_50ul + position: + x: 29.034 + y: 39.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_J5 + name: biorad_384_wellplate_50ul_J5 + parent: biorad_384_wellplate_50ul + position: + x: 29.034 + y: 34.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_K5 + name: biorad_384_wellplate_50ul_K5 + parent: biorad_384_wellplate_50ul + position: + x: 29.034 + y: 30.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_L5 + name: biorad_384_wellplate_50ul_L5 + parent: biorad_384_wellplate_50ul + position: + x: 29.034 + y: 25.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_M5 + name: biorad_384_wellplate_50ul_M5 + parent: biorad_384_wellplate_50ul + position: + x: 29.034 + y: 21.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_N5 + name: biorad_384_wellplate_50ul_N5 + parent: biorad_384_wellplate_50ul + position: + x: 29.034 + y: 16.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_O5 + name: biorad_384_wellplate_50ul_O5 + parent: biorad_384_wellplate_50ul + position: + x: 29.034 + y: 12.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_P5 + name: biorad_384_wellplate_50ul_P5 + parent: biorad_384_wellplate_50ul + position: + x: 29.034 + y: 7.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_A6 + name: biorad_384_wellplate_50ul_A6 + parent: biorad_384_wellplate_50ul + position: + x: 33.534 + y: 75.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_B6 + name: biorad_384_wellplate_50ul_B6 + parent: biorad_384_wellplate_50ul + position: + x: 33.534 + y: 70.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_C6 + name: biorad_384_wellplate_50ul_C6 + parent: biorad_384_wellplate_50ul + position: + x: 33.534 + y: 66.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_D6 + name: biorad_384_wellplate_50ul_D6 + parent: biorad_384_wellplate_50ul + position: + x: 33.534 + y: 61.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_E6 + name: biorad_384_wellplate_50ul_E6 + parent: biorad_384_wellplate_50ul + position: + x: 33.534 + y: 57.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_F6 + name: biorad_384_wellplate_50ul_F6 + parent: biorad_384_wellplate_50ul + position: + x: 33.534 + y: 52.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_G6 + name: biorad_384_wellplate_50ul_G6 + parent: biorad_384_wellplate_50ul + position: + x: 33.534 + y: 48.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_H6 + name: biorad_384_wellplate_50ul_H6 + parent: biorad_384_wellplate_50ul + position: + x: 33.534 + y: 43.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_I6 + name: biorad_384_wellplate_50ul_I6 + parent: biorad_384_wellplate_50ul + position: + x: 33.534 + y: 39.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_J6 + name: biorad_384_wellplate_50ul_J6 + parent: biorad_384_wellplate_50ul + position: + x: 33.534 + y: 34.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_K6 + name: biorad_384_wellplate_50ul_K6 + parent: biorad_384_wellplate_50ul + position: + x: 33.534 + y: 30.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_L6 + name: biorad_384_wellplate_50ul_L6 + parent: biorad_384_wellplate_50ul + position: + x: 33.534 + y: 25.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_M6 + name: biorad_384_wellplate_50ul_M6 + parent: biorad_384_wellplate_50ul + position: + x: 33.534 + y: 21.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_N6 + name: biorad_384_wellplate_50ul_N6 + parent: biorad_384_wellplate_50ul + position: + x: 33.534 + y: 16.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_O6 + name: biorad_384_wellplate_50ul_O6 + parent: biorad_384_wellplate_50ul + position: + x: 33.534 + y: 12.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_P6 + name: biorad_384_wellplate_50ul_P6 + parent: biorad_384_wellplate_50ul + position: + x: 33.534 + y: 7.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_A7 + name: biorad_384_wellplate_50ul_A7 + parent: biorad_384_wellplate_50ul + position: + x: 38.034 + y: 75.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_B7 + name: biorad_384_wellplate_50ul_B7 + parent: biorad_384_wellplate_50ul + position: + x: 38.034 + y: 70.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_C7 + name: biorad_384_wellplate_50ul_C7 + parent: biorad_384_wellplate_50ul + position: + x: 38.034 + y: 66.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_D7 + name: biorad_384_wellplate_50ul_D7 + parent: biorad_384_wellplate_50ul + position: + x: 38.034 + y: 61.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_E7 + name: biorad_384_wellplate_50ul_E7 + parent: biorad_384_wellplate_50ul + position: + x: 38.034 + y: 57.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_F7 + name: biorad_384_wellplate_50ul_F7 + parent: biorad_384_wellplate_50ul + position: + x: 38.034 + y: 52.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_G7 + name: biorad_384_wellplate_50ul_G7 + parent: biorad_384_wellplate_50ul + position: + x: 38.034 + y: 48.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_H7 + name: biorad_384_wellplate_50ul_H7 + parent: biorad_384_wellplate_50ul + position: + x: 38.034 + y: 43.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_I7 + name: biorad_384_wellplate_50ul_I7 + parent: biorad_384_wellplate_50ul + position: + x: 38.034 + y: 39.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_J7 + name: biorad_384_wellplate_50ul_J7 + parent: biorad_384_wellplate_50ul + position: + x: 38.034 + y: 34.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_K7 + name: biorad_384_wellplate_50ul_K7 + parent: biorad_384_wellplate_50ul + position: + x: 38.034 + y: 30.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_L7 + name: biorad_384_wellplate_50ul_L7 + parent: biorad_384_wellplate_50ul + position: + x: 38.034 + y: 25.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_M7 + name: biorad_384_wellplate_50ul_M7 + parent: biorad_384_wellplate_50ul + position: + x: 38.034 + y: 21.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_N7 + name: biorad_384_wellplate_50ul_N7 + parent: biorad_384_wellplate_50ul + position: + x: 38.034 + y: 16.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_O7 + name: biorad_384_wellplate_50ul_O7 + parent: biorad_384_wellplate_50ul + position: + x: 38.034 + y: 12.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_P7 + name: biorad_384_wellplate_50ul_P7 + parent: biorad_384_wellplate_50ul + position: + x: 38.034 + y: 7.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_A8 + name: biorad_384_wellplate_50ul_A8 + parent: biorad_384_wellplate_50ul + position: + x: 42.534 + y: 75.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_B8 + name: biorad_384_wellplate_50ul_B8 + parent: biorad_384_wellplate_50ul + position: + x: 42.534 + y: 70.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_C8 + name: biorad_384_wellplate_50ul_C8 + parent: biorad_384_wellplate_50ul + position: + x: 42.534 + y: 66.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_D8 + name: biorad_384_wellplate_50ul_D8 + parent: biorad_384_wellplate_50ul + position: + x: 42.534 + y: 61.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_E8 + name: biorad_384_wellplate_50ul_E8 + parent: biorad_384_wellplate_50ul + position: + x: 42.534 + y: 57.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_F8 + name: biorad_384_wellplate_50ul_F8 + parent: biorad_384_wellplate_50ul + position: + x: 42.534 + y: 52.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_G8 + name: biorad_384_wellplate_50ul_G8 + parent: biorad_384_wellplate_50ul + position: + x: 42.534 + y: 48.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_H8 + name: biorad_384_wellplate_50ul_H8 + parent: biorad_384_wellplate_50ul + position: + x: 42.534 + y: 43.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_I8 + name: biorad_384_wellplate_50ul_I8 + parent: biorad_384_wellplate_50ul + position: + x: 42.534 + y: 39.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_J8 + name: biorad_384_wellplate_50ul_J8 + parent: biorad_384_wellplate_50ul + position: + x: 42.534 + y: 34.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_K8 + name: biorad_384_wellplate_50ul_K8 + parent: biorad_384_wellplate_50ul + position: + x: 42.534 + y: 30.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_L8 + name: biorad_384_wellplate_50ul_L8 + parent: biorad_384_wellplate_50ul + position: + x: 42.534 + y: 25.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_M8 + name: biorad_384_wellplate_50ul_M8 + parent: biorad_384_wellplate_50ul + position: + x: 42.534 + y: 21.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_N8 + name: biorad_384_wellplate_50ul_N8 + parent: biorad_384_wellplate_50ul + position: + x: 42.534 + y: 16.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_O8 + name: biorad_384_wellplate_50ul_O8 + parent: biorad_384_wellplate_50ul + position: + x: 42.534 + y: 12.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_P8 + name: biorad_384_wellplate_50ul_P8 + parent: biorad_384_wellplate_50ul + position: + x: 42.534 + y: 7.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_A9 + name: biorad_384_wellplate_50ul_A9 + parent: biorad_384_wellplate_50ul + position: + x: 47.034 + y: 75.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_B9 + name: biorad_384_wellplate_50ul_B9 + parent: biorad_384_wellplate_50ul + position: + x: 47.034 + y: 70.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_C9 + name: biorad_384_wellplate_50ul_C9 + parent: biorad_384_wellplate_50ul + position: + x: 47.034 + y: 66.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_D9 + name: biorad_384_wellplate_50ul_D9 + parent: biorad_384_wellplate_50ul + position: + x: 47.034 + y: 61.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_E9 + name: biorad_384_wellplate_50ul_E9 + parent: biorad_384_wellplate_50ul + position: + x: 47.034 + y: 57.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_F9 + name: biorad_384_wellplate_50ul_F9 + parent: biorad_384_wellplate_50ul + position: + x: 47.034 + y: 52.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_G9 + name: biorad_384_wellplate_50ul_G9 + parent: biorad_384_wellplate_50ul + position: + x: 47.034 + y: 48.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_H9 + name: biorad_384_wellplate_50ul_H9 + parent: biorad_384_wellplate_50ul + position: + x: 47.034 + y: 43.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_I9 + name: biorad_384_wellplate_50ul_I9 + parent: biorad_384_wellplate_50ul + position: + x: 47.034 + y: 39.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_J9 + name: biorad_384_wellplate_50ul_J9 + parent: biorad_384_wellplate_50ul + position: + x: 47.034 + y: 34.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_K9 + name: biorad_384_wellplate_50ul_K9 + parent: biorad_384_wellplate_50ul + position: + x: 47.034 + y: 30.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_L9 + name: biorad_384_wellplate_50ul_L9 + parent: biorad_384_wellplate_50ul + position: + x: 47.034 + y: 25.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_M9 + name: biorad_384_wellplate_50ul_M9 + parent: biorad_384_wellplate_50ul + position: + x: 47.034 + y: 21.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_N9 + name: biorad_384_wellplate_50ul_N9 + parent: biorad_384_wellplate_50ul + position: + x: 47.034 + y: 16.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_O9 + name: biorad_384_wellplate_50ul_O9 + parent: biorad_384_wellplate_50ul + position: + x: 47.034 + y: 12.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_P9 + name: biorad_384_wellplate_50ul_P9 + parent: biorad_384_wellplate_50ul + position: + x: 47.034 + y: 7.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_A10 + name: biorad_384_wellplate_50ul_A10 + parent: biorad_384_wellplate_50ul + position: + x: 51.534 + y: 75.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_B10 + name: biorad_384_wellplate_50ul_B10 + parent: biorad_384_wellplate_50ul + position: + x: 51.534 + y: 70.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_C10 + name: biorad_384_wellplate_50ul_C10 + parent: biorad_384_wellplate_50ul + position: + x: 51.534 + y: 66.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_D10 + name: biorad_384_wellplate_50ul_D10 + parent: biorad_384_wellplate_50ul + position: + x: 51.534 + y: 61.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_E10 + name: biorad_384_wellplate_50ul_E10 + parent: biorad_384_wellplate_50ul + position: + x: 51.534 + y: 57.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_F10 + name: biorad_384_wellplate_50ul_F10 + parent: biorad_384_wellplate_50ul + position: + x: 51.534 + y: 52.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_G10 + name: biorad_384_wellplate_50ul_G10 + parent: biorad_384_wellplate_50ul + position: + x: 51.534 + y: 48.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_H10 + name: biorad_384_wellplate_50ul_H10 + parent: biorad_384_wellplate_50ul + position: + x: 51.534 + y: 43.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_I10 + name: biorad_384_wellplate_50ul_I10 + parent: biorad_384_wellplate_50ul + position: + x: 51.534 + y: 39.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_J10 + name: biorad_384_wellplate_50ul_J10 + parent: biorad_384_wellplate_50ul + position: + x: 51.534 + y: 34.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_K10 + name: biorad_384_wellplate_50ul_K10 + parent: biorad_384_wellplate_50ul + position: + x: 51.534 + y: 30.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_L10 + name: biorad_384_wellplate_50ul_L10 + parent: biorad_384_wellplate_50ul + position: + x: 51.534 + y: 25.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_M10 + name: biorad_384_wellplate_50ul_M10 + parent: biorad_384_wellplate_50ul + position: + x: 51.534 + y: 21.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_N10 + name: biorad_384_wellplate_50ul_N10 + parent: biorad_384_wellplate_50ul + position: + x: 51.534 + y: 16.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_O10 + name: biorad_384_wellplate_50ul_O10 + parent: biorad_384_wellplate_50ul + position: + x: 51.534 + y: 12.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_P10 + name: biorad_384_wellplate_50ul_P10 + parent: biorad_384_wellplate_50ul + position: + x: 51.534 + y: 7.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_A11 + name: biorad_384_wellplate_50ul_A11 + parent: biorad_384_wellplate_50ul + position: + x: 56.034 + y: 75.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_B11 + name: biorad_384_wellplate_50ul_B11 + parent: biorad_384_wellplate_50ul + position: + x: 56.034 + y: 70.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_C11 + name: biorad_384_wellplate_50ul_C11 + parent: biorad_384_wellplate_50ul + position: + x: 56.034 + y: 66.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_D11 + name: biorad_384_wellplate_50ul_D11 + parent: biorad_384_wellplate_50ul + position: + x: 56.034 + y: 61.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_E11 + name: biorad_384_wellplate_50ul_E11 + parent: biorad_384_wellplate_50ul + position: + x: 56.034 + y: 57.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_F11 + name: biorad_384_wellplate_50ul_F11 + parent: biorad_384_wellplate_50ul + position: + x: 56.034 + y: 52.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_G11 + name: biorad_384_wellplate_50ul_G11 + parent: biorad_384_wellplate_50ul + position: + x: 56.034 + y: 48.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_H11 + name: biorad_384_wellplate_50ul_H11 + parent: biorad_384_wellplate_50ul + position: + x: 56.034 + y: 43.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_I11 + name: biorad_384_wellplate_50ul_I11 + parent: biorad_384_wellplate_50ul + position: + x: 56.034 + y: 39.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_J11 + name: biorad_384_wellplate_50ul_J11 + parent: biorad_384_wellplate_50ul + position: + x: 56.034 + y: 34.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_K11 + name: biorad_384_wellplate_50ul_K11 + parent: biorad_384_wellplate_50ul + position: + x: 56.034 + y: 30.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_L11 + name: biorad_384_wellplate_50ul_L11 + parent: biorad_384_wellplate_50ul + position: + x: 56.034 + y: 25.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_M11 + name: biorad_384_wellplate_50ul_M11 + parent: biorad_384_wellplate_50ul + position: + x: 56.034 + y: 21.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_N11 + name: biorad_384_wellplate_50ul_N11 + parent: biorad_384_wellplate_50ul + position: + x: 56.034 + y: 16.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_O11 + name: biorad_384_wellplate_50ul_O11 + parent: biorad_384_wellplate_50ul + position: + x: 56.034 + y: 12.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_P11 + name: biorad_384_wellplate_50ul_P11 + parent: biorad_384_wellplate_50ul + position: + x: 56.034 + y: 7.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_A12 + name: biorad_384_wellplate_50ul_A12 + parent: biorad_384_wellplate_50ul + position: + x: 60.534 + y: 75.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_B12 + name: biorad_384_wellplate_50ul_B12 + parent: biorad_384_wellplate_50ul + position: + x: 60.534 + y: 70.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_C12 + name: biorad_384_wellplate_50ul_C12 + parent: biorad_384_wellplate_50ul + position: + x: 60.534 + y: 66.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_D12 + name: biorad_384_wellplate_50ul_D12 + parent: biorad_384_wellplate_50ul + position: + x: 60.534 + y: 61.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_E12 + name: biorad_384_wellplate_50ul_E12 + parent: biorad_384_wellplate_50ul + position: + x: 60.534 + y: 57.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_F12 + name: biorad_384_wellplate_50ul_F12 + parent: biorad_384_wellplate_50ul + position: + x: 60.534 + y: 52.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_G12 + name: biorad_384_wellplate_50ul_G12 + parent: biorad_384_wellplate_50ul + position: + x: 60.534 + y: 48.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_H12 + name: biorad_384_wellplate_50ul_H12 + parent: biorad_384_wellplate_50ul + position: + x: 60.534 + y: 43.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_I12 + name: biorad_384_wellplate_50ul_I12 + parent: biorad_384_wellplate_50ul + position: + x: 60.534 + y: 39.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_J12 + name: biorad_384_wellplate_50ul_J12 + parent: biorad_384_wellplate_50ul + position: + x: 60.534 + y: 34.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_K12 + name: biorad_384_wellplate_50ul_K12 + parent: biorad_384_wellplate_50ul + position: + x: 60.534 + y: 30.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_L12 + name: biorad_384_wellplate_50ul_L12 + parent: biorad_384_wellplate_50ul + position: + x: 60.534 + y: 25.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_M12 + name: biorad_384_wellplate_50ul_M12 + parent: biorad_384_wellplate_50ul + position: + x: 60.534 + y: 21.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_N12 + name: biorad_384_wellplate_50ul_N12 + parent: biorad_384_wellplate_50ul + position: + x: 60.534 + y: 16.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_O12 + name: biorad_384_wellplate_50ul_O12 + parent: biorad_384_wellplate_50ul + position: + x: 60.534 + y: 12.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_P12 + name: biorad_384_wellplate_50ul_P12 + parent: biorad_384_wellplate_50ul + position: + x: 60.534 + y: 7.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_A13 + name: biorad_384_wellplate_50ul_A13 + parent: biorad_384_wellplate_50ul + position: + x: 65.034 + y: 75.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_B13 + name: biorad_384_wellplate_50ul_B13 + parent: biorad_384_wellplate_50ul + position: + x: 65.034 + y: 70.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_C13 + name: biorad_384_wellplate_50ul_C13 + parent: biorad_384_wellplate_50ul + position: + x: 65.034 + y: 66.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_D13 + name: biorad_384_wellplate_50ul_D13 + parent: biorad_384_wellplate_50ul + position: + x: 65.034 + y: 61.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_E13 + name: biorad_384_wellplate_50ul_E13 + parent: biorad_384_wellplate_50ul + position: + x: 65.034 + y: 57.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_F13 + name: biorad_384_wellplate_50ul_F13 + parent: biorad_384_wellplate_50ul + position: + x: 65.034 + y: 52.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_G13 + name: biorad_384_wellplate_50ul_G13 + parent: biorad_384_wellplate_50ul + position: + x: 65.034 + y: 48.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_H13 + name: biorad_384_wellplate_50ul_H13 + parent: biorad_384_wellplate_50ul + position: + x: 65.034 + y: 43.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_I13 + name: biorad_384_wellplate_50ul_I13 + parent: biorad_384_wellplate_50ul + position: + x: 65.034 + y: 39.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_J13 + name: biorad_384_wellplate_50ul_J13 + parent: biorad_384_wellplate_50ul + position: + x: 65.034 + y: 34.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_K13 + name: biorad_384_wellplate_50ul_K13 + parent: biorad_384_wellplate_50ul + position: + x: 65.034 + y: 30.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_L13 + name: biorad_384_wellplate_50ul_L13 + parent: biorad_384_wellplate_50ul + position: + x: 65.034 + y: 25.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_M13 + name: biorad_384_wellplate_50ul_M13 + parent: biorad_384_wellplate_50ul + position: + x: 65.034 + y: 21.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_N13 + name: biorad_384_wellplate_50ul_N13 + parent: biorad_384_wellplate_50ul + position: + x: 65.034 + y: 16.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_O13 + name: biorad_384_wellplate_50ul_O13 + parent: biorad_384_wellplate_50ul + position: + x: 65.034 + y: 12.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_P13 + name: biorad_384_wellplate_50ul_P13 + parent: biorad_384_wellplate_50ul + position: + x: 65.034 + y: 7.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_A14 + name: biorad_384_wellplate_50ul_A14 + parent: biorad_384_wellplate_50ul + position: + x: 69.534 + y: 75.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_B14 + name: biorad_384_wellplate_50ul_B14 + parent: biorad_384_wellplate_50ul + position: + x: 69.534 + y: 70.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_C14 + name: biorad_384_wellplate_50ul_C14 + parent: biorad_384_wellplate_50ul + position: + x: 69.534 + y: 66.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_D14 + name: biorad_384_wellplate_50ul_D14 + parent: biorad_384_wellplate_50ul + position: + x: 69.534 + y: 61.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_E14 + name: biorad_384_wellplate_50ul_E14 + parent: biorad_384_wellplate_50ul + position: + x: 69.534 + y: 57.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_F14 + name: biorad_384_wellplate_50ul_F14 + parent: biorad_384_wellplate_50ul + position: + x: 69.534 + y: 52.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_G14 + name: biorad_384_wellplate_50ul_G14 + parent: biorad_384_wellplate_50ul + position: + x: 69.534 + y: 48.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_H14 + name: biorad_384_wellplate_50ul_H14 + parent: biorad_384_wellplate_50ul + position: + x: 69.534 + y: 43.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_I14 + name: biorad_384_wellplate_50ul_I14 + parent: biorad_384_wellplate_50ul + position: + x: 69.534 + y: 39.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_J14 + name: biorad_384_wellplate_50ul_J14 + parent: biorad_384_wellplate_50ul + position: + x: 69.534 + y: 34.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_K14 + name: biorad_384_wellplate_50ul_K14 + parent: biorad_384_wellplate_50ul + position: + x: 69.534 + y: 30.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_L14 + name: biorad_384_wellplate_50ul_L14 + parent: biorad_384_wellplate_50ul + position: + x: 69.534 + y: 25.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_M14 + name: biorad_384_wellplate_50ul_M14 + parent: biorad_384_wellplate_50ul + position: + x: 69.534 + y: 21.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_N14 + name: biorad_384_wellplate_50ul_N14 + parent: biorad_384_wellplate_50ul + position: + x: 69.534 + y: 16.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_O14 + name: biorad_384_wellplate_50ul_O14 + parent: biorad_384_wellplate_50ul + position: + x: 69.534 + y: 12.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_P14 + name: biorad_384_wellplate_50ul_P14 + parent: biorad_384_wellplate_50ul + position: + x: 69.534 + y: 7.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_A15 + name: biorad_384_wellplate_50ul_A15 + parent: biorad_384_wellplate_50ul + position: + x: 74.034 + y: 75.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_B15 + name: biorad_384_wellplate_50ul_B15 + parent: biorad_384_wellplate_50ul + position: + x: 74.034 + y: 70.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_C15 + name: biorad_384_wellplate_50ul_C15 + parent: biorad_384_wellplate_50ul + position: + x: 74.034 + y: 66.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_D15 + name: biorad_384_wellplate_50ul_D15 + parent: biorad_384_wellplate_50ul + position: + x: 74.034 + y: 61.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_E15 + name: biorad_384_wellplate_50ul_E15 + parent: biorad_384_wellplate_50ul + position: + x: 74.034 + y: 57.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_F15 + name: biorad_384_wellplate_50ul_F15 + parent: biorad_384_wellplate_50ul + position: + x: 74.034 + y: 52.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_G15 + name: biorad_384_wellplate_50ul_G15 + parent: biorad_384_wellplate_50ul + position: + x: 74.034 + y: 48.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_H15 + name: biorad_384_wellplate_50ul_H15 + parent: biorad_384_wellplate_50ul + position: + x: 74.034 + y: 43.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_I15 + name: biorad_384_wellplate_50ul_I15 + parent: biorad_384_wellplate_50ul + position: + x: 74.034 + y: 39.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_J15 + name: biorad_384_wellplate_50ul_J15 + parent: biorad_384_wellplate_50ul + position: + x: 74.034 + y: 34.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_K15 + name: biorad_384_wellplate_50ul_K15 + parent: biorad_384_wellplate_50ul + position: + x: 74.034 + y: 30.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_L15 + name: biorad_384_wellplate_50ul_L15 + parent: biorad_384_wellplate_50ul + position: + x: 74.034 + y: 25.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_M15 + name: biorad_384_wellplate_50ul_M15 + parent: biorad_384_wellplate_50ul + position: + x: 74.034 + y: 21.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_N15 + name: biorad_384_wellplate_50ul_N15 + parent: biorad_384_wellplate_50ul + position: + x: 74.034 + y: 16.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_O15 + name: biorad_384_wellplate_50ul_O15 + parent: biorad_384_wellplate_50ul + position: + x: 74.034 + y: 12.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_P15 + name: biorad_384_wellplate_50ul_P15 + parent: biorad_384_wellplate_50ul + position: + x: 74.034 + y: 7.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_A16 + name: biorad_384_wellplate_50ul_A16 + parent: biorad_384_wellplate_50ul + position: + x: 78.534 + y: 75.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_B16 + name: biorad_384_wellplate_50ul_B16 + parent: biorad_384_wellplate_50ul + position: + x: 78.534 + y: 70.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_C16 + name: biorad_384_wellplate_50ul_C16 + parent: biorad_384_wellplate_50ul + position: + x: 78.534 + y: 66.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_D16 + name: biorad_384_wellplate_50ul_D16 + parent: biorad_384_wellplate_50ul + position: + x: 78.534 + y: 61.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_E16 + name: biorad_384_wellplate_50ul_E16 + parent: biorad_384_wellplate_50ul + position: + x: 78.534 + y: 57.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_F16 + name: biorad_384_wellplate_50ul_F16 + parent: biorad_384_wellplate_50ul + position: + x: 78.534 + y: 52.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_G16 + name: biorad_384_wellplate_50ul_G16 + parent: biorad_384_wellplate_50ul + position: + x: 78.534 + y: 48.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_H16 + name: biorad_384_wellplate_50ul_H16 + parent: biorad_384_wellplate_50ul + position: + x: 78.534 + y: 43.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_I16 + name: biorad_384_wellplate_50ul_I16 + parent: biorad_384_wellplate_50ul + position: + x: 78.534 + y: 39.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_J16 + name: biorad_384_wellplate_50ul_J16 + parent: biorad_384_wellplate_50ul + position: + x: 78.534 + y: 34.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_K16 + name: biorad_384_wellplate_50ul_K16 + parent: biorad_384_wellplate_50ul + position: + x: 78.534 + y: 30.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_L16 + name: biorad_384_wellplate_50ul_L16 + parent: biorad_384_wellplate_50ul + position: + x: 78.534 + y: 25.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_M16 + name: biorad_384_wellplate_50ul_M16 + parent: biorad_384_wellplate_50ul + position: + x: 78.534 + y: 21.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_N16 + name: biorad_384_wellplate_50ul_N16 + parent: biorad_384_wellplate_50ul + position: + x: 78.534 + y: 16.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_O16 + name: biorad_384_wellplate_50ul_O16 + parent: biorad_384_wellplate_50ul + position: + x: 78.534 + y: 12.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_P16 + name: biorad_384_wellplate_50ul_P16 + parent: biorad_384_wellplate_50ul + position: + x: 78.534 + y: 7.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_A17 + name: biorad_384_wellplate_50ul_A17 + parent: biorad_384_wellplate_50ul + position: + x: 83.034 + y: 75.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_B17 + name: biorad_384_wellplate_50ul_B17 + parent: biorad_384_wellplate_50ul + position: + x: 83.034 + y: 70.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_C17 + name: biorad_384_wellplate_50ul_C17 + parent: biorad_384_wellplate_50ul + position: + x: 83.034 + y: 66.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_D17 + name: biorad_384_wellplate_50ul_D17 + parent: biorad_384_wellplate_50ul + position: + x: 83.034 + y: 61.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_E17 + name: biorad_384_wellplate_50ul_E17 + parent: biorad_384_wellplate_50ul + position: + x: 83.034 + y: 57.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_F17 + name: biorad_384_wellplate_50ul_F17 + parent: biorad_384_wellplate_50ul + position: + x: 83.034 + y: 52.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_G17 + name: biorad_384_wellplate_50ul_G17 + parent: biorad_384_wellplate_50ul + position: + x: 83.034 + y: 48.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_H17 + name: biorad_384_wellplate_50ul_H17 + parent: biorad_384_wellplate_50ul + position: + x: 83.034 + y: 43.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_I17 + name: biorad_384_wellplate_50ul_I17 + parent: biorad_384_wellplate_50ul + position: + x: 83.034 + y: 39.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_J17 + name: biorad_384_wellplate_50ul_J17 + parent: biorad_384_wellplate_50ul + position: + x: 83.034 + y: 34.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_K17 + name: biorad_384_wellplate_50ul_K17 + parent: biorad_384_wellplate_50ul + position: + x: 83.034 + y: 30.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_L17 + name: biorad_384_wellplate_50ul_L17 + parent: biorad_384_wellplate_50ul + position: + x: 83.034 + y: 25.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_M17 + name: biorad_384_wellplate_50ul_M17 + parent: biorad_384_wellplate_50ul + position: + x: 83.034 + y: 21.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_N17 + name: biorad_384_wellplate_50ul_N17 + parent: biorad_384_wellplate_50ul + position: + x: 83.034 + y: 16.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_O17 + name: biorad_384_wellplate_50ul_O17 + parent: biorad_384_wellplate_50ul + position: + x: 83.034 + y: 12.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_P17 + name: biorad_384_wellplate_50ul_P17 + parent: biorad_384_wellplate_50ul + position: + x: 83.034 + y: 7.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_A18 + name: biorad_384_wellplate_50ul_A18 + parent: biorad_384_wellplate_50ul + position: + x: 87.534 + y: 75.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_B18 + name: biorad_384_wellplate_50ul_B18 + parent: biorad_384_wellplate_50ul + position: + x: 87.534 + y: 70.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_C18 + name: biorad_384_wellplate_50ul_C18 + parent: biorad_384_wellplate_50ul + position: + x: 87.534 + y: 66.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_D18 + name: biorad_384_wellplate_50ul_D18 + parent: biorad_384_wellplate_50ul + position: + x: 87.534 + y: 61.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_E18 + name: biorad_384_wellplate_50ul_E18 + parent: biorad_384_wellplate_50ul + position: + x: 87.534 + y: 57.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_F18 + name: biorad_384_wellplate_50ul_F18 + parent: biorad_384_wellplate_50ul + position: + x: 87.534 + y: 52.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_G18 + name: biorad_384_wellplate_50ul_G18 + parent: biorad_384_wellplate_50ul + position: + x: 87.534 + y: 48.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_H18 + name: biorad_384_wellplate_50ul_H18 + parent: biorad_384_wellplate_50ul + position: + x: 87.534 + y: 43.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_I18 + name: biorad_384_wellplate_50ul_I18 + parent: biorad_384_wellplate_50ul + position: + x: 87.534 + y: 39.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_J18 + name: biorad_384_wellplate_50ul_J18 + parent: biorad_384_wellplate_50ul + position: + x: 87.534 + y: 34.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_K18 + name: biorad_384_wellplate_50ul_K18 + parent: biorad_384_wellplate_50ul + position: + x: 87.534 + y: 30.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_L18 + name: biorad_384_wellplate_50ul_L18 + parent: biorad_384_wellplate_50ul + position: + x: 87.534 + y: 25.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_M18 + name: biorad_384_wellplate_50ul_M18 + parent: biorad_384_wellplate_50ul + position: + x: 87.534 + y: 21.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_N18 + name: biorad_384_wellplate_50ul_N18 + parent: biorad_384_wellplate_50ul + position: + x: 87.534 + y: 16.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_O18 + name: biorad_384_wellplate_50ul_O18 + parent: biorad_384_wellplate_50ul + position: + x: 87.534 + y: 12.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_P18 + name: biorad_384_wellplate_50ul_P18 + parent: biorad_384_wellplate_50ul + position: + x: 87.534 + y: 7.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_A19 + name: biorad_384_wellplate_50ul_A19 + parent: biorad_384_wellplate_50ul + position: + x: 92.034 + y: 75.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_B19 + name: biorad_384_wellplate_50ul_B19 + parent: biorad_384_wellplate_50ul + position: + x: 92.034 + y: 70.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_C19 + name: biorad_384_wellplate_50ul_C19 + parent: biorad_384_wellplate_50ul + position: + x: 92.034 + y: 66.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_D19 + name: biorad_384_wellplate_50ul_D19 + parent: biorad_384_wellplate_50ul + position: + x: 92.034 + y: 61.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_E19 + name: biorad_384_wellplate_50ul_E19 + parent: biorad_384_wellplate_50ul + position: + x: 92.034 + y: 57.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_F19 + name: biorad_384_wellplate_50ul_F19 + parent: biorad_384_wellplate_50ul + position: + x: 92.034 + y: 52.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_G19 + name: biorad_384_wellplate_50ul_G19 + parent: biorad_384_wellplate_50ul + position: + x: 92.034 + y: 48.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_H19 + name: biorad_384_wellplate_50ul_H19 + parent: biorad_384_wellplate_50ul + position: + x: 92.034 + y: 43.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_I19 + name: biorad_384_wellplate_50ul_I19 + parent: biorad_384_wellplate_50ul + position: + x: 92.034 + y: 39.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_J19 + name: biorad_384_wellplate_50ul_J19 + parent: biorad_384_wellplate_50ul + position: + x: 92.034 + y: 34.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_K19 + name: biorad_384_wellplate_50ul_K19 + parent: biorad_384_wellplate_50ul + position: + x: 92.034 + y: 30.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_L19 + name: biorad_384_wellplate_50ul_L19 + parent: biorad_384_wellplate_50ul + position: + x: 92.034 + y: 25.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_M19 + name: biorad_384_wellplate_50ul_M19 + parent: biorad_384_wellplate_50ul + position: + x: 92.034 + y: 21.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_N19 + name: biorad_384_wellplate_50ul_N19 + parent: biorad_384_wellplate_50ul + position: + x: 92.034 + y: 16.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_O19 + name: biorad_384_wellplate_50ul_O19 + parent: biorad_384_wellplate_50ul + position: + x: 92.034 + y: 12.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_P19 + name: biorad_384_wellplate_50ul_P19 + parent: biorad_384_wellplate_50ul + position: + x: 92.034 + y: 7.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_A20 + name: biorad_384_wellplate_50ul_A20 + parent: biorad_384_wellplate_50ul + position: + x: 96.534 + y: 75.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_B20 + name: biorad_384_wellplate_50ul_B20 + parent: biorad_384_wellplate_50ul + position: + x: 96.534 + y: 70.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_C20 + name: biorad_384_wellplate_50ul_C20 + parent: biorad_384_wellplate_50ul + position: + x: 96.534 + y: 66.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_D20 + name: biorad_384_wellplate_50ul_D20 + parent: biorad_384_wellplate_50ul + position: + x: 96.534 + y: 61.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_E20 + name: biorad_384_wellplate_50ul_E20 + parent: biorad_384_wellplate_50ul + position: + x: 96.534 + y: 57.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_F20 + name: biorad_384_wellplate_50ul_F20 + parent: biorad_384_wellplate_50ul + position: + x: 96.534 + y: 52.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_G20 + name: biorad_384_wellplate_50ul_G20 + parent: biorad_384_wellplate_50ul + position: + x: 96.534 + y: 48.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_H20 + name: biorad_384_wellplate_50ul_H20 + parent: biorad_384_wellplate_50ul + position: + x: 96.534 + y: 43.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_I20 + name: biorad_384_wellplate_50ul_I20 + parent: biorad_384_wellplate_50ul + position: + x: 96.534 + y: 39.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_J20 + name: biorad_384_wellplate_50ul_J20 + parent: biorad_384_wellplate_50ul + position: + x: 96.534 + y: 34.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_K20 + name: biorad_384_wellplate_50ul_K20 + parent: biorad_384_wellplate_50ul + position: + x: 96.534 + y: 30.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_L20 + name: biorad_384_wellplate_50ul_L20 + parent: biorad_384_wellplate_50ul + position: + x: 96.534 + y: 25.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_M20 + name: biorad_384_wellplate_50ul_M20 + parent: biorad_384_wellplate_50ul + position: + x: 96.534 + y: 21.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_N20 + name: biorad_384_wellplate_50ul_N20 + parent: biorad_384_wellplate_50ul + position: + x: 96.534 + y: 16.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_O20 + name: biorad_384_wellplate_50ul_O20 + parent: biorad_384_wellplate_50ul + position: + x: 96.534 + y: 12.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_P20 + name: biorad_384_wellplate_50ul_P20 + parent: biorad_384_wellplate_50ul + position: + x: 96.534 + y: 7.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_A21 + name: biorad_384_wellplate_50ul_A21 + parent: biorad_384_wellplate_50ul + position: + x: 101.034 + y: 75.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_B21 + name: biorad_384_wellplate_50ul_B21 + parent: biorad_384_wellplate_50ul + position: + x: 101.034 + y: 70.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_C21 + name: biorad_384_wellplate_50ul_C21 + parent: biorad_384_wellplate_50ul + position: + x: 101.034 + y: 66.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_D21 + name: biorad_384_wellplate_50ul_D21 + parent: biorad_384_wellplate_50ul + position: + x: 101.034 + y: 61.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_E21 + name: biorad_384_wellplate_50ul_E21 + parent: biorad_384_wellplate_50ul + position: + x: 101.034 + y: 57.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_F21 + name: biorad_384_wellplate_50ul_F21 + parent: biorad_384_wellplate_50ul + position: + x: 101.034 + y: 52.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_G21 + name: biorad_384_wellplate_50ul_G21 + parent: biorad_384_wellplate_50ul + position: + x: 101.034 + y: 48.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_H21 + name: biorad_384_wellplate_50ul_H21 + parent: biorad_384_wellplate_50ul + position: + x: 101.034 + y: 43.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_I21 + name: biorad_384_wellplate_50ul_I21 + parent: biorad_384_wellplate_50ul + position: + x: 101.034 + y: 39.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_J21 + name: biorad_384_wellplate_50ul_J21 + parent: biorad_384_wellplate_50ul + position: + x: 101.034 + y: 34.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_K21 + name: biorad_384_wellplate_50ul_K21 + parent: biorad_384_wellplate_50ul + position: + x: 101.034 + y: 30.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_L21 + name: biorad_384_wellplate_50ul_L21 + parent: biorad_384_wellplate_50ul + position: + x: 101.034 + y: 25.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_M21 + name: biorad_384_wellplate_50ul_M21 + parent: biorad_384_wellplate_50ul + position: + x: 101.034 + y: 21.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_N21 + name: biorad_384_wellplate_50ul_N21 + parent: biorad_384_wellplate_50ul + position: + x: 101.034 + y: 16.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_O21 + name: biorad_384_wellplate_50ul_O21 + parent: biorad_384_wellplate_50ul + position: + x: 101.034 + y: 12.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_P21 + name: biorad_384_wellplate_50ul_P21 + parent: biorad_384_wellplate_50ul + position: + x: 101.034 + y: 7.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_A22 + name: biorad_384_wellplate_50ul_A22 + parent: biorad_384_wellplate_50ul + position: + x: 105.534 + y: 75.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_B22 + name: biorad_384_wellplate_50ul_B22 + parent: biorad_384_wellplate_50ul + position: + x: 105.534 + y: 70.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_C22 + name: biorad_384_wellplate_50ul_C22 + parent: biorad_384_wellplate_50ul + position: + x: 105.534 + y: 66.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_D22 + name: biorad_384_wellplate_50ul_D22 + parent: biorad_384_wellplate_50ul + position: + x: 105.534 + y: 61.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_E22 + name: biorad_384_wellplate_50ul_E22 + parent: biorad_384_wellplate_50ul + position: + x: 105.534 + y: 57.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_F22 + name: biorad_384_wellplate_50ul_F22 + parent: biorad_384_wellplate_50ul + position: + x: 105.534 + y: 52.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_G22 + name: biorad_384_wellplate_50ul_G22 + parent: biorad_384_wellplate_50ul + position: + x: 105.534 + y: 48.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_H22 + name: biorad_384_wellplate_50ul_H22 + parent: biorad_384_wellplate_50ul + position: + x: 105.534 + y: 43.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_I22 + name: biorad_384_wellplate_50ul_I22 + parent: biorad_384_wellplate_50ul + position: + x: 105.534 + y: 39.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_J22 + name: biorad_384_wellplate_50ul_J22 + parent: biorad_384_wellplate_50ul + position: + x: 105.534 + y: 34.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_K22 + name: biorad_384_wellplate_50ul_K22 + parent: biorad_384_wellplate_50ul + position: + x: 105.534 + y: 30.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_L22 + name: biorad_384_wellplate_50ul_L22 + parent: biorad_384_wellplate_50ul + position: + x: 105.534 + y: 25.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_M22 + name: biorad_384_wellplate_50ul_M22 + parent: biorad_384_wellplate_50ul + position: + x: 105.534 + y: 21.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_N22 + name: biorad_384_wellplate_50ul_N22 + parent: biorad_384_wellplate_50ul + position: + x: 105.534 + y: 16.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_O22 + name: biorad_384_wellplate_50ul_O22 + parent: biorad_384_wellplate_50ul + position: + x: 105.534 + y: 12.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_P22 + name: biorad_384_wellplate_50ul_P22 + parent: biorad_384_wellplate_50ul + position: + x: 105.534 + y: 7.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_A23 + name: biorad_384_wellplate_50ul_A23 + parent: biorad_384_wellplate_50ul + position: + x: 110.034 + y: 75.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_B23 + name: biorad_384_wellplate_50ul_B23 + parent: biorad_384_wellplate_50ul + position: + x: 110.034 + y: 70.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_C23 + name: biorad_384_wellplate_50ul_C23 + parent: biorad_384_wellplate_50ul + position: + x: 110.034 + y: 66.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_D23 + name: biorad_384_wellplate_50ul_D23 + parent: biorad_384_wellplate_50ul + position: + x: 110.034 + y: 61.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_E23 + name: biorad_384_wellplate_50ul_E23 + parent: biorad_384_wellplate_50ul + position: + x: 110.034 + y: 57.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_F23 + name: biorad_384_wellplate_50ul_F23 + parent: biorad_384_wellplate_50ul + position: + x: 110.034 + y: 52.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_G23 + name: biorad_384_wellplate_50ul_G23 + parent: biorad_384_wellplate_50ul + position: + x: 110.034 + y: 48.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_H23 + name: biorad_384_wellplate_50ul_H23 + parent: biorad_384_wellplate_50ul + position: + x: 110.034 + y: 43.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_I23 + name: biorad_384_wellplate_50ul_I23 + parent: biorad_384_wellplate_50ul + position: + x: 110.034 + y: 39.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_J23 + name: biorad_384_wellplate_50ul_J23 + parent: biorad_384_wellplate_50ul + position: + x: 110.034 + y: 34.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_K23 + name: biorad_384_wellplate_50ul_K23 + parent: biorad_384_wellplate_50ul + position: + x: 110.034 + y: 30.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_L23 + name: biorad_384_wellplate_50ul_L23 + parent: biorad_384_wellplate_50ul + position: + x: 110.034 + y: 25.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_M23 + name: biorad_384_wellplate_50ul_M23 + parent: biorad_384_wellplate_50ul + position: + x: 110.034 + y: 21.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_N23 + name: biorad_384_wellplate_50ul_N23 + parent: biorad_384_wellplate_50ul + position: + x: 110.034 + y: 16.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_O23 + name: biorad_384_wellplate_50ul_O23 + parent: biorad_384_wellplate_50ul + position: + x: 110.034 + y: 12.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_P23 + name: biorad_384_wellplate_50ul_P23 + parent: biorad_384_wellplate_50ul + position: + x: 110.034 + y: 7.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_A24 + name: biorad_384_wellplate_50ul_A24 + parent: biorad_384_wellplate_50ul + position: + x: 114.534 + y: 75.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_B24 + name: biorad_384_wellplate_50ul_B24 + parent: biorad_384_wellplate_50ul + position: + x: 114.534 + y: 70.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_C24 + name: biorad_384_wellplate_50ul_C24 + parent: biorad_384_wellplate_50ul + position: + x: 114.534 + y: 66.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_D24 + name: biorad_384_wellplate_50ul_D24 + parent: biorad_384_wellplate_50ul + position: + x: 114.534 + y: 61.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_E24 + name: biorad_384_wellplate_50ul_E24 + parent: biorad_384_wellplate_50ul + position: + x: 114.534 + y: 57.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_F24 + name: biorad_384_wellplate_50ul_F24 + parent: biorad_384_wellplate_50ul + position: + x: 114.534 + y: 52.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_G24 + name: biorad_384_wellplate_50ul_G24 + parent: biorad_384_wellplate_50ul + position: + x: 114.534 + y: 48.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_H24 + name: biorad_384_wellplate_50ul_H24 + parent: biorad_384_wellplate_50ul + position: + x: 114.534 + y: 43.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_I24 + name: biorad_384_wellplate_50ul_I24 + parent: biorad_384_wellplate_50ul + position: + x: 114.534 + y: 39.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_J24 + name: biorad_384_wellplate_50ul_J24 + parent: biorad_384_wellplate_50ul + position: + x: 114.534 + y: 34.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_K24 + name: biorad_384_wellplate_50ul_K24 + parent: biorad_384_wellplate_50ul + position: + x: 114.534 + y: 30.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_L24 + name: biorad_384_wellplate_50ul_L24 + parent: biorad_384_wellplate_50ul + position: + x: 114.534 + y: 25.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_M24 + name: biorad_384_wellplate_50ul_M24 + parent: biorad_384_wellplate_50ul + position: + x: 114.534 + y: 21.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_N24 + name: biorad_384_wellplate_50ul_N24 + parent: biorad_384_wellplate_50ul + position: + x: 114.534 + y: 16.894 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_O24 + name: biorad_384_wellplate_50ul_O24 + parent: biorad_384_wellplate_50ul + position: + x: 114.534 + y: 12.394 + z: 1.05 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 50 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.192 + size_y: 2.192 + size_z: 9.35 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_384_wellplate_50ul_P24 + name: biorad_384_wellplate_50ul_P24 + parent: biorad_384_wellplate_50ul + position: + x: 114.534 + y: 7.894 + z: 1.05 + sample_id: null + type: well + description: BioRad 384 wellplate 50ul + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/plates.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +biorad_96_wellplate_200ul_pcr: + category: + - plates + class: + module: pylabrobot.resources.opentrons.plates:biorad_96_wellplate_200ul_pcr + type: pylabrobot + config_info: + - children: + - biorad_96_wellplate_200ul_pcr_A1 + - biorad_96_wellplate_200ul_pcr_B1 + - biorad_96_wellplate_200ul_pcr_C1 + - biorad_96_wellplate_200ul_pcr_D1 + - biorad_96_wellplate_200ul_pcr_E1 + - biorad_96_wellplate_200ul_pcr_F1 + - biorad_96_wellplate_200ul_pcr_G1 + - biorad_96_wellplate_200ul_pcr_H1 + - biorad_96_wellplate_200ul_pcr_A2 + - biorad_96_wellplate_200ul_pcr_B2 + - biorad_96_wellplate_200ul_pcr_C2 + - biorad_96_wellplate_200ul_pcr_D2 + - biorad_96_wellplate_200ul_pcr_E2 + - biorad_96_wellplate_200ul_pcr_F2 + - biorad_96_wellplate_200ul_pcr_G2 + - biorad_96_wellplate_200ul_pcr_H2 + - biorad_96_wellplate_200ul_pcr_A3 + - biorad_96_wellplate_200ul_pcr_B3 + - biorad_96_wellplate_200ul_pcr_C3 + - biorad_96_wellplate_200ul_pcr_D3 + - biorad_96_wellplate_200ul_pcr_E3 + - biorad_96_wellplate_200ul_pcr_F3 + - biorad_96_wellplate_200ul_pcr_G3 + - biorad_96_wellplate_200ul_pcr_H3 + - biorad_96_wellplate_200ul_pcr_A4 + - biorad_96_wellplate_200ul_pcr_B4 + - biorad_96_wellplate_200ul_pcr_C4 + - biorad_96_wellplate_200ul_pcr_D4 + - biorad_96_wellplate_200ul_pcr_E4 + - biorad_96_wellplate_200ul_pcr_F4 + - biorad_96_wellplate_200ul_pcr_G4 + - biorad_96_wellplate_200ul_pcr_H4 + - biorad_96_wellplate_200ul_pcr_A5 + - biorad_96_wellplate_200ul_pcr_B5 + - biorad_96_wellplate_200ul_pcr_C5 + - biorad_96_wellplate_200ul_pcr_D5 + - biorad_96_wellplate_200ul_pcr_E5 + - biorad_96_wellplate_200ul_pcr_F5 + - biorad_96_wellplate_200ul_pcr_G5 + - biorad_96_wellplate_200ul_pcr_H5 + - biorad_96_wellplate_200ul_pcr_A6 + - biorad_96_wellplate_200ul_pcr_B6 + - biorad_96_wellplate_200ul_pcr_C6 + - biorad_96_wellplate_200ul_pcr_D6 + - biorad_96_wellplate_200ul_pcr_E6 + - biorad_96_wellplate_200ul_pcr_F6 + - biorad_96_wellplate_200ul_pcr_G6 + - biorad_96_wellplate_200ul_pcr_H6 + - biorad_96_wellplate_200ul_pcr_A7 + - biorad_96_wellplate_200ul_pcr_B7 + - biorad_96_wellplate_200ul_pcr_C7 + - biorad_96_wellplate_200ul_pcr_D7 + - biorad_96_wellplate_200ul_pcr_E7 + - biorad_96_wellplate_200ul_pcr_F7 + - biorad_96_wellplate_200ul_pcr_G7 + - biorad_96_wellplate_200ul_pcr_H7 + - biorad_96_wellplate_200ul_pcr_A8 + - biorad_96_wellplate_200ul_pcr_B8 + - biorad_96_wellplate_200ul_pcr_C8 + - biorad_96_wellplate_200ul_pcr_D8 + - biorad_96_wellplate_200ul_pcr_E8 + - biorad_96_wellplate_200ul_pcr_F8 + - biorad_96_wellplate_200ul_pcr_G8 + - biorad_96_wellplate_200ul_pcr_H8 + - biorad_96_wellplate_200ul_pcr_A9 + - biorad_96_wellplate_200ul_pcr_B9 + - biorad_96_wellplate_200ul_pcr_C9 + - biorad_96_wellplate_200ul_pcr_D9 + - biorad_96_wellplate_200ul_pcr_E9 + - biorad_96_wellplate_200ul_pcr_F9 + - biorad_96_wellplate_200ul_pcr_G9 + - biorad_96_wellplate_200ul_pcr_H9 + - biorad_96_wellplate_200ul_pcr_A10 + - biorad_96_wellplate_200ul_pcr_B10 + - biorad_96_wellplate_200ul_pcr_C10 + - biorad_96_wellplate_200ul_pcr_D10 + - biorad_96_wellplate_200ul_pcr_E10 + - biorad_96_wellplate_200ul_pcr_F10 + - biorad_96_wellplate_200ul_pcr_G10 + - biorad_96_wellplate_200ul_pcr_H10 + - biorad_96_wellplate_200ul_pcr_A11 + - biorad_96_wellplate_200ul_pcr_B11 + - biorad_96_wellplate_200ul_pcr_C11 + - biorad_96_wellplate_200ul_pcr_D11 + - biorad_96_wellplate_200ul_pcr_E11 + - biorad_96_wellplate_200ul_pcr_F11 + - biorad_96_wellplate_200ul_pcr_G11 + - biorad_96_wellplate_200ul_pcr_H11 + - biorad_96_wellplate_200ul_pcr_A12 + - biorad_96_wellplate_200ul_pcr_B12 + - biorad_96_wellplate_200ul_pcr_C12 + - biorad_96_wellplate_200ul_pcr_D12 + - biorad_96_wellplate_200ul_pcr_E12 + - biorad_96_wellplate_200ul_pcr_F12 + - biorad_96_wellplate_200ul_pcr_G12 + - biorad_96_wellplate_200ul_pcr_H12 + class: '' + config: + barcode: null + category: plate + model: Bio-Rad 96 Well Plate 200 µL PCR + ordering: + A1: biorad_96_wellplate_200ul_pcr_A1 + B1: biorad_96_wellplate_200ul_pcr_B1 + C1: biorad_96_wellplate_200ul_pcr_C1 + D1: biorad_96_wellplate_200ul_pcr_D1 + E1: biorad_96_wellplate_200ul_pcr_E1 + F1: biorad_96_wellplate_200ul_pcr_F1 + G1: biorad_96_wellplate_200ul_pcr_G1 + H1: biorad_96_wellplate_200ul_pcr_H1 + A2: biorad_96_wellplate_200ul_pcr_A2 + B2: biorad_96_wellplate_200ul_pcr_B2 + C2: biorad_96_wellplate_200ul_pcr_C2 + D2: biorad_96_wellplate_200ul_pcr_D2 + E2: biorad_96_wellplate_200ul_pcr_E2 + F2: biorad_96_wellplate_200ul_pcr_F2 + G2: biorad_96_wellplate_200ul_pcr_G2 + H2: biorad_96_wellplate_200ul_pcr_H2 + A3: biorad_96_wellplate_200ul_pcr_A3 + B3: biorad_96_wellplate_200ul_pcr_B3 + C3: biorad_96_wellplate_200ul_pcr_C3 + D3: biorad_96_wellplate_200ul_pcr_D3 + E3: biorad_96_wellplate_200ul_pcr_E3 + F3: biorad_96_wellplate_200ul_pcr_F3 + G3: biorad_96_wellplate_200ul_pcr_G3 + H3: biorad_96_wellplate_200ul_pcr_H3 + A4: biorad_96_wellplate_200ul_pcr_A4 + B4: biorad_96_wellplate_200ul_pcr_B4 + C4: biorad_96_wellplate_200ul_pcr_C4 + D4: biorad_96_wellplate_200ul_pcr_D4 + E4: biorad_96_wellplate_200ul_pcr_E4 + F4: biorad_96_wellplate_200ul_pcr_F4 + G4: biorad_96_wellplate_200ul_pcr_G4 + H4: biorad_96_wellplate_200ul_pcr_H4 + A5: biorad_96_wellplate_200ul_pcr_A5 + B5: biorad_96_wellplate_200ul_pcr_B5 + C5: biorad_96_wellplate_200ul_pcr_C5 + D5: biorad_96_wellplate_200ul_pcr_D5 + E5: biorad_96_wellplate_200ul_pcr_E5 + F5: biorad_96_wellplate_200ul_pcr_F5 + G5: biorad_96_wellplate_200ul_pcr_G5 + H5: biorad_96_wellplate_200ul_pcr_H5 + A6: biorad_96_wellplate_200ul_pcr_A6 + B6: biorad_96_wellplate_200ul_pcr_B6 + C6: biorad_96_wellplate_200ul_pcr_C6 + D6: biorad_96_wellplate_200ul_pcr_D6 + E6: biorad_96_wellplate_200ul_pcr_E6 + F6: biorad_96_wellplate_200ul_pcr_F6 + G6: biorad_96_wellplate_200ul_pcr_G6 + H6: biorad_96_wellplate_200ul_pcr_H6 + A7: biorad_96_wellplate_200ul_pcr_A7 + B7: biorad_96_wellplate_200ul_pcr_B7 + C7: biorad_96_wellplate_200ul_pcr_C7 + D7: biorad_96_wellplate_200ul_pcr_D7 + E7: biorad_96_wellplate_200ul_pcr_E7 + F7: biorad_96_wellplate_200ul_pcr_F7 + G7: biorad_96_wellplate_200ul_pcr_G7 + H7: biorad_96_wellplate_200ul_pcr_H7 + A8: biorad_96_wellplate_200ul_pcr_A8 + B8: biorad_96_wellplate_200ul_pcr_B8 + C8: biorad_96_wellplate_200ul_pcr_C8 + D8: biorad_96_wellplate_200ul_pcr_D8 + E8: biorad_96_wellplate_200ul_pcr_E8 + F8: biorad_96_wellplate_200ul_pcr_F8 + G8: biorad_96_wellplate_200ul_pcr_G8 + H8: biorad_96_wellplate_200ul_pcr_H8 + A9: biorad_96_wellplate_200ul_pcr_A9 + B9: biorad_96_wellplate_200ul_pcr_B9 + C9: biorad_96_wellplate_200ul_pcr_C9 + D9: biorad_96_wellplate_200ul_pcr_D9 + E9: biorad_96_wellplate_200ul_pcr_E9 + F9: biorad_96_wellplate_200ul_pcr_F9 + G9: biorad_96_wellplate_200ul_pcr_G9 + H9: biorad_96_wellplate_200ul_pcr_H9 + A10: biorad_96_wellplate_200ul_pcr_A10 + B10: biorad_96_wellplate_200ul_pcr_B10 + C10: biorad_96_wellplate_200ul_pcr_C10 + D10: biorad_96_wellplate_200ul_pcr_D10 + E10: biorad_96_wellplate_200ul_pcr_E10 + F10: biorad_96_wellplate_200ul_pcr_F10 + G10: biorad_96_wellplate_200ul_pcr_G10 + H10: biorad_96_wellplate_200ul_pcr_H10 + A11: biorad_96_wellplate_200ul_pcr_A11 + B11: biorad_96_wellplate_200ul_pcr_B11 + C11: biorad_96_wellplate_200ul_pcr_C11 + D11: biorad_96_wellplate_200ul_pcr_D11 + E11: biorad_96_wellplate_200ul_pcr_E11 + F11: biorad_96_wellplate_200ul_pcr_F11 + G11: biorad_96_wellplate_200ul_pcr_G11 + H11: biorad_96_wellplate_200ul_pcr_H11 + A12: biorad_96_wellplate_200ul_pcr_A12 + B12: biorad_96_wellplate_200ul_pcr_B12 + C12: biorad_96_wellplate_200ul_pcr_C12 + D12: biorad_96_wellplate_200ul_pcr_D12 + E12: biorad_96_wellplate_200ul_pcr_E12 + F12: biorad_96_wellplate_200ul_pcr_F12 + G12: biorad_96_wellplate_200ul_pcr_G12 + H12: biorad_96_wellplate_200ul_pcr_H12 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.48 + size_z: 16.06 + type: Plate + data: {} + id: biorad_96_wellplate_200ul_pcr + name: biorad_96_wellplate_200ul_pcr + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: plate + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_A1 + name: biorad_96_wellplate_200ul_pcr_A1 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 12.4495 + y: 72.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_B1 + name: biorad_96_wellplate_200ul_pcr_B1 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 12.4495 + y: 63.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_C1 + name: biorad_96_wellplate_200ul_pcr_C1 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 12.4495 + y: 54.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_D1 + name: biorad_96_wellplate_200ul_pcr_D1 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 12.4495 + y: 45.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_E1 + name: biorad_96_wellplate_200ul_pcr_E1 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 12.4495 + y: 36.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_F1 + name: biorad_96_wellplate_200ul_pcr_F1 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 12.4495 + y: 27.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_G1 + name: biorad_96_wellplate_200ul_pcr_G1 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 12.4495 + y: 18.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_H1 + name: biorad_96_wellplate_200ul_pcr_H1 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 12.4495 + y: 9.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_A2 + name: biorad_96_wellplate_200ul_pcr_A2 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 21.4495 + y: 72.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_B2 + name: biorad_96_wellplate_200ul_pcr_B2 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 21.4495 + y: 63.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_C2 + name: biorad_96_wellplate_200ul_pcr_C2 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 21.4495 + y: 54.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_D2 + name: biorad_96_wellplate_200ul_pcr_D2 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 21.4495 + y: 45.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_E2 + name: biorad_96_wellplate_200ul_pcr_E2 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 21.4495 + y: 36.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_F2 + name: biorad_96_wellplate_200ul_pcr_F2 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 21.4495 + y: 27.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_G2 + name: biorad_96_wellplate_200ul_pcr_G2 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 21.4495 + y: 18.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_H2 + name: biorad_96_wellplate_200ul_pcr_H2 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 21.4495 + y: 9.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_A3 + name: biorad_96_wellplate_200ul_pcr_A3 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 30.4495 + y: 72.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_B3 + name: biorad_96_wellplate_200ul_pcr_B3 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 30.4495 + y: 63.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_C3 + name: biorad_96_wellplate_200ul_pcr_C3 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 30.4495 + y: 54.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_D3 + name: biorad_96_wellplate_200ul_pcr_D3 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 30.4495 + y: 45.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_E3 + name: biorad_96_wellplate_200ul_pcr_E3 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 30.4495 + y: 36.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_F3 + name: biorad_96_wellplate_200ul_pcr_F3 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 30.4495 + y: 27.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_G3 + name: biorad_96_wellplate_200ul_pcr_G3 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 30.4495 + y: 18.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_H3 + name: biorad_96_wellplate_200ul_pcr_H3 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 30.4495 + y: 9.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_A4 + name: biorad_96_wellplate_200ul_pcr_A4 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 39.4495 + y: 72.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_B4 + name: biorad_96_wellplate_200ul_pcr_B4 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 39.4495 + y: 63.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_C4 + name: biorad_96_wellplate_200ul_pcr_C4 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 39.4495 + y: 54.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_D4 + name: biorad_96_wellplate_200ul_pcr_D4 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 39.4495 + y: 45.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_E4 + name: biorad_96_wellplate_200ul_pcr_E4 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 39.4495 + y: 36.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_F4 + name: biorad_96_wellplate_200ul_pcr_F4 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 39.4495 + y: 27.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_G4 + name: biorad_96_wellplate_200ul_pcr_G4 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 39.4495 + y: 18.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_H4 + name: biorad_96_wellplate_200ul_pcr_H4 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 39.4495 + y: 9.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_A5 + name: biorad_96_wellplate_200ul_pcr_A5 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 48.4495 + y: 72.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_B5 + name: biorad_96_wellplate_200ul_pcr_B5 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 48.4495 + y: 63.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_C5 + name: biorad_96_wellplate_200ul_pcr_C5 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 48.4495 + y: 54.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_D5 + name: biorad_96_wellplate_200ul_pcr_D5 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 48.4495 + y: 45.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_E5 + name: biorad_96_wellplate_200ul_pcr_E5 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 48.4495 + y: 36.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_F5 + name: biorad_96_wellplate_200ul_pcr_F5 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 48.4495 + y: 27.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_G5 + name: biorad_96_wellplate_200ul_pcr_G5 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 48.4495 + y: 18.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_H5 + name: biorad_96_wellplate_200ul_pcr_H5 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 48.4495 + y: 9.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_A6 + name: biorad_96_wellplate_200ul_pcr_A6 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 57.4495 + y: 72.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_B6 + name: biorad_96_wellplate_200ul_pcr_B6 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 57.4495 + y: 63.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_C6 + name: biorad_96_wellplate_200ul_pcr_C6 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 57.4495 + y: 54.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_D6 + name: biorad_96_wellplate_200ul_pcr_D6 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 57.4495 + y: 45.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_E6 + name: biorad_96_wellplate_200ul_pcr_E6 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 57.4495 + y: 36.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_F6 + name: biorad_96_wellplate_200ul_pcr_F6 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 57.4495 + y: 27.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_G6 + name: biorad_96_wellplate_200ul_pcr_G6 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 57.4495 + y: 18.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_H6 + name: biorad_96_wellplate_200ul_pcr_H6 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 57.4495 + y: 9.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_A7 + name: biorad_96_wellplate_200ul_pcr_A7 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 66.4495 + y: 72.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_B7 + name: biorad_96_wellplate_200ul_pcr_B7 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 66.4495 + y: 63.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_C7 + name: biorad_96_wellplate_200ul_pcr_C7 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 66.4495 + y: 54.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_D7 + name: biorad_96_wellplate_200ul_pcr_D7 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 66.4495 + y: 45.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_E7 + name: biorad_96_wellplate_200ul_pcr_E7 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 66.4495 + y: 36.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_F7 + name: biorad_96_wellplate_200ul_pcr_F7 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 66.4495 + y: 27.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_G7 + name: biorad_96_wellplate_200ul_pcr_G7 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 66.4495 + y: 18.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_H7 + name: biorad_96_wellplate_200ul_pcr_H7 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 66.4495 + y: 9.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_A8 + name: biorad_96_wellplate_200ul_pcr_A8 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 75.4495 + y: 72.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_B8 + name: biorad_96_wellplate_200ul_pcr_B8 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 75.4495 + y: 63.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_C8 + name: biorad_96_wellplate_200ul_pcr_C8 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 75.4495 + y: 54.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_D8 + name: biorad_96_wellplate_200ul_pcr_D8 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 75.4495 + y: 45.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_E8 + name: biorad_96_wellplate_200ul_pcr_E8 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 75.4495 + y: 36.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_F8 + name: biorad_96_wellplate_200ul_pcr_F8 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 75.4495 + y: 27.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_G8 + name: biorad_96_wellplate_200ul_pcr_G8 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 75.4495 + y: 18.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_H8 + name: biorad_96_wellplate_200ul_pcr_H8 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 75.4495 + y: 9.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_A9 + name: biorad_96_wellplate_200ul_pcr_A9 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 84.4495 + y: 72.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_B9 + name: biorad_96_wellplate_200ul_pcr_B9 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 84.4495 + y: 63.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_C9 + name: biorad_96_wellplate_200ul_pcr_C9 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 84.4495 + y: 54.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_D9 + name: biorad_96_wellplate_200ul_pcr_D9 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 84.4495 + y: 45.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_E9 + name: biorad_96_wellplate_200ul_pcr_E9 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 84.4495 + y: 36.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_F9 + name: biorad_96_wellplate_200ul_pcr_F9 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 84.4495 + y: 27.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_G9 + name: biorad_96_wellplate_200ul_pcr_G9 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 84.4495 + y: 18.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_H9 + name: biorad_96_wellplate_200ul_pcr_H9 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 84.4495 + y: 9.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_A10 + name: biorad_96_wellplate_200ul_pcr_A10 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 93.4495 + y: 72.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_B10 + name: biorad_96_wellplate_200ul_pcr_B10 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 93.4495 + y: 63.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_C10 + name: biorad_96_wellplate_200ul_pcr_C10 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 93.4495 + y: 54.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_D10 + name: biorad_96_wellplate_200ul_pcr_D10 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 93.4495 + y: 45.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_E10 + name: biorad_96_wellplate_200ul_pcr_E10 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 93.4495 + y: 36.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_F10 + name: biorad_96_wellplate_200ul_pcr_F10 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 93.4495 + y: 27.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_G10 + name: biorad_96_wellplate_200ul_pcr_G10 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 93.4495 + y: 18.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_H10 + name: biorad_96_wellplate_200ul_pcr_H10 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 93.4495 + y: 9.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_A11 + name: biorad_96_wellplate_200ul_pcr_A11 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 102.4495 + y: 72.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_B11 + name: biorad_96_wellplate_200ul_pcr_B11 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 102.4495 + y: 63.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_C11 + name: biorad_96_wellplate_200ul_pcr_C11 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 102.4495 + y: 54.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_D11 + name: biorad_96_wellplate_200ul_pcr_D11 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 102.4495 + y: 45.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_E11 + name: biorad_96_wellplate_200ul_pcr_E11 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 102.4495 + y: 36.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_F11 + name: biorad_96_wellplate_200ul_pcr_F11 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 102.4495 + y: 27.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_G11 + name: biorad_96_wellplate_200ul_pcr_G11 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 102.4495 + y: 18.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_H11 + name: biorad_96_wellplate_200ul_pcr_H11 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 102.4495 + y: 9.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_A12 + name: biorad_96_wellplate_200ul_pcr_A12 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 111.4495 + y: 72.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_B12 + name: biorad_96_wellplate_200ul_pcr_B12 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 111.4495 + y: 63.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_C12 + name: biorad_96_wellplate_200ul_pcr_C12 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 111.4495 + y: 54.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_D12 + name: biorad_96_wellplate_200ul_pcr_D12 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 111.4495 + y: 45.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_E12 + name: biorad_96_wellplate_200ul_pcr_E12 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 111.4495 + y: 36.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_F12 + name: biorad_96_wellplate_200ul_pcr_F12 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 111.4495 + y: 27.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_G12 + name: biorad_96_wellplate_200ul_pcr_G12 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 111.4495 + y: 18.3095 + z: 1.25 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.861 + size_y: 3.861 + size_z: 14.81 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: biorad_96_wellplate_200ul_pcr_H12 + name: biorad_96_wellplate_200ul_pcr_H12 + parent: biorad_96_wellplate_200ul_pcr + position: + x: 111.4495 + y: 9.3095 + z: 1.25 + sample_id: null + type: well + description: BioRad 96 wellplate 200ul pcr + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/plates.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +corning_12_wellplate_6point9ml_flat: + category: + - plates + class: + module: pylabrobot.resources.opentrons.plates:corning_12_wellplate_6point9ml_flat + type: pylabrobot + config_info: + - children: + - corning_12_wellplate_6point9ml_flat_A1 + - corning_12_wellplate_6point9ml_flat_B1 + - corning_12_wellplate_6point9ml_flat_C1 + - corning_12_wellplate_6point9ml_flat_A2 + - corning_12_wellplate_6point9ml_flat_B2 + - corning_12_wellplate_6point9ml_flat_C2 + - corning_12_wellplate_6point9ml_flat_A3 + - corning_12_wellplate_6point9ml_flat_B3 + - corning_12_wellplate_6point9ml_flat_C3 + - corning_12_wellplate_6point9ml_flat_A4 + - corning_12_wellplate_6point9ml_flat_B4 + - corning_12_wellplate_6point9ml_flat_C4 + class: '' + config: + barcode: null + category: plate + model: Corning 12 Well Plate 6.9 mL Flat + ordering: + A1: corning_12_wellplate_6point9ml_flat_A1 + B1: corning_12_wellplate_6point9ml_flat_B1 + C1: corning_12_wellplate_6point9ml_flat_C1 + A2: corning_12_wellplate_6point9ml_flat_A2 + B2: corning_12_wellplate_6point9ml_flat_B2 + C2: corning_12_wellplate_6point9ml_flat_C2 + A3: corning_12_wellplate_6point9ml_flat_A3 + B3: corning_12_wellplate_6point9ml_flat_B3 + C3: corning_12_wellplate_6point9ml_flat_C3 + A4: corning_12_wellplate_6point9ml_flat_A4 + B4: corning_12_wellplate_6point9ml_flat_B4 + C4: corning_12_wellplate_6point9ml_flat_C4 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.89 + size_y: 85.6 + size_z: 20.02 + type: Plate + data: {} + id: corning_12_wellplate_6point9ml_flat + name: corning_12_wellplate_6point9ml_flat + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: plate + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 6900 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 16.073 + size_y: 16.073 + size_z: 17.53 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_12_wellplate_6point9ml_flat_A1 + name: corning_12_wellplate_6point9ml_flat_A1 + parent: corning_12_wellplate_6point9ml_flat + position: + x: 16.9035 + y: 60.7735 + z: 2.49 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 6900 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 16.073 + size_y: 16.073 + size_z: 17.53 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_12_wellplate_6point9ml_flat_B1 + name: corning_12_wellplate_6point9ml_flat_B1 + parent: corning_12_wellplate_6point9ml_flat + position: + x: 16.9035 + y: 34.7635 + z: 2.49 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 6900 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 16.073 + size_y: 16.073 + size_z: 17.53 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_12_wellplate_6point9ml_flat_C1 + name: corning_12_wellplate_6point9ml_flat_C1 + parent: corning_12_wellplate_6point9ml_flat + position: + x: 16.9035 + y: 8.7535 + z: 2.49 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 6900 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 16.073 + size_y: 16.073 + size_z: 17.53 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_12_wellplate_6point9ml_flat_A2 + name: corning_12_wellplate_6point9ml_flat_A2 + parent: corning_12_wellplate_6point9ml_flat + position: + x: 42.9135 + y: 60.7735 + z: 2.49 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 6900 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 16.073 + size_y: 16.073 + size_z: 17.53 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_12_wellplate_6point9ml_flat_B2 + name: corning_12_wellplate_6point9ml_flat_B2 + parent: corning_12_wellplate_6point9ml_flat + position: + x: 42.9135 + y: 34.7635 + z: 2.49 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 6900 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 16.073 + size_y: 16.073 + size_z: 17.53 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_12_wellplate_6point9ml_flat_C2 + name: corning_12_wellplate_6point9ml_flat_C2 + parent: corning_12_wellplate_6point9ml_flat + position: + x: 42.9135 + y: 8.7535 + z: 2.49 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 6900 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 16.073 + size_y: 16.073 + size_z: 17.53 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_12_wellplate_6point9ml_flat_A3 + name: corning_12_wellplate_6point9ml_flat_A3 + parent: corning_12_wellplate_6point9ml_flat + position: + x: 68.9235 + y: 60.7735 + z: 2.49 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 6900 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 16.073 + size_y: 16.073 + size_z: 17.53 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_12_wellplate_6point9ml_flat_B3 + name: corning_12_wellplate_6point9ml_flat_B3 + parent: corning_12_wellplate_6point9ml_flat + position: + x: 68.9235 + y: 34.7635 + z: 2.49 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 6900 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 16.073 + size_y: 16.073 + size_z: 17.53 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_12_wellplate_6point9ml_flat_C3 + name: corning_12_wellplate_6point9ml_flat_C3 + parent: corning_12_wellplate_6point9ml_flat + position: + x: 68.9235 + y: 8.7535 + z: 2.49 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 6900 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 16.073 + size_y: 16.073 + size_z: 17.53 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_12_wellplate_6point9ml_flat_A4 + name: corning_12_wellplate_6point9ml_flat_A4 + parent: corning_12_wellplate_6point9ml_flat + position: + x: 94.9335 + y: 60.7735 + z: 2.49 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 6900 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 16.073 + size_y: 16.073 + size_z: 17.53 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_12_wellplate_6point9ml_flat_B4 + name: corning_12_wellplate_6point9ml_flat_B4 + parent: corning_12_wellplate_6point9ml_flat + position: + x: 94.9335 + y: 34.7635 + z: 2.49 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 6900 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 16.073 + size_y: 16.073 + size_z: 17.53 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_12_wellplate_6point9ml_flat_C4 + name: corning_12_wellplate_6point9ml_flat_C4 + parent: corning_12_wellplate_6point9ml_flat + position: + x: 94.9335 + y: 8.7535 + z: 2.49 + sample_id: null + type: well + description: Corning 12 wellplate 6.9ml flat + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/plates.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +corning_24_wellplate_3point4ml_flat: + category: + - plates + class: + module: pylabrobot.resources.opentrons.plates:corning_24_wellplate_3point4ml_flat + type: pylabrobot + config_info: + - children: + - corning_24_wellplate_3point4ml_flat_A1 + - corning_24_wellplate_3point4ml_flat_B1 + - corning_24_wellplate_3point4ml_flat_C1 + - corning_24_wellplate_3point4ml_flat_D1 + - corning_24_wellplate_3point4ml_flat_A2 + - corning_24_wellplate_3point4ml_flat_B2 + - corning_24_wellplate_3point4ml_flat_C2 + - corning_24_wellplate_3point4ml_flat_D2 + - corning_24_wellplate_3point4ml_flat_A3 + - corning_24_wellplate_3point4ml_flat_B3 + - corning_24_wellplate_3point4ml_flat_C3 + - corning_24_wellplate_3point4ml_flat_D3 + - corning_24_wellplate_3point4ml_flat_A4 + - corning_24_wellplate_3point4ml_flat_B4 + - corning_24_wellplate_3point4ml_flat_C4 + - corning_24_wellplate_3point4ml_flat_D4 + - corning_24_wellplate_3point4ml_flat_A5 + - corning_24_wellplate_3point4ml_flat_B5 + - corning_24_wellplate_3point4ml_flat_C5 + - corning_24_wellplate_3point4ml_flat_D5 + - corning_24_wellplate_3point4ml_flat_A6 + - corning_24_wellplate_3point4ml_flat_B6 + - corning_24_wellplate_3point4ml_flat_C6 + - corning_24_wellplate_3point4ml_flat_D6 + class: '' + config: + barcode: null + category: plate + model: Corning 24 Well Plate 3.4 mL Flat + ordering: + A1: corning_24_wellplate_3point4ml_flat_A1 + B1: corning_24_wellplate_3point4ml_flat_B1 + C1: corning_24_wellplate_3point4ml_flat_C1 + D1: corning_24_wellplate_3point4ml_flat_D1 + A2: corning_24_wellplate_3point4ml_flat_A2 + B2: corning_24_wellplate_3point4ml_flat_B2 + C2: corning_24_wellplate_3point4ml_flat_C2 + D2: corning_24_wellplate_3point4ml_flat_D2 + A3: corning_24_wellplate_3point4ml_flat_A3 + B3: corning_24_wellplate_3point4ml_flat_B3 + C3: corning_24_wellplate_3point4ml_flat_C3 + D3: corning_24_wellplate_3point4ml_flat_D3 + A4: corning_24_wellplate_3point4ml_flat_A4 + B4: corning_24_wellplate_3point4ml_flat_B4 + C4: corning_24_wellplate_3point4ml_flat_C4 + D4: corning_24_wellplate_3point4ml_flat_D4 + A5: corning_24_wellplate_3point4ml_flat_A5 + B5: corning_24_wellplate_3point4ml_flat_B5 + C5: corning_24_wellplate_3point4ml_flat_C5 + D5: corning_24_wellplate_3point4ml_flat_D5 + A6: corning_24_wellplate_3point4ml_flat_A6 + B6: corning_24_wellplate_3point4ml_flat_B6 + C6: corning_24_wellplate_3point4ml_flat_C6 + D6: corning_24_wellplate_3point4ml_flat_D6 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.47 + size_z: 20.27 + type: Plate + data: {} + id: corning_24_wellplate_3point4ml_flat + name: corning_24_wellplate_3point4ml_flat + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: plate + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 3400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 11.498 + size_y: 11.498 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_24_wellplate_3point4ml_flat_A1 + name: corning_24_wellplate_3point4ml_flat_A1 + parent: corning_24_wellplate_3point4ml_flat + position: + x: 11.731 + y: 65.921 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 3400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 11.498 + size_y: 11.498 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_24_wellplate_3point4ml_flat_B1 + name: corning_24_wellplate_3point4ml_flat_B1 + parent: corning_24_wellplate_3point4ml_flat + position: + x: 11.731 + y: 46.621 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 3400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 11.498 + size_y: 11.498 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_24_wellplate_3point4ml_flat_C1 + name: corning_24_wellplate_3point4ml_flat_C1 + parent: corning_24_wellplate_3point4ml_flat + position: + x: 11.731 + y: 27.321 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 3400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 11.498 + size_y: 11.498 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_24_wellplate_3point4ml_flat_D1 + name: corning_24_wellplate_3point4ml_flat_D1 + parent: corning_24_wellplate_3point4ml_flat + position: + x: 11.731 + y: 8.021 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 3400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 11.498 + size_y: 11.498 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_24_wellplate_3point4ml_flat_A2 + name: corning_24_wellplate_3point4ml_flat_A2 + parent: corning_24_wellplate_3point4ml_flat + position: + x: 31.031 + y: 65.921 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 3400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 11.498 + size_y: 11.498 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_24_wellplate_3point4ml_flat_B2 + name: corning_24_wellplate_3point4ml_flat_B2 + parent: corning_24_wellplate_3point4ml_flat + position: + x: 31.031 + y: 46.621 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 3400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 11.498 + size_y: 11.498 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_24_wellplate_3point4ml_flat_C2 + name: corning_24_wellplate_3point4ml_flat_C2 + parent: corning_24_wellplate_3point4ml_flat + position: + x: 31.031 + y: 27.321 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 3400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 11.498 + size_y: 11.498 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_24_wellplate_3point4ml_flat_D2 + name: corning_24_wellplate_3point4ml_flat_D2 + parent: corning_24_wellplate_3point4ml_flat + position: + x: 31.031 + y: 8.021 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 3400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 11.498 + size_y: 11.498 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_24_wellplate_3point4ml_flat_A3 + name: corning_24_wellplate_3point4ml_flat_A3 + parent: corning_24_wellplate_3point4ml_flat + position: + x: 50.331 + y: 65.921 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 3400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 11.498 + size_y: 11.498 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_24_wellplate_3point4ml_flat_B3 + name: corning_24_wellplate_3point4ml_flat_B3 + parent: corning_24_wellplate_3point4ml_flat + position: + x: 50.331 + y: 46.621 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 3400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 11.498 + size_y: 11.498 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_24_wellplate_3point4ml_flat_C3 + name: corning_24_wellplate_3point4ml_flat_C3 + parent: corning_24_wellplate_3point4ml_flat + position: + x: 50.331 + y: 27.321 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 3400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 11.498 + size_y: 11.498 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_24_wellplate_3point4ml_flat_D3 + name: corning_24_wellplate_3point4ml_flat_D3 + parent: corning_24_wellplate_3point4ml_flat + position: + x: 50.331 + y: 8.021 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 3400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 11.498 + size_y: 11.498 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_24_wellplate_3point4ml_flat_A4 + name: corning_24_wellplate_3point4ml_flat_A4 + parent: corning_24_wellplate_3point4ml_flat + position: + x: 69.631 + y: 65.921 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 3400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 11.498 + size_y: 11.498 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_24_wellplate_3point4ml_flat_B4 + name: corning_24_wellplate_3point4ml_flat_B4 + parent: corning_24_wellplate_3point4ml_flat + position: + x: 69.631 + y: 46.621 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 3400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 11.498 + size_y: 11.498 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_24_wellplate_3point4ml_flat_C4 + name: corning_24_wellplate_3point4ml_flat_C4 + parent: corning_24_wellplate_3point4ml_flat + position: + x: 69.631 + y: 27.321 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 3400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 11.498 + size_y: 11.498 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_24_wellplate_3point4ml_flat_D4 + name: corning_24_wellplate_3point4ml_flat_D4 + parent: corning_24_wellplate_3point4ml_flat + position: + x: 69.631 + y: 8.021 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 3400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 11.498 + size_y: 11.498 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_24_wellplate_3point4ml_flat_A5 + name: corning_24_wellplate_3point4ml_flat_A5 + parent: corning_24_wellplate_3point4ml_flat + position: + x: 88.931 + y: 65.921 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 3400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 11.498 + size_y: 11.498 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_24_wellplate_3point4ml_flat_B5 + name: corning_24_wellplate_3point4ml_flat_B5 + parent: corning_24_wellplate_3point4ml_flat + position: + x: 88.931 + y: 46.621 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 3400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 11.498 + size_y: 11.498 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_24_wellplate_3point4ml_flat_C5 + name: corning_24_wellplate_3point4ml_flat_C5 + parent: corning_24_wellplate_3point4ml_flat + position: + x: 88.931 + y: 27.321 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 3400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 11.498 + size_y: 11.498 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_24_wellplate_3point4ml_flat_D5 + name: corning_24_wellplate_3point4ml_flat_D5 + parent: corning_24_wellplate_3point4ml_flat + position: + x: 88.931 + y: 8.021 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 3400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 11.498 + size_y: 11.498 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_24_wellplate_3point4ml_flat_A6 + name: corning_24_wellplate_3point4ml_flat_A6 + parent: corning_24_wellplate_3point4ml_flat + position: + x: 108.231 + y: 65.921 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 3400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 11.498 + size_y: 11.498 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_24_wellplate_3point4ml_flat_B6 + name: corning_24_wellplate_3point4ml_flat_B6 + parent: corning_24_wellplate_3point4ml_flat + position: + x: 108.231 + y: 46.621 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 3400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 11.498 + size_y: 11.498 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_24_wellplate_3point4ml_flat_C6 + name: corning_24_wellplate_3point4ml_flat_C6 + parent: corning_24_wellplate_3point4ml_flat + position: + x: 108.231 + y: 27.321 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 3400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 11.498 + size_y: 11.498 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_24_wellplate_3point4ml_flat_D6 + name: corning_24_wellplate_3point4ml_flat_D6 + parent: corning_24_wellplate_3point4ml_flat + position: + x: 108.231 + y: 8.021 + z: 2.87 + sample_id: null + type: well + description: Corning 24 wellplate 3.4ml flat + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/plates.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +corning_384_wellplate_112ul_flat: + category: + - plates + class: + module: pylabrobot.resources.opentrons.plates:corning_384_wellplate_112ul_flat + type: pylabrobot + config_info: + - children: + - corning_384_wellplate_112ul_flat_A1 + - corning_384_wellplate_112ul_flat_B1 + - corning_384_wellplate_112ul_flat_C1 + - corning_384_wellplate_112ul_flat_D1 + - corning_384_wellplate_112ul_flat_E1 + - corning_384_wellplate_112ul_flat_F1 + - corning_384_wellplate_112ul_flat_G1 + - corning_384_wellplate_112ul_flat_H1 + - corning_384_wellplate_112ul_flat_I1 + - corning_384_wellplate_112ul_flat_J1 + - corning_384_wellplate_112ul_flat_K1 + - corning_384_wellplate_112ul_flat_L1 + - corning_384_wellplate_112ul_flat_M1 + - corning_384_wellplate_112ul_flat_N1 + - corning_384_wellplate_112ul_flat_O1 + - corning_384_wellplate_112ul_flat_P1 + - corning_384_wellplate_112ul_flat_A2 + - corning_384_wellplate_112ul_flat_B2 + - corning_384_wellplate_112ul_flat_C2 + - corning_384_wellplate_112ul_flat_D2 + - corning_384_wellplate_112ul_flat_E2 + - corning_384_wellplate_112ul_flat_F2 + - corning_384_wellplate_112ul_flat_G2 + - corning_384_wellplate_112ul_flat_H2 + - corning_384_wellplate_112ul_flat_I2 + - corning_384_wellplate_112ul_flat_J2 + - corning_384_wellplate_112ul_flat_K2 + - corning_384_wellplate_112ul_flat_L2 + - corning_384_wellplate_112ul_flat_M2 + - corning_384_wellplate_112ul_flat_N2 + - corning_384_wellplate_112ul_flat_O2 + - corning_384_wellplate_112ul_flat_P2 + - corning_384_wellplate_112ul_flat_A3 + - corning_384_wellplate_112ul_flat_B3 + - corning_384_wellplate_112ul_flat_C3 + - corning_384_wellplate_112ul_flat_D3 + - corning_384_wellplate_112ul_flat_E3 + - corning_384_wellplate_112ul_flat_F3 + - corning_384_wellplate_112ul_flat_G3 + - corning_384_wellplate_112ul_flat_H3 + - corning_384_wellplate_112ul_flat_I3 + - corning_384_wellplate_112ul_flat_J3 + - corning_384_wellplate_112ul_flat_K3 + - corning_384_wellplate_112ul_flat_L3 + - corning_384_wellplate_112ul_flat_M3 + - corning_384_wellplate_112ul_flat_N3 + - corning_384_wellplate_112ul_flat_O3 + - corning_384_wellplate_112ul_flat_P3 + - corning_384_wellplate_112ul_flat_A4 + - corning_384_wellplate_112ul_flat_B4 + - corning_384_wellplate_112ul_flat_C4 + - corning_384_wellplate_112ul_flat_D4 + - corning_384_wellplate_112ul_flat_E4 + - corning_384_wellplate_112ul_flat_F4 + - corning_384_wellplate_112ul_flat_G4 + - corning_384_wellplate_112ul_flat_H4 + - corning_384_wellplate_112ul_flat_I4 + - corning_384_wellplate_112ul_flat_J4 + - corning_384_wellplate_112ul_flat_K4 + - corning_384_wellplate_112ul_flat_L4 + - corning_384_wellplate_112ul_flat_M4 + - corning_384_wellplate_112ul_flat_N4 + - corning_384_wellplate_112ul_flat_O4 + - corning_384_wellplate_112ul_flat_P4 + - corning_384_wellplate_112ul_flat_A5 + - corning_384_wellplate_112ul_flat_B5 + - corning_384_wellplate_112ul_flat_C5 + - corning_384_wellplate_112ul_flat_D5 + - corning_384_wellplate_112ul_flat_E5 + - corning_384_wellplate_112ul_flat_F5 + - corning_384_wellplate_112ul_flat_G5 + - corning_384_wellplate_112ul_flat_H5 + - corning_384_wellplate_112ul_flat_I5 + - corning_384_wellplate_112ul_flat_J5 + - corning_384_wellplate_112ul_flat_K5 + - corning_384_wellplate_112ul_flat_L5 + - corning_384_wellplate_112ul_flat_M5 + - corning_384_wellplate_112ul_flat_N5 + - corning_384_wellplate_112ul_flat_O5 + - corning_384_wellplate_112ul_flat_P5 + - corning_384_wellplate_112ul_flat_A6 + - corning_384_wellplate_112ul_flat_B6 + - corning_384_wellplate_112ul_flat_C6 + - corning_384_wellplate_112ul_flat_D6 + - corning_384_wellplate_112ul_flat_E6 + - corning_384_wellplate_112ul_flat_F6 + - corning_384_wellplate_112ul_flat_G6 + - corning_384_wellplate_112ul_flat_H6 + - corning_384_wellplate_112ul_flat_I6 + - corning_384_wellplate_112ul_flat_J6 + - corning_384_wellplate_112ul_flat_K6 + - corning_384_wellplate_112ul_flat_L6 + - corning_384_wellplate_112ul_flat_M6 + - corning_384_wellplate_112ul_flat_N6 + - corning_384_wellplate_112ul_flat_O6 + - corning_384_wellplate_112ul_flat_P6 + - corning_384_wellplate_112ul_flat_A7 + - corning_384_wellplate_112ul_flat_B7 + - corning_384_wellplate_112ul_flat_C7 + - corning_384_wellplate_112ul_flat_D7 + - corning_384_wellplate_112ul_flat_E7 + - corning_384_wellplate_112ul_flat_F7 + - corning_384_wellplate_112ul_flat_G7 + - corning_384_wellplate_112ul_flat_H7 + - corning_384_wellplate_112ul_flat_I7 + - corning_384_wellplate_112ul_flat_J7 + - corning_384_wellplate_112ul_flat_K7 + - corning_384_wellplate_112ul_flat_L7 + - corning_384_wellplate_112ul_flat_M7 + - corning_384_wellplate_112ul_flat_N7 + - corning_384_wellplate_112ul_flat_O7 + - corning_384_wellplate_112ul_flat_P7 + - corning_384_wellplate_112ul_flat_A8 + - corning_384_wellplate_112ul_flat_B8 + - corning_384_wellplate_112ul_flat_C8 + - corning_384_wellplate_112ul_flat_D8 + - corning_384_wellplate_112ul_flat_E8 + - corning_384_wellplate_112ul_flat_F8 + - corning_384_wellplate_112ul_flat_G8 + - corning_384_wellplate_112ul_flat_H8 + - corning_384_wellplate_112ul_flat_I8 + - corning_384_wellplate_112ul_flat_J8 + - corning_384_wellplate_112ul_flat_K8 + - corning_384_wellplate_112ul_flat_L8 + - corning_384_wellplate_112ul_flat_M8 + - corning_384_wellplate_112ul_flat_N8 + - corning_384_wellplate_112ul_flat_O8 + - corning_384_wellplate_112ul_flat_P8 + - corning_384_wellplate_112ul_flat_A9 + - corning_384_wellplate_112ul_flat_B9 + - corning_384_wellplate_112ul_flat_C9 + - corning_384_wellplate_112ul_flat_D9 + - corning_384_wellplate_112ul_flat_E9 + - corning_384_wellplate_112ul_flat_F9 + - corning_384_wellplate_112ul_flat_G9 + - corning_384_wellplate_112ul_flat_H9 + - corning_384_wellplate_112ul_flat_I9 + - corning_384_wellplate_112ul_flat_J9 + - corning_384_wellplate_112ul_flat_K9 + - corning_384_wellplate_112ul_flat_L9 + - corning_384_wellplate_112ul_flat_M9 + - corning_384_wellplate_112ul_flat_N9 + - corning_384_wellplate_112ul_flat_O9 + - corning_384_wellplate_112ul_flat_P9 + - corning_384_wellplate_112ul_flat_A10 + - corning_384_wellplate_112ul_flat_B10 + - corning_384_wellplate_112ul_flat_C10 + - corning_384_wellplate_112ul_flat_D10 + - corning_384_wellplate_112ul_flat_E10 + - corning_384_wellplate_112ul_flat_F10 + - corning_384_wellplate_112ul_flat_G10 + - corning_384_wellplate_112ul_flat_H10 + - corning_384_wellplate_112ul_flat_I10 + - corning_384_wellplate_112ul_flat_J10 + - corning_384_wellplate_112ul_flat_K10 + - corning_384_wellplate_112ul_flat_L10 + - corning_384_wellplate_112ul_flat_M10 + - corning_384_wellplate_112ul_flat_N10 + - corning_384_wellplate_112ul_flat_O10 + - corning_384_wellplate_112ul_flat_P10 + - corning_384_wellplate_112ul_flat_A11 + - corning_384_wellplate_112ul_flat_B11 + - corning_384_wellplate_112ul_flat_C11 + - corning_384_wellplate_112ul_flat_D11 + - corning_384_wellplate_112ul_flat_E11 + - corning_384_wellplate_112ul_flat_F11 + - corning_384_wellplate_112ul_flat_G11 + - corning_384_wellplate_112ul_flat_H11 + - corning_384_wellplate_112ul_flat_I11 + - corning_384_wellplate_112ul_flat_J11 + - corning_384_wellplate_112ul_flat_K11 + - corning_384_wellplate_112ul_flat_L11 + - corning_384_wellplate_112ul_flat_M11 + - corning_384_wellplate_112ul_flat_N11 + - corning_384_wellplate_112ul_flat_O11 + - corning_384_wellplate_112ul_flat_P11 + - corning_384_wellplate_112ul_flat_A12 + - corning_384_wellplate_112ul_flat_B12 + - corning_384_wellplate_112ul_flat_C12 + - corning_384_wellplate_112ul_flat_D12 + - corning_384_wellplate_112ul_flat_E12 + - corning_384_wellplate_112ul_flat_F12 + - corning_384_wellplate_112ul_flat_G12 + - corning_384_wellplate_112ul_flat_H12 + - corning_384_wellplate_112ul_flat_I12 + - corning_384_wellplate_112ul_flat_J12 + - corning_384_wellplate_112ul_flat_K12 + - corning_384_wellplate_112ul_flat_L12 + - corning_384_wellplate_112ul_flat_M12 + - corning_384_wellplate_112ul_flat_N12 + - corning_384_wellplate_112ul_flat_O12 + - corning_384_wellplate_112ul_flat_P12 + - corning_384_wellplate_112ul_flat_A13 + - corning_384_wellplate_112ul_flat_B13 + - corning_384_wellplate_112ul_flat_C13 + - corning_384_wellplate_112ul_flat_D13 + - corning_384_wellplate_112ul_flat_E13 + - corning_384_wellplate_112ul_flat_F13 + - corning_384_wellplate_112ul_flat_G13 + - corning_384_wellplate_112ul_flat_H13 + - corning_384_wellplate_112ul_flat_I13 + - corning_384_wellplate_112ul_flat_J13 + - corning_384_wellplate_112ul_flat_K13 + - corning_384_wellplate_112ul_flat_L13 + - corning_384_wellplate_112ul_flat_M13 + - corning_384_wellplate_112ul_flat_N13 + - corning_384_wellplate_112ul_flat_O13 + - corning_384_wellplate_112ul_flat_P13 + - corning_384_wellplate_112ul_flat_A14 + - corning_384_wellplate_112ul_flat_B14 + - corning_384_wellplate_112ul_flat_C14 + - corning_384_wellplate_112ul_flat_D14 + - corning_384_wellplate_112ul_flat_E14 + - corning_384_wellplate_112ul_flat_F14 + - corning_384_wellplate_112ul_flat_G14 + - corning_384_wellplate_112ul_flat_H14 + - corning_384_wellplate_112ul_flat_I14 + - corning_384_wellplate_112ul_flat_J14 + - corning_384_wellplate_112ul_flat_K14 + - corning_384_wellplate_112ul_flat_L14 + - corning_384_wellplate_112ul_flat_M14 + - corning_384_wellplate_112ul_flat_N14 + - corning_384_wellplate_112ul_flat_O14 + - corning_384_wellplate_112ul_flat_P14 + - corning_384_wellplate_112ul_flat_A15 + - corning_384_wellplate_112ul_flat_B15 + - corning_384_wellplate_112ul_flat_C15 + - corning_384_wellplate_112ul_flat_D15 + - corning_384_wellplate_112ul_flat_E15 + - corning_384_wellplate_112ul_flat_F15 + - corning_384_wellplate_112ul_flat_G15 + - corning_384_wellplate_112ul_flat_H15 + - corning_384_wellplate_112ul_flat_I15 + - corning_384_wellplate_112ul_flat_J15 + - corning_384_wellplate_112ul_flat_K15 + - corning_384_wellplate_112ul_flat_L15 + - corning_384_wellplate_112ul_flat_M15 + - corning_384_wellplate_112ul_flat_N15 + - corning_384_wellplate_112ul_flat_O15 + - corning_384_wellplate_112ul_flat_P15 + - corning_384_wellplate_112ul_flat_A16 + - corning_384_wellplate_112ul_flat_B16 + - corning_384_wellplate_112ul_flat_C16 + - corning_384_wellplate_112ul_flat_D16 + - corning_384_wellplate_112ul_flat_E16 + - corning_384_wellplate_112ul_flat_F16 + - corning_384_wellplate_112ul_flat_G16 + - corning_384_wellplate_112ul_flat_H16 + - corning_384_wellplate_112ul_flat_I16 + - corning_384_wellplate_112ul_flat_J16 + - corning_384_wellplate_112ul_flat_K16 + - corning_384_wellplate_112ul_flat_L16 + - corning_384_wellplate_112ul_flat_M16 + - corning_384_wellplate_112ul_flat_N16 + - corning_384_wellplate_112ul_flat_O16 + - corning_384_wellplate_112ul_flat_P16 + - corning_384_wellplate_112ul_flat_A17 + - corning_384_wellplate_112ul_flat_B17 + - corning_384_wellplate_112ul_flat_C17 + - corning_384_wellplate_112ul_flat_D17 + - corning_384_wellplate_112ul_flat_E17 + - corning_384_wellplate_112ul_flat_F17 + - corning_384_wellplate_112ul_flat_G17 + - corning_384_wellplate_112ul_flat_H17 + - corning_384_wellplate_112ul_flat_I17 + - corning_384_wellplate_112ul_flat_J17 + - corning_384_wellplate_112ul_flat_K17 + - corning_384_wellplate_112ul_flat_L17 + - corning_384_wellplate_112ul_flat_M17 + - corning_384_wellplate_112ul_flat_N17 + - corning_384_wellplate_112ul_flat_O17 + - corning_384_wellplate_112ul_flat_P17 + - corning_384_wellplate_112ul_flat_A18 + - corning_384_wellplate_112ul_flat_B18 + - corning_384_wellplate_112ul_flat_C18 + - corning_384_wellplate_112ul_flat_D18 + - corning_384_wellplate_112ul_flat_E18 + - corning_384_wellplate_112ul_flat_F18 + - corning_384_wellplate_112ul_flat_G18 + - corning_384_wellplate_112ul_flat_H18 + - corning_384_wellplate_112ul_flat_I18 + - corning_384_wellplate_112ul_flat_J18 + - corning_384_wellplate_112ul_flat_K18 + - corning_384_wellplate_112ul_flat_L18 + - corning_384_wellplate_112ul_flat_M18 + - corning_384_wellplate_112ul_flat_N18 + - corning_384_wellplate_112ul_flat_O18 + - corning_384_wellplate_112ul_flat_P18 + - corning_384_wellplate_112ul_flat_A19 + - corning_384_wellplate_112ul_flat_B19 + - corning_384_wellplate_112ul_flat_C19 + - corning_384_wellplate_112ul_flat_D19 + - corning_384_wellplate_112ul_flat_E19 + - corning_384_wellplate_112ul_flat_F19 + - corning_384_wellplate_112ul_flat_G19 + - corning_384_wellplate_112ul_flat_H19 + - corning_384_wellplate_112ul_flat_I19 + - corning_384_wellplate_112ul_flat_J19 + - corning_384_wellplate_112ul_flat_K19 + - corning_384_wellplate_112ul_flat_L19 + - corning_384_wellplate_112ul_flat_M19 + - corning_384_wellplate_112ul_flat_N19 + - corning_384_wellplate_112ul_flat_O19 + - corning_384_wellplate_112ul_flat_P19 + - corning_384_wellplate_112ul_flat_A20 + - corning_384_wellplate_112ul_flat_B20 + - corning_384_wellplate_112ul_flat_C20 + - corning_384_wellplate_112ul_flat_D20 + - corning_384_wellplate_112ul_flat_E20 + - corning_384_wellplate_112ul_flat_F20 + - corning_384_wellplate_112ul_flat_G20 + - corning_384_wellplate_112ul_flat_H20 + - corning_384_wellplate_112ul_flat_I20 + - corning_384_wellplate_112ul_flat_J20 + - corning_384_wellplate_112ul_flat_K20 + - corning_384_wellplate_112ul_flat_L20 + - corning_384_wellplate_112ul_flat_M20 + - corning_384_wellplate_112ul_flat_N20 + - corning_384_wellplate_112ul_flat_O20 + - corning_384_wellplate_112ul_flat_P20 + - corning_384_wellplate_112ul_flat_A21 + - corning_384_wellplate_112ul_flat_B21 + - corning_384_wellplate_112ul_flat_C21 + - corning_384_wellplate_112ul_flat_D21 + - corning_384_wellplate_112ul_flat_E21 + - corning_384_wellplate_112ul_flat_F21 + - corning_384_wellplate_112ul_flat_G21 + - corning_384_wellplate_112ul_flat_H21 + - corning_384_wellplate_112ul_flat_I21 + - corning_384_wellplate_112ul_flat_J21 + - corning_384_wellplate_112ul_flat_K21 + - corning_384_wellplate_112ul_flat_L21 + - corning_384_wellplate_112ul_flat_M21 + - corning_384_wellplate_112ul_flat_N21 + - corning_384_wellplate_112ul_flat_O21 + - corning_384_wellplate_112ul_flat_P21 + - corning_384_wellplate_112ul_flat_A22 + - corning_384_wellplate_112ul_flat_B22 + - corning_384_wellplate_112ul_flat_C22 + - corning_384_wellplate_112ul_flat_D22 + - corning_384_wellplate_112ul_flat_E22 + - corning_384_wellplate_112ul_flat_F22 + - corning_384_wellplate_112ul_flat_G22 + - corning_384_wellplate_112ul_flat_H22 + - corning_384_wellplate_112ul_flat_I22 + - corning_384_wellplate_112ul_flat_J22 + - corning_384_wellplate_112ul_flat_K22 + - corning_384_wellplate_112ul_flat_L22 + - corning_384_wellplate_112ul_flat_M22 + - corning_384_wellplate_112ul_flat_N22 + - corning_384_wellplate_112ul_flat_O22 + - corning_384_wellplate_112ul_flat_P22 + - corning_384_wellplate_112ul_flat_A23 + - corning_384_wellplate_112ul_flat_B23 + - corning_384_wellplate_112ul_flat_C23 + - corning_384_wellplate_112ul_flat_D23 + - corning_384_wellplate_112ul_flat_E23 + - corning_384_wellplate_112ul_flat_F23 + - corning_384_wellplate_112ul_flat_G23 + - corning_384_wellplate_112ul_flat_H23 + - corning_384_wellplate_112ul_flat_I23 + - corning_384_wellplate_112ul_flat_J23 + - corning_384_wellplate_112ul_flat_K23 + - corning_384_wellplate_112ul_flat_L23 + - corning_384_wellplate_112ul_flat_M23 + - corning_384_wellplate_112ul_flat_N23 + - corning_384_wellplate_112ul_flat_O23 + - corning_384_wellplate_112ul_flat_P23 + - corning_384_wellplate_112ul_flat_A24 + - corning_384_wellplate_112ul_flat_B24 + - corning_384_wellplate_112ul_flat_C24 + - corning_384_wellplate_112ul_flat_D24 + - corning_384_wellplate_112ul_flat_E24 + - corning_384_wellplate_112ul_flat_F24 + - corning_384_wellplate_112ul_flat_G24 + - corning_384_wellplate_112ul_flat_H24 + - corning_384_wellplate_112ul_flat_I24 + - corning_384_wellplate_112ul_flat_J24 + - corning_384_wellplate_112ul_flat_K24 + - corning_384_wellplate_112ul_flat_L24 + - corning_384_wellplate_112ul_flat_M24 + - corning_384_wellplate_112ul_flat_N24 + - corning_384_wellplate_112ul_flat_O24 + - corning_384_wellplate_112ul_flat_P24 + class: '' + config: + barcode: null + category: plate + model: Corning 384 Well Plate 112 µL Flat + ordering: + A1: corning_384_wellplate_112ul_flat_A1 + B1: corning_384_wellplate_112ul_flat_B1 + C1: corning_384_wellplate_112ul_flat_C1 + D1: corning_384_wellplate_112ul_flat_D1 + E1: corning_384_wellplate_112ul_flat_E1 + F1: corning_384_wellplate_112ul_flat_F1 + G1: corning_384_wellplate_112ul_flat_G1 + H1: corning_384_wellplate_112ul_flat_H1 + I1: corning_384_wellplate_112ul_flat_I1 + J1: corning_384_wellplate_112ul_flat_J1 + K1: corning_384_wellplate_112ul_flat_K1 + L1: corning_384_wellplate_112ul_flat_L1 + M1: corning_384_wellplate_112ul_flat_M1 + N1: corning_384_wellplate_112ul_flat_N1 + O1: corning_384_wellplate_112ul_flat_O1 + P1: corning_384_wellplate_112ul_flat_P1 + A2: corning_384_wellplate_112ul_flat_A2 + B2: corning_384_wellplate_112ul_flat_B2 + C2: corning_384_wellplate_112ul_flat_C2 + D2: corning_384_wellplate_112ul_flat_D2 + E2: corning_384_wellplate_112ul_flat_E2 + F2: corning_384_wellplate_112ul_flat_F2 + G2: corning_384_wellplate_112ul_flat_G2 + H2: corning_384_wellplate_112ul_flat_H2 + I2: corning_384_wellplate_112ul_flat_I2 + J2: corning_384_wellplate_112ul_flat_J2 + K2: corning_384_wellplate_112ul_flat_K2 + L2: corning_384_wellplate_112ul_flat_L2 + M2: corning_384_wellplate_112ul_flat_M2 + N2: corning_384_wellplate_112ul_flat_N2 + O2: corning_384_wellplate_112ul_flat_O2 + P2: corning_384_wellplate_112ul_flat_P2 + A3: corning_384_wellplate_112ul_flat_A3 + B3: corning_384_wellplate_112ul_flat_B3 + C3: corning_384_wellplate_112ul_flat_C3 + D3: corning_384_wellplate_112ul_flat_D3 + E3: corning_384_wellplate_112ul_flat_E3 + F3: corning_384_wellplate_112ul_flat_F3 + G3: corning_384_wellplate_112ul_flat_G3 + H3: corning_384_wellplate_112ul_flat_H3 + I3: corning_384_wellplate_112ul_flat_I3 + J3: corning_384_wellplate_112ul_flat_J3 + K3: corning_384_wellplate_112ul_flat_K3 + L3: corning_384_wellplate_112ul_flat_L3 + M3: corning_384_wellplate_112ul_flat_M3 + N3: corning_384_wellplate_112ul_flat_N3 + O3: corning_384_wellplate_112ul_flat_O3 + P3: corning_384_wellplate_112ul_flat_P3 + A4: corning_384_wellplate_112ul_flat_A4 + B4: corning_384_wellplate_112ul_flat_B4 + C4: corning_384_wellplate_112ul_flat_C4 + D4: corning_384_wellplate_112ul_flat_D4 + E4: corning_384_wellplate_112ul_flat_E4 + F4: corning_384_wellplate_112ul_flat_F4 + G4: corning_384_wellplate_112ul_flat_G4 + H4: corning_384_wellplate_112ul_flat_H4 + I4: corning_384_wellplate_112ul_flat_I4 + J4: corning_384_wellplate_112ul_flat_J4 + K4: corning_384_wellplate_112ul_flat_K4 + L4: corning_384_wellplate_112ul_flat_L4 + M4: corning_384_wellplate_112ul_flat_M4 + N4: corning_384_wellplate_112ul_flat_N4 + O4: corning_384_wellplate_112ul_flat_O4 + P4: corning_384_wellplate_112ul_flat_P4 + A5: corning_384_wellplate_112ul_flat_A5 + B5: corning_384_wellplate_112ul_flat_B5 + C5: corning_384_wellplate_112ul_flat_C5 + D5: corning_384_wellplate_112ul_flat_D5 + E5: corning_384_wellplate_112ul_flat_E5 + F5: corning_384_wellplate_112ul_flat_F5 + G5: corning_384_wellplate_112ul_flat_G5 + H5: corning_384_wellplate_112ul_flat_H5 + I5: corning_384_wellplate_112ul_flat_I5 + J5: corning_384_wellplate_112ul_flat_J5 + K5: corning_384_wellplate_112ul_flat_K5 + L5: corning_384_wellplate_112ul_flat_L5 + M5: corning_384_wellplate_112ul_flat_M5 + N5: corning_384_wellplate_112ul_flat_N5 + O5: corning_384_wellplate_112ul_flat_O5 + P5: corning_384_wellplate_112ul_flat_P5 + A6: corning_384_wellplate_112ul_flat_A6 + B6: corning_384_wellplate_112ul_flat_B6 + C6: corning_384_wellplate_112ul_flat_C6 + D6: corning_384_wellplate_112ul_flat_D6 + E6: corning_384_wellplate_112ul_flat_E6 + F6: corning_384_wellplate_112ul_flat_F6 + G6: corning_384_wellplate_112ul_flat_G6 + H6: corning_384_wellplate_112ul_flat_H6 + I6: corning_384_wellplate_112ul_flat_I6 + J6: corning_384_wellplate_112ul_flat_J6 + K6: corning_384_wellplate_112ul_flat_K6 + L6: corning_384_wellplate_112ul_flat_L6 + M6: corning_384_wellplate_112ul_flat_M6 + N6: corning_384_wellplate_112ul_flat_N6 + O6: corning_384_wellplate_112ul_flat_O6 + P6: corning_384_wellplate_112ul_flat_P6 + A7: corning_384_wellplate_112ul_flat_A7 + B7: corning_384_wellplate_112ul_flat_B7 + C7: corning_384_wellplate_112ul_flat_C7 + D7: corning_384_wellplate_112ul_flat_D7 + E7: corning_384_wellplate_112ul_flat_E7 + F7: corning_384_wellplate_112ul_flat_F7 + G7: corning_384_wellplate_112ul_flat_G7 + H7: corning_384_wellplate_112ul_flat_H7 + I7: corning_384_wellplate_112ul_flat_I7 + J7: corning_384_wellplate_112ul_flat_J7 + K7: corning_384_wellplate_112ul_flat_K7 + L7: corning_384_wellplate_112ul_flat_L7 + M7: corning_384_wellplate_112ul_flat_M7 + N7: corning_384_wellplate_112ul_flat_N7 + O7: corning_384_wellplate_112ul_flat_O7 + P7: corning_384_wellplate_112ul_flat_P7 + A8: corning_384_wellplate_112ul_flat_A8 + B8: corning_384_wellplate_112ul_flat_B8 + C8: corning_384_wellplate_112ul_flat_C8 + D8: corning_384_wellplate_112ul_flat_D8 + E8: corning_384_wellplate_112ul_flat_E8 + F8: corning_384_wellplate_112ul_flat_F8 + G8: corning_384_wellplate_112ul_flat_G8 + H8: corning_384_wellplate_112ul_flat_H8 + I8: corning_384_wellplate_112ul_flat_I8 + J8: corning_384_wellplate_112ul_flat_J8 + K8: corning_384_wellplate_112ul_flat_K8 + L8: corning_384_wellplate_112ul_flat_L8 + M8: corning_384_wellplate_112ul_flat_M8 + N8: corning_384_wellplate_112ul_flat_N8 + O8: corning_384_wellplate_112ul_flat_O8 + P8: corning_384_wellplate_112ul_flat_P8 + A9: corning_384_wellplate_112ul_flat_A9 + B9: corning_384_wellplate_112ul_flat_B9 + C9: corning_384_wellplate_112ul_flat_C9 + D9: corning_384_wellplate_112ul_flat_D9 + E9: corning_384_wellplate_112ul_flat_E9 + F9: corning_384_wellplate_112ul_flat_F9 + G9: corning_384_wellplate_112ul_flat_G9 + H9: corning_384_wellplate_112ul_flat_H9 + I9: corning_384_wellplate_112ul_flat_I9 + J9: corning_384_wellplate_112ul_flat_J9 + K9: corning_384_wellplate_112ul_flat_K9 + L9: corning_384_wellplate_112ul_flat_L9 + M9: corning_384_wellplate_112ul_flat_M9 + N9: corning_384_wellplate_112ul_flat_N9 + O9: corning_384_wellplate_112ul_flat_O9 + P9: corning_384_wellplate_112ul_flat_P9 + A10: corning_384_wellplate_112ul_flat_A10 + B10: corning_384_wellplate_112ul_flat_B10 + C10: corning_384_wellplate_112ul_flat_C10 + D10: corning_384_wellplate_112ul_flat_D10 + E10: corning_384_wellplate_112ul_flat_E10 + F10: corning_384_wellplate_112ul_flat_F10 + G10: corning_384_wellplate_112ul_flat_G10 + H10: corning_384_wellplate_112ul_flat_H10 + I10: corning_384_wellplate_112ul_flat_I10 + J10: corning_384_wellplate_112ul_flat_J10 + K10: corning_384_wellplate_112ul_flat_K10 + L10: corning_384_wellplate_112ul_flat_L10 + M10: corning_384_wellplate_112ul_flat_M10 + N10: corning_384_wellplate_112ul_flat_N10 + O10: corning_384_wellplate_112ul_flat_O10 + P10: corning_384_wellplate_112ul_flat_P10 + A11: corning_384_wellplate_112ul_flat_A11 + B11: corning_384_wellplate_112ul_flat_B11 + C11: corning_384_wellplate_112ul_flat_C11 + D11: corning_384_wellplate_112ul_flat_D11 + E11: corning_384_wellplate_112ul_flat_E11 + F11: corning_384_wellplate_112ul_flat_F11 + G11: corning_384_wellplate_112ul_flat_G11 + H11: corning_384_wellplate_112ul_flat_H11 + I11: corning_384_wellplate_112ul_flat_I11 + J11: corning_384_wellplate_112ul_flat_J11 + K11: corning_384_wellplate_112ul_flat_K11 + L11: corning_384_wellplate_112ul_flat_L11 + M11: corning_384_wellplate_112ul_flat_M11 + N11: corning_384_wellplate_112ul_flat_N11 + O11: corning_384_wellplate_112ul_flat_O11 + P11: corning_384_wellplate_112ul_flat_P11 + A12: corning_384_wellplate_112ul_flat_A12 + B12: corning_384_wellplate_112ul_flat_B12 + C12: corning_384_wellplate_112ul_flat_C12 + D12: corning_384_wellplate_112ul_flat_D12 + E12: corning_384_wellplate_112ul_flat_E12 + F12: corning_384_wellplate_112ul_flat_F12 + G12: corning_384_wellplate_112ul_flat_G12 + H12: corning_384_wellplate_112ul_flat_H12 + I12: corning_384_wellplate_112ul_flat_I12 + J12: corning_384_wellplate_112ul_flat_J12 + K12: corning_384_wellplate_112ul_flat_K12 + L12: corning_384_wellplate_112ul_flat_L12 + M12: corning_384_wellplate_112ul_flat_M12 + N12: corning_384_wellplate_112ul_flat_N12 + O12: corning_384_wellplate_112ul_flat_O12 + P12: corning_384_wellplate_112ul_flat_P12 + A13: corning_384_wellplate_112ul_flat_A13 + B13: corning_384_wellplate_112ul_flat_B13 + C13: corning_384_wellplate_112ul_flat_C13 + D13: corning_384_wellplate_112ul_flat_D13 + E13: corning_384_wellplate_112ul_flat_E13 + F13: corning_384_wellplate_112ul_flat_F13 + G13: corning_384_wellplate_112ul_flat_G13 + H13: corning_384_wellplate_112ul_flat_H13 + I13: corning_384_wellplate_112ul_flat_I13 + J13: corning_384_wellplate_112ul_flat_J13 + K13: corning_384_wellplate_112ul_flat_K13 + L13: corning_384_wellplate_112ul_flat_L13 + M13: corning_384_wellplate_112ul_flat_M13 + N13: corning_384_wellplate_112ul_flat_N13 + O13: corning_384_wellplate_112ul_flat_O13 + P13: corning_384_wellplate_112ul_flat_P13 + A14: corning_384_wellplate_112ul_flat_A14 + B14: corning_384_wellplate_112ul_flat_B14 + C14: corning_384_wellplate_112ul_flat_C14 + D14: corning_384_wellplate_112ul_flat_D14 + E14: corning_384_wellplate_112ul_flat_E14 + F14: corning_384_wellplate_112ul_flat_F14 + G14: corning_384_wellplate_112ul_flat_G14 + H14: corning_384_wellplate_112ul_flat_H14 + I14: corning_384_wellplate_112ul_flat_I14 + J14: corning_384_wellplate_112ul_flat_J14 + K14: corning_384_wellplate_112ul_flat_K14 + L14: corning_384_wellplate_112ul_flat_L14 + M14: corning_384_wellplate_112ul_flat_M14 + N14: corning_384_wellplate_112ul_flat_N14 + O14: corning_384_wellplate_112ul_flat_O14 + P14: corning_384_wellplate_112ul_flat_P14 + A15: corning_384_wellplate_112ul_flat_A15 + B15: corning_384_wellplate_112ul_flat_B15 + C15: corning_384_wellplate_112ul_flat_C15 + D15: corning_384_wellplate_112ul_flat_D15 + E15: corning_384_wellplate_112ul_flat_E15 + F15: corning_384_wellplate_112ul_flat_F15 + G15: corning_384_wellplate_112ul_flat_G15 + H15: corning_384_wellplate_112ul_flat_H15 + I15: corning_384_wellplate_112ul_flat_I15 + J15: corning_384_wellplate_112ul_flat_J15 + K15: corning_384_wellplate_112ul_flat_K15 + L15: corning_384_wellplate_112ul_flat_L15 + M15: corning_384_wellplate_112ul_flat_M15 + N15: corning_384_wellplate_112ul_flat_N15 + O15: corning_384_wellplate_112ul_flat_O15 + P15: corning_384_wellplate_112ul_flat_P15 + A16: corning_384_wellplate_112ul_flat_A16 + B16: corning_384_wellplate_112ul_flat_B16 + C16: corning_384_wellplate_112ul_flat_C16 + D16: corning_384_wellplate_112ul_flat_D16 + E16: corning_384_wellplate_112ul_flat_E16 + F16: corning_384_wellplate_112ul_flat_F16 + G16: corning_384_wellplate_112ul_flat_G16 + H16: corning_384_wellplate_112ul_flat_H16 + I16: corning_384_wellplate_112ul_flat_I16 + J16: corning_384_wellplate_112ul_flat_J16 + K16: corning_384_wellplate_112ul_flat_K16 + L16: corning_384_wellplate_112ul_flat_L16 + M16: corning_384_wellplate_112ul_flat_M16 + N16: corning_384_wellplate_112ul_flat_N16 + O16: corning_384_wellplate_112ul_flat_O16 + P16: corning_384_wellplate_112ul_flat_P16 + A17: corning_384_wellplate_112ul_flat_A17 + B17: corning_384_wellplate_112ul_flat_B17 + C17: corning_384_wellplate_112ul_flat_C17 + D17: corning_384_wellplate_112ul_flat_D17 + E17: corning_384_wellplate_112ul_flat_E17 + F17: corning_384_wellplate_112ul_flat_F17 + G17: corning_384_wellplate_112ul_flat_G17 + H17: corning_384_wellplate_112ul_flat_H17 + I17: corning_384_wellplate_112ul_flat_I17 + J17: corning_384_wellplate_112ul_flat_J17 + K17: corning_384_wellplate_112ul_flat_K17 + L17: corning_384_wellplate_112ul_flat_L17 + M17: corning_384_wellplate_112ul_flat_M17 + N17: corning_384_wellplate_112ul_flat_N17 + O17: corning_384_wellplate_112ul_flat_O17 + P17: corning_384_wellplate_112ul_flat_P17 + A18: corning_384_wellplate_112ul_flat_A18 + B18: corning_384_wellplate_112ul_flat_B18 + C18: corning_384_wellplate_112ul_flat_C18 + D18: corning_384_wellplate_112ul_flat_D18 + E18: corning_384_wellplate_112ul_flat_E18 + F18: corning_384_wellplate_112ul_flat_F18 + G18: corning_384_wellplate_112ul_flat_G18 + H18: corning_384_wellplate_112ul_flat_H18 + I18: corning_384_wellplate_112ul_flat_I18 + J18: corning_384_wellplate_112ul_flat_J18 + K18: corning_384_wellplate_112ul_flat_K18 + L18: corning_384_wellplate_112ul_flat_L18 + M18: corning_384_wellplate_112ul_flat_M18 + N18: corning_384_wellplate_112ul_flat_N18 + O18: corning_384_wellplate_112ul_flat_O18 + P18: corning_384_wellplate_112ul_flat_P18 + A19: corning_384_wellplate_112ul_flat_A19 + B19: corning_384_wellplate_112ul_flat_B19 + C19: corning_384_wellplate_112ul_flat_C19 + D19: corning_384_wellplate_112ul_flat_D19 + E19: corning_384_wellplate_112ul_flat_E19 + F19: corning_384_wellplate_112ul_flat_F19 + G19: corning_384_wellplate_112ul_flat_G19 + H19: corning_384_wellplate_112ul_flat_H19 + I19: corning_384_wellplate_112ul_flat_I19 + J19: corning_384_wellplate_112ul_flat_J19 + K19: corning_384_wellplate_112ul_flat_K19 + L19: corning_384_wellplate_112ul_flat_L19 + M19: corning_384_wellplate_112ul_flat_M19 + N19: corning_384_wellplate_112ul_flat_N19 + O19: corning_384_wellplate_112ul_flat_O19 + P19: corning_384_wellplate_112ul_flat_P19 + A20: corning_384_wellplate_112ul_flat_A20 + B20: corning_384_wellplate_112ul_flat_B20 + C20: corning_384_wellplate_112ul_flat_C20 + D20: corning_384_wellplate_112ul_flat_D20 + E20: corning_384_wellplate_112ul_flat_E20 + F20: corning_384_wellplate_112ul_flat_F20 + G20: corning_384_wellplate_112ul_flat_G20 + H20: corning_384_wellplate_112ul_flat_H20 + I20: corning_384_wellplate_112ul_flat_I20 + J20: corning_384_wellplate_112ul_flat_J20 + K20: corning_384_wellplate_112ul_flat_K20 + L20: corning_384_wellplate_112ul_flat_L20 + M20: corning_384_wellplate_112ul_flat_M20 + N20: corning_384_wellplate_112ul_flat_N20 + O20: corning_384_wellplate_112ul_flat_O20 + P20: corning_384_wellplate_112ul_flat_P20 + A21: corning_384_wellplate_112ul_flat_A21 + B21: corning_384_wellplate_112ul_flat_B21 + C21: corning_384_wellplate_112ul_flat_C21 + D21: corning_384_wellplate_112ul_flat_D21 + E21: corning_384_wellplate_112ul_flat_E21 + F21: corning_384_wellplate_112ul_flat_F21 + G21: corning_384_wellplate_112ul_flat_G21 + H21: corning_384_wellplate_112ul_flat_H21 + I21: corning_384_wellplate_112ul_flat_I21 + J21: corning_384_wellplate_112ul_flat_J21 + K21: corning_384_wellplate_112ul_flat_K21 + L21: corning_384_wellplate_112ul_flat_L21 + M21: corning_384_wellplate_112ul_flat_M21 + N21: corning_384_wellplate_112ul_flat_N21 + O21: corning_384_wellplate_112ul_flat_O21 + P21: corning_384_wellplate_112ul_flat_P21 + A22: corning_384_wellplate_112ul_flat_A22 + B22: corning_384_wellplate_112ul_flat_B22 + C22: corning_384_wellplate_112ul_flat_C22 + D22: corning_384_wellplate_112ul_flat_D22 + E22: corning_384_wellplate_112ul_flat_E22 + F22: corning_384_wellplate_112ul_flat_F22 + G22: corning_384_wellplate_112ul_flat_G22 + H22: corning_384_wellplate_112ul_flat_H22 + I22: corning_384_wellplate_112ul_flat_I22 + J22: corning_384_wellplate_112ul_flat_J22 + K22: corning_384_wellplate_112ul_flat_K22 + L22: corning_384_wellplate_112ul_flat_L22 + M22: corning_384_wellplate_112ul_flat_M22 + N22: corning_384_wellplate_112ul_flat_N22 + O22: corning_384_wellplate_112ul_flat_O22 + P22: corning_384_wellplate_112ul_flat_P22 + A23: corning_384_wellplate_112ul_flat_A23 + B23: corning_384_wellplate_112ul_flat_B23 + C23: corning_384_wellplate_112ul_flat_C23 + D23: corning_384_wellplate_112ul_flat_D23 + E23: corning_384_wellplate_112ul_flat_E23 + F23: corning_384_wellplate_112ul_flat_F23 + G23: corning_384_wellplate_112ul_flat_G23 + H23: corning_384_wellplate_112ul_flat_H23 + I23: corning_384_wellplate_112ul_flat_I23 + J23: corning_384_wellplate_112ul_flat_J23 + K23: corning_384_wellplate_112ul_flat_K23 + L23: corning_384_wellplate_112ul_flat_L23 + M23: corning_384_wellplate_112ul_flat_M23 + N23: corning_384_wellplate_112ul_flat_N23 + O23: corning_384_wellplate_112ul_flat_O23 + P23: corning_384_wellplate_112ul_flat_P23 + A24: corning_384_wellplate_112ul_flat_A24 + B24: corning_384_wellplate_112ul_flat_B24 + C24: corning_384_wellplate_112ul_flat_C24 + D24: corning_384_wellplate_112ul_flat_D24 + E24: corning_384_wellplate_112ul_flat_E24 + F24: corning_384_wellplate_112ul_flat_F24 + G24: corning_384_wellplate_112ul_flat_G24 + H24: corning_384_wellplate_112ul_flat_H24 + I24: corning_384_wellplate_112ul_flat_I24 + J24: corning_384_wellplate_112ul_flat_J24 + K24: corning_384_wellplate_112ul_flat_K24 + L24: corning_384_wellplate_112ul_flat_L24 + M24: corning_384_wellplate_112ul_flat_M24 + N24: corning_384_wellplate_112ul_flat_N24 + O24: corning_384_wellplate_112ul_flat_O24 + P24: corning_384_wellplate_112ul_flat_P24 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.47 + size_z: 14.22 + type: Plate + data: {} + id: corning_384_wellplate_112ul_flat + name: corning_384_wellplate_112ul_flat + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: plate + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_A1 + name: corning_384_wellplate_112ul_flat_A1 + parent: corning_384_wellplate_112ul_flat + position: + x: 10.305 + y: 74.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_B1 + name: corning_384_wellplate_112ul_flat_B1 + parent: corning_384_wellplate_112ul_flat + position: + x: 10.305 + y: 70.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_C1 + name: corning_384_wellplate_112ul_flat_C1 + parent: corning_384_wellplate_112ul_flat + position: + x: 10.305 + y: 65.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_D1 + name: corning_384_wellplate_112ul_flat_D1 + parent: corning_384_wellplate_112ul_flat + position: + x: 10.305 + y: 61.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_E1 + name: corning_384_wellplate_112ul_flat_E1 + parent: corning_384_wellplate_112ul_flat + position: + x: 10.305 + y: 56.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_F1 + name: corning_384_wellplate_112ul_flat_F1 + parent: corning_384_wellplate_112ul_flat + position: + x: 10.305 + y: 52.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_G1 + name: corning_384_wellplate_112ul_flat_G1 + parent: corning_384_wellplate_112ul_flat + position: + x: 10.305 + y: 47.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_H1 + name: corning_384_wellplate_112ul_flat_H1 + parent: corning_384_wellplate_112ul_flat + position: + x: 10.305 + y: 43.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_I1 + name: corning_384_wellplate_112ul_flat_I1 + parent: corning_384_wellplate_112ul_flat + position: + x: 10.305 + y: 38.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_J1 + name: corning_384_wellplate_112ul_flat_J1 + parent: corning_384_wellplate_112ul_flat + position: + x: 10.305 + y: 34.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_K1 + name: corning_384_wellplate_112ul_flat_K1 + parent: corning_384_wellplate_112ul_flat + position: + x: 10.305 + y: 29.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_L1 + name: corning_384_wellplate_112ul_flat_L1 + parent: corning_384_wellplate_112ul_flat + position: + x: 10.305 + y: 25.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_M1 + name: corning_384_wellplate_112ul_flat_M1 + parent: corning_384_wellplate_112ul_flat + position: + x: 10.305 + y: 20.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_N1 + name: corning_384_wellplate_112ul_flat_N1 + parent: corning_384_wellplate_112ul_flat + position: + x: 10.305 + y: 16.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_O1 + name: corning_384_wellplate_112ul_flat_O1 + parent: corning_384_wellplate_112ul_flat + position: + x: 10.305 + y: 11.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_P1 + name: corning_384_wellplate_112ul_flat_P1 + parent: corning_384_wellplate_112ul_flat + position: + x: 10.305 + y: 7.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_A2 + name: corning_384_wellplate_112ul_flat_A2 + parent: corning_384_wellplate_112ul_flat + position: + x: 14.805 + y: 74.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_B2 + name: corning_384_wellplate_112ul_flat_B2 + parent: corning_384_wellplate_112ul_flat + position: + x: 14.805 + y: 70.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_C2 + name: corning_384_wellplate_112ul_flat_C2 + parent: corning_384_wellplate_112ul_flat + position: + x: 14.805 + y: 65.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_D2 + name: corning_384_wellplate_112ul_flat_D2 + parent: corning_384_wellplate_112ul_flat + position: + x: 14.805 + y: 61.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_E2 + name: corning_384_wellplate_112ul_flat_E2 + parent: corning_384_wellplate_112ul_flat + position: + x: 14.805 + y: 56.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_F2 + name: corning_384_wellplate_112ul_flat_F2 + parent: corning_384_wellplate_112ul_flat + position: + x: 14.805 + y: 52.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_G2 + name: corning_384_wellplate_112ul_flat_G2 + parent: corning_384_wellplate_112ul_flat + position: + x: 14.805 + y: 47.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_H2 + name: corning_384_wellplate_112ul_flat_H2 + parent: corning_384_wellplate_112ul_flat + position: + x: 14.805 + y: 43.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_I2 + name: corning_384_wellplate_112ul_flat_I2 + parent: corning_384_wellplate_112ul_flat + position: + x: 14.805 + y: 38.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_J2 + name: corning_384_wellplate_112ul_flat_J2 + parent: corning_384_wellplate_112ul_flat + position: + x: 14.805 + y: 34.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_K2 + name: corning_384_wellplate_112ul_flat_K2 + parent: corning_384_wellplate_112ul_flat + position: + x: 14.805 + y: 29.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_L2 + name: corning_384_wellplate_112ul_flat_L2 + parent: corning_384_wellplate_112ul_flat + position: + x: 14.805 + y: 25.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_M2 + name: corning_384_wellplate_112ul_flat_M2 + parent: corning_384_wellplate_112ul_flat + position: + x: 14.805 + y: 20.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_N2 + name: corning_384_wellplate_112ul_flat_N2 + parent: corning_384_wellplate_112ul_flat + position: + x: 14.805 + y: 16.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_O2 + name: corning_384_wellplate_112ul_flat_O2 + parent: corning_384_wellplate_112ul_flat + position: + x: 14.805 + y: 11.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_P2 + name: corning_384_wellplate_112ul_flat_P2 + parent: corning_384_wellplate_112ul_flat + position: + x: 14.805 + y: 7.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_A3 + name: corning_384_wellplate_112ul_flat_A3 + parent: corning_384_wellplate_112ul_flat + position: + x: 19.305 + y: 74.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_B3 + name: corning_384_wellplate_112ul_flat_B3 + parent: corning_384_wellplate_112ul_flat + position: + x: 19.305 + y: 70.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_C3 + name: corning_384_wellplate_112ul_flat_C3 + parent: corning_384_wellplate_112ul_flat + position: + x: 19.305 + y: 65.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_D3 + name: corning_384_wellplate_112ul_flat_D3 + parent: corning_384_wellplate_112ul_flat + position: + x: 19.305 + y: 61.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_E3 + name: corning_384_wellplate_112ul_flat_E3 + parent: corning_384_wellplate_112ul_flat + position: + x: 19.305 + y: 56.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_F3 + name: corning_384_wellplate_112ul_flat_F3 + parent: corning_384_wellplate_112ul_flat + position: + x: 19.305 + y: 52.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_G3 + name: corning_384_wellplate_112ul_flat_G3 + parent: corning_384_wellplate_112ul_flat + position: + x: 19.305 + y: 47.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_H3 + name: corning_384_wellplate_112ul_flat_H3 + parent: corning_384_wellplate_112ul_flat + position: + x: 19.305 + y: 43.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_I3 + name: corning_384_wellplate_112ul_flat_I3 + parent: corning_384_wellplate_112ul_flat + position: + x: 19.305 + y: 38.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_J3 + name: corning_384_wellplate_112ul_flat_J3 + parent: corning_384_wellplate_112ul_flat + position: + x: 19.305 + y: 34.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_K3 + name: corning_384_wellplate_112ul_flat_K3 + parent: corning_384_wellplate_112ul_flat + position: + x: 19.305 + y: 29.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_L3 + name: corning_384_wellplate_112ul_flat_L3 + parent: corning_384_wellplate_112ul_flat + position: + x: 19.305 + y: 25.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_M3 + name: corning_384_wellplate_112ul_flat_M3 + parent: corning_384_wellplate_112ul_flat + position: + x: 19.305 + y: 20.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_N3 + name: corning_384_wellplate_112ul_flat_N3 + parent: corning_384_wellplate_112ul_flat + position: + x: 19.305 + y: 16.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_O3 + name: corning_384_wellplate_112ul_flat_O3 + parent: corning_384_wellplate_112ul_flat + position: + x: 19.305 + y: 11.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_P3 + name: corning_384_wellplate_112ul_flat_P3 + parent: corning_384_wellplate_112ul_flat + position: + x: 19.305 + y: 7.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_A4 + name: corning_384_wellplate_112ul_flat_A4 + parent: corning_384_wellplate_112ul_flat + position: + x: 23.805 + y: 74.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_B4 + name: corning_384_wellplate_112ul_flat_B4 + parent: corning_384_wellplate_112ul_flat + position: + x: 23.805 + y: 70.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_C4 + name: corning_384_wellplate_112ul_flat_C4 + parent: corning_384_wellplate_112ul_flat + position: + x: 23.805 + y: 65.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_D4 + name: corning_384_wellplate_112ul_flat_D4 + parent: corning_384_wellplate_112ul_flat + position: + x: 23.805 + y: 61.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_E4 + name: corning_384_wellplate_112ul_flat_E4 + parent: corning_384_wellplate_112ul_flat + position: + x: 23.805 + y: 56.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_F4 + name: corning_384_wellplate_112ul_flat_F4 + parent: corning_384_wellplate_112ul_flat + position: + x: 23.805 + y: 52.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_G4 + name: corning_384_wellplate_112ul_flat_G4 + parent: corning_384_wellplate_112ul_flat + position: + x: 23.805 + y: 47.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_H4 + name: corning_384_wellplate_112ul_flat_H4 + parent: corning_384_wellplate_112ul_flat + position: + x: 23.805 + y: 43.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_I4 + name: corning_384_wellplate_112ul_flat_I4 + parent: corning_384_wellplate_112ul_flat + position: + x: 23.805 + y: 38.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_J4 + name: corning_384_wellplate_112ul_flat_J4 + parent: corning_384_wellplate_112ul_flat + position: + x: 23.805 + y: 34.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_K4 + name: corning_384_wellplate_112ul_flat_K4 + parent: corning_384_wellplate_112ul_flat + position: + x: 23.805 + y: 29.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_L4 + name: corning_384_wellplate_112ul_flat_L4 + parent: corning_384_wellplate_112ul_flat + position: + x: 23.805 + y: 25.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_M4 + name: corning_384_wellplate_112ul_flat_M4 + parent: corning_384_wellplate_112ul_flat + position: + x: 23.805 + y: 20.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_N4 + name: corning_384_wellplate_112ul_flat_N4 + parent: corning_384_wellplate_112ul_flat + position: + x: 23.805 + y: 16.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_O4 + name: corning_384_wellplate_112ul_flat_O4 + parent: corning_384_wellplate_112ul_flat + position: + x: 23.805 + y: 11.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_P4 + name: corning_384_wellplate_112ul_flat_P4 + parent: corning_384_wellplate_112ul_flat + position: + x: 23.805 + y: 7.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_A5 + name: corning_384_wellplate_112ul_flat_A5 + parent: corning_384_wellplate_112ul_flat + position: + x: 28.305 + y: 74.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_B5 + name: corning_384_wellplate_112ul_flat_B5 + parent: corning_384_wellplate_112ul_flat + position: + x: 28.305 + y: 70.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_C5 + name: corning_384_wellplate_112ul_flat_C5 + parent: corning_384_wellplate_112ul_flat + position: + x: 28.305 + y: 65.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_D5 + name: corning_384_wellplate_112ul_flat_D5 + parent: corning_384_wellplate_112ul_flat + position: + x: 28.305 + y: 61.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_E5 + name: corning_384_wellplate_112ul_flat_E5 + parent: corning_384_wellplate_112ul_flat + position: + x: 28.305 + y: 56.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_F5 + name: corning_384_wellplate_112ul_flat_F5 + parent: corning_384_wellplate_112ul_flat + position: + x: 28.305 + y: 52.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_G5 + name: corning_384_wellplate_112ul_flat_G5 + parent: corning_384_wellplate_112ul_flat + position: + x: 28.305 + y: 47.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_H5 + name: corning_384_wellplate_112ul_flat_H5 + parent: corning_384_wellplate_112ul_flat + position: + x: 28.305 + y: 43.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_I5 + name: corning_384_wellplate_112ul_flat_I5 + parent: corning_384_wellplate_112ul_flat + position: + x: 28.305 + y: 38.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_J5 + name: corning_384_wellplate_112ul_flat_J5 + parent: corning_384_wellplate_112ul_flat + position: + x: 28.305 + y: 34.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_K5 + name: corning_384_wellplate_112ul_flat_K5 + parent: corning_384_wellplate_112ul_flat + position: + x: 28.305 + y: 29.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_L5 + name: corning_384_wellplate_112ul_flat_L5 + parent: corning_384_wellplate_112ul_flat + position: + x: 28.305 + y: 25.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_M5 + name: corning_384_wellplate_112ul_flat_M5 + parent: corning_384_wellplate_112ul_flat + position: + x: 28.305 + y: 20.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_N5 + name: corning_384_wellplate_112ul_flat_N5 + parent: corning_384_wellplate_112ul_flat + position: + x: 28.305 + y: 16.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_O5 + name: corning_384_wellplate_112ul_flat_O5 + parent: corning_384_wellplate_112ul_flat + position: + x: 28.305 + y: 11.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_P5 + name: corning_384_wellplate_112ul_flat_P5 + parent: corning_384_wellplate_112ul_flat + position: + x: 28.305 + y: 7.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_A6 + name: corning_384_wellplate_112ul_flat_A6 + parent: corning_384_wellplate_112ul_flat + position: + x: 32.805 + y: 74.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_B6 + name: corning_384_wellplate_112ul_flat_B6 + parent: corning_384_wellplate_112ul_flat + position: + x: 32.805 + y: 70.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_C6 + name: corning_384_wellplate_112ul_flat_C6 + parent: corning_384_wellplate_112ul_flat + position: + x: 32.805 + y: 65.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_D6 + name: corning_384_wellplate_112ul_flat_D6 + parent: corning_384_wellplate_112ul_flat + position: + x: 32.805 + y: 61.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_E6 + name: corning_384_wellplate_112ul_flat_E6 + parent: corning_384_wellplate_112ul_flat + position: + x: 32.805 + y: 56.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_F6 + name: corning_384_wellplate_112ul_flat_F6 + parent: corning_384_wellplate_112ul_flat + position: + x: 32.805 + y: 52.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_G6 + name: corning_384_wellplate_112ul_flat_G6 + parent: corning_384_wellplate_112ul_flat + position: + x: 32.805 + y: 47.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_H6 + name: corning_384_wellplate_112ul_flat_H6 + parent: corning_384_wellplate_112ul_flat + position: + x: 32.805 + y: 43.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_I6 + name: corning_384_wellplate_112ul_flat_I6 + parent: corning_384_wellplate_112ul_flat + position: + x: 32.805 + y: 38.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_J6 + name: corning_384_wellplate_112ul_flat_J6 + parent: corning_384_wellplate_112ul_flat + position: + x: 32.805 + y: 34.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_K6 + name: corning_384_wellplate_112ul_flat_K6 + parent: corning_384_wellplate_112ul_flat + position: + x: 32.805 + y: 29.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_L6 + name: corning_384_wellplate_112ul_flat_L6 + parent: corning_384_wellplate_112ul_flat + position: + x: 32.805 + y: 25.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_M6 + name: corning_384_wellplate_112ul_flat_M6 + parent: corning_384_wellplate_112ul_flat + position: + x: 32.805 + y: 20.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_N6 + name: corning_384_wellplate_112ul_flat_N6 + parent: corning_384_wellplate_112ul_flat + position: + x: 32.805 + y: 16.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_O6 + name: corning_384_wellplate_112ul_flat_O6 + parent: corning_384_wellplate_112ul_flat + position: + x: 32.805 + y: 11.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_P6 + name: corning_384_wellplate_112ul_flat_P6 + parent: corning_384_wellplate_112ul_flat + position: + x: 32.805 + y: 7.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_A7 + name: corning_384_wellplate_112ul_flat_A7 + parent: corning_384_wellplate_112ul_flat + position: + x: 37.305 + y: 74.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_B7 + name: corning_384_wellplate_112ul_flat_B7 + parent: corning_384_wellplate_112ul_flat + position: + x: 37.305 + y: 70.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_C7 + name: corning_384_wellplate_112ul_flat_C7 + parent: corning_384_wellplate_112ul_flat + position: + x: 37.305 + y: 65.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_D7 + name: corning_384_wellplate_112ul_flat_D7 + parent: corning_384_wellplate_112ul_flat + position: + x: 37.305 + y: 61.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_E7 + name: corning_384_wellplate_112ul_flat_E7 + parent: corning_384_wellplate_112ul_flat + position: + x: 37.305 + y: 56.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_F7 + name: corning_384_wellplate_112ul_flat_F7 + parent: corning_384_wellplate_112ul_flat + position: + x: 37.305 + y: 52.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_G7 + name: corning_384_wellplate_112ul_flat_G7 + parent: corning_384_wellplate_112ul_flat + position: + x: 37.305 + y: 47.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_H7 + name: corning_384_wellplate_112ul_flat_H7 + parent: corning_384_wellplate_112ul_flat + position: + x: 37.305 + y: 43.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_I7 + name: corning_384_wellplate_112ul_flat_I7 + parent: corning_384_wellplate_112ul_flat + position: + x: 37.305 + y: 38.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_J7 + name: corning_384_wellplate_112ul_flat_J7 + parent: corning_384_wellplate_112ul_flat + position: + x: 37.305 + y: 34.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_K7 + name: corning_384_wellplate_112ul_flat_K7 + parent: corning_384_wellplate_112ul_flat + position: + x: 37.305 + y: 29.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_L7 + name: corning_384_wellplate_112ul_flat_L7 + parent: corning_384_wellplate_112ul_flat + position: + x: 37.305 + y: 25.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_M7 + name: corning_384_wellplate_112ul_flat_M7 + parent: corning_384_wellplate_112ul_flat + position: + x: 37.305 + y: 20.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_N7 + name: corning_384_wellplate_112ul_flat_N7 + parent: corning_384_wellplate_112ul_flat + position: + x: 37.305 + y: 16.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_O7 + name: corning_384_wellplate_112ul_flat_O7 + parent: corning_384_wellplate_112ul_flat + position: + x: 37.305 + y: 11.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_P7 + name: corning_384_wellplate_112ul_flat_P7 + parent: corning_384_wellplate_112ul_flat + position: + x: 37.305 + y: 7.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_A8 + name: corning_384_wellplate_112ul_flat_A8 + parent: corning_384_wellplate_112ul_flat + position: + x: 41.805 + y: 74.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_B8 + name: corning_384_wellplate_112ul_flat_B8 + parent: corning_384_wellplate_112ul_flat + position: + x: 41.805 + y: 70.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_C8 + name: corning_384_wellplate_112ul_flat_C8 + parent: corning_384_wellplate_112ul_flat + position: + x: 41.805 + y: 65.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_D8 + name: corning_384_wellplate_112ul_flat_D8 + parent: corning_384_wellplate_112ul_flat + position: + x: 41.805 + y: 61.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_E8 + name: corning_384_wellplate_112ul_flat_E8 + parent: corning_384_wellplate_112ul_flat + position: + x: 41.805 + y: 56.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_F8 + name: corning_384_wellplate_112ul_flat_F8 + parent: corning_384_wellplate_112ul_flat + position: + x: 41.805 + y: 52.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_G8 + name: corning_384_wellplate_112ul_flat_G8 + parent: corning_384_wellplate_112ul_flat + position: + x: 41.805 + y: 47.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_H8 + name: corning_384_wellplate_112ul_flat_H8 + parent: corning_384_wellplate_112ul_flat + position: + x: 41.805 + y: 43.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_I8 + name: corning_384_wellplate_112ul_flat_I8 + parent: corning_384_wellplate_112ul_flat + position: + x: 41.805 + y: 38.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_J8 + name: corning_384_wellplate_112ul_flat_J8 + parent: corning_384_wellplate_112ul_flat + position: + x: 41.805 + y: 34.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_K8 + name: corning_384_wellplate_112ul_flat_K8 + parent: corning_384_wellplate_112ul_flat + position: + x: 41.805 + y: 29.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_L8 + name: corning_384_wellplate_112ul_flat_L8 + parent: corning_384_wellplate_112ul_flat + position: + x: 41.805 + y: 25.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_M8 + name: corning_384_wellplate_112ul_flat_M8 + parent: corning_384_wellplate_112ul_flat + position: + x: 41.805 + y: 20.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_N8 + name: corning_384_wellplate_112ul_flat_N8 + parent: corning_384_wellplate_112ul_flat + position: + x: 41.805 + y: 16.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_O8 + name: corning_384_wellplate_112ul_flat_O8 + parent: corning_384_wellplate_112ul_flat + position: + x: 41.805 + y: 11.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_P8 + name: corning_384_wellplate_112ul_flat_P8 + parent: corning_384_wellplate_112ul_flat + position: + x: 41.805 + y: 7.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_A9 + name: corning_384_wellplate_112ul_flat_A9 + parent: corning_384_wellplate_112ul_flat + position: + x: 46.305 + y: 74.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_B9 + name: corning_384_wellplate_112ul_flat_B9 + parent: corning_384_wellplate_112ul_flat + position: + x: 46.305 + y: 70.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_C9 + name: corning_384_wellplate_112ul_flat_C9 + parent: corning_384_wellplate_112ul_flat + position: + x: 46.305 + y: 65.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_D9 + name: corning_384_wellplate_112ul_flat_D9 + parent: corning_384_wellplate_112ul_flat + position: + x: 46.305 + y: 61.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_E9 + name: corning_384_wellplate_112ul_flat_E9 + parent: corning_384_wellplate_112ul_flat + position: + x: 46.305 + y: 56.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_F9 + name: corning_384_wellplate_112ul_flat_F9 + parent: corning_384_wellplate_112ul_flat + position: + x: 46.305 + y: 52.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_G9 + name: corning_384_wellplate_112ul_flat_G9 + parent: corning_384_wellplate_112ul_flat + position: + x: 46.305 + y: 47.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_H9 + name: corning_384_wellplate_112ul_flat_H9 + parent: corning_384_wellplate_112ul_flat + position: + x: 46.305 + y: 43.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_I9 + name: corning_384_wellplate_112ul_flat_I9 + parent: corning_384_wellplate_112ul_flat + position: + x: 46.305 + y: 38.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_J9 + name: corning_384_wellplate_112ul_flat_J9 + parent: corning_384_wellplate_112ul_flat + position: + x: 46.305 + y: 34.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_K9 + name: corning_384_wellplate_112ul_flat_K9 + parent: corning_384_wellplate_112ul_flat + position: + x: 46.305 + y: 29.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_L9 + name: corning_384_wellplate_112ul_flat_L9 + parent: corning_384_wellplate_112ul_flat + position: + x: 46.305 + y: 25.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_M9 + name: corning_384_wellplate_112ul_flat_M9 + parent: corning_384_wellplate_112ul_flat + position: + x: 46.305 + y: 20.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_N9 + name: corning_384_wellplate_112ul_flat_N9 + parent: corning_384_wellplate_112ul_flat + position: + x: 46.305 + y: 16.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_O9 + name: corning_384_wellplate_112ul_flat_O9 + parent: corning_384_wellplate_112ul_flat + position: + x: 46.305 + y: 11.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_P9 + name: corning_384_wellplate_112ul_flat_P9 + parent: corning_384_wellplate_112ul_flat + position: + x: 46.305 + y: 7.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_A10 + name: corning_384_wellplate_112ul_flat_A10 + parent: corning_384_wellplate_112ul_flat + position: + x: 50.805 + y: 74.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_B10 + name: corning_384_wellplate_112ul_flat_B10 + parent: corning_384_wellplate_112ul_flat + position: + x: 50.805 + y: 70.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_C10 + name: corning_384_wellplate_112ul_flat_C10 + parent: corning_384_wellplate_112ul_flat + position: + x: 50.805 + y: 65.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_D10 + name: corning_384_wellplate_112ul_flat_D10 + parent: corning_384_wellplate_112ul_flat + position: + x: 50.805 + y: 61.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_E10 + name: corning_384_wellplate_112ul_flat_E10 + parent: corning_384_wellplate_112ul_flat + position: + x: 50.805 + y: 56.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_F10 + name: corning_384_wellplate_112ul_flat_F10 + parent: corning_384_wellplate_112ul_flat + position: + x: 50.805 + y: 52.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_G10 + name: corning_384_wellplate_112ul_flat_G10 + parent: corning_384_wellplate_112ul_flat + position: + x: 50.805 + y: 47.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_H10 + name: corning_384_wellplate_112ul_flat_H10 + parent: corning_384_wellplate_112ul_flat + position: + x: 50.805 + y: 43.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_I10 + name: corning_384_wellplate_112ul_flat_I10 + parent: corning_384_wellplate_112ul_flat + position: + x: 50.805 + y: 38.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_J10 + name: corning_384_wellplate_112ul_flat_J10 + parent: corning_384_wellplate_112ul_flat + position: + x: 50.805 + y: 34.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_K10 + name: corning_384_wellplate_112ul_flat_K10 + parent: corning_384_wellplate_112ul_flat + position: + x: 50.805 + y: 29.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_L10 + name: corning_384_wellplate_112ul_flat_L10 + parent: corning_384_wellplate_112ul_flat + position: + x: 50.805 + y: 25.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_M10 + name: corning_384_wellplate_112ul_flat_M10 + parent: corning_384_wellplate_112ul_flat + position: + x: 50.805 + y: 20.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_N10 + name: corning_384_wellplate_112ul_flat_N10 + parent: corning_384_wellplate_112ul_flat + position: + x: 50.805 + y: 16.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_O10 + name: corning_384_wellplate_112ul_flat_O10 + parent: corning_384_wellplate_112ul_flat + position: + x: 50.805 + y: 11.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_P10 + name: corning_384_wellplate_112ul_flat_P10 + parent: corning_384_wellplate_112ul_flat + position: + x: 50.805 + y: 7.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_A11 + name: corning_384_wellplate_112ul_flat_A11 + parent: corning_384_wellplate_112ul_flat + position: + x: 55.305 + y: 74.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_B11 + name: corning_384_wellplate_112ul_flat_B11 + parent: corning_384_wellplate_112ul_flat + position: + x: 55.305 + y: 70.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_C11 + name: corning_384_wellplate_112ul_flat_C11 + parent: corning_384_wellplate_112ul_flat + position: + x: 55.305 + y: 65.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_D11 + name: corning_384_wellplate_112ul_flat_D11 + parent: corning_384_wellplate_112ul_flat + position: + x: 55.305 + y: 61.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_E11 + name: corning_384_wellplate_112ul_flat_E11 + parent: corning_384_wellplate_112ul_flat + position: + x: 55.305 + y: 56.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_F11 + name: corning_384_wellplate_112ul_flat_F11 + parent: corning_384_wellplate_112ul_flat + position: + x: 55.305 + y: 52.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_G11 + name: corning_384_wellplate_112ul_flat_G11 + parent: corning_384_wellplate_112ul_flat + position: + x: 55.305 + y: 47.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_H11 + name: corning_384_wellplate_112ul_flat_H11 + parent: corning_384_wellplate_112ul_flat + position: + x: 55.305 + y: 43.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_I11 + name: corning_384_wellplate_112ul_flat_I11 + parent: corning_384_wellplate_112ul_flat + position: + x: 55.305 + y: 38.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_J11 + name: corning_384_wellplate_112ul_flat_J11 + parent: corning_384_wellplate_112ul_flat + position: + x: 55.305 + y: 34.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_K11 + name: corning_384_wellplate_112ul_flat_K11 + parent: corning_384_wellplate_112ul_flat + position: + x: 55.305 + y: 29.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_L11 + name: corning_384_wellplate_112ul_flat_L11 + parent: corning_384_wellplate_112ul_flat + position: + x: 55.305 + y: 25.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_M11 + name: corning_384_wellplate_112ul_flat_M11 + parent: corning_384_wellplate_112ul_flat + position: + x: 55.305 + y: 20.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_N11 + name: corning_384_wellplate_112ul_flat_N11 + parent: corning_384_wellplate_112ul_flat + position: + x: 55.305 + y: 16.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_O11 + name: corning_384_wellplate_112ul_flat_O11 + parent: corning_384_wellplate_112ul_flat + position: + x: 55.305 + y: 11.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_P11 + name: corning_384_wellplate_112ul_flat_P11 + parent: corning_384_wellplate_112ul_flat + position: + x: 55.305 + y: 7.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_A12 + name: corning_384_wellplate_112ul_flat_A12 + parent: corning_384_wellplate_112ul_flat + position: + x: 59.805 + y: 74.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_B12 + name: corning_384_wellplate_112ul_flat_B12 + parent: corning_384_wellplate_112ul_flat + position: + x: 59.805 + y: 70.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_C12 + name: corning_384_wellplate_112ul_flat_C12 + parent: corning_384_wellplate_112ul_flat + position: + x: 59.805 + y: 65.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_D12 + name: corning_384_wellplate_112ul_flat_D12 + parent: corning_384_wellplate_112ul_flat + position: + x: 59.805 + y: 61.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_E12 + name: corning_384_wellplate_112ul_flat_E12 + parent: corning_384_wellplate_112ul_flat + position: + x: 59.805 + y: 56.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_F12 + name: corning_384_wellplate_112ul_flat_F12 + parent: corning_384_wellplate_112ul_flat + position: + x: 59.805 + y: 52.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_G12 + name: corning_384_wellplate_112ul_flat_G12 + parent: corning_384_wellplate_112ul_flat + position: + x: 59.805 + y: 47.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_H12 + name: corning_384_wellplate_112ul_flat_H12 + parent: corning_384_wellplate_112ul_flat + position: + x: 59.805 + y: 43.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_I12 + name: corning_384_wellplate_112ul_flat_I12 + parent: corning_384_wellplate_112ul_flat + position: + x: 59.805 + y: 38.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_J12 + name: corning_384_wellplate_112ul_flat_J12 + parent: corning_384_wellplate_112ul_flat + position: + x: 59.805 + y: 34.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_K12 + name: corning_384_wellplate_112ul_flat_K12 + parent: corning_384_wellplate_112ul_flat + position: + x: 59.805 + y: 29.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_L12 + name: corning_384_wellplate_112ul_flat_L12 + parent: corning_384_wellplate_112ul_flat + position: + x: 59.805 + y: 25.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_M12 + name: corning_384_wellplate_112ul_flat_M12 + parent: corning_384_wellplate_112ul_flat + position: + x: 59.805 + y: 20.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_N12 + name: corning_384_wellplate_112ul_flat_N12 + parent: corning_384_wellplate_112ul_flat + position: + x: 59.805 + y: 16.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_O12 + name: corning_384_wellplate_112ul_flat_O12 + parent: corning_384_wellplate_112ul_flat + position: + x: 59.805 + y: 11.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_P12 + name: corning_384_wellplate_112ul_flat_P12 + parent: corning_384_wellplate_112ul_flat + position: + x: 59.805 + y: 7.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_A13 + name: corning_384_wellplate_112ul_flat_A13 + parent: corning_384_wellplate_112ul_flat + position: + x: 64.305 + y: 74.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_B13 + name: corning_384_wellplate_112ul_flat_B13 + parent: corning_384_wellplate_112ul_flat + position: + x: 64.305 + y: 70.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_C13 + name: corning_384_wellplate_112ul_flat_C13 + parent: corning_384_wellplate_112ul_flat + position: + x: 64.305 + y: 65.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_D13 + name: corning_384_wellplate_112ul_flat_D13 + parent: corning_384_wellplate_112ul_flat + position: + x: 64.305 + y: 61.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_E13 + name: corning_384_wellplate_112ul_flat_E13 + parent: corning_384_wellplate_112ul_flat + position: + x: 64.305 + y: 56.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_F13 + name: corning_384_wellplate_112ul_flat_F13 + parent: corning_384_wellplate_112ul_flat + position: + x: 64.305 + y: 52.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_G13 + name: corning_384_wellplate_112ul_flat_G13 + parent: corning_384_wellplate_112ul_flat + position: + x: 64.305 + y: 47.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_H13 + name: corning_384_wellplate_112ul_flat_H13 + parent: corning_384_wellplate_112ul_flat + position: + x: 64.305 + y: 43.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_I13 + name: corning_384_wellplate_112ul_flat_I13 + parent: corning_384_wellplate_112ul_flat + position: + x: 64.305 + y: 38.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_J13 + name: corning_384_wellplate_112ul_flat_J13 + parent: corning_384_wellplate_112ul_flat + position: + x: 64.305 + y: 34.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_K13 + name: corning_384_wellplate_112ul_flat_K13 + parent: corning_384_wellplate_112ul_flat + position: + x: 64.305 + y: 29.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_L13 + name: corning_384_wellplate_112ul_flat_L13 + parent: corning_384_wellplate_112ul_flat + position: + x: 64.305 + y: 25.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_M13 + name: corning_384_wellplate_112ul_flat_M13 + parent: corning_384_wellplate_112ul_flat + position: + x: 64.305 + y: 20.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_N13 + name: corning_384_wellplate_112ul_flat_N13 + parent: corning_384_wellplate_112ul_flat + position: + x: 64.305 + y: 16.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_O13 + name: corning_384_wellplate_112ul_flat_O13 + parent: corning_384_wellplate_112ul_flat + position: + x: 64.305 + y: 11.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_P13 + name: corning_384_wellplate_112ul_flat_P13 + parent: corning_384_wellplate_112ul_flat + position: + x: 64.305 + y: 7.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_A14 + name: corning_384_wellplate_112ul_flat_A14 + parent: corning_384_wellplate_112ul_flat + position: + x: 68.805 + y: 74.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_B14 + name: corning_384_wellplate_112ul_flat_B14 + parent: corning_384_wellplate_112ul_flat + position: + x: 68.805 + y: 70.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_C14 + name: corning_384_wellplate_112ul_flat_C14 + parent: corning_384_wellplate_112ul_flat + position: + x: 68.805 + y: 65.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_D14 + name: corning_384_wellplate_112ul_flat_D14 + parent: corning_384_wellplate_112ul_flat + position: + x: 68.805 + y: 61.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_E14 + name: corning_384_wellplate_112ul_flat_E14 + parent: corning_384_wellplate_112ul_flat + position: + x: 68.805 + y: 56.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_F14 + name: corning_384_wellplate_112ul_flat_F14 + parent: corning_384_wellplate_112ul_flat + position: + x: 68.805 + y: 52.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_G14 + name: corning_384_wellplate_112ul_flat_G14 + parent: corning_384_wellplate_112ul_flat + position: + x: 68.805 + y: 47.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_H14 + name: corning_384_wellplate_112ul_flat_H14 + parent: corning_384_wellplate_112ul_flat + position: + x: 68.805 + y: 43.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_I14 + name: corning_384_wellplate_112ul_flat_I14 + parent: corning_384_wellplate_112ul_flat + position: + x: 68.805 + y: 38.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_J14 + name: corning_384_wellplate_112ul_flat_J14 + parent: corning_384_wellplate_112ul_flat + position: + x: 68.805 + y: 34.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_K14 + name: corning_384_wellplate_112ul_flat_K14 + parent: corning_384_wellplate_112ul_flat + position: + x: 68.805 + y: 29.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_L14 + name: corning_384_wellplate_112ul_flat_L14 + parent: corning_384_wellplate_112ul_flat + position: + x: 68.805 + y: 25.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_M14 + name: corning_384_wellplate_112ul_flat_M14 + parent: corning_384_wellplate_112ul_flat + position: + x: 68.805 + y: 20.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_N14 + name: corning_384_wellplate_112ul_flat_N14 + parent: corning_384_wellplate_112ul_flat + position: + x: 68.805 + y: 16.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_O14 + name: corning_384_wellplate_112ul_flat_O14 + parent: corning_384_wellplate_112ul_flat + position: + x: 68.805 + y: 11.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_P14 + name: corning_384_wellplate_112ul_flat_P14 + parent: corning_384_wellplate_112ul_flat + position: + x: 68.805 + y: 7.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_A15 + name: corning_384_wellplate_112ul_flat_A15 + parent: corning_384_wellplate_112ul_flat + position: + x: 73.305 + y: 74.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_B15 + name: corning_384_wellplate_112ul_flat_B15 + parent: corning_384_wellplate_112ul_flat + position: + x: 73.305 + y: 70.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_C15 + name: corning_384_wellplate_112ul_flat_C15 + parent: corning_384_wellplate_112ul_flat + position: + x: 73.305 + y: 65.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_D15 + name: corning_384_wellplate_112ul_flat_D15 + parent: corning_384_wellplate_112ul_flat + position: + x: 73.305 + y: 61.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_E15 + name: corning_384_wellplate_112ul_flat_E15 + parent: corning_384_wellplate_112ul_flat + position: + x: 73.305 + y: 56.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_F15 + name: corning_384_wellplate_112ul_flat_F15 + parent: corning_384_wellplate_112ul_flat + position: + x: 73.305 + y: 52.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_G15 + name: corning_384_wellplate_112ul_flat_G15 + parent: corning_384_wellplate_112ul_flat + position: + x: 73.305 + y: 47.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_H15 + name: corning_384_wellplate_112ul_flat_H15 + parent: corning_384_wellplate_112ul_flat + position: + x: 73.305 + y: 43.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_I15 + name: corning_384_wellplate_112ul_flat_I15 + parent: corning_384_wellplate_112ul_flat + position: + x: 73.305 + y: 38.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_J15 + name: corning_384_wellplate_112ul_flat_J15 + parent: corning_384_wellplate_112ul_flat + position: + x: 73.305 + y: 34.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_K15 + name: corning_384_wellplate_112ul_flat_K15 + parent: corning_384_wellplate_112ul_flat + position: + x: 73.305 + y: 29.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_L15 + name: corning_384_wellplate_112ul_flat_L15 + parent: corning_384_wellplate_112ul_flat + position: + x: 73.305 + y: 25.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_M15 + name: corning_384_wellplate_112ul_flat_M15 + parent: corning_384_wellplate_112ul_flat + position: + x: 73.305 + y: 20.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_N15 + name: corning_384_wellplate_112ul_flat_N15 + parent: corning_384_wellplate_112ul_flat + position: + x: 73.305 + y: 16.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_O15 + name: corning_384_wellplate_112ul_flat_O15 + parent: corning_384_wellplate_112ul_flat + position: + x: 73.305 + y: 11.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_P15 + name: corning_384_wellplate_112ul_flat_P15 + parent: corning_384_wellplate_112ul_flat + position: + x: 73.305 + y: 7.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_A16 + name: corning_384_wellplate_112ul_flat_A16 + parent: corning_384_wellplate_112ul_flat + position: + x: 77.805 + y: 74.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_B16 + name: corning_384_wellplate_112ul_flat_B16 + parent: corning_384_wellplate_112ul_flat + position: + x: 77.805 + y: 70.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_C16 + name: corning_384_wellplate_112ul_flat_C16 + parent: corning_384_wellplate_112ul_flat + position: + x: 77.805 + y: 65.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_D16 + name: corning_384_wellplate_112ul_flat_D16 + parent: corning_384_wellplate_112ul_flat + position: + x: 77.805 + y: 61.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_E16 + name: corning_384_wellplate_112ul_flat_E16 + parent: corning_384_wellplate_112ul_flat + position: + x: 77.805 + y: 56.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_F16 + name: corning_384_wellplate_112ul_flat_F16 + parent: corning_384_wellplate_112ul_flat + position: + x: 77.805 + y: 52.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_G16 + name: corning_384_wellplate_112ul_flat_G16 + parent: corning_384_wellplate_112ul_flat + position: + x: 77.805 + y: 47.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_H16 + name: corning_384_wellplate_112ul_flat_H16 + parent: corning_384_wellplate_112ul_flat + position: + x: 77.805 + y: 43.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_I16 + name: corning_384_wellplate_112ul_flat_I16 + parent: corning_384_wellplate_112ul_flat + position: + x: 77.805 + y: 38.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_J16 + name: corning_384_wellplate_112ul_flat_J16 + parent: corning_384_wellplate_112ul_flat + position: + x: 77.805 + y: 34.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_K16 + name: corning_384_wellplate_112ul_flat_K16 + parent: corning_384_wellplate_112ul_flat + position: + x: 77.805 + y: 29.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_L16 + name: corning_384_wellplate_112ul_flat_L16 + parent: corning_384_wellplate_112ul_flat + position: + x: 77.805 + y: 25.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_M16 + name: corning_384_wellplate_112ul_flat_M16 + parent: corning_384_wellplate_112ul_flat + position: + x: 77.805 + y: 20.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_N16 + name: corning_384_wellplate_112ul_flat_N16 + parent: corning_384_wellplate_112ul_flat + position: + x: 77.805 + y: 16.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_O16 + name: corning_384_wellplate_112ul_flat_O16 + parent: corning_384_wellplate_112ul_flat + position: + x: 77.805 + y: 11.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_P16 + name: corning_384_wellplate_112ul_flat_P16 + parent: corning_384_wellplate_112ul_flat + position: + x: 77.805 + y: 7.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_A17 + name: corning_384_wellplate_112ul_flat_A17 + parent: corning_384_wellplate_112ul_flat + position: + x: 82.305 + y: 74.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_B17 + name: corning_384_wellplate_112ul_flat_B17 + parent: corning_384_wellplate_112ul_flat + position: + x: 82.305 + y: 70.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_C17 + name: corning_384_wellplate_112ul_flat_C17 + parent: corning_384_wellplate_112ul_flat + position: + x: 82.305 + y: 65.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_D17 + name: corning_384_wellplate_112ul_flat_D17 + parent: corning_384_wellplate_112ul_flat + position: + x: 82.305 + y: 61.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_E17 + name: corning_384_wellplate_112ul_flat_E17 + parent: corning_384_wellplate_112ul_flat + position: + x: 82.305 + y: 56.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_F17 + name: corning_384_wellplate_112ul_flat_F17 + parent: corning_384_wellplate_112ul_flat + position: + x: 82.305 + y: 52.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_G17 + name: corning_384_wellplate_112ul_flat_G17 + parent: corning_384_wellplate_112ul_flat + position: + x: 82.305 + y: 47.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_H17 + name: corning_384_wellplate_112ul_flat_H17 + parent: corning_384_wellplate_112ul_flat + position: + x: 82.305 + y: 43.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_I17 + name: corning_384_wellplate_112ul_flat_I17 + parent: corning_384_wellplate_112ul_flat + position: + x: 82.305 + y: 38.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_J17 + name: corning_384_wellplate_112ul_flat_J17 + parent: corning_384_wellplate_112ul_flat + position: + x: 82.305 + y: 34.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_K17 + name: corning_384_wellplate_112ul_flat_K17 + parent: corning_384_wellplate_112ul_flat + position: + x: 82.305 + y: 29.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_L17 + name: corning_384_wellplate_112ul_flat_L17 + parent: corning_384_wellplate_112ul_flat + position: + x: 82.305 + y: 25.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_M17 + name: corning_384_wellplate_112ul_flat_M17 + parent: corning_384_wellplate_112ul_flat + position: + x: 82.305 + y: 20.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_N17 + name: corning_384_wellplate_112ul_flat_N17 + parent: corning_384_wellplate_112ul_flat + position: + x: 82.305 + y: 16.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_O17 + name: corning_384_wellplate_112ul_flat_O17 + parent: corning_384_wellplate_112ul_flat + position: + x: 82.305 + y: 11.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_P17 + name: corning_384_wellplate_112ul_flat_P17 + parent: corning_384_wellplate_112ul_flat + position: + x: 82.305 + y: 7.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_A18 + name: corning_384_wellplate_112ul_flat_A18 + parent: corning_384_wellplate_112ul_flat + position: + x: 86.805 + y: 74.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_B18 + name: corning_384_wellplate_112ul_flat_B18 + parent: corning_384_wellplate_112ul_flat + position: + x: 86.805 + y: 70.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_C18 + name: corning_384_wellplate_112ul_flat_C18 + parent: corning_384_wellplate_112ul_flat + position: + x: 86.805 + y: 65.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_D18 + name: corning_384_wellplate_112ul_flat_D18 + parent: corning_384_wellplate_112ul_flat + position: + x: 86.805 + y: 61.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_E18 + name: corning_384_wellplate_112ul_flat_E18 + parent: corning_384_wellplate_112ul_flat + position: + x: 86.805 + y: 56.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_F18 + name: corning_384_wellplate_112ul_flat_F18 + parent: corning_384_wellplate_112ul_flat + position: + x: 86.805 + y: 52.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_G18 + name: corning_384_wellplate_112ul_flat_G18 + parent: corning_384_wellplate_112ul_flat + position: + x: 86.805 + y: 47.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_H18 + name: corning_384_wellplate_112ul_flat_H18 + parent: corning_384_wellplate_112ul_flat + position: + x: 86.805 + y: 43.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_I18 + name: corning_384_wellplate_112ul_flat_I18 + parent: corning_384_wellplate_112ul_flat + position: + x: 86.805 + y: 38.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_J18 + name: corning_384_wellplate_112ul_flat_J18 + parent: corning_384_wellplate_112ul_flat + position: + x: 86.805 + y: 34.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_K18 + name: corning_384_wellplate_112ul_flat_K18 + parent: corning_384_wellplate_112ul_flat + position: + x: 86.805 + y: 29.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_L18 + name: corning_384_wellplate_112ul_flat_L18 + parent: corning_384_wellplate_112ul_flat + position: + x: 86.805 + y: 25.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_M18 + name: corning_384_wellplate_112ul_flat_M18 + parent: corning_384_wellplate_112ul_flat + position: + x: 86.805 + y: 20.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_N18 + name: corning_384_wellplate_112ul_flat_N18 + parent: corning_384_wellplate_112ul_flat + position: + x: 86.805 + y: 16.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_O18 + name: corning_384_wellplate_112ul_flat_O18 + parent: corning_384_wellplate_112ul_flat + position: + x: 86.805 + y: 11.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_P18 + name: corning_384_wellplate_112ul_flat_P18 + parent: corning_384_wellplate_112ul_flat + position: + x: 86.805 + y: 7.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_A19 + name: corning_384_wellplate_112ul_flat_A19 + parent: corning_384_wellplate_112ul_flat + position: + x: 91.305 + y: 74.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_B19 + name: corning_384_wellplate_112ul_flat_B19 + parent: corning_384_wellplate_112ul_flat + position: + x: 91.305 + y: 70.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_C19 + name: corning_384_wellplate_112ul_flat_C19 + parent: corning_384_wellplate_112ul_flat + position: + x: 91.305 + y: 65.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_D19 + name: corning_384_wellplate_112ul_flat_D19 + parent: corning_384_wellplate_112ul_flat + position: + x: 91.305 + y: 61.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_E19 + name: corning_384_wellplate_112ul_flat_E19 + parent: corning_384_wellplate_112ul_flat + position: + x: 91.305 + y: 56.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_F19 + name: corning_384_wellplate_112ul_flat_F19 + parent: corning_384_wellplate_112ul_flat + position: + x: 91.305 + y: 52.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_G19 + name: corning_384_wellplate_112ul_flat_G19 + parent: corning_384_wellplate_112ul_flat + position: + x: 91.305 + y: 47.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_H19 + name: corning_384_wellplate_112ul_flat_H19 + parent: corning_384_wellplate_112ul_flat + position: + x: 91.305 + y: 43.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_I19 + name: corning_384_wellplate_112ul_flat_I19 + parent: corning_384_wellplate_112ul_flat + position: + x: 91.305 + y: 38.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_J19 + name: corning_384_wellplate_112ul_flat_J19 + parent: corning_384_wellplate_112ul_flat + position: + x: 91.305 + y: 34.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_K19 + name: corning_384_wellplate_112ul_flat_K19 + parent: corning_384_wellplate_112ul_flat + position: + x: 91.305 + y: 29.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_L19 + name: corning_384_wellplate_112ul_flat_L19 + parent: corning_384_wellplate_112ul_flat + position: + x: 91.305 + y: 25.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_M19 + name: corning_384_wellplate_112ul_flat_M19 + parent: corning_384_wellplate_112ul_flat + position: + x: 91.305 + y: 20.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_N19 + name: corning_384_wellplate_112ul_flat_N19 + parent: corning_384_wellplate_112ul_flat + position: + x: 91.305 + y: 16.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_O19 + name: corning_384_wellplate_112ul_flat_O19 + parent: corning_384_wellplate_112ul_flat + position: + x: 91.305 + y: 11.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_P19 + name: corning_384_wellplate_112ul_flat_P19 + parent: corning_384_wellplate_112ul_flat + position: + x: 91.305 + y: 7.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_A20 + name: corning_384_wellplate_112ul_flat_A20 + parent: corning_384_wellplate_112ul_flat + position: + x: 95.805 + y: 74.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_B20 + name: corning_384_wellplate_112ul_flat_B20 + parent: corning_384_wellplate_112ul_flat + position: + x: 95.805 + y: 70.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_C20 + name: corning_384_wellplate_112ul_flat_C20 + parent: corning_384_wellplate_112ul_flat + position: + x: 95.805 + y: 65.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_D20 + name: corning_384_wellplate_112ul_flat_D20 + parent: corning_384_wellplate_112ul_flat + position: + x: 95.805 + y: 61.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_E20 + name: corning_384_wellplate_112ul_flat_E20 + parent: corning_384_wellplate_112ul_flat + position: + x: 95.805 + y: 56.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_F20 + name: corning_384_wellplate_112ul_flat_F20 + parent: corning_384_wellplate_112ul_flat + position: + x: 95.805 + y: 52.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_G20 + name: corning_384_wellplate_112ul_flat_G20 + parent: corning_384_wellplate_112ul_flat + position: + x: 95.805 + y: 47.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_H20 + name: corning_384_wellplate_112ul_flat_H20 + parent: corning_384_wellplate_112ul_flat + position: + x: 95.805 + y: 43.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_I20 + name: corning_384_wellplate_112ul_flat_I20 + parent: corning_384_wellplate_112ul_flat + position: + x: 95.805 + y: 38.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_J20 + name: corning_384_wellplate_112ul_flat_J20 + parent: corning_384_wellplate_112ul_flat + position: + x: 95.805 + y: 34.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_K20 + name: corning_384_wellplate_112ul_flat_K20 + parent: corning_384_wellplate_112ul_flat + position: + x: 95.805 + y: 29.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_L20 + name: corning_384_wellplate_112ul_flat_L20 + parent: corning_384_wellplate_112ul_flat + position: + x: 95.805 + y: 25.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_M20 + name: corning_384_wellplate_112ul_flat_M20 + parent: corning_384_wellplate_112ul_flat + position: + x: 95.805 + y: 20.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_N20 + name: corning_384_wellplate_112ul_flat_N20 + parent: corning_384_wellplate_112ul_flat + position: + x: 95.805 + y: 16.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_O20 + name: corning_384_wellplate_112ul_flat_O20 + parent: corning_384_wellplate_112ul_flat + position: + x: 95.805 + y: 11.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_P20 + name: corning_384_wellplate_112ul_flat_P20 + parent: corning_384_wellplate_112ul_flat + position: + x: 95.805 + y: 7.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_A21 + name: corning_384_wellplate_112ul_flat_A21 + parent: corning_384_wellplate_112ul_flat + position: + x: 100.305 + y: 74.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_B21 + name: corning_384_wellplate_112ul_flat_B21 + parent: corning_384_wellplate_112ul_flat + position: + x: 100.305 + y: 70.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_C21 + name: corning_384_wellplate_112ul_flat_C21 + parent: corning_384_wellplate_112ul_flat + position: + x: 100.305 + y: 65.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_D21 + name: corning_384_wellplate_112ul_flat_D21 + parent: corning_384_wellplate_112ul_flat + position: + x: 100.305 + y: 61.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_E21 + name: corning_384_wellplate_112ul_flat_E21 + parent: corning_384_wellplate_112ul_flat + position: + x: 100.305 + y: 56.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_F21 + name: corning_384_wellplate_112ul_flat_F21 + parent: corning_384_wellplate_112ul_flat + position: + x: 100.305 + y: 52.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_G21 + name: corning_384_wellplate_112ul_flat_G21 + parent: corning_384_wellplate_112ul_flat + position: + x: 100.305 + y: 47.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_H21 + name: corning_384_wellplate_112ul_flat_H21 + parent: corning_384_wellplate_112ul_flat + position: + x: 100.305 + y: 43.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_I21 + name: corning_384_wellplate_112ul_flat_I21 + parent: corning_384_wellplate_112ul_flat + position: + x: 100.305 + y: 38.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_J21 + name: corning_384_wellplate_112ul_flat_J21 + parent: corning_384_wellplate_112ul_flat + position: + x: 100.305 + y: 34.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_K21 + name: corning_384_wellplate_112ul_flat_K21 + parent: corning_384_wellplate_112ul_flat + position: + x: 100.305 + y: 29.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_L21 + name: corning_384_wellplate_112ul_flat_L21 + parent: corning_384_wellplate_112ul_flat + position: + x: 100.305 + y: 25.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_M21 + name: corning_384_wellplate_112ul_flat_M21 + parent: corning_384_wellplate_112ul_flat + position: + x: 100.305 + y: 20.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_N21 + name: corning_384_wellplate_112ul_flat_N21 + parent: corning_384_wellplate_112ul_flat + position: + x: 100.305 + y: 16.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_O21 + name: corning_384_wellplate_112ul_flat_O21 + parent: corning_384_wellplate_112ul_flat + position: + x: 100.305 + y: 11.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_P21 + name: corning_384_wellplate_112ul_flat_P21 + parent: corning_384_wellplate_112ul_flat + position: + x: 100.305 + y: 7.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_A22 + name: corning_384_wellplate_112ul_flat_A22 + parent: corning_384_wellplate_112ul_flat + position: + x: 104.805 + y: 74.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_B22 + name: corning_384_wellplate_112ul_flat_B22 + parent: corning_384_wellplate_112ul_flat + position: + x: 104.805 + y: 70.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_C22 + name: corning_384_wellplate_112ul_flat_C22 + parent: corning_384_wellplate_112ul_flat + position: + x: 104.805 + y: 65.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_D22 + name: corning_384_wellplate_112ul_flat_D22 + parent: corning_384_wellplate_112ul_flat + position: + x: 104.805 + y: 61.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_E22 + name: corning_384_wellplate_112ul_flat_E22 + parent: corning_384_wellplate_112ul_flat + position: + x: 104.805 + y: 56.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_F22 + name: corning_384_wellplate_112ul_flat_F22 + parent: corning_384_wellplate_112ul_flat + position: + x: 104.805 + y: 52.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_G22 + name: corning_384_wellplate_112ul_flat_G22 + parent: corning_384_wellplate_112ul_flat + position: + x: 104.805 + y: 47.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_H22 + name: corning_384_wellplate_112ul_flat_H22 + parent: corning_384_wellplate_112ul_flat + position: + x: 104.805 + y: 43.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_I22 + name: corning_384_wellplate_112ul_flat_I22 + parent: corning_384_wellplate_112ul_flat + position: + x: 104.805 + y: 38.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_J22 + name: corning_384_wellplate_112ul_flat_J22 + parent: corning_384_wellplate_112ul_flat + position: + x: 104.805 + y: 34.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_K22 + name: corning_384_wellplate_112ul_flat_K22 + parent: corning_384_wellplate_112ul_flat + position: + x: 104.805 + y: 29.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_L22 + name: corning_384_wellplate_112ul_flat_L22 + parent: corning_384_wellplate_112ul_flat + position: + x: 104.805 + y: 25.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_M22 + name: corning_384_wellplate_112ul_flat_M22 + parent: corning_384_wellplate_112ul_flat + position: + x: 104.805 + y: 20.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_N22 + name: corning_384_wellplate_112ul_flat_N22 + parent: corning_384_wellplate_112ul_flat + position: + x: 104.805 + y: 16.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_O22 + name: corning_384_wellplate_112ul_flat_O22 + parent: corning_384_wellplate_112ul_flat + position: + x: 104.805 + y: 11.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_P22 + name: corning_384_wellplate_112ul_flat_P22 + parent: corning_384_wellplate_112ul_flat + position: + x: 104.805 + y: 7.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_A23 + name: corning_384_wellplate_112ul_flat_A23 + parent: corning_384_wellplate_112ul_flat + position: + x: 109.305 + y: 74.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_B23 + name: corning_384_wellplate_112ul_flat_B23 + parent: corning_384_wellplate_112ul_flat + position: + x: 109.305 + y: 70.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_C23 + name: corning_384_wellplate_112ul_flat_C23 + parent: corning_384_wellplate_112ul_flat + position: + x: 109.305 + y: 65.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_D23 + name: corning_384_wellplate_112ul_flat_D23 + parent: corning_384_wellplate_112ul_flat + position: + x: 109.305 + y: 61.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_E23 + name: corning_384_wellplate_112ul_flat_E23 + parent: corning_384_wellplate_112ul_flat + position: + x: 109.305 + y: 56.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_F23 + name: corning_384_wellplate_112ul_flat_F23 + parent: corning_384_wellplate_112ul_flat + position: + x: 109.305 + y: 52.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_G23 + name: corning_384_wellplate_112ul_flat_G23 + parent: corning_384_wellplate_112ul_flat + position: + x: 109.305 + y: 47.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_H23 + name: corning_384_wellplate_112ul_flat_H23 + parent: corning_384_wellplate_112ul_flat + position: + x: 109.305 + y: 43.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_I23 + name: corning_384_wellplate_112ul_flat_I23 + parent: corning_384_wellplate_112ul_flat + position: + x: 109.305 + y: 38.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_J23 + name: corning_384_wellplate_112ul_flat_J23 + parent: corning_384_wellplate_112ul_flat + position: + x: 109.305 + y: 34.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_K23 + name: corning_384_wellplate_112ul_flat_K23 + parent: corning_384_wellplate_112ul_flat + position: + x: 109.305 + y: 29.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_L23 + name: corning_384_wellplate_112ul_flat_L23 + parent: corning_384_wellplate_112ul_flat + position: + x: 109.305 + y: 25.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_M23 + name: corning_384_wellplate_112ul_flat_M23 + parent: corning_384_wellplate_112ul_flat + position: + x: 109.305 + y: 20.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_N23 + name: corning_384_wellplate_112ul_flat_N23 + parent: corning_384_wellplate_112ul_flat + position: + x: 109.305 + y: 16.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_O23 + name: corning_384_wellplate_112ul_flat_O23 + parent: corning_384_wellplate_112ul_flat + position: + x: 109.305 + y: 11.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_P23 + name: corning_384_wellplate_112ul_flat_P23 + parent: corning_384_wellplate_112ul_flat + position: + x: 109.305 + y: 7.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_A24 + name: corning_384_wellplate_112ul_flat_A24 + parent: corning_384_wellplate_112ul_flat + position: + x: 113.805 + y: 74.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_B24 + name: corning_384_wellplate_112ul_flat_B24 + parent: corning_384_wellplate_112ul_flat + position: + x: 113.805 + y: 70.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_C24 + name: corning_384_wellplate_112ul_flat_C24 + parent: corning_384_wellplate_112ul_flat + position: + x: 113.805 + y: 65.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_D24 + name: corning_384_wellplate_112ul_flat_D24 + parent: corning_384_wellplate_112ul_flat + position: + x: 113.805 + y: 61.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_E24 + name: corning_384_wellplate_112ul_flat_E24 + parent: corning_384_wellplate_112ul_flat + position: + x: 113.805 + y: 56.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_F24 + name: corning_384_wellplate_112ul_flat_F24 + parent: corning_384_wellplate_112ul_flat + position: + x: 113.805 + y: 52.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_G24 + name: corning_384_wellplate_112ul_flat_G24 + parent: corning_384_wellplate_112ul_flat + position: + x: 113.805 + y: 47.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_H24 + name: corning_384_wellplate_112ul_flat_H24 + parent: corning_384_wellplate_112ul_flat + position: + x: 113.805 + y: 43.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_I24 + name: corning_384_wellplate_112ul_flat_I24 + parent: corning_384_wellplate_112ul_flat + position: + x: 113.805 + y: 38.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_J24 + name: corning_384_wellplate_112ul_flat_J24 + parent: corning_384_wellplate_112ul_flat + position: + x: 113.805 + y: 34.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_K24 + name: corning_384_wellplate_112ul_flat_K24 + parent: corning_384_wellplate_112ul_flat + position: + x: 113.805 + y: 29.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_L24 + name: corning_384_wellplate_112ul_flat_L24 + parent: corning_384_wellplate_112ul_flat + position: + x: 113.805 + y: 25.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_M24 + name: corning_384_wellplate_112ul_flat_M24 + parent: corning_384_wellplate_112ul_flat + position: + x: 113.805 + y: 20.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_N24 + name: corning_384_wellplate_112ul_flat_N24 + parent: corning_384_wellplate_112ul_flat + position: + x: 113.805 + y: 16.175 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_O24 + name: corning_384_wellplate_112ul_flat_O24 + parent: corning_384_wellplate_112ul_flat + position: + x: 113.805 + y: 11.675 + z: 2.79 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 112 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.63 + size_y: 3.63 + size_z: 11.43 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_384_wellplate_112ul_flat_P24 + name: corning_384_wellplate_112ul_flat_P24 + parent: corning_384_wellplate_112ul_flat + position: + x: 113.805 + y: 7.175 + z: 2.79 + sample_id: null + type: well + description: Corning 384 wellplate 112ul flat + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/plates.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +corning_48_wellplate_1point6ml_flat: + category: + - plates + class: + module: pylabrobot.resources.opentrons.plates:corning_48_wellplate_1point6ml_flat + type: pylabrobot + config_info: + - children: + - corning_48_wellplate_1point6ml_flat_A1 + - corning_48_wellplate_1point6ml_flat_B1 + - corning_48_wellplate_1point6ml_flat_C1 + - corning_48_wellplate_1point6ml_flat_D1 + - corning_48_wellplate_1point6ml_flat_E1 + - corning_48_wellplate_1point6ml_flat_F1 + - corning_48_wellplate_1point6ml_flat_A2 + - corning_48_wellplate_1point6ml_flat_B2 + - corning_48_wellplate_1point6ml_flat_C2 + - corning_48_wellplate_1point6ml_flat_D2 + - corning_48_wellplate_1point6ml_flat_E2 + - corning_48_wellplate_1point6ml_flat_F2 + - corning_48_wellplate_1point6ml_flat_A3 + - corning_48_wellplate_1point6ml_flat_B3 + - corning_48_wellplate_1point6ml_flat_C3 + - corning_48_wellplate_1point6ml_flat_D3 + - corning_48_wellplate_1point6ml_flat_E3 + - corning_48_wellplate_1point6ml_flat_F3 + - corning_48_wellplate_1point6ml_flat_A4 + - corning_48_wellplate_1point6ml_flat_B4 + - corning_48_wellplate_1point6ml_flat_C4 + - corning_48_wellplate_1point6ml_flat_D4 + - corning_48_wellplate_1point6ml_flat_E4 + - corning_48_wellplate_1point6ml_flat_F4 + - corning_48_wellplate_1point6ml_flat_A5 + - corning_48_wellplate_1point6ml_flat_B5 + - corning_48_wellplate_1point6ml_flat_C5 + - corning_48_wellplate_1point6ml_flat_D5 + - corning_48_wellplate_1point6ml_flat_E5 + - corning_48_wellplate_1point6ml_flat_F5 + - corning_48_wellplate_1point6ml_flat_A6 + - corning_48_wellplate_1point6ml_flat_B6 + - corning_48_wellplate_1point6ml_flat_C6 + - corning_48_wellplate_1point6ml_flat_D6 + - corning_48_wellplate_1point6ml_flat_E6 + - corning_48_wellplate_1point6ml_flat_F6 + - corning_48_wellplate_1point6ml_flat_A7 + - corning_48_wellplate_1point6ml_flat_B7 + - corning_48_wellplate_1point6ml_flat_C7 + - corning_48_wellplate_1point6ml_flat_D7 + - corning_48_wellplate_1point6ml_flat_E7 + - corning_48_wellplate_1point6ml_flat_F7 + - corning_48_wellplate_1point6ml_flat_A8 + - corning_48_wellplate_1point6ml_flat_B8 + - corning_48_wellplate_1point6ml_flat_C8 + - corning_48_wellplate_1point6ml_flat_D8 + - corning_48_wellplate_1point6ml_flat_E8 + - corning_48_wellplate_1point6ml_flat_F8 + class: '' + config: + barcode: null + category: plate + model: Corning 48 Well Plate 1.6 mL Flat + ordering: + A1: corning_48_wellplate_1point6ml_flat_A1 + B1: corning_48_wellplate_1point6ml_flat_B1 + C1: corning_48_wellplate_1point6ml_flat_C1 + D1: corning_48_wellplate_1point6ml_flat_D1 + E1: corning_48_wellplate_1point6ml_flat_E1 + F1: corning_48_wellplate_1point6ml_flat_F1 + A2: corning_48_wellplate_1point6ml_flat_A2 + B2: corning_48_wellplate_1point6ml_flat_B2 + C2: corning_48_wellplate_1point6ml_flat_C2 + D2: corning_48_wellplate_1point6ml_flat_D2 + E2: corning_48_wellplate_1point6ml_flat_E2 + F2: corning_48_wellplate_1point6ml_flat_F2 + A3: corning_48_wellplate_1point6ml_flat_A3 + B3: corning_48_wellplate_1point6ml_flat_B3 + C3: corning_48_wellplate_1point6ml_flat_C3 + D3: corning_48_wellplate_1point6ml_flat_D3 + E3: corning_48_wellplate_1point6ml_flat_E3 + F3: corning_48_wellplate_1point6ml_flat_F3 + A4: corning_48_wellplate_1point6ml_flat_A4 + B4: corning_48_wellplate_1point6ml_flat_B4 + C4: corning_48_wellplate_1point6ml_flat_C4 + D4: corning_48_wellplate_1point6ml_flat_D4 + E4: corning_48_wellplate_1point6ml_flat_E4 + F4: corning_48_wellplate_1point6ml_flat_F4 + A5: corning_48_wellplate_1point6ml_flat_A5 + B5: corning_48_wellplate_1point6ml_flat_B5 + C5: corning_48_wellplate_1point6ml_flat_C5 + D5: corning_48_wellplate_1point6ml_flat_D5 + E5: corning_48_wellplate_1point6ml_flat_E5 + F5: corning_48_wellplate_1point6ml_flat_F5 + A6: corning_48_wellplate_1point6ml_flat_A6 + B6: corning_48_wellplate_1point6ml_flat_B6 + C6: corning_48_wellplate_1point6ml_flat_C6 + D6: corning_48_wellplate_1point6ml_flat_D6 + E6: corning_48_wellplate_1point6ml_flat_E6 + F6: corning_48_wellplate_1point6ml_flat_F6 + A7: corning_48_wellplate_1point6ml_flat_A7 + B7: corning_48_wellplate_1point6ml_flat_B7 + C7: corning_48_wellplate_1point6ml_flat_C7 + D7: corning_48_wellplate_1point6ml_flat_D7 + E7: corning_48_wellplate_1point6ml_flat_E7 + F7: corning_48_wellplate_1point6ml_flat_F7 + A8: corning_48_wellplate_1point6ml_flat_A8 + B8: corning_48_wellplate_1point6ml_flat_B8 + C8: corning_48_wellplate_1point6ml_flat_C8 + D8: corning_48_wellplate_1point6ml_flat_D8 + E8: corning_48_wellplate_1point6ml_flat_E8 + F8: corning_48_wellplate_1point6ml_flat_F8 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.89 + size_y: 85.6 + size_z: 20.02 + type: Plate + data: {} + id: corning_48_wellplate_1point6ml_flat + name: corning_48_wellplate_1point6ml_flat + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: plate + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_A1 + name: corning_48_wellplate_1point6ml_flat_A1 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 14.073 + y: 71.393 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_B1 + name: corning_48_wellplate_1point6ml_flat_B1 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 14.073 + y: 58.313 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_C1 + name: corning_48_wellplate_1point6ml_flat_C1 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 14.073 + y: 45.233 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_D1 + name: corning_48_wellplate_1point6ml_flat_D1 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 14.073 + y: 32.153 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_E1 + name: corning_48_wellplate_1point6ml_flat_E1 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 14.073 + y: 19.073 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_F1 + name: corning_48_wellplate_1point6ml_flat_F1 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 14.073 + y: 5.993 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_A2 + name: corning_48_wellplate_1point6ml_flat_A2 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 27.153 + y: 71.393 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_B2 + name: corning_48_wellplate_1point6ml_flat_B2 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 27.153 + y: 58.313 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_C2 + name: corning_48_wellplate_1point6ml_flat_C2 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 27.153 + y: 45.233 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_D2 + name: corning_48_wellplate_1point6ml_flat_D2 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 27.153 + y: 32.153 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_E2 + name: corning_48_wellplate_1point6ml_flat_E2 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 27.153 + y: 19.073 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_F2 + name: corning_48_wellplate_1point6ml_flat_F2 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 27.153 + y: 5.993 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_A3 + name: corning_48_wellplate_1point6ml_flat_A3 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 40.233 + y: 71.393 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_B3 + name: corning_48_wellplate_1point6ml_flat_B3 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 40.233 + y: 58.313 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_C3 + name: corning_48_wellplate_1point6ml_flat_C3 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 40.233 + y: 45.233 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_D3 + name: corning_48_wellplate_1point6ml_flat_D3 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 40.233 + y: 32.153 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_E3 + name: corning_48_wellplate_1point6ml_flat_E3 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 40.233 + y: 19.073 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_F3 + name: corning_48_wellplate_1point6ml_flat_F3 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 40.233 + y: 5.993 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_A4 + name: corning_48_wellplate_1point6ml_flat_A4 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 53.313 + y: 71.393 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_B4 + name: corning_48_wellplate_1point6ml_flat_B4 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 53.313 + y: 58.313 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_C4 + name: corning_48_wellplate_1point6ml_flat_C4 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 53.313 + y: 45.233 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_D4 + name: corning_48_wellplate_1point6ml_flat_D4 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 53.313 + y: 32.153 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_E4 + name: corning_48_wellplate_1point6ml_flat_E4 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 53.313 + y: 19.073 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_F4 + name: corning_48_wellplate_1point6ml_flat_F4 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 53.313 + y: 5.993 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_A5 + name: corning_48_wellplate_1point6ml_flat_A5 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 66.393 + y: 71.393 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_B5 + name: corning_48_wellplate_1point6ml_flat_B5 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 66.393 + y: 58.313 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_C5 + name: corning_48_wellplate_1point6ml_flat_C5 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 66.393 + y: 45.233 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_D5 + name: corning_48_wellplate_1point6ml_flat_D5 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 66.393 + y: 32.153 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_E5 + name: corning_48_wellplate_1point6ml_flat_E5 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 66.393 + y: 19.073 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_F5 + name: corning_48_wellplate_1point6ml_flat_F5 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 66.393 + y: 5.993 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_A6 + name: corning_48_wellplate_1point6ml_flat_A6 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 79.473 + y: 71.393 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_B6 + name: corning_48_wellplate_1point6ml_flat_B6 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 79.473 + y: 58.313 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_C6 + name: corning_48_wellplate_1point6ml_flat_C6 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 79.473 + y: 45.233 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_D6 + name: corning_48_wellplate_1point6ml_flat_D6 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 79.473 + y: 32.153 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_E6 + name: corning_48_wellplate_1point6ml_flat_E6 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 79.473 + y: 19.073 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_F6 + name: corning_48_wellplate_1point6ml_flat_F6 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 79.473 + y: 5.993 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_A7 + name: corning_48_wellplate_1point6ml_flat_A7 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 92.553 + y: 71.393 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_B7 + name: corning_48_wellplate_1point6ml_flat_B7 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 92.553 + y: 58.313 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_C7 + name: corning_48_wellplate_1point6ml_flat_C7 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 92.553 + y: 45.233 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_D7 + name: corning_48_wellplate_1point6ml_flat_D7 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 92.553 + y: 32.153 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_E7 + name: corning_48_wellplate_1point6ml_flat_E7 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 92.553 + y: 19.073 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_F7 + name: corning_48_wellplate_1point6ml_flat_F7 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 92.553 + y: 5.993 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_A8 + name: corning_48_wellplate_1point6ml_flat_A8 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 105.633 + y: 71.393 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_B8 + name: corning_48_wellplate_1point6ml_flat_B8 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 105.633 + y: 58.313 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_C8 + name: corning_48_wellplate_1point6ml_flat_C8 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 105.633 + y: 45.233 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_D8 + name: corning_48_wellplate_1point6ml_flat_D8 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 105.633 + y: 32.153 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_E8 + name: corning_48_wellplate_1point6ml_flat_E8 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 105.633 + y: 19.073 + z: 2.62 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1600 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.174 + size_y: 8.174 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_48_wellplate_1point6ml_flat_F8 + name: corning_48_wellplate_1point6ml_flat_F8 + parent: corning_48_wellplate_1point6ml_flat + position: + x: 105.633 + y: 5.993 + z: 2.62 + sample_id: null + type: well + description: Corning 48 wellplate 1.6ml flat + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/plates.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +corning_6_wellplate_16point8ml_flat: + category: + - plates + class: + module: pylabrobot.resources.opentrons.plates:corning_6_wellplate_16point8ml_flat + type: pylabrobot + config_info: + - children: + - corning_6_wellplate_16point8ml_flat_A1 + - corning_6_wellplate_16point8ml_flat_B1 + - corning_6_wellplate_16point8ml_flat_A2 + - corning_6_wellplate_16point8ml_flat_B2 + - corning_6_wellplate_16point8ml_flat_A3 + - corning_6_wellplate_16point8ml_flat_B3 + class: '' + config: + barcode: null + category: plate + model: Corning 6 Well Plate 16.8 mL Flat + ordering: + A1: corning_6_wellplate_16point8ml_flat_A1 + B1: corning_6_wellplate_16point8ml_flat_B1 + A2: corning_6_wellplate_16point8ml_flat_A2 + B2: corning_6_wellplate_16point8ml_flat_B2 + A3: corning_6_wellplate_16point8ml_flat_A3 + B3: corning_6_wellplate_16point8ml_flat_B3 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.47 + size_z: 20.27 + type: Plate + data: {} + id: corning_6_wellplate_16point8ml_flat + name: corning_6_wellplate_16point8ml_flat + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: plate + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 16800 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 25.053 + size_y: 25.053 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_6_wellplate_16point8ml_flat_A1 + name: corning_6_wellplate_16point8ml_flat_A1 + parent: corning_6_wellplate_16point8ml_flat + position: + x: 12.2335 + y: 49.7535 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 16800 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 25.053 + size_y: 25.053 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_6_wellplate_16point8ml_flat_B1 + name: corning_6_wellplate_16point8ml_flat_B1 + parent: corning_6_wellplate_16point8ml_flat + position: + x: 12.2335 + y: 10.6335 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 16800 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 25.053 + size_y: 25.053 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_6_wellplate_16point8ml_flat_A2 + name: corning_6_wellplate_16point8ml_flat_A2 + parent: corning_6_wellplate_16point8ml_flat + position: + x: 51.3535 + y: 49.7535 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 16800 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 25.053 + size_y: 25.053 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_6_wellplate_16point8ml_flat_B2 + name: corning_6_wellplate_16point8ml_flat_B2 + parent: corning_6_wellplate_16point8ml_flat + position: + x: 51.3535 + y: 10.6335 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 16800 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 25.053 + size_y: 25.053 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_6_wellplate_16point8ml_flat_A3 + name: corning_6_wellplate_16point8ml_flat_A3 + parent: corning_6_wellplate_16point8ml_flat + position: + x: 90.4735 + y: 49.7535 + z: 2.87 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 16800 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 25.053 + size_y: 25.053 + size_z: 17.4 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_6_wellplate_16point8ml_flat_B3 + name: corning_6_wellplate_16point8ml_flat_B3 + parent: corning_6_wellplate_16point8ml_flat + position: + x: 90.4735 + y: 10.6335 + z: 2.87 + sample_id: null + type: well + description: Corning 6 wellplate 16.8ml flat + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/plates.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +corning_96_wellplate_360ul_flat: + category: + - plates + class: + module: pylabrobot.resources.opentrons.plates:corning_96_wellplate_360ul_flat + type: pylabrobot + config_info: + - children: + - corning_96_wellplate_360ul_flat_A1 + - corning_96_wellplate_360ul_flat_B1 + - corning_96_wellplate_360ul_flat_C1 + - corning_96_wellplate_360ul_flat_D1 + - corning_96_wellplate_360ul_flat_E1 + - corning_96_wellplate_360ul_flat_F1 + - corning_96_wellplate_360ul_flat_G1 + - corning_96_wellplate_360ul_flat_H1 + - corning_96_wellplate_360ul_flat_A2 + - corning_96_wellplate_360ul_flat_B2 + - corning_96_wellplate_360ul_flat_C2 + - corning_96_wellplate_360ul_flat_D2 + - corning_96_wellplate_360ul_flat_E2 + - corning_96_wellplate_360ul_flat_F2 + - corning_96_wellplate_360ul_flat_G2 + - corning_96_wellplate_360ul_flat_H2 + - corning_96_wellplate_360ul_flat_A3 + - corning_96_wellplate_360ul_flat_B3 + - corning_96_wellplate_360ul_flat_C3 + - corning_96_wellplate_360ul_flat_D3 + - corning_96_wellplate_360ul_flat_E3 + - corning_96_wellplate_360ul_flat_F3 + - corning_96_wellplate_360ul_flat_G3 + - corning_96_wellplate_360ul_flat_H3 + - corning_96_wellplate_360ul_flat_A4 + - corning_96_wellplate_360ul_flat_B4 + - corning_96_wellplate_360ul_flat_C4 + - corning_96_wellplate_360ul_flat_D4 + - corning_96_wellplate_360ul_flat_E4 + - corning_96_wellplate_360ul_flat_F4 + - corning_96_wellplate_360ul_flat_G4 + - corning_96_wellplate_360ul_flat_H4 + - corning_96_wellplate_360ul_flat_A5 + - corning_96_wellplate_360ul_flat_B5 + - corning_96_wellplate_360ul_flat_C5 + - corning_96_wellplate_360ul_flat_D5 + - corning_96_wellplate_360ul_flat_E5 + - corning_96_wellplate_360ul_flat_F5 + - corning_96_wellplate_360ul_flat_G5 + - corning_96_wellplate_360ul_flat_H5 + - corning_96_wellplate_360ul_flat_A6 + - corning_96_wellplate_360ul_flat_B6 + - corning_96_wellplate_360ul_flat_C6 + - corning_96_wellplate_360ul_flat_D6 + - corning_96_wellplate_360ul_flat_E6 + - corning_96_wellplate_360ul_flat_F6 + - corning_96_wellplate_360ul_flat_G6 + - corning_96_wellplate_360ul_flat_H6 + - corning_96_wellplate_360ul_flat_A7 + - corning_96_wellplate_360ul_flat_B7 + - corning_96_wellplate_360ul_flat_C7 + - corning_96_wellplate_360ul_flat_D7 + - corning_96_wellplate_360ul_flat_E7 + - corning_96_wellplate_360ul_flat_F7 + - corning_96_wellplate_360ul_flat_G7 + - corning_96_wellplate_360ul_flat_H7 + - corning_96_wellplate_360ul_flat_A8 + - corning_96_wellplate_360ul_flat_B8 + - corning_96_wellplate_360ul_flat_C8 + - corning_96_wellplate_360ul_flat_D8 + - corning_96_wellplate_360ul_flat_E8 + - corning_96_wellplate_360ul_flat_F8 + - corning_96_wellplate_360ul_flat_G8 + - corning_96_wellplate_360ul_flat_H8 + - corning_96_wellplate_360ul_flat_A9 + - corning_96_wellplate_360ul_flat_B9 + - corning_96_wellplate_360ul_flat_C9 + - corning_96_wellplate_360ul_flat_D9 + - corning_96_wellplate_360ul_flat_E9 + - corning_96_wellplate_360ul_flat_F9 + - corning_96_wellplate_360ul_flat_G9 + - corning_96_wellplate_360ul_flat_H9 + - corning_96_wellplate_360ul_flat_A10 + - corning_96_wellplate_360ul_flat_B10 + - corning_96_wellplate_360ul_flat_C10 + - corning_96_wellplate_360ul_flat_D10 + - corning_96_wellplate_360ul_flat_E10 + - corning_96_wellplate_360ul_flat_F10 + - corning_96_wellplate_360ul_flat_G10 + - corning_96_wellplate_360ul_flat_H10 + - corning_96_wellplate_360ul_flat_A11 + - corning_96_wellplate_360ul_flat_B11 + - corning_96_wellplate_360ul_flat_C11 + - corning_96_wellplate_360ul_flat_D11 + - corning_96_wellplate_360ul_flat_E11 + - corning_96_wellplate_360ul_flat_F11 + - corning_96_wellplate_360ul_flat_G11 + - corning_96_wellplate_360ul_flat_H11 + - corning_96_wellplate_360ul_flat_A12 + - corning_96_wellplate_360ul_flat_B12 + - corning_96_wellplate_360ul_flat_C12 + - corning_96_wellplate_360ul_flat_D12 + - corning_96_wellplate_360ul_flat_E12 + - corning_96_wellplate_360ul_flat_F12 + - corning_96_wellplate_360ul_flat_G12 + - corning_96_wellplate_360ul_flat_H12 + class: '' + config: + barcode: null + category: plate + model: Corning 96 Well Plate 360 µL Flat + ordering: + A1: corning_96_wellplate_360ul_flat_A1 + B1: corning_96_wellplate_360ul_flat_B1 + C1: corning_96_wellplate_360ul_flat_C1 + D1: corning_96_wellplate_360ul_flat_D1 + E1: corning_96_wellplate_360ul_flat_E1 + F1: corning_96_wellplate_360ul_flat_F1 + G1: corning_96_wellplate_360ul_flat_G1 + H1: corning_96_wellplate_360ul_flat_H1 + A2: corning_96_wellplate_360ul_flat_A2 + B2: corning_96_wellplate_360ul_flat_B2 + C2: corning_96_wellplate_360ul_flat_C2 + D2: corning_96_wellplate_360ul_flat_D2 + E2: corning_96_wellplate_360ul_flat_E2 + F2: corning_96_wellplate_360ul_flat_F2 + G2: corning_96_wellplate_360ul_flat_G2 + H2: corning_96_wellplate_360ul_flat_H2 + A3: corning_96_wellplate_360ul_flat_A3 + B3: corning_96_wellplate_360ul_flat_B3 + C3: corning_96_wellplate_360ul_flat_C3 + D3: corning_96_wellplate_360ul_flat_D3 + E3: corning_96_wellplate_360ul_flat_E3 + F3: corning_96_wellplate_360ul_flat_F3 + G3: corning_96_wellplate_360ul_flat_G3 + H3: corning_96_wellplate_360ul_flat_H3 + A4: corning_96_wellplate_360ul_flat_A4 + B4: corning_96_wellplate_360ul_flat_B4 + C4: corning_96_wellplate_360ul_flat_C4 + D4: corning_96_wellplate_360ul_flat_D4 + E4: corning_96_wellplate_360ul_flat_E4 + F4: corning_96_wellplate_360ul_flat_F4 + G4: corning_96_wellplate_360ul_flat_G4 + H4: corning_96_wellplate_360ul_flat_H4 + A5: corning_96_wellplate_360ul_flat_A5 + B5: corning_96_wellplate_360ul_flat_B5 + C5: corning_96_wellplate_360ul_flat_C5 + D5: corning_96_wellplate_360ul_flat_D5 + E5: corning_96_wellplate_360ul_flat_E5 + F5: corning_96_wellplate_360ul_flat_F5 + G5: corning_96_wellplate_360ul_flat_G5 + H5: corning_96_wellplate_360ul_flat_H5 + A6: corning_96_wellplate_360ul_flat_A6 + B6: corning_96_wellplate_360ul_flat_B6 + C6: corning_96_wellplate_360ul_flat_C6 + D6: corning_96_wellplate_360ul_flat_D6 + E6: corning_96_wellplate_360ul_flat_E6 + F6: corning_96_wellplate_360ul_flat_F6 + G6: corning_96_wellplate_360ul_flat_G6 + H6: corning_96_wellplate_360ul_flat_H6 + A7: corning_96_wellplate_360ul_flat_A7 + B7: corning_96_wellplate_360ul_flat_B7 + C7: corning_96_wellplate_360ul_flat_C7 + D7: corning_96_wellplate_360ul_flat_D7 + E7: corning_96_wellplate_360ul_flat_E7 + F7: corning_96_wellplate_360ul_flat_F7 + G7: corning_96_wellplate_360ul_flat_G7 + H7: corning_96_wellplate_360ul_flat_H7 + A8: corning_96_wellplate_360ul_flat_A8 + B8: corning_96_wellplate_360ul_flat_B8 + C8: corning_96_wellplate_360ul_flat_C8 + D8: corning_96_wellplate_360ul_flat_D8 + E8: corning_96_wellplate_360ul_flat_E8 + F8: corning_96_wellplate_360ul_flat_F8 + G8: corning_96_wellplate_360ul_flat_G8 + H8: corning_96_wellplate_360ul_flat_H8 + A9: corning_96_wellplate_360ul_flat_A9 + B9: corning_96_wellplate_360ul_flat_B9 + C9: corning_96_wellplate_360ul_flat_C9 + D9: corning_96_wellplate_360ul_flat_D9 + E9: corning_96_wellplate_360ul_flat_E9 + F9: corning_96_wellplate_360ul_flat_F9 + G9: corning_96_wellplate_360ul_flat_G9 + H9: corning_96_wellplate_360ul_flat_H9 + A10: corning_96_wellplate_360ul_flat_A10 + B10: corning_96_wellplate_360ul_flat_B10 + C10: corning_96_wellplate_360ul_flat_C10 + D10: corning_96_wellplate_360ul_flat_D10 + E10: corning_96_wellplate_360ul_flat_E10 + F10: corning_96_wellplate_360ul_flat_F10 + G10: corning_96_wellplate_360ul_flat_G10 + H10: corning_96_wellplate_360ul_flat_H10 + A11: corning_96_wellplate_360ul_flat_A11 + B11: corning_96_wellplate_360ul_flat_B11 + C11: corning_96_wellplate_360ul_flat_C11 + D11: corning_96_wellplate_360ul_flat_D11 + E11: corning_96_wellplate_360ul_flat_E11 + F11: corning_96_wellplate_360ul_flat_F11 + G11: corning_96_wellplate_360ul_flat_G11 + H11: corning_96_wellplate_360ul_flat_H11 + A12: corning_96_wellplate_360ul_flat_A12 + B12: corning_96_wellplate_360ul_flat_B12 + C12: corning_96_wellplate_360ul_flat_C12 + D12: corning_96_wellplate_360ul_flat_D12 + E12: corning_96_wellplate_360ul_flat_E12 + F12: corning_96_wellplate_360ul_flat_F12 + G12: corning_96_wellplate_360ul_flat_G12 + H12: corning_96_wellplate_360ul_flat_H12 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.47 + size_z: 14.22 + type: Plate + data: {} + id: corning_96_wellplate_360ul_flat + name: corning_96_wellplate_360ul_flat + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: plate + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_A1 + name: corning_96_wellplate_360ul_flat_A1 + parent: corning_96_wellplate_360ul_flat + position: + x: 11.9545 + y: 71.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_B1 + name: corning_96_wellplate_360ul_flat_B1 + parent: corning_96_wellplate_360ul_flat + position: + x: 11.9545 + y: 62.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_C1 + name: corning_96_wellplate_360ul_flat_C1 + parent: corning_96_wellplate_360ul_flat + position: + x: 11.9545 + y: 53.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_D1 + name: corning_96_wellplate_360ul_flat_D1 + parent: corning_96_wellplate_360ul_flat + position: + x: 11.9545 + y: 44.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_E1 + name: corning_96_wellplate_360ul_flat_E1 + parent: corning_96_wellplate_360ul_flat + position: + x: 11.9545 + y: 35.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_F1 + name: corning_96_wellplate_360ul_flat_F1 + parent: corning_96_wellplate_360ul_flat + position: + x: 11.9545 + y: 26.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_G1 + name: corning_96_wellplate_360ul_flat_G1 + parent: corning_96_wellplate_360ul_flat + position: + x: 11.9545 + y: 17.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_H1 + name: corning_96_wellplate_360ul_flat_H1 + parent: corning_96_wellplate_360ul_flat + position: + x: 11.9545 + y: 8.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_A2 + name: corning_96_wellplate_360ul_flat_A2 + parent: corning_96_wellplate_360ul_flat + position: + x: 20.9545 + y: 71.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_B2 + name: corning_96_wellplate_360ul_flat_B2 + parent: corning_96_wellplate_360ul_flat + position: + x: 20.9545 + y: 62.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_C2 + name: corning_96_wellplate_360ul_flat_C2 + parent: corning_96_wellplate_360ul_flat + position: + x: 20.9545 + y: 53.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_D2 + name: corning_96_wellplate_360ul_flat_D2 + parent: corning_96_wellplate_360ul_flat + position: + x: 20.9545 + y: 44.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_E2 + name: corning_96_wellplate_360ul_flat_E2 + parent: corning_96_wellplate_360ul_flat + position: + x: 20.9545 + y: 35.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_F2 + name: corning_96_wellplate_360ul_flat_F2 + parent: corning_96_wellplate_360ul_flat + position: + x: 20.9545 + y: 26.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_G2 + name: corning_96_wellplate_360ul_flat_G2 + parent: corning_96_wellplate_360ul_flat + position: + x: 20.9545 + y: 17.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_H2 + name: corning_96_wellplate_360ul_flat_H2 + parent: corning_96_wellplate_360ul_flat + position: + x: 20.9545 + y: 8.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_A3 + name: corning_96_wellplate_360ul_flat_A3 + parent: corning_96_wellplate_360ul_flat + position: + x: 29.9545 + y: 71.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_B3 + name: corning_96_wellplate_360ul_flat_B3 + parent: corning_96_wellplate_360ul_flat + position: + x: 29.9545 + y: 62.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_C3 + name: corning_96_wellplate_360ul_flat_C3 + parent: corning_96_wellplate_360ul_flat + position: + x: 29.9545 + y: 53.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_D3 + name: corning_96_wellplate_360ul_flat_D3 + parent: corning_96_wellplate_360ul_flat + position: + x: 29.9545 + y: 44.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_E3 + name: corning_96_wellplate_360ul_flat_E3 + parent: corning_96_wellplate_360ul_flat + position: + x: 29.9545 + y: 35.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_F3 + name: corning_96_wellplate_360ul_flat_F3 + parent: corning_96_wellplate_360ul_flat + position: + x: 29.9545 + y: 26.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_G3 + name: corning_96_wellplate_360ul_flat_G3 + parent: corning_96_wellplate_360ul_flat + position: + x: 29.9545 + y: 17.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_H3 + name: corning_96_wellplate_360ul_flat_H3 + parent: corning_96_wellplate_360ul_flat + position: + x: 29.9545 + y: 8.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_A4 + name: corning_96_wellplate_360ul_flat_A4 + parent: corning_96_wellplate_360ul_flat + position: + x: 38.9545 + y: 71.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_B4 + name: corning_96_wellplate_360ul_flat_B4 + parent: corning_96_wellplate_360ul_flat + position: + x: 38.9545 + y: 62.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_C4 + name: corning_96_wellplate_360ul_flat_C4 + parent: corning_96_wellplate_360ul_flat + position: + x: 38.9545 + y: 53.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_D4 + name: corning_96_wellplate_360ul_flat_D4 + parent: corning_96_wellplate_360ul_flat + position: + x: 38.9545 + y: 44.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_E4 + name: corning_96_wellplate_360ul_flat_E4 + parent: corning_96_wellplate_360ul_flat + position: + x: 38.9545 + y: 35.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_F4 + name: corning_96_wellplate_360ul_flat_F4 + parent: corning_96_wellplate_360ul_flat + position: + x: 38.9545 + y: 26.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_G4 + name: corning_96_wellplate_360ul_flat_G4 + parent: corning_96_wellplate_360ul_flat + position: + x: 38.9545 + y: 17.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_H4 + name: corning_96_wellplate_360ul_flat_H4 + parent: corning_96_wellplate_360ul_flat + position: + x: 38.9545 + y: 8.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_A5 + name: corning_96_wellplate_360ul_flat_A5 + parent: corning_96_wellplate_360ul_flat + position: + x: 47.9545 + y: 71.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_B5 + name: corning_96_wellplate_360ul_flat_B5 + parent: corning_96_wellplate_360ul_flat + position: + x: 47.9545 + y: 62.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_C5 + name: corning_96_wellplate_360ul_flat_C5 + parent: corning_96_wellplate_360ul_flat + position: + x: 47.9545 + y: 53.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_D5 + name: corning_96_wellplate_360ul_flat_D5 + parent: corning_96_wellplate_360ul_flat + position: + x: 47.9545 + y: 44.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_E5 + name: corning_96_wellplate_360ul_flat_E5 + parent: corning_96_wellplate_360ul_flat + position: + x: 47.9545 + y: 35.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_F5 + name: corning_96_wellplate_360ul_flat_F5 + parent: corning_96_wellplate_360ul_flat + position: + x: 47.9545 + y: 26.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_G5 + name: corning_96_wellplate_360ul_flat_G5 + parent: corning_96_wellplate_360ul_flat + position: + x: 47.9545 + y: 17.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_H5 + name: corning_96_wellplate_360ul_flat_H5 + parent: corning_96_wellplate_360ul_flat + position: + x: 47.9545 + y: 8.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_A6 + name: corning_96_wellplate_360ul_flat_A6 + parent: corning_96_wellplate_360ul_flat + position: + x: 56.9545 + y: 71.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_B6 + name: corning_96_wellplate_360ul_flat_B6 + parent: corning_96_wellplate_360ul_flat + position: + x: 56.9545 + y: 62.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_C6 + name: corning_96_wellplate_360ul_flat_C6 + parent: corning_96_wellplate_360ul_flat + position: + x: 56.9545 + y: 53.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_D6 + name: corning_96_wellplate_360ul_flat_D6 + parent: corning_96_wellplate_360ul_flat + position: + x: 56.9545 + y: 44.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_E6 + name: corning_96_wellplate_360ul_flat_E6 + parent: corning_96_wellplate_360ul_flat + position: + x: 56.9545 + y: 35.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_F6 + name: corning_96_wellplate_360ul_flat_F6 + parent: corning_96_wellplate_360ul_flat + position: + x: 56.9545 + y: 26.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_G6 + name: corning_96_wellplate_360ul_flat_G6 + parent: corning_96_wellplate_360ul_flat + position: + x: 56.9545 + y: 17.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_H6 + name: corning_96_wellplate_360ul_flat_H6 + parent: corning_96_wellplate_360ul_flat + position: + x: 56.9545 + y: 8.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_A7 + name: corning_96_wellplate_360ul_flat_A7 + parent: corning_96_wellplate_360ul_flat + position: + x: 65.9545 + y: 71.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_B7 + name: corning_96_wellplate_360ul_flat_B7 + parent: corning_96_wellplate_360ul_flat + position: + x: 65.9545 + y: 62.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_C7 + name: corning_96_wellplate_360ul_flat_C7 + parent: corning_96_wellplate_360ul_flat + position: + x: 65.9545 + y: 53.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_D7 + name: corning_96_wellplate_360ul_flat_D7 + parent: corning_96_wellplate_360ul_flat + position: + x: 65.9545 + y: 44.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_E7 + name: corning_96_wellplate_360ul_flat_E7 + parent: corning_96_wellplate_360ul_flat + position: + x: 65.9545 + y: 35.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_F7 + name: corning_96_wellplate_360ul_flat_F7 + parent: corning_96_wellplate_360ul_flat + position: + x: 65.9545 + y: 26.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_G7 + name: corning_96_wellplate_360ul_flat_G7 + parent: corning_96_wellplate_360ul_flat + position: + x: 65.9545 + y: 17.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_H7 + name: corning_96_wellplate_360ul_flat_H7 + parent: corning_96_wellplate_360ul_flat + position: + x: 65.9545 + y: 8.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_A8 + name: corning_96_wellplate_360ul_flat_A8 + parent: corning_96_wellplate_360ul_flat + position: + x: 74.9545 + y: 71.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_B8 + name: corning_96_wellplate_360ul_flat_B8 + parent: corning_96_wellplate_360ul_flat + position: + x: 74.9545 + y: 62.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_C8 + name: corning_96_wellplate_360ul_flat_C8 + parent: corning_96_wellplate_360ul_flat + position: + x: 74.9545 + y: 53.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_D8 + name: corning_96_wellplate_360ul_flat_D8 + parent: corning_96_wellplate_360ul_flat + position: + x: 74.9545 + y: 44.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_E8 + name: corning_96_wellplate_360ul_flat_E8 + parent: corning_96_wellplate_360ul_flat + position: + x: 74.9545 + y: 35.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_F8 + name: corning_96_wellplate_360ul_flat_F8 + parent: corning_96_wellplate_360ul_flat + position: + x: 74.9545 + y: 26.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_G8 + name: corning_96_wellplate_360ul_flat_G8 + parent: corning_96_wellplate_360ul_flat + position: + x: 74.9545 + y: 17.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_H8 + name: corning_96_wellplate_360ul_flat_H8 + parent: corning_96_wellplate_360ul_flat + position: + x: 74.9545 + y: 8.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_A9 + name: corning_96_wellplate_360ul_flat_A9 + parent: corning_96_wellplate_360ul_flat + position: + x: 83.9545 + y: 71.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_B9 + name: corning_96_wellplate_360ul_flat_B9 + parent: corning_96_wellplate_360ul_flat + position: + x: 83.9545 + y: 62.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_C9 + name: corning_96_wellplate_360ul_flat_C9 + parent: corning_96_wellplate_360ul_flat + position: + x: 83.9545 + y: 53.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_D9 + name: corning_96_wellplate_360ul_flat_D9 + parent: corning_96_wellplate_360ul_flat + position: + x: 83.9545 + y: 44.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_E9 + name: corning_96_wellplate_360ul_flat_E9 + parent: corning_96_wellplate_360ul_flat + position: + x: 83.9545 + y: 35.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_F9 + name: corning_96_wellplate_360ul_flat_F9 + parent: corning_96_wellplate_360ul_flat + position: + x: 83.9545 + y: 26.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_G9 + name: corning_96_wellplate_360ul_flat_G9 + parent: corning_96_wellplate_360ul_flat + position: + x: 83.9545 + y: 17.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_H9 + name: corning_96_wellplate_360ul_flat_H9 + parent: corning_96_wellplate_360ul_flat + position: + x: 83.9545 + y: 8.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_A10 + name: corning_96_wellplate_360ul_flat_A10 + parent: corning_96_wellplate_360ul_flat + position: + x: 92.9545 + y: 71.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_B10 + name: corning_96_wellplate_360ul_flat_B10 + parent: corning_96_wellplate_360ul_flat + position: + x: 92.9545 + y: 62.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_C10 + name: corning_96_wellplate_360ul_flat_C10 + parent: corning_96_wellplate_360ul_flat + position: + x: 92.9545 + y: 53.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_D10 + name: corning_96_wellplate_360ul_flat_D10 + parent: corning_96_wellplate_360ul_flat + position: + x: 92.9545 + y: 44.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_E10 + name: corning_96_wellplate_360ul_flat_E10 + parent: corning_96_wellplate_360ul_flat + position: + x: 92.9545 + y: 35.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_F10 + name: corning_96_wellplate_360ul_flat_F10 + parent: corning_96_wellplate_360ul_flat + position: + x: 92.9545 + y: 26.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_G10 + name: corning_96_wellplate_360ul_flat_G10 + parent: corning_96_wellplate_360ul_flat + position: + x: 92.9545 + y: 17.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_H10 + name: corning_96_wellplate_360ul_flat_H10 + parent: corning_96_wellplate_360ul_flat + position: + x: 92.9545 + y: 8.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_A11 + name: corning_96_wellplate_360ul_flat_A11 + parent: corning_96_wellplate_360ul_flat + position: + x: 101.9545 + y: 71.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_B11 + name: corning_96_wellplate_360ul_flat_B11 + parent: corning_96_wellplate_360ul_flat + position: + x: 101.9545 + y: 62.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_C11 + name: corning_96_wellplate_360ul_flat_C11 + parent: corning_96_wellplate_360ul_flat + position: + x: 101.9545 + y: 53.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_D11 + name: corning_96_wellplate_360ul_flat_D11 + parent: corning_96_wellplate_360ul_flat + position: + x: 101.9545 + y: 44.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_E11 + name: corning_96_wellplate_360ul_flat_E11 + parent: corning_96_wellplate_360ul_flat + position: + x: 101.9545 + y: 35.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_F11 + name: corning_96_wellplate_360ul_flat_F11 + parent: corning_96_wellplate_360ul_flat + position: + x: 101.9545 + y: 26.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_G11 + name: corning_96_wellplate_360ul_flat_G11 + parent: corning_96_wellplate_360ul_flat + position: + x: 101.9545 + y: 17.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_H11 + name: corning_96_wellplate_360ul_flat_H11 + parent: corning_96_wellplate_360ul_flat + position: + x: 101.9545 + y: 8.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_A12 + name: corning_96_wellplate_360ul_flat_A12 + parent: corning_96_wellplate_360ul_flat + position: + x: 110.9545 + y: 71.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_B12 + name: corning_96_wellplate_360ul_flat_B12 + parent: corning_96_wellplate_360ul_flat + position: + x: 110.9545 + y: 62.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_C12 + name: corning_96_wellplate_360ul_flat_C12 + parent: corning_96_wellplate_360ul_flat + position: + x: 110.9545 + y: 53.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_D12 + name: corning_96_wellplate_360ul_flat_D12 + parent: corning_96_wellplate_360ul_flat + position: + x: 110.9545 + y: 44.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_E12 + name: corning_96_wellplate_360ul_flat_E12 + parent: corning_96_wellplate_360ul_flat + position: + x: 110.9545 + y: 35.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_F12 + name: corning_96_wellplate_360ul_flat_F12 + parent: corning_96_wellplate_360ul_flat + position: + x: 110.9545 + y: 26.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_G12 + name: corning_96_wellplate_360ul_flat_G12 + parent: corning_96_wellplate_360ul_flat + position: + x: 110.9545 + y: 17.8145 + z: 3.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 360 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.851 + size_y: 4.851 + size_z: 10.67 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: corning_96_wellplate_360ul_flat_H12 + name: corning_96_wellplate_360ul_flat_H12 + parent: corning_96_wellplate_360ul_flat + position: + x: 110.9545 + y: 8.8145 + z: 3.55 + sample_id: null + type: well + description: Corning 96 wellplate 360ul flat + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/plates.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +nest_96_wellplate_100ul_pcr_full_skirt: + category: + - plates + class: + module: pylabrobot.resources.opentrons.plates:nest_96_wellplate_100ul_pcr_full_skirt + type: pylabrobot + config_info: + - children: + - nest_96_wellplate_100ul_pcr_full_skirt_A1 + - nest_96_wellplate_100ul_pcr_full_skirt_B1 + - nest_96_wellplate_100ul_pcr_full_skirt_C1 + - nest_96_wellplate_100ul_pcr_full_skirt_D1 + - nest_96_wellplate_100ul_pcr_full_skirt_E1 + - nest_96_wellplate_100ul_pcr_full_skirt_F1 + - nest_96_wellplate_100ul_pcr_full_skirt_G1 + - nest_96_wellplate_100ul_pcr_full_skirt_H1 + - nest_96_wellplate_100ul_pcr_full_skirt_A2 + - nest_96_wellplate_100ul_pcr_full_skirt_B2 + - nest_96_wellplate_100ul_pcr_full_skirt_C2 + - nest_96_wellplate_100ul_pcr_full_skirt_D2 + - nest_96_wellplate_100ul_pcr_full_skirt_E2 + - nest_96_wellplate_100ul_pcr_full_skirt_F2 + - nest_96_wellplate_100ul_pcr_full_skirt_G2 + - nest_96_wellplate_100ul_pcr_full_skirt_H2 + - nest_96_wellplate_100ul_pcr_full_skirt_A3 + - nest_96_wellplate_100ul_pcr_full_skirt_B3 + - nest_96_wellplate_100ul_pcr_full_skirt_C3 + - nest_96_wellplate_100ul_pcr_full_skirt_D3 + - nest_96_wellplate_100ul_pcr_full_skirt_E3 + - nest_96_wellplate_100ul_pcr_full_skirt_F3 + - nest_96_wellplate_100ul_pcr_full_skirt_G3 + - nest_96_wellplate_100ul_pcr_full_skirt_H3 + - nest_96_wellplate_100ul_pcr_full_skirt_A4 + - nest_96_wellplate_100ul_pcr_full_skirt_B4 + - nest_96_wellplate_100ul_pcr_full_skirt_C4 + - nest_96_wellplate_100ul_pcr_full_skirt_D4 + - nest_96_wellplate_100ul_pcr_full_skirt_E4 + - nest_96_wellplate_100ul_pcr_full_skirt_F4 + - nest_96_wellplate_100ul_pcr_full_skirt_G4 + - nest_96_wellplate_100ul_pcr_full_skirt_H4 + - nest_96_wellplate_100ul_pcr_full_skirt_A5 + - nest_96_wellplate_100ul_pcr_full_skirt_B5 + - nest_96_wellplate_100ul_pcr_full_skirt_C5 + - nest_96_wellplate_100ul_pcr_full_skirt_D5 + - nest_96_wellplate_100ul_pcr_full_skirt_E5 + - nest_96_wellplate_100ul_pcr_full_skirt_F5 + - nest_96_wellplate_100ul_pcr_full_skirt_G5 + - nest_96_wellplate_100ul_pcr_full_skirt_H5 + - nest_96_wellplate_100ul_pcr_full_skirt_A6 + - nest_96_wellplate_100ul_pcr_full_skirt_B6 + - nest_96_wellplate_100ul_pcr_full_skirt_C6 + - nest_96_wellplate_100ul_pcr_full_skirt_D6 + - nest_96_wellplate_100ul_pcr_full_skirt_E6 + - nest_96_wellplate_100ul_pcr_full_skirt_F6 + - nest_96_wellplate_100ul_pcr_full_skirt_G6 + - nest_96_wellplate_100ul_pcr_full_skirt_H6 + - nest_96_wellplate_100ul_pcr_full_skirt_A7 + - nest_96_wellplate_100ul_pcr_full_skirt_B7 + - nest_96_wellplate_100ul_pcr_full_skirt_C7 + - nest_96_wellplate_100ul_pcr_full_skirt_D7 + - nest_96_wellplate_100ul_pcr_full_skirt_E7 + - nest_96_wellplate_100ul_pcr_full_skirt_F7 + - nest_96_wellplate_100ul_pcr_full_skirt_G7 + - nest_96_wellplate_100ul_pcr_full_skirt_H7 + - nest_96_wellplate_100ul_pcr_full_skirt_A8 + - nest_96_wellplate_100ul_pcr_full_skirt_B8 + - nest_96_wellplate_100ul_pcr_full_skirt_C8 + - nest_96_wellplate_100ul_pcr_full_skirt_D8 + - nest_96_wellplate_100ul_pcr_full_skirt_E8 + - nest_96_wellplate_100ul_pcr_full_skirt_F8 + - nest_96_wellplate_100ul_pcr_full_skirt_G8 + - nest_96_wellplate_100ul_pcr_full_skirt_H8 + - nest_96_wellplate_100ul_pcr_full_skirt_A9 + - nest_96_wellplate_100ul_pcr_full_skirt_B9 + - nest_96_wellplate_100ul_pcr_full_skirt_C9 + - nest_96_wellplate_100ul_pcr_full_skirt_D9 + - nest_96_wellplate_100ul_pcr_full_skirt_E9 + - nest_96_wellplate_100ul_pcr_full_skirt_F9 + - nest_96_wellplate_100ul_pcr_full_skirt_G9 + - nest_96_wellplate_100ul_pcr_full_skirt_H9 + - nest_96_wellplate_100ul_pcr_full_skirt_A10 + - nest_96_wellplate_100ul_pcr_full_skirt_B10 + - nest_96_wellplate_100ul_pcr_full_skirt_C10 + - nest_96_wellplate_100ul_pcr_full_skirt_D10 + - nest_96_wellplate_100ul_pcr_full_skirt_E10 + - nest_96_wellplate_100ul_pcr_full_skirt_F10 + - nest_96_wellplate_100ul_pcr_full_skirt_G10 + - nest_96_wellplate_100ul_pcr_full_skirt_H10 + - nest_96_wellplate_100ul_pcr_full_skirt_A11 + - nest_96_wellplate_100ul_pcr_full_skirt_B11 + - nest_96_wellplate_100ul_pcr_full_skirt_C11 + - nest_96_wellplate_100ul_pcr_full_skirt_D11 + - nest_96_wellplate_100ul_pcr_full_skirt_E11 + - nest_96_wellplate_100ul_pcr_full_skirt_F11 + - nest_96_wellplate_100ul_pcr_full_skirt_G11 + - nest_96_wellplate_100ul_pcr_full_skirt_H11 + - nest_96_wellplate_100ul_pcr_full_skirt_A12 + - nest_96_wellplate_100ul_pcr_full_skirt_B12 + - nest_96_wellplate_100ul_pcr_full_skirt_C12 + - nest_96_wellplate_100ul_pcr_full_skirt_D12 + - nest_96_wellplate_100ul_pcr_full_skirt_E12 + - nest_96_wellplate_100ul_pcr_full_skirt_F12 + - nest_96_wellplate_100ul_pcr_full_skirt_G12 + - nest_96_wellplate_100ul_pcr_full_skirt_H12 + class: '' + config: + barcode: null + category: plate + model: NEST 96 Well Plate 100 µL PCR Full Skirt + ordering: + A1: nest_96_wellplate_100ul_pcr_full_skirt_A1 + B1: nest_96_wellplate_100ul_pcr_full_skirt_B1 + C1: nest_96_wellplate_100ul_pcr_full_skirt_C1 + D1: nest_96_wellplate_100ul_pcr_full_skirt_D1 + E1: nest_96_wellplate_100ul_pcr_full_skirt_E1 + F1: nest_96_wellplate_100ul_pcr_full_skirt_F1 + G1: nest_96_wellplate_100ul_pcr_full_skirt_G1 + H1: nest_96_wellplate_100ul_pcr_full_skirt_H1 + A2: nest_96_wellplate_100ul_pcr_full_skirt_A2 + B2: nest_96_wellplate_100ul_pcr_full_skirt_B2 + C2: nest_96_wellplate_100ul_pcr_full_skirt_C2 + D2: nest_96_wellplate_100ul_pcr_full_skirt_D2 + E2: nest_96_wellplate_100ul_pcr_full_skirt_E2 + F2: nest_96_wellplate_100ul_pcr_full_skirt_F2 + G2: nest_96_wellplate_100ul_pcr_full_skirt_G2 + H2: nest_96_wellplate_100ul_pcr_full_skirt_H2 + A3: nest_96_wellplate_100ul_pcr_full_skirt_A3 + B3: nest_96_wellplate_100ul_pcr_full_skirt_B3 + C3: nest_96_wellplate_100ul_pcr_full_skirt_C3 + D3: nest_96_wellplate_100ul_pcr_full_skirt_D3 + E3: nest_96_wellplate_100ul_pcr_full_skirt_E3 + F3: nest_96_wellplate_100ul_pcr_full_skirt_F3 + G3: nest_96_wellplate_100ul_pcr_full_skirt_G3 + H3: nest_96_wellplate_100ul_pcr_full_skirt_H3 + A4: nest_96_wellplate_100ul_pcr_full_skirt_A4 + B4: nest_96_wellplate_100ul_pcr_full_skirt_B4 + C4: nest_96_wellplate_100ul_pcr_full_skirt_C4 + D4: nest_96_wellplate_100ul_pcr_full_skirt_D4 + E4: nest_96_wellplate_100ul_pcr_full_skirt_E4 + F4: nest_96_wellplate_100ul_pcr_full_skirt_F4 + G4: nest_96_wellplate_100ul_pcr_full_skirt_G4 + H4: nest_96_wellplate_100ul_pcr_full_skirt_H4 + A5: nest_96_wellplate_100ul_pcr_full_skirt_A5 + B5: nest_96_wellplate_100ul_pcr_full_skirt_B5 + C5: nest_96_wellplate_100ul_pcr_full_skirt_C5 + D5: nest_96_wellplate_100ul_pcr_full_skirt_D5 + E5: nest_96_wellplate_100ul_pcr_full_skirt_E5 + F5: nest_96_wellplate_100ul_pcr_full_skirt_F5 + G5: nest_96_wellplate_100ul_pcr_full_skirt_G5 + H5: nest_96_wellplate_100ul_pcr_full_skirt_H5 + A6: nest_96_wellplate_100ul_pcr_full_skirt_A6 + B6: nest_96_wellplate_100ul_pcr_full_skirt_B6 + C6: nest_96_wellplate_100ul_pcr_full_skirt_C6 + D6: nest_96_wellplate_100ul_pcr_full_skirt_D6 + E6: nest_96_wellplate_100ul_pcr_full_skirt_E6 + F6: nest_96_wellplate_100ul_pcr_full_skirt_F6 + G6: nest_96_wellplate_100ul_pcr_full_skirt_G6 + H6: nest_96_wellplate_100ul_pcr_full_skirt_H6 + A7: nest_96_wellplate_100ul_pcr_full_skirt_A7 + B7: nest_96_wellplate_100ul_pcr_full_skirt_B7 + C7: nest_96_wellplate_100ul_pcr_full_skirt_C7 + D7: nest_96_wellplate_100ul_pcr_full_skirt_D7 + E7: nest_96_wellplate_100ul_pcr_full_skirt_E7 + F7: nest_96_wellplate_100ul_pcr_full_skirt_F7 + G7: nest_96_wellplate_100ul_pcr_full_skirt_G7 + H7: nest_96_wellplate_100ul_pcr_full_skirt_H7 + A8: nest_96_wellplate_100ul_pcr_full_skirt_A8 + B8: nest_96_wellplate_100ul_pcr_full_skirt_B8 + C8: nest_96_wellplate_100ul_pcr_full_skirt_C8 + D8: nest_96_wellplate_100ul_pcr_full_skirt_D8 + E8: nest_96_wellplate_100ul_pcr_full_skirt_E8 + F8: nest_96_wellplate_100ul_pcr_full_skirt_F8 + G8: nest_96_wellplate_100ul_pcr_full_skirt_G8 + H8: nest_96_wellplate_100ul_pcr_full_skirt_H8 + A9: nest_96_wellplate_100ul_pcr_full_skirt_A9 + B9: nest_96_wellplate_100ul_pcr_full_skirt_B9 + C9: nest_96_wellplate_100ul_pcr_full_skirt_C9 + D9: nest_96_wellplate_100ul_pcr_full_skirt_D9 + E9: nest_96_wellplate_100ul_pcr_full_skirt_E9 + F9: nest_96_wellplate_100ul_pcr_full_skirt_F9 + G9: nest_96_wellplate_100ul_pcr_full_skirt_G9 + H9: nest_96_wellplate_100ul_pcr_full_skirt_H9 + A10: nest_96_wellplate_100ul_pcr_full_skirt_A10 + B10: nest_96_wellplate_100ul_pcr_full_skirt_B10 + C10: nest_96_wellplate_100ul_pcr_full_skirt_C10 + D10: nest_96_wellplate_100ul_pcr_full_skirt_D10 + E10: nest_96_wellplate_100ul_pcr_full_skirt_E10 + F10: nest_96_wellplate_100ul_pcr_full_skirt_F10 + G10: nest_96_wellplate_100ul_pcr_full_skirt_G10 + H10: nest_96_wellplate_100ul_pcr_full_skirt_H10 + A11: nest_96_wellplate_100ul_pcr_full_skirt_A11 + B11: nest_96_wellplate_100ul_pcr_full_skirt_B11 + C11: nest_96_wellplate_100ul_pcr_full_skirt_C11 + D11: nest_96_wellplate_100ul_pcr_full_skirt_D11 + E11: nest_96_wellplate_100ul_pcr_full_skirt_E11 + F11: nest_96_wellplate_100ul_pcr_full_skirt_F11 + G11: nest_96_wellplate_100ul_pcr_full_skirt_G11 + H11: nest_96_wellplate_100ul_pcr_full_skirt_H11 + A12: nest_96_wellplate_100ul_pcr_full_skirt_A12 + B12: nest_96_wellplate_100ul_pcr_full_skirt_B12 + C12: nest_96_wellplate_100ul_pcr_full_skirt_C12 + D12: nest_96_wellplate_100ul_pcr_full_skirt_D12 + E12: nest_96_wellplate_100ul_pcr_full_skirt_E12 + F12: nest_96_wellplate_100ul_pcr_full_skirt_F12 + G12: nest_96_wellplate_100ul_pcr_full_skirt_G12 + H12: nest_96_wellplate_100ul_pcr_full_skirt_H12 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.48 + size_z: 15.7 + type: Plate + data: {} + id: nest_96_wellplate_100ul_pcr_full_skirt + name: nest_96_wellplate_100ul_pcr_full_skirt + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: plate + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_A1 + name: nest_96_wellplate_100ul_pcr_full_skirt_A1 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 12.492 + y: 72.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_B1 + name: nest_96_wellplate_100ul_pcr_full_skirt_B1 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 12.492 + y: 63.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_C1 + name: nest_96_wellplate_100ul_pcr_full_skirt_C1 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 12.492 + y: 54.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_D1 + name: nest_96_wellplate_100ul_pcr_full_skirt_D1 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 12.492 + y: 45.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_E1 + name: nest_96_wellplate_100ul_pcr_full_skirt_E1 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 12.492 + y: 36.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_F1 + name: nest_96_wellplate_100ul_pcr_full_skirt_F1 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 12.492 + y: 27.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_G1 + name: nest_96_wellplate_100ul_pcr_full_skirt_G1 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 12.492 + y: 18.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_H1 + name: nest_96_wellplate_100ul_pcr_full_skirt_H1 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 12.492 + y: 9.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_A2 + name: nest_96_wellplate_100ul_pcr_full_skirt_A2 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 21.492 + y: 72.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_B2 + name: nest_96_wellplate_100ul_pcr_full_skirt_B2 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 21.492 + y: 63.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_C2 + name: nest_96_wellplate_100ul_pcr_full_skirt_C2 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 21.492 + y: 54.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_D2 + name: nest_96_wellplate_100ul_pcr_full_skirt_D2 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 21.492 + y: 45.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_E2 + name: nest_96_wellplate_100ul_pcr_full_skirt_E2 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 21.492 + y: 36.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_F2 + name: nest_96_wellplate_100ul_pcr_full_skirt_F2 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 21.492 + y: 27.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_G2 + name: nest_96_wellplate_100ul_pcr_full_skirt_G2 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 21.492 + y: 18.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_H2 + name: nest_96_wellplate_100ul_pcr_full_skirt_H2 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 21.492 + y: 9.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_A3 + name: nest_96_wellplate_100ul_pcr_full_skirt_A3 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 30.492 + y: 72.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_B3 + name: nest_96_wellplate_100ul_pcr_full_skirt_B3 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 30.492 + y: 63.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_C3 + name: nest_96_wellplate_100ul_pcr_full_skirt_C3 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 30.492 + y: 54.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_D3 + name: nest_96_wellplate_100ul_pcr_full_skirt_D3 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 30.492 + y: 45.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_E3 + name: nest_96_wellplate_100ul_pcr_full_skirt_E3 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 30.492 + y: 36.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_F3 + name: nest_96_wellplate_100ul_pcr_full_skirt_F3 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 30.492 + y: 27.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_G3 + name: nest_96_wellplate_100ul_pcr_full_skirt_G3 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 30.492 + y: 18.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_H3 + name: nest_96_wellplate_100ul_pcr_full_skirt_H3 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 30.492 + y: 9.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_A4 + name: nest_96_wellplate_100ul_pcr_full_skirt_A4 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 39.492 + y: 72.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_B4 + name: nest_96_wellplate_100ul_pcr_full_skirt_B4 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 39.492 + y: 63.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_C4 + name: nest_96_wellplate_100ul_pcr_full_skirt_C4 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 39.492 + y: 54.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_D4 + name: nest_96_wellplate_100ul_pcr_full_skirt_D4 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 39.492 + y: 45.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_E4 + name: nest_96_wellplate_100ul_pcr_full_skirt_E4 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 39.492 + y: 36.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_F4 + name: nest_96_wellplate_100ul_pcr_full_skirt_F4 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 39.492 + y: 27.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_G4 + name: nest_96_wellplate_100ul_pcr_full_skirt_G4 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 39.492 + y: 18.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_H4 + name: nest_96_wellplate_100ul_pcr_full_skirt_H4 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 39.492 + y: 9.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_A5 + name: nest_96_wellplate_100ul_pcr_full_skirt_A5 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 48.492 + y: 72.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_B5 + name: nest_96_wellplate_100ul_pcr_full_skirt_B5 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 48.492 + y: 63.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_C5 + name: nest_96_wellplate_100ul_pcr_full_skirt_C5 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 48.492 + y: 54.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_D5 + name: nest_96_wellplate_100ul_pcr_full_skirt_D5 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 48.492 + y: 45.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_E5 + name: nest_96_wellplate_100ul_pcr_full_skirt_E5 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 48.492 + y: 36.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_F5 + name: nest_96_wellplate_100ul_pcr_full_skirt_F5 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 48.492 + y: 27.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_G5 + name: nest_96_wellplate_100ul_pcr_full_skirt_G5 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 48.492 + y: 18.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_H5 + name: nest_96_wellplate_100ul_pcr_full_skirt_H5 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 48.492 + y: 9.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_A6 + name: nest_96_wellplate_100ul_pcr_full_skirt_A6 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 57.492 + y: 72.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_B6 + name: nest_96_wellplate_100ul_pcr_full_skirt_B6 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 57.492 + y: 63.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_C6 + name: nest_96_wellplate_100ul_pcr_full_skirt_C6 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 57.492 + y: 54.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_D6 + name: nest_96_wellplate_100ul_pcr_full_skirt_D6 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 57.492 + y: 45.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_E6 + name: nest_96_wellplate_100ul_pcr_full_skirt_E6 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 57.492 + y: 36.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_F6 + name: nest_96_wellplate_100ul_pcr_full_skirt_F6 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 57.492 + y: 27.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_G6 + name: nest_96_wellplate_100ul_pcr_full_skirt_G6 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 57.492 + y: 18.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_H6 + name: nest_96_wellplate_100ul_pcr_full_skirt_H6 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 57.492 + y: 9.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_A7 + name: nest_96_wellplate_100ul_pcr_full_skirt_A7 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 66.492 + y: 72.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_B7 + name: nest_96_wellplate_100ul_pcr_full_skirt_B7 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 66.492 + y: 63.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_C7 + name: nest_96_wellplate_100ul_pcr_full_skirt_C7 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 66.492 + y: 54.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_D7 + name: nest_96_wellplate_100ul_pcr_full_skirt_D7 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 66.492 + y: 45.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_E7 + name: nest_96_wellplate_100ul_pcr_full_skirt_E7 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 66.492 + y: 36.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_F7 + name: nest_96_wellplate_100ul_pcr_full_skirt_F7 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 66.492 + y: 27.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_G7 + name: nest_96_wellplate_100ul_pcr_full_skirt_G7 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 66.492 + y: 18.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_H7 + name: nest_96_wellplate_100ul_pcr_full_skirt_H7 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 66.492 + y: 9.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_A8 + name: nest_96_wellplate_100ul_pcr_full_skirt_A8 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 75.492 + y: 72.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_B8 + name: nest_96_wellplate_100ul_pcr_full_skirt_B8 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 75.492 + y: 63.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_C8 + name: nest_96_wellplate_100ul_pcr_full_skirt_C8 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 75.492 + y: 54.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_D8 + name: nest_96_wellplate_100ul_pcr_full_skirt_D8 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 75.492 + y: 45.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_E8 + name: nest_96_wellplate_100ul_pcr_full_skirt_E8 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 75.492 + y: 36.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_F8 + name: nest_96_wellplate_100ul_pcr_full_skirt_F8 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 75.492 + y: 27.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_G8 + name: nest_96_wellplate_100ul_pcr_full_skirt_G8 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 75.492 + y: 18.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_H8 + name: nest_96_wellplate_100ul_pcr_full_skirt_H8 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 75.492 + y: 9.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_A9 + name: nest_96_wellplate_100ul_pcr_full_skirt_A9 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 84.492 + y: 72.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_B9 + name: nest_96_wellplate_100ul_pcr_full_skirt_B9 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 84.492 + y: 63.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_C9 + name: nest_96_wellplate_100ul_pcr_full_skirt_C9 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 84.492 + y: 54.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_D9 + name: nest_96_wellplate_100ul_pcr_full_skirt_D9 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 84.492 + y: 45.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_E9 + name: nest_96_wellplate_100ul_pcr_full_skirt_E9 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 84.492 + y: 36.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_F9 + name: nest_96_wellplate_100ul_pcr_full_skirt_F9 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 84.492 + y: 27.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_G9 + name: nest_96_wellplate_100ul_pcr_full_skirt_G9 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 84.492 + y: 18.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_H9 + name: nest_96_wellplate_100ul_pcr_full_skirt_H9 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 84.492 + y: 9.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_A10 + name: nest_96_wellplate_100ul_pcr_full_skirt_A10 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 93.492 + y: 72.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_B10 + name: nest_96_wellplate_100ul_pcr_full_skirt_B10 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 93.492 + y: 63.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_C10 + name: nest_96_wellplate_100ul_pcr_full_skirt_C10 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 93.492 + y: 54.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_D10 + name: nest_96_wellplate_100ul_pcr_full_skirt_D10 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 93.492 + y: 45.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_E10 + name: nest_96_wellplate_100ul_pcr_full_skirt_E10 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 93.492 + y: 36.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_F10 + name: nest_96_wellplate_100ul_pcr_full_skirt_F10 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 93.492 + y: 27.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_G10 + name: nest_96_wellplate_100ul_pcr_full_skirt_G10 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 93.492 + y: 18.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_H10 + name: nest_96_wellplate_100ul_pcr_full_skirt_H10 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 93.492 + y: 9.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_A11 + name: nest_96_wellplate_100ul_pcr_full_skirt_A11 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 102.492 + y: 72.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_B11 + name: nest_96_wellplate_100ul_pcr_full_skirt_B11 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 102.492 + y: 63.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_C11 + name: nest_96_wellplate_100ul_pcr_full_skirt_C11 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 102.492 + y: 54.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_D11 + name: nest_96_wellplate_100ul_pcr_full_skirt_D11 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 102.492 + y: 45.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_E11 + name: nest_96_wellplate_100ul_pcr_full_skirt_E11 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 102.492 + y: 36.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_F11 + name: nest_96_wellplate_100ul_pcr_full_skirt_F11 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 102.492 + y: 27.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_G11 + name: nest_96_wellplate_100ul_pcr_full_skirt_G11 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 102.492 + y: 18.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_H11 + name: nest_96_wellplate_100ul_pcr_full_skirt_H11 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 102.492 + y: 9.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_A12 + name: nest_96_wellplate_100ul_pcr_full_skirt_A12 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 111.492 + y: 72.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_B12 + name: nest_96_wellplate_100ul_pcr_full_skirt_B12 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 111.492 + y: 63.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_C12 + name: nest_96_wellplate_100ul_pcr_full_skirt_C12 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 111.492 + y: 54.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_D12 + name: nest_96_wellplate_100ul_pcr_full_skirt_D12 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 111.492 + y: 45.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_E12 + name: nest_96_wellplate_100ul_pcr_full_skirt_E12 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 111.492 + y: 36.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_F12 + name: nest_96_wellplate_100ul_pcr_full_skirt_F12 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 111.492 + y: 27.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_G12 + name: nest_96_wellplate_100ul_pcr_full_skirt_G12 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 111.492 + y: 18.352 + z: 0.92 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 100 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_100ul_pcr_full_skirt_H12 + name: nest_96_wellplate_100ul_pcr_full_skirt_H12 + parent: nest_96_wellplate_100ul_pcr_full_skirt + position: + x: 111.492 + y: 9.352 + z: 0.92 + sample_id: null + type: well + description: Nest 96 wellplate 100ul pcr full skirt + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/plates.yaml + handles: [] + icon: '' + init_param_schema: {} + model: + children_mesh: generic_labware_tube_10_75/meshes/0_base.stl + children_mesh_tf: + - 0.0018 + - 0.0018 + - 0 + - -1.5708 + - 0 + - 0 + mesh: tecan_nested_tip_rack/meshes/plate.stl + mesh_tf: + - 0.064 + - 0.043 + - 0 + - -1.5708 + - 0 + - 1.5708 + type: resource + registry_type: resource + version: 1.0.0 +nest_96_wellplate_200ul_flat: + category: + - plates + class: + module: pylabrobot.resources.opentrons.plates:nest_96_wellplate_200ul_flat + type: pylabrobot + config_info: + - children: + - nest_96_wellplate_200ul_flat_A1 + - nest_96_wellplate_200ul_flat_B1 + - nest_96_wellplate_200ul_flat_C1 + - nest_96_wellplate_200ul_flat_D1 + - nest_96_wellplate_200ul_flat_E1 + - nest_96_wellplate_200ul_flat_F1 + - nest_96_wellplate_200ul_flat_G1 + - nest_96_wellplate_200ul_flat_H1 + - nest_96_wellplate_200ul_flat_A2 + - nest_96_wellplate_200ul_flat_B2 + - nest_96_wellplate_200ul_flat_C2 + - nest_96_wellplate_200ul_flat_D2 + - nest_96_wellplate_200ul_flat_E2 + - nest_96_wellplate_200ul_flat_F2 + - nest_96_wellplate_200ul_flat_G2 + - nest_96_wellplate_200ul_flat_H2 + - nest_96_wellplate_200ul_flat_A3 + - nest_96_wellplate_200ul_flat_B3 + - nest_96_wellplate_200ul_flat_C3 + - nest_96_wellplate_200ul_flat_D3 + - nest_96_wellplate_200ul_flat_E3 + - nest_96_wellplate_200ul_flat_F3 + - nest_96_wellplate_200ul_flat_G3 + - nest_96_wellplate_200ul_flat_H3 + - nest_96_wellplate_200ul_flat_A4 + - nest_96_wellplate_200ul_flat_B4 + - nest_96_wellplate_200ul_flat_C4 + - nest_96_wellplate_200ul_flat_D4 + - nest_96_wellplate_200ul_flat_E4 + - nest_96_wellplate_200ul_flat_F4 + - nest_96_wellplate_200ul_flat_G4 + - nest_96_wellplate_200ul_flat_H4 + - nest_96_wellplate_200ul_flat_A5 + - nest_96_wellplate_200ul_flat_B5 + - nest_96_wellplate_200ul_flat_C5 + - nest_96_wellplate_200ul_flat_D5 + - nest_96_wellplate_200ul_flat_E5 + - nest_96_wellplate_200ul_flat_F5 + - nest_96_wellplate_200ul_flat_G5 + - nest_96_wellplate_200ul_flat_H5 + - nest_96_wellplate_200ul_flat_A6 + - nest_96_wellplate_200ul_flat_B6 + - nest_96_wellplate_200ul_flat_C6 + - nest_96_wellplate_200ul_flat_D6 + - nest_96_wellplate_200ul_flat_E6 + - nest_96_wellplate_200ul_flat_F6 + - nest_96_wellplate_200ul_flat_G6 + - nest_96_wellplate_200ul_flat_H6 + - nest_96_wellplate_200ul_flat_A7 + - nest_96_wellplate_200ul_flat_B7 + - nest_96_wellplate_200ul_flat_C7 + - nest_96_wellplate_200ul_flat_D7 + - nest_96_wellplate_200ul_flat_E7 + - nest_96_wellplate_200ul_flat_F7 + - nest_96_wellplate_200ul_flat_G7 + - nest_96_wellplate_200ul_flat_H7 + - nest_96_wellplate_200ul_flat_A8 + - nest_96_wellplate_200ul_flat_B8 + - nest_96_wellplate_200ul_flat_C8 + - nest_96_wellplate_200ul_flat_D8 + - nest_96_wellplate_200ul_flat_E8 + - nest_96_wellplate_200ul_flat_F8 + - nest_96_wellplate_200ul_flat_G8 + - nest_96_wellplate_200ul_flat_H8 + - nest_96_wellplate_200ul_flat_A9 + - nest_96_wellplate_200ul_flat_B9 + - nest_96_wellplate_200ul_flat_C9 + - nest_96_wellplate_200ul_flat_D9 + - nest_96_wellplate_200ul_flat_E9 + - nest_96_wellplate_200ul_flat_F9 + - nest_96_wellplate_200ul_flat_G9 + - nest_96_wellplate_200ul_flat_H9 + - nest_96_wellplate_200ul_flat_A10 + - nest_96_wellplate_200ul_flat_B10 + - nest_96_wellplate_200ul_flat_C10 + - nest_96_wellplate_200ul_flat_D10 + - nest_96_wellplate_200ul_flat_E10 + - nest_96_wellplate_200ul_flat_F10 + - nest_96_wellplate_200ul_flat_G10 + - nest_96_wellplate_200ul_flat_H10 + - nest_96_wellplate_200ul_flat_A11 + - nest_96_wellplate_200ul_flat_B11 + - nest_96_wellplate_200ul_flat_C11 + - nest_96_wellplate_200ul_flat_D11 + - nest_96_wellplate_200ul_flat_E11 + - nest_96_wellplate_200ul_flat_F11 + - nest_96_wellplate_200ul_flat_G11 + - nest_96_wellplate_200ul_flat_H11 + - nest_96_wellplate_200ul_flat_A12 + - nest_96_wellplate_200ul_flat_B12 + - nest_96_wellplate_200ul_flat_C12 + - nest_96_wellplate_200ul_flat_D12 + - nest_96_wellplate_200ul_flat_E12 + - nest_96_wellplate_200ul_flat_F12 + - nest_96_wellplate_200ul_flat_G12 + - nest_96_wellplate_200ul_flat_H12 + class: '' + config: + barcode: null + category: plate + model: NEST 96 Well Plate 200 µL Flat + ordering: + A1: nest_96_wellplate_200ul_flat_A1 + B1: nest_96_wellplate_200ul_flat_B1 + C1: nest_96_wellplate_200ul_flat_C1 + D1: nest_96_wellplate_200ul_flat_D1 + E1: nest_96_wellplate_200ul_flat_E1 + F1: nest_96_wellplate_200ul_flat_F1 + G1: nest_96_wellplate_200ul_flat_G1 + H1: nest_96_wellplate_200ul_flat_H1 + A2: nest_96_wellplate_200ul_flat_A2 + B2: nest_96_wellplate_200ul_flat_B2 + C2: nest_96_wellplate_200ul_flat_C2 + D2: nest_96_wellplate_200ul_flat_D2 + E2: nest_96_wellplate_200ul_flat_E2 + F2: nest_96_wellplate_200ul_flat_F2 + G2: nest_96_wellplate_200ul_flat_G2 + H2: nest_96_wellplate_200ul_flat_H2 + A3: nest_96_wellplate_200ul_flat_A3 + B3: nest_96_wellplate_200ul_flat_B3 + C3: nest_96_wellplate_200ul_flat_C3 + D3: nest_96_wellplate_200ul_flat_D3 + E3: nest_96_wellplate_200ul_flat_E3 + F3: nest_96_wellplate_200ul_flat_F3 + G3: nest_96_wellplate_200ul_flat_G3 + H3: nest_96_wellplate_200ul_flat_H3 + A4: nest_96_wellplate_200ul_flat_A4 + B4: nest_96_wellplate_200ul_flat_B4 + C4: nest_96_wellplate_200ul_flat_C4 + D4: nest_96_wellplate_200ul_flat_D4 + E4: nest_96_wellplate_200ul_flat_E4 + F4: nest_96_wellplate_200ul_flat_F4 + G4: nest_96_wellplate_200ul_flat_G4 + H4: nest_96_wellplate_200ul_flat_H4 + A5: nest_96_wellplate_200ul_flat_A5 + B5: nest_96_wellplate_200ul_flat_B5 + C5: nest_96_wellplate_200ul_flat_C5 + D5: nest_96_wellplate_200ul_flat_D5 + E5: nest_96_wellplate_200ul_flat_E5 + F5: nest_96_wellplate_200ul_flat_F5 + G5: nest_96_wellplate_200ul_flat_G5 + H5: nest_96_wellplate_200ul_flat_H5 + A6: nest_96_wellplate_200ul_flat_A6 + B6: nest_96_wellplate_200ul_flat_B6 + C6: nest_96_wellplate_200ul_flat_C6 + D6: nest_96_wellplate_200ul_flat_D6 + E6: nest_96_wellplate_200ul_flat_E6 + F6: nest_96_wellplate_200ul_flat_F6 + G6: nest_96_wellplate_200ul_flat_G6 + H6: nest_96_wellplate_200ul_flat_H6 + A7: nest_96_wellplate_200ul_flat_A7 + B7: nest_96_wellplate_200ul_flat_B7 + C7: nest_96_wellplate_200ul_flat_C7 + D7: nest_96_wellplate_200ul_flat_D7 + E7: nest_96_wellplate_200ul_flat_E7 + F7: nest_96_wellplate_200ul_flat_F7 + G7: nest_96_wellplate_200ul_flat_G7 + H7: nest_96_wellplate_200ul_flat_H7 + A8: nest_96_wellplate_200ul_flat_A8 + B8: nest_96_wellplate_200ul_flat_B8 + C8: nest_96_wellplate_200ul_flat_C8 + D8: nest_96_wellplate_200ul_flat_D8 + E8: nest_96_wellplate_200ul_flat_E8 + F8: nest_96_wellplate_200ul_flat_F8 + G8: nest_96_wellplate_200ul_flat_G8 + H8: nest_96_wellplate_200ul_flat_H8 + A9: nest_96_wellplate_200ul_flat_A9 + B9: nest_96_wellplate_200ul_flat_B9 + C9: nest_96_wellplate_200ul_flat_C9 + D9: nest_96_wellplate_200ul_flat_D9 + E9: nest_96_wellplate_200ul_flat_E9 + F9: nest_96_wellplate_200ul_flat_F9 + G9: nest_96_wellplate_200ul_flat_G9 + H9: nest_96_wellplate_200ul_flat_H9 + A10: nest_96_wellplate_200ul_flat_A10 + B10: nest_96_wellplate_200ul_flat_B10 + C10: nest_96_wellplate_200ul_flat_C10 + D10: nest_96_wellplate_200ul_flat_D10 + E10: nest_96_wellplate_200ul_flat_E10 + F10: nest_96_wellplate_200ul_flat_F10 + G10: nest_96_wellplate_200ul_flat_G10 + H10: nest_96_wellplate_200ul_flat_H10 + A11: nest_96_wellplate_200ul_flat_A11 + B11: nest_96_wellplate_200ul_flat_B11 + C11: nest_96_wellplate_200ul_flat_C11 + D11: nest_96_wellplate_200ul_flat_D11 + E11: nest_96_wellplate_200ul_flat_E11 + F11: nest_96_wellplate_200ul_flat_F11 + G11: nest_96_wellplate_200ul_flat_G11 + H11: nest_96_wellplate_200ul_flat_H11 + A12: nest_96_wellplate_200ul_flat_A12 + B12: nest_96_wellplate_200ul_flat_B12 + C12: nest_96_wellplate_200ul_flat_C12 + D12: nest_96_wellplate_200ul_flat_D12 + E12: nest_96_wellplate_200ul_flat_E12 + F12: nest_96_wellplate_200ul_flat_F12 + G12: nest_96_wellplate_200ul_flat_G12 + H12: nest_96_wellplate_200ul_flat_H12 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.56 + size_y: 85.36 + size_z: 14.3 + type: Plate + data: {} + id: nest_96_wellplate_200ul_flat + name: nest_96_wellplate_200ul_flat + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: plate + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_A1 + name: nest_96_wellplate_200ul_flat_A1 + parent: nest_96_wellplate_200ul_flat + position: + x: 11.858 + y: 71.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_B1 + name: nest_96_wellplate_200ul_flat_B1 + parent: nest_96_wellplate_200ul_flat + position: + x: 11.858 + y: 62.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_C1 + name: nest_96_wellplate_200ul_flat_C1 + parent: nest_96_wellplate_200ul_flat + position: + x: 11.858 + y: 53.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_D1 + name: nest_96_wellplate_200ul_flat_D1 + parent: nest_96_wellplate_200ul_flat + position: + x: 11.858 + y: 44.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_E1 + name: nest_96_wellplate_200ul_flat_E1 + parent: nest_96_wellplate_200ul_flat + position: + x: 11.858 + y: 35.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_F1 + name: nest_96_wellplate_200ul_flat_F1 + parent: nest_96_wellplate_200ul_flat + position: + x: 11.858 + y: 26.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_G1 + name: nest_96_wellplate_200ul_flat_G1 + parent: nest_96_wellplate_200ul_flat + position: + x: 11.858 + y: 17.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_H1 + name: nest_96_wellplate_200ul_flat_H1 + parent: nest_96_wellplate_200ul_flat + position: + x: 11.858 + y: 8.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_A2 + name: nest_96_wellplate_200ul_flat_A2 + parent: nest_96_wellplate_200ul_flat + position: + x: 20.858 + y: 71.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_B2 + name: nest_96_wellplate_200ul_flat_B2 + parent: nest_96_wellplate_200ul_flat + position: + x: 20.858 + y: 62.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_C2 + name: nest_96_wellplate_200ul_flat_C2 + parent: nest_96_wellplate_200ul_flat + position: + x: 20.858 + y: 53.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_D2 + name: nest_96_wellplate_200ul_flat_D2 + parent: nest_96_wellplate_200ul_flat + position: + x: 20.858 + y: 44.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_E2 + name: nest_96_wellplate_200ul_flat_E2 + parent: nest_96_wellplate_200ul_flat + position: + x: 20.858 + y: 35.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_F2 + name: nest_96_wellplate_200ul_flat_F2 + parent: nest_96_wellplate_200ul_flat + position: + x: 20.858 + y: 26.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_G2 + name: nest_96_wellplate_200ul_flat_G2 + parent: nest_96_wellplate_200ul_flat + position: + x: 20.858 + y: 17.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_H2 + name: nest_96_wellplate_200ul_flat_H2 + parent: nest_96_wellplate_200ul_flat + position: + x: 20.858 + y: 8.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_A3 + name: nest_96_wellplate_200ul_flat_A3 + parent: nest_96_wellplate_200ul_flat + position: + x: 29.858 + y: 71.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_B3 + name: nest_96_wellplate_200ul_flat_B3 + parent: nest_96_wellplate_200ul_flat + position: + x: 29.858 + y: 62.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_C3 + name: nest_96_wellplate_200ul_flat_C3 + parent: nest_96_wellplate_200ul_flat + position: + x: 29.858 + y: 53.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_D3 + name: nest_96_wellplate_200ul_flat_D3 + parent: nest_96_wellplate_200ul_flat + position: + x: 29.858 + y: 44.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_E3 + name: nest_96_wellplate_200ul_flat_E3 + parent: nest_96_wellplate_200ul_flat + position: + x: 29.858 + y: 35.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_F3 + name: nest_96_wellplate_200ul_flat_F3 + parent: nest_96_wellplate_200ul_flat + position: + x: 29.858 + y: 26.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_G3 + name: nest_96_wellplate_200ul_flat_G3 + parent: nest_96_wellplate_200ul_flat + position: + x: 29.858 + y: 17.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_H3 + name: nest_96_wellplate_200ul_flat_H3 + parent: nest_96_wellplate_200ul_flat + position: + x: 29.858 + y: 8.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_A4 + name: nest_96_wellplate_200ul_flat_A4 + parent: nest_96_wellplate_200ul_flat + position: + x: 38.858 + y: 71.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_B4 + name: nest_96_wellplate_200ul_flat_B4 + parent: nest_96_wellplate_200ul_flat + position: + x: 38.858 + y: 62.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_C4 + name: nest_96_wellplate_200ul_flat_C4 + parent: nest_96_wellplate_200ul_flat + position: + x: 38.858 + y: 53.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_D4 + name: nest_96_wellplate_200ul_flat_D4 + parent: nest_96_wellplate_200ul_flat + position: + x: 38.858 + y: 44.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_E4 + name: nest_96_wellplate_200ul_flat_E4 + parent: nest_96_wellplate_200ul_flat + position: + x: 38.858 + y: 35.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_F4 + name: nest_96_wellplate_200ul_flat_F4 + parent: nest_96_wellplate_200ul_flat + position: + x: 38.858 + y: 26.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_G4 + name: nest_96_wellplate_200ul_flat_G4 + parent: nest_96_wellplate_200ul_flat + position: + x: 38.858 + y: 17.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_H4 + name: nest_96_wellplate_200ul_flat_H4 + parent: nest_96_wellplate_200ul_flat + position: + x: 38.858 + y: 8.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_A5 + name: nest_96_wellplate_200ul_flat_A5 + parent: nest_96_wellplate_200ul_flat + position: + x: 47.858 + y: 71.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_B5 + name: nest_96_wellplate_200ul_flat_B5 + parent: nest_96_wellplate_200ul_flat + position: + x: 47.858 + y: 62.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_C5 + name: nest_96_wellplate_200ul_flat_C5 + parent: nest_96_wellplate_200ul_flat + position: + x: 47.858 + y: 53.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_D5 + name: nest_96_wellplate_200ul_flat_D5 + parent: nest_96_wellplate_200ul_flat + position: + x: 47.858 + y: 44.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_E5 + name: nest_96_wellplate_200ul_flat_E5 + parent: nest_96_wellplate_200ul_flat + position: + x: 47.858 + y: 35.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_F5 + name: nest_96_wellplate_200ul_flat_F5 + parent: nest_96_wellplate_200ul_flat + position: + x: 47.858 + y: 26.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_G5 + name: nest_96_wellplate_200ul_flat_G5 + parent: nest_96_wellplate_200ul_flat + position: + x: 47.858 + y: 17.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_H5 + name: nest_96_wellplate_200ul_flat_H5 + parent: nest_96_wellplate_200ul_flat + position: + x: 47.858 + y: 8.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_A6 + name: nest_96_wellplate_200ul_flat_A6 + parent: nest_96_wellplate_200ul_flat + position: + x: 56.858 + y: 71.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_B6 + name: nest_96_wellplate_200ul_flat_B6 + parent: nest_96_wellplate_200ul_flat + position: + x: 56.858 + y: 62.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_C6 + name: nest_96_wellplate_200ul_flat_C6 + parent: nest_96_wellplate_200ul_flat + position: + x: 56.858 + y: 53.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_D6 + name: nest_96_wellplate_200ul_flat_D6 + parent: nest_96_wellplate_200ul_flat + position: + x: 56.858 + y: 44.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_E6 + name: nest_96_wellplate_200ul_flat_E6 + parent: nest_96_wellplate_200ul_flat + position: + x: 56.858 + y: 35.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_F6 + name: nest_96_wellplate_200ul_flat_F6 + parent: nest_96_wellplate_200ul_flat + position: + x: 56.858 + y: 26.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_G6 + name: nest_96_wellplate_200ul_flat_G6 + parent: nest_96_wellplate_200ul_flat + position: + x: 56.858 + y: 17.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_H6 + name: nest_96_wellplate_200ul_flat_H6 + parent: nest_96_wellplate_200ul_flat + position: + x: 56.858 + y: 8.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_A7 + name: nest_96_wellplate_200ul_flat_A7 + parent: nest_96_wellplate_200ul_flat + position: + x: 65.858 + y: 71.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_B7 + name: nest_96_wellplate_200ul_flat_B7 + parent: nest_96_wellplate_200ul_flat + position: + x: 65.858 + y: 62.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_C7 + name: nest_96_wellplate_200ul_flat_C7 + parent: nest_96_wellplate_200ul_flat + position: + x: 65.858 + y: 53.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_D7 + name: nest_96_wellplate_200ul_flat_D7 + parent: nest_96_wellplate_200ul_flat + position: + x: 65.858 + y: 44.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_E7 + name: nest_96_wellplate_200ul_flat_E7 + parent: nest_96_wellplate_200ul_flat + position: + x: 65.858 + y: 35.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_F7 + name: nest_96_wellplate_200ul_flat_F7 + parent: nest_96_wellplate_200ul_flat + position: + x: 65.858 + y: 26.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_G7 + name: nest_96_wellplate_200ul_flat_G7 + parent: nest_96_wellplate_200ul_flat + position: + x: 65.858 + y: 17.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_H7 + name: nest_96_wellplate_200ul_flat_H7 + parent: nest_96_wellplate_200ul_flat + position: + x: 65.858 + y: 8.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_A8 + name: nest_96_wellplate_200ul_flat_A8 + parent: nest_96_wellplate_200ul_flat + position: + x: 74.858 + y: 71.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_B8 + name: nest_96_wellplate_200ul_flat_B8 + parent: nest_96_wellplate_200ul_flat + position: + x: 74.858 + y: 62.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_C8 + name: nest_96_wellplate_200ul_flat_C8 + parent: nest_96_wellplate_200ul_flat + position: + x: 74.858 + y: 53.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_D8 + name: nest_96_wellplate_200ul_flat_D8 + parent: nest_96_wellplate_200ul_flat + position: + x: 74.858 + y: 44.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_E8 + name: nest_96_wellplate_200ul_flat_E8 + parent: nest_96_wellplate_200ul_flat + position: + x: 74.858 + y: 35.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_F8 + name: nest_96_wellplate_200ul_flat_F8 + parent: nest_96_wellplate_200ul_flat + position: + x: 74.858 + y: 26.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_G8 + name: nest_96_wellplate_200ul_flat_G8 + parent: nest_96_wellplate_200ul_flat + position: + x: 74.858 + y: 17.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_H8 + name: nest_96_wellplate_200ul_flat_H8 + parent: nest_96_wellplate_200ul_flat + position: + x: 74.858 + y: 8.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_A9 + name: nest_96_wellplate_200ul_flat_A9 + parent: nest_96_wellplate_200ul_flat + position: + x: 83.858 + y: 71.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_B9 + name: nest_96_wellplate_200ul_flat_B9 + parent: nest_96_wellplate_200ul_flat + position: + x: 83.858 + y: 62.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_C9 + name: nest_96_wellplate_200ul_flat_C9 + parent: nest_96_wellplate_200ul_flat + position: + x: 83.858 + y: 53.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_D9 + name: nest_96_wellplate_200ul_flat_D9 + parent: nest_96_wellplate_200ul_flat + position: + x: 83.858 + y: 44.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_E9 + name: nest_96_wellplate_200ul_flat_E9 + parent: nest_96_wellplate_200ul_flat + position: + x: 83.858 + y: 35.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_F9 + name: nest_96_wellplate_200ul_flat_F9 + parent: nest_96_wellplate_200ul_flat + position: + x: 83.858 + y: 26.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_G9 + name: nest_96_wellplate_200ul_flat_G9 + parent: nest_96_wellplate_200ul_flat + position: + x: 83.858 + y: 17.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_H9 + name: nest_96_wellplate_200ul_flat_H9 + parent: nest_96_wellplate_200ul_flat + position: + x: 83.858 + y: 8.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_A10 + name: nest_96_wellplate_200ul_flat_A10 + parent: nest_96_wellplate_200ul_flat + position: + x: 92.858 + y: 71.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_B10 + name: nest_96_wellplate_200ul_flat_B10 + parent: nest_96_wellplate_200ul_flat + position: + x: 92.858 + y: 62.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_C10 + name: nest_96_wellplate_200ul_flat_C10 + parent: nest_96_wellplate_200ul_flat + position: + x: 92.858 + y: 53.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_D10 + name: nest_96_wellplate_200ul_flat_D10 + parent: nest_96_wellplate_200ul_flat + position: + x: 92.858 + y: 44.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_E10 + name: nest_96_wellplate_200ul_flat_E10 + parent: nest_96_wellplate_200ul_flat + position: + x: 92.858 + y: 35.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_F10 + name: nest_96_wellplate_200ul_flat_F10 + parent: nest_96_wellplate_200ul_flat + position: + x: 92.858 + y: 26.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_G10 + name: nest_96_wellplate_200ul_flat_G10 + parent: nest_96_wellplate_200ul_flat + position: + x: 92.858 + y: 17.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_H10 + name: nest_96_wellplate_200ul_flat_H10 + parent: nest_96_wellplate_200ul_flat + position: + x: 92.858 + y: 8.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_A11 + name: nest_96_wellplate_200ul_flat_A11 + parent: nest_96_wellplate_200ul_flat + position: + x: 101.858 + y: 71.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_B11 + name: nest_96_wellplate_200ul_flat_B11 + parent: nest_96_wellplate_200ul_flat + position: + x: 101.858 + y: 62.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_C11 + name: nest_96_wellplate_200ul_flat_C11 + parent: nest_96_wellplate_200ul_flat + position: + x: 101.858 + y: 53.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_D11 + name: nest_96_wellplate_200ul_flat_D11 + parent: nest_96_wellplate_200ul_flat + position: + x: 101.858 + y: 44.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_E11 + name: nest_96_wellplate_200ul_flat_E11 + parent: nest_96_wellplate_200ul_flat + position: + x: 101.858 + y: 35.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_F11 + name: nest_96_wellplate_200ul_flat_F11 + parent: nest_96_wellplate_200ul_flat + position: + x: 101.858 + y: 26.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_G11 + name: nest_96_wellplate_200ul_flat_G11 + parent: nest_96_wellplate_200ul_flat + position: + x: 101.858 + y: 17.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_H11 + name: nest_96_wellplate_200ul_flat_H11 + parent: nest_96_wellplate_200ul_flat + position: + x: 101.858 + y: 8.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_A12 + name: nest_96_wellplate_200ul_flat_A12 + parent: nest_96_wellplate_200ul_flat + position: + x: 110.858 + y: 71.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_B12 + name: nest_96_wellplate_200ul_flat_B12 + parent: nest_96_wellplate_200ul_flat + position: + x: 110.858 + y: 62.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_C12 + name: nest_96_wellplate_200ul_flat_C12 + parent: nest_96_wellplate_200ul_flat + position: + x: 110.858 + y: 53.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_D12 + name: nest_96_wellplate_200ul_flat_D12 + parent: nest_96_wellplate_200ul_flat + position: + x: 110.858 + y: 44.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_E12 + name: nest_96_wellplate_200ul_flat_E12 + parent: nest_96_wellplate_200ul_flat + position: + x: 110.858 + y: 35.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_F12 + name: nest_96_wellplate_200ul_flat_F12 + parent: nest_96_wellplate_200ul_flat + position: + x: 110.858 + y: 26.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_G12 + name: nest_96_wellplate_200ul_flat_G12 + parent: nest_96_wellplate_200ul_flat + position: + x: 110.858 + y: 17.758 + z: 3.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 200 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.844 + size_y: 4.844 + size_z: 10.8 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_200ul_flat_H12 + name: nest_96_wellplate_200ul_flat_H12 + parent: nest_96_wellplate_200ul_flat + position: + x: 110.858 + y: 8.758 + z: 3.5 + sample_id: null + type: well + description: Nest 96 wellplate 200ul flat + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/plates.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +nest_96_wellplate_2ml_deep: + category: + - plates + class: + module: pylabrobot.resources.opentrons.plates:nest_96_wellplate_2ml_deep + type: pylabrobot + config_info: + - children: + - nest_96_wellplate_2ml_deep_A1 + - nest_96_wellplate_2ml_deep_B1 + - nest_96_wellplate_2ml_deep_C1 + - nest_96_wellplate_2ml_deep_D1 + - nest_96_wellplate_2ml_deep_E1 + - nest_96_wellplate_2ml_deep_F1 + - nest_96_wellplate_2ml_deep_G1 + - nest_96_wellplate_2ml_deep_H1 + - nest_96_wellplate_2ml_deep_A2 + - nest_96_wellplate_2ml_deep_B2 + - nest_96_wellplate_2ml_deep_C2 + - nest_96_wellplate_2ml_deep_D2 + - nest_96_wellplate_2ml_deep_E2 + - nest_96_wellplate_2ml_deep_F2 + - nest_96_wellplate_2ml_deep_G2 + - nest_96_wellplate_2ml_deep_H2 + - nest_96_wellplate_2ml_deep_A3 + - nest_96_wellplate_2ml_deep_B3 + - nest_96_wellplate_2ml_deep_C3 + - nest_96_wellplate_2ml_deep_D3 + - nest_96_wellplate_2ml_deep_E3 + - nest_96_wellplate_2ml_deep_F3 + - nest_96_wellplate_2ml_deep_G3 + - nest_96_wellplate_2ml_deep_H3 + - nest_96_wellplate_2ml_deep_A4 + - nest_96_wellplate_2ml_deep_B4 + - nest_96_wellplate_2ml_deep_C4 + - nest_96_wellplate_2ml_deep_D4 + - nest_96_wellplate_2ml_deep_E4 + - nest_96_wellplate_2ml_deep_F4 + - nest_96_wellplate_2ml_deep_G4 + - nest_96_wellplate_2ml_deep_H4 + - nest_96_wellplate_2ml_deep_A5 + - nest_96_wellplate_2ml_deep_B5 + - nest_96_wellplate_2ml_deep_C5 + - nest_96_wellplate_2ml_deep_D5 + - nest_96_wellplate_2ml_deep_E5 + - nest_96_wellplate_2ml_deep_F5 + - nest_96_wellplate_2ml_deep_G5 + - nest_96_wellplate_2ml_deep_H5 + - nest_96_wellplate_2ml_deep_A6 + - nest_96_wellplate_2ml_deep_B6 + - nest_96_wellplate_2ml_deep_C6 + - nest_96_wellplate_2ml_deep_D6 + - nest_96_wellplate_2ml_deep_E6 + - nest_96_wellplate_2ml_deep_F6 + - nest_96_wellplate_2ml_deep_G6 + - nest_96_wellplate_2ml_deep_H6 + - nest_96_wellplate_2ml_deep_A7 + - nest_96_wellplate_2ml_deep_B7 + - nest_96_wellplate_2ml_deep_C7 + - nest_96_wellplate_2ml_deep_D7 + - nest_96_wellplate_2ml_deep_E7 + - nest_96_wellplate_2ml_deep_F7 + - nest_96_wellplate_2ml_deep_G7 + - nest_96_wellplate_2ml_deep_H7 + - nest_96_wellplate_2ml_deep_A8 + - nest_96_wellplate_2ml_deep_B8 + - nest_96_wellplate_2ml_deep_C8 + - nest_96_wellplate_2ml_deep_D8 + - nest_96_wellplate_2ml_deep_E8 + - nest_96_wellplate_2ml_deep_F8 + - nest_96_wellplate_2ml_deep_G8 + - nest_96_wellplate_2ml_deep_H8 + - nest_96_wellplate_2ml_deep_A9 + - nest_96_wellplate_2ml_deep_B9 + - nest_96_wellplate_2ml_deep_C9 + - nest_96_wellplate_2ml_deep_D9 + - nest_96_wellplate_2ml_deep_E9 + - nest_96_wellplate_2ml_deep_F9 + - nest_96_wellplate_2ml_deep_G9 + - nest_96_wellplate_2ml_deep_H9 + - nest_96_wellplate_2ml_deep_A10 + - nest_96_wellplate_2ml_deep_B10 + - nest_96_wellplate_2ml_deep_C10 + - nest_96_wellplate_2ml_deep_D10 + - nest_96_wellplate_2ml_deep_E10 + - nest_96_wellplate_2ml_deep_F10 + - nest_96_wellplate_2ml_deep_G10 + - nest_96_wellplate_2ml_deep_H10 + - nest_96_wellplate_2ml_deep_A11 + - nest_96_wellplate_2ml_deep_B11 + - nest_96_wellplate_2ml_deep_C11 + - nest_96_wellplate_2ml_deep_D11 + - nest_96_wellplate_2ml_deep_E11 + - nest_96_wellplate_2ml_deep_F11 + - nest_96_wellplate_2ml_deep_G11 + - nest_96_wellplate_2ml_deep_H11 + - nest_96_wellplate_2ml_deep_A12 + - nest_96_wellplate_2ml_deep_B12 + - nest_96_wellplate_2ml_deep_C12 + - nest_96_wellplate_2ml_deep_D12 + - nest_96_wellplate_2ml_deep_E12 + - nest_96_wellplate_2ml_deep_F12 + - nest_96_wellplate_2ml_deep_G12 + - nest_96_wellplate_2ml_deep_H12 + class: '' + config: + barcode: null + category: plate + model: NEST 96 Deep Well Plate 2mL + ordering: + A1: nest_96_wellplate_2ml_deep_A1 + B1: nest_96_wellplate_2ml_deep_B1 + C1: nest_96_wellplate_2ml_deep_C1 + D1: nest_96_wellplate_2ml_deep_D1 + E1: nest_96_wellplate_2ml_deep_E1 + F1: nest_96_wellplate_2ml_deep_F1 + G1: nest_96_wellplate_2ml_deep_G1 + H1: nest_96_wellplate_2ml_deep_H1 + A2: nest_96_wellplate_2ml_deep_A2 + B2: nest_96_wellplate_2ml_deep_B2 + C2: nest_96_wellplate_2ml_deep_C2 + D2: nest_96_wellplate_2ml_deep_D2 + E2: nest_96_wellplate_2ml_deep_E2 + F2: nest_96_wellplate_2ml_deep_F2 + G2: nest_96_wellplate_2ml_deep_G2 + H2: nest_96_wellplate_2ml_deep_H2 + A3: nest_96_wellplate_2ml_deep_A3 + B3: nest_96_wellplate_2ml_deep_B3 + C3: nest_96_wellplate_2ml_deep_C3 + D3: nest_96_wellplate_2ml_deep_D3 + E3: nest_96_wellplate_2ml_deep_E3 + F3: nest_96_wellplate_2ml_deep_F3 + G3: nest_96_wellplate_2ml_deep_G3 + H3: nest_96_wellplate_2ml_deep_H3 + A4: nest_96_wellplate_2ml_deep_A4 + B4: nest_96_wellplate_2ml_deep_B4 + C4: nest_96_wellplate_2ml_deep_C4 + D4: nest_96_wellplate_2ml_deep_D4 + E4: nest_96_wellplate_2ml_deep_E4 + F4: nest_96_wellplate_2ml_deep_F4 + G4: nest_96_wellplate_2ml_deep_G4 + H4: nest_96_wellplate_2ml_deep_H4 + A5: nest_96_wellplate_2ml_deep_A5 + B5: nest_96_wellplate_2ml_deep_B5 + C5: nest_96_wellplate_2ml_deep_C5 + D5: nest_96_wellplate_2ml_deep_D5 + E5: nest_96_wellplate_2ml_deep_E5 + F5: nest_96_wellplate_2ml_deep_F5 + G5: nest_96_wellplate_2ml_deep_G5 + H5: nest_96_wellplate_2ml_deep_H5 + A6: nest_96_wellplate_2ml_deep_A6 + B6: nest_96_wellplate_2ml_deep_B6 + C6: nest_96_wellplate_2ml_deep_C6 + D6: nest_96_wellplate_2ml_deep_D6 + E6: nest_96_wellplate_2ml_deep_E6 + F6: nest_96_wellplate_2ml_deep_F6 + G6: nest_96_wellplate_2ml_deep_G6 + H6: nest_96_wellplate_2ml_deep_H6 + A7: nest_96_wellplate_2ml_deep_A7 + B7: nest_96_wellplate_2ml_deep_B7 + C7: nest_96_wellplate_2ml_deep_C7 + D7: nest_96_wellplate_2ml_deep_D7 + E7: nest_96_wellplate_2ml_deep_E7 + F7: nest_96_wellplate_2ml_deep_F7 + G7: nest_96_wellplate_2ml_deep_G7 + H7: nest_96_wellplate_2ml_deep_H7 + A8: nest_96_wellplate_2ml_deep_A8 + B8: nest_96_wellplate_2ml_deep_B8 + C8: nest_96_wellplate_2ml_deep_C8 + D8: nest_96_wellplate_2ml_deep_D8 + E8: nest_96_wellplate_2ml_deep_E8 + F8: nest_96_wellplate_2ml_deep_F8 + G8: nest_96_wellplate_2ml_deep_G8 + H8: nest_96_wellplate_2ml_deep_H8 + A9: nest_96_wellplate_2ml_deep_A9 + B9: nest_96_wellplate_2ml_deep_B9 + C9: nest_96_wellplate_2ml_deep_C9 + D9: nest_96_wellplate_2ml_deep_D9 + E9: nest_96_wellplate_2ml_deep_E9 + F9: nest_96_wellplate_2ml_deep_F9 + G9: nest_96_wellplate_2ml_deep_G9 + H9: nest_96_wellplate_2ml_deep_H9 + A10: nest_96_wellplate_2ml_deep_A10 + B10: nest_96_wellplate_2ml_deep_B10 + C10: nest_96_wellplate_2ml_deep_C10 + D10: nest_96_wellplate_2ml_deep_D10 + E10: nest_96_wellplate_2ml_deep_E10 + F10: nest_96_wellplate_2ml_deep_F10 + G10: nest_96_wellplate_2ml_deep_G10 + H10: nest_96_wellplate_2ml_deep_H10 + A11: nest_96_wellplate_2ml_deep_A11 + B11: nest_96_wellplate_2ml_deep_B11 + C11: nest_96_wellplate_2ml_deep_C11 + D11: nest_96_wellplate_2ml_deep_D11 + E11: nest_96_wellplate_2ml_deep_E11 + F11: nest_96_wellplate_2ml_deep_F11 + G11: nest_96_wellplate_2ml_deep_G11 + H11: nest_96_wellplate_2ml_deep_H11 + A12: nest_96_wellplate_2ml_deep_A12 + B12: nest_96_wellplate_2ml_deep_B12 + C12: nest_96_wellplate_2ml_deep_C12 + D12: nest_96_wellplate_2ml_deep_D12 + E12: nest_96_wellplate_2ml_deep_E12 + F12: nest_96_wellplate_2ml_deep_F12 + G12: nest_96_wellplate_2ml_deep_G12 + H12: nest_96_wellplate_2ml_deep_H12 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.6 + size_y: 85.3 + size_z: 41 + type: Plate + data: {} + id: nest_96_wellplate_2ml_deep + name: nest_96_wellplate_2ml_deep + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: plate + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_A1 + name: nest_96_wellplate_2ml_deep_A1 + parent: nest_96_wellplate_2ml_deep + position: + x: 10.2 + y: 70.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_B1 + name: nest_96_wellplate_2ml_deep_B1 + parent: nest_96_wellplate_2ml_deep + position: + x: 10.2 + y: 61.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_C1 + name: nest_96_wellplate_2ml_deep_C1 + parent: nest_96_wellplate_2ml_deep + position: + x: 10.2 + y: 52.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_D1 + name: nest_96_wellplate_2ml_deep_D1 + parent: nest_96_wellplate_2ml_deep + position: + x: 10.2 + y: 43.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_E1 + name: nest_96_wellplate_2ml_deep_E1 + parent: nest_96_wellplate_2ml_deep + position: + x: 10.2 + y: 34.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_F1 + name: nest_96_wellplate_2ml_deep_F1 + parent: nest_96_wellplate_2ml_deep + position: + x: 10.2 + y: 25.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_G1 + name: nest_96_wellplate_2ml_deep_G1 + parent: nest_96_wellplate_2ml_deep + position: + x: 10.2 + y: 16.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_H1 + name: nest_96_wellplate_2ml_deep_H1 + parent: nest_96_wellplate_2ml_deep + position: + x: 10.2 + y: 7.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_A2 + name: nest_96_wellplate_2ml_deep_A2 + parent: nest_96_wellplate_2ml_deep + position: + x: 19.2 + y: 70.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_B2 + name: nest_96_wellplate_2ml_deep_B2 + parent: nest_96_wellplate_2ml_deep + position: + x: 19.2 + y: 61.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_C2 + name: nest_96_wellplate_2ml_deep_C2 + parent: nest_96_wellplate_2ml_deep + position: + x: 19.2 + y: 52.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_D2 + name: nest_96_wellplate_2ml_deep_D2 + parent: nest_96_wellplate_2ml_deep + position: + x: 19.2 + y: 43.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_E2 + name: nest_96_wellplate_2ml_deep_E2 + parent: nest_96_wellplate_2ml_deep + position: + x: 19.2 + y: 34.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_F2 + name: nest_96_wellplate_2ml_deep_F2 + parent: nest_96_wellplate_2ml_deep + position: + x: 19.2 + y: 25.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_G2 + name: nest_96_wellplate_2ml_deep_G2 + parent: nest_96_wellplate_2ml_deep + position: + x: 19.2 + y: 16.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_H2 + name: nest_96_wellplate_2ml_deep_H2 + parent: nest_96_wellplate_2ml_deep + position: + x: 19.2 + y: 7.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_A3 + name: nest_96_wellplate_2ml_deep_A3 + parent: nest_96_wellplate_2ml_deep + position: + x: 28.2 + y: 70.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_B3 + name: nest_96_wellplate_2ml_deep_B3 + parent: nest_96_wellplate_2ml_deep + position: + x: 28.2 + y: 61.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_C3 + name: nest_96_wellplate_2ml_deep_C3 + parent: nest_96_wellplate_2ml_deep + position: + x: 28.2 + y: 52.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_D3 + name: nest_96_wellplate_2ml_deep_D3 + parent: nest_96_wellplate_2ml_deep + position: + x: 28.2 + y: 43.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_E3 + name: nest_96_wellplate_2ml_deep_E3 + parent: nest_96_wellplate_2ml_deep + position: + x: 28.2 + y: 34.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_F3 + name: nest_96_wellplate_2ml_deep_F3 + parent: nest_96_wellplate_2ml_deep + position: + x: 28.2 + y: 25.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_G3 + name: nest_96_wellplate_2ml_deep_G3 + parent: nest_96_wellplate_2ml_deep + position: + x: 28.2 + y: 16.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_H3 + name: nest_96_wellplate_2ml_deep_H3 + parent: nest_96_wellplate_2ml_deep + position: + x: 28.2 + y: 7.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_A4 + name: nest_96_wellplate_2ml_deep_A4 + parent: nest_96_wellplate_2ml_deep + position: + x: 37.2 + y: 70.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_B4 + name: nest_96_wellplate_2ml_deep_B4 + parent: nest_96_wellplate_2ml_deep + position: + x: 37.2 + y: 61.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_C4 + name: nest_96_wellplate_2ml_deep_C4 + parent: nest_96_wellplate_2ml_deep + position: + x: 37.2 + y: 52.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_D4 + name: nest_96_wellplate_2ml_deep_D4 + parent: nest_96_wellplate_2ml_deep + position: + x: 37.2 + y: 43.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_E4 + name: nest_96_wellplate_2ml_deep_E4 + parent: nest_96_wellplate_2ml_deep + position: + x: 37.2 + y: 34.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_F4 + name: nest_96_wellplate_2ml_deep_F4 + parent: nest_96_wellplate_2ml_deep + position: + x: 37.2 + y: 25.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_G4 + name: nest_96_wellplate_2ml_deep_G4 + parent: nest_96_wellplate_2ml_deep + position: + x: 37.2 + y: 16.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_H4 + name: nest_96_wellplate_2ml_deep_H4 + parent: nest_96_wellplate_2ml_deep + position: + x: 37.2 + y: 7.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_A5 + name: nest_96_wellplate_2ml_deep_A5 + parent: nest_96_wellplate_2ml_deep + position: + x: 46.2 + y: 70.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_B5 + name: nest_96_wellplate_2ml_deep_B5 + parent: nest_96_wellplate_2ml_deep + position: + x: 46.2 + y: 61.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_C5 + name: nest_96_wellplate_2ml_deep_C5 + parent: nest_96_wellplate_2ml_deep + position: + x: 46.2 + y: 52.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_D5 + name: nest_96_wellplate_2ml_deep_D5 + parent: nest_96_wellplate_2ml_deep + position: + x: 46.2 + y: 43.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_E5 + name: nest_96_wellplate_2ml_deep_E5 + parent: nest_96_wellplate_2ml_deep + position: + x: 46.2 + y: 34.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_F5 + name: nest_96_wellplate_2ml_deep_F5 + parent: nest_96_wellplate_2ml_deep + position: + x: 46.2 + y: 25.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_G5 + name: nest_96_wellplate_2ml_deep_G5 + parent: nest_96_wellplate_2ml_deep + position: + x: 46.2 + y: 16.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_H5 + name: nest_96_wellplate_2ml_deep_H5 + parent: nest_96_wellplate_2ml_deep + position: + x: 46.2 + y: 7.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_A6 + name: nest_96_wellplate_2ml_deep_A6 + parent: nest_96_wellplate_2ml_deep + position: + x: 55.2 + y: 70.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_B6 + name: nest_96_wellplate_2ml_deep_B6 + parent: nest_96_wellplate_2ml_deep + position: + x: 55.2 + y: 61.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_C6 + name: nest_96_wellplate_2ml_deep_C6 + parent: nest_96_wellplate_2ml_deep + position: + x: 55.2 + y: 52.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_D6 + name: nest_96_wellplate_2ml_deep_D6 + parent: nest_96_wellplate_2ml_deep + position: + x: 55.2 + y: 43.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_E6 + name: nest_96_wellplate_2ml_deep_E6 + parent: nest_96_wellplate_2ml_deep + position: + x: 55.2 + y: 34.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_F6 + name: nest_96_wellplate_2ml_deep_F6 + parent: nest_96_wellplate_2ml_deep + position: + x: 55.2 + y: 25.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_G6 + name: nest_96_wellplate_2ml_deep_G6 + parent: nest_96_wellplate_2ml_deep + position: + x: 55.2 + y: 16.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_H6 + name: nest_96_wellplate_2ml_deep_H6 + parent: nest_96_wellplate_2ml_deep + position: + x: 55.2 + y: 7.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_A7 + name: nest_96_wellplate_2ml_deep_A7 + parent: nest_96_wellplate_2ml_deep + position: + x: 64.2 + y: 70.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_B7 + name: nest_96_wellplate_2ml_deep_B7 + parent: nest_96_wellplate_2ml_deep + position: + x: 64.2 + y: 61.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_C7 + name: nest_96_wellplate_2ml_deep_C7 + parent: nest_96_wellplate_2ml_deep + position: + x: 64.2 + y: 52.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_D7 + name: nest_96_wellplate_2ml_deep_D7 + parent: nest_96_wellplate_2ml_deep + position: + x: 64.2 + y: 43.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_E7 + name: nest_96_wellplate_2ml_deep_E7 + parent: nest_96_wellplate_2ml_deep + position: + x: 64.2 + y: 34.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_F7 + name: nest_96_wellplate_2ml_deep_F7 + parent: nest_96_wellplate_2ml_deep + position: + x: 64.2 + y: 25.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_G7 + name: nest_96_wellplate_2ml_deep_G7 + parent: nest_96_wellplate_2ml_deep + position: + x: 64.2 + y: 16.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_H7 + name: nest_96_wellplate_2ml_deep_H7 + parent: nest_96_wellplate_2ml_deep + position: + x: 64.2 + y: 7.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_A8 + name: nest_96_wellplate_2ml_deep_A8 + parent: nest_96_wellplate_2ml_deep + position: + x: 73.2 + y: 70.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_B8 + name: nest_96_wellplate_2ml_deep_B8 + parent: nest_96_wellplate_2ml_deep + position: + x: 73.2 + y: 61.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_C8 + name: nest_96_wellplate_2ml_deep_C8 + parent: nest_96_wellplate_2ml_deep + position: + x: 73.2 + y: 52.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_D8 + name: nest_96_wellplate_2ml_deep_D8 + parent: nest_96_wellplate_2ml_deep + position: + x: 73.2 + y: 43.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_E8 + name: nest_96_wellplate_2ml_deep_E8 + parent: nest_96_wellplate_2ml_deep + position: + x: 73.2 + y: 34.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_F8 + name: nest_96_wellplate_2ml_deep_F8 + parent: nest_96_wellplate_2ml_deep + position: + x: 73.2 + y: 25.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_G8 + name: nest_96_wellplate_2ml_deep_G8 + parent: nest_96_wellplate_2ml_deep + position: + x: 73.2 + y: 16.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_H8 + name: nest_96_wellplate_2ml_deep_H8 + parent: nest_96_wellplate_2ml_deep + position: + x: 73.2 + y: 7.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_A9 + name: nest_96_wellplate_2ml_deep_A9 + parent: nest_96_wellplate_2ml_deep + position: + x: 82.2 + y: 70.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_B9 + name: nest_96_wellplate_2ml_deep_B9 + parent: nest_96_wellplate_2ml_deep + position: + x: 82.2 + y: 61.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_C9 + name: nest_96_wellplate_2ml_deep_C9 + parent: nest_96_wellplate_2ml_deep + position: + x: 82.2 + y: 52.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_D9 + name: nest_96_wellplate_2ml_deep_D9 + parent: nest_96_wellplate_2ml_deep + position: + x: 82.2 + y: 43.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_E9 + name: nest_96_wellplate_2ml_deep_E9 + parent: nest_96_wellplate_2ml_deep + position: + x: 82.2 + y: 34.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_F9 + name: nest_96_wellplate_2ml_deep_F9 + parent: nest_96_wellplate_2ml_deep + position: + x: 82.2 + y: 25.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_G9 + name: nest_96_wellplate_2ml_deep_G9 + parent: nest_96_wellplate_2ml_deep + position: + x: 82.2 + y: 16.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_H9 + name: nest_96_wellplate_2ml_deep_H9 + parent: nest_96_wellplate_2ml_deep + position: + x: 82.2 + y: 7.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_A10 + name: nest_96_wellplate_2ml_deep_A10 + parent: nest_96_wellplate_2ml_deep + position: + x: 91.2 + y: 70.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_B10 + name: nest_96_wellplate_2ml_deep_B10 + parent: nest_96_wellplate_2ml_deep + position: + x: 91.2 + y: 61.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_C10 + name: nest_96_wellplate_2ml_deep_C10 + parent: nest_96_wellplate_2ml_deep + position: + x: 91.2 + y: 52.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_D10 + name: nest_96_wellplate_2ml_deep_D10 + parent: nest_96_wellplate_2ml_deep + position: + x: 91.2 + y: 43.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_E10 + name: nest_96_wellplate_2ml_deep_E10 + parent: nest_96_wellplate_2ml_deep + position: + x: 91.2 + y: 34.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_F10 + name: nest_96_wellplate_2ml_deep_F10 + parent: nest_96_wellplate_2ml_deep + position: + x: 91.2 + y: 25.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_G10 + name: nest_96_wellplate_2ml_deep_G10 + parent: nest_96_wellplate_2ml_deep + position: + x: 91.2 + y: 16.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_H10 + name: nest_96_wellplate_2ml_deep_H10 + parent: nest_96_wellplate_2ml_deep + position: + x: 91.2 + y: 7.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_A11 + name: nest_96_wellplate_2ml_deep_A11 + parent: nest_96_wellplate_2ml_deep + position: + x: 100.2 + y: 70.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_B11 + name: nest_96_wellplate_2ml_deep_B11 + parent: nest_96_wellplate_2ml_deep + position: + x: 100.2 + y: 61.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_C11 + name: nest_96_wellplate_2ml_deep_C11 + parent: nest_96_wellplate_2ml_deep + position: + x: 100.2 + y: 52.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_D11 + name: nest_96_wellplate_2ml_deep_D11 + parent: nest_96_wellplate_2ml_deep + position: + x: 100.2 + y: 43.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_E11 + name: nest_96_wellplate_2ml_deep_E11 + parent: nest_96_wellplate_2ml_deep + position: + x: 100.2 + y: 34.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_F11 + name: nest_96_wellplate_2ml_deep_F11 + parent: nest_96_wellplate_2ml_deep + position: + x: 100.2 + y: 25.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_G11 + name: nest_96_wellplate_2ml_deep_G11 + parent: nest_96_wellplate_2ml_deep + position: + x: 100.2 + y: 16.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_H11 + name: nest_96_wellplate_2ml_deep_H11 + parent: nest_96_wellplate_2ml_deep + position: + x: 100.2 + y: 7.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_A12 + name: nest_96_wellplate_2ml_deep_A12 + parent: nest_96_wellplate_2ml_deep + position: + x: 109.2 + y: 70.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_B12 + name: nest_96_wellplate_2ml_deep_B12 + parent: nest_96_wellplate_2ml_deep + position: + x: 109.2 + y: 61.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_C12 + name: nest_96_wellplate_2ml_deep_C12 + parent: nest_96_wellplate_2ml_deep + position: + x: 109.2 + y: 52.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_D12 + name: nest_96_wellplate_2ml_deep_D12 + parent: nest_96_wellplate_2ml_deep + position: + x: 109.2 + y: 43.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_E12 + name: nest_96_wellplate_2ml_deep_E12 + parent: nest_96_wellplate_2ml_deep + position: + x: 109.2 + y: 34.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_F12 + name: nest_96_wellplate_2ml_deep_F12 + parent: nest_96_wellplate_2ml_deep + position: + x: 109.2 + y: 25.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_G12 + name: nest_96_wellplate_2ml_deep_G12 + parent: nest_96_wellplate_2ml_deep + position: + x: 109.2 + y: 16.05 + z: 3 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 38 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_96_wellplate_2ml_deep_H12 + name: nest_96_wellplate_2ml_deep_H12 + parent: nest_96_wellplate_2ml_deep + position: + x: 109.2 + y: 7.05 + z: 3 + sample_id: null + type: well + description: Nest 96 wellplate 2ml deep + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/plates.yaml + handles: [] + icon: '' + init_param_schema: {} + model: + mesh: tecan_nested_tip_rack/meshes/plate.stl + mesh_tf: + - 0.064 + - 0.043 + - 0 + - -1.5708 + - 0 + - 1.5708 + type: resource + registry_type: resource + version: 1.0.0 +thermoscientificnunc_96_wellplate_1300ul: + category: + - plates + class: + module: pylabrobot.resources.opentrons.plates:thermoscientificnunc_96_wellplate_1300ul + type: pylabrobot + config_info: + - children: + - thermoscientificnunc_96_wellplate_1300ul_A1 + - thermoscientificnunc_96_wellplate_1300ul_B1 + - thermoscientificnunc_96_wellplate_1300ul_C1 + - thermoscientificnunc_96_wellplate_1300ul_D1 + - thermoscientificnunc_96_wellplate_1300ul_E1 + - thermoscientificnunc_96_wellplate_1300ul_F1 + - thermoscientificnunc_96_wellplate_1300ul_G1 + - thermoscientificnunc_96_wellplate_1300ul_H1 + - thermoscientificnunc_96_wellplate_1300ul_A2 + - thermoscientificnunc_96_wellplate_1300ul_B2 + - thermoscientificnunc_96_wellplate_1300ul_C2 + - thermoscientificnunc_96_wellplate_1300ul_D2 + - thermoscientificnunc_96_wellplate_1300ul_E2 + - thermoscientificnunc_96_wellplate_1300ul_F2 + - thermoscientificnunc_96_wellplate_1300ul_G2 + - thermoscientificnunc_96_wellplate_1300ul_H2 + - thermoscientificnunc_96_wellplate_1300ul_A3 + - thermoscientificnunc_96_wellplate_1300ul_B3 + - thermoscientificnunc_96_wellplate_1300ul_C3 + - thermoscientificnunc_96_wellplate_1300ul_D3 + - thermoscientificnunc_96_wellplate_1300ul_E3 + - thermoscientificnunc_96_wellplate_1300ul_F3 + - thermoscientificnunc_96_wellplate_1300ul_G3 + - thermoscientificnunc_96_wellplate_1300ul_H3 + - thermoscientificnunc_96_wellplate_1300ul_A4 + - thermoscientificnunc_96_wellplate_1300ul_B4 + - thermoscientificnunc_96_wellplate_1300ul_C4 + - thermoscientificnunc_96_wellplate_1300ul_D4 + - thermoscientificnunc_96_wellplate_1300ul_E4 + - thermoscientificnunc_96_wellplate_1300ul_F4 + - thermoscientificnunc_96_wellplate_1300ul_G4 + - thermoscientificnunc_96_wellplate_1300ul_H4 + - thermoscientificnunc_96_wellplate_1300ul_A5 + - thermoscientificnunc_96_wellplate_1300ul_B5 + - thermoscientificnunc_96_wellplate_1300ul_C5 + - thermoscientificnunc_96_wellplate_1300ul_D5 + - thermoscientificnunc_96_wellplate_1300ul_E5 + - thermoscientificnunc_96_wellplate_1300ul_F5 + - thermoscientificnunc_96_wellplate_1300ul_G5 + - thermoscientificnunc_96_wellplate_1300ul_H5 + - thermoscientificnunc_96_wellplate_1300ul_A6 + - thermoscientificnunc_96_wellplate_1300ul_B6 + - thermoscientificnunc_96_wellplate_1300ul_C6 + - thermoscientificnunc_96_wellplate_1300ul_D6 + - thermoscientificnunc_96_wellplate_1300ul_E6 + - thermoscientificnunc_96_wellplate_1300ul_F6 + - thermoscientificnunc_96_wellplate_1300ul_G6 + - thermoscientificnunc_96_wellplate_1300ul_H6 + - thermoscientificnunc_96_wellplate_1300ul_A7 + - thermoscientificnunc_96_wellplate_1300ul_B7 + - thermoscientificnunc_96_wellplate_1300ul_C7 + - thermoscientificnunc_96_wellplate_1300ul_D7 + - thermoscientificnunc_96_wellplate_1300ul_E7 + - thermoscientificnunc_96_wellplate_1300ul_F7 + - thermoscientificnunc_96_wellplate_1300ul_G7 + - thermoscientificnunc_96_wellplate_1300ul_H7 + - thermoscientificnunc_96_wellplate_1300ul_A8 + - thermoscientificnunc_96_wellplate_1300ul_B8 + - thermoscientificnunc_96_wellplate_1300ul_C8 + - thermoscientificnunc_96_wellplate_1300ul_D8 + - thermoscientificnunc_96_wellplate_1300ul_E8 + - thermoscientificnunc_96_wellplate_1300ul_F8 + - thermoscientificnunc_96_wellplate_1300ul_G8 + - thermoscientificnunc_96_wellplate_1300ul_H8 + - thermoscientificnunc_96_wellplate_1300ul_A9 + - thermoscientificnunc_96_wellplate_1300ul_B9 + - thermoscientificnunc_96_wellplate_1300ul_C9 + - thermoscientificnunc_96_wellplate_1300ul_D9 + - thermoscientificnunc_96_wellplate_1300ul_E9 + - thermoscientificnunc_96_wellplate_1300ul_F9 + - thermoscientificnunc_96_wellplate_1300ul_G9 + - thermoscientificnunc_96_wellplate_1300ul_H9 + - thermoscientificnunc_96_wellplate_1300ul_A10 + - thermoscientificnunc_96_wellplate_1300ul_B10 + - thermoscientificnunc_96_wellplate_1300ul_C10 + - thermoscientificnunc_96_wellplate_1300ul_D10 + - thermoscientificnunc_96_wellplate_1300ul_E10 + - thermoscientificnunc_96_wellplate_1300ul_F10 + - thermoscientificnunc_96_wellplate_1300ul_G10 + - thermoscientificnunc_96_wellplate_1300ul_H10 + - thermoscientificnunc_96_wellplate_1300ul_A11 + - thermoscientificnunc_96_wellplate_1300ul_B11 + - thermoscientificnunc_96_wellplate_1300ul_C11 + - thermoscientificnunc_96_wellplate_1300ul_D11 + - thermoscientificnunc_96_wellplate_1300ul_E11 + - thermoscientificnunc_96_wellplate_1300ul_F11 + - thermoscientificnunc_96_wellplate_1300ul_G11 + - thermoscientificnunc_96_wellplate_1300ul_H11 + - thermoscientificnunc_96_wellplate_1300ul_A12 + - thermoscientificnunc_96_wellplate_1300ul_B12 + - thermoscientificnunc_96_wellplate_1300ul_C12 + - thermoscientificnunc_96_wellplate_1300ul_D12 + - thermoscientificnunc_96_wellplate_1300ul_E12 + - thermoscientificnunc_96_wellplate_1300ul_F12 + - thermoscientificnunc_96_wellplate_1300ul_G12 + - thermoscientificnunc_96_wellplate_1300ul_H12 + class: '' + config: + barcode: null + category: plate + model: Thermo Scientific Nunc 96 Well Plate 1300 µL + ordering: + A1: thermoscientificnunc_96_wellplate_1300ul_A1 + B1: thermoscientificnunc_96_wellplate_1300ul_B1 + C1: thermoscientificnunc_96_wellplate_1300ul_C1 + D1: thermoscientificnunc_96_wellplate_1300ul_D1 + E1: thermoscientificnunc_96_wellplate_1300ul_E1 + F1: thermoscientificnunc_96_wellplate_1300ul_F1 + G1: thermoscientificnunc_96_wellplate_1300ul_G1 + H1: thermoscientificnunc_96_wellplate_1300ul_H1 + A2: thermoscientificnunc_96_wellplate_1300ul_A2 + B2: thermoscientificnunc_96_wellplate_1300ul_B2 + C2: thermoscientificnunc_96_wellplate_1300ul_C2 + D2: thermoscientificnunc_96_wellplate_1300ul_D2 + E2: thermoscientificnunc_96_wellplate_1300ul_E2 + F2: thermoscientificnunc_96_wellplate_1300ul_F2 + G2: thermoscientificnunc_96_wellplate_1300ul_G2 + H2: thermoscientificnunc_96_wellplate_1300ul_H2 + A3: thermoscientificnunc_96_wellplate_1300ul_A3 + B3: thermoscientificnunc_96_wellplate_1300ul_B3 + C3: thermoscientificnunc_96_wellplate_1300ul_C3 + D3: thermoscientificnunc_96_wellplate_1300ul_D3 + E3: thermoscientificnunc_96_wellplate_1300ul_E3 + F3: thermoscientificnunc_96_wellplate_1300ul_F3 + G3: thermoscientificnunc_96_wellplate_1300ul_G3 + H3: thermoscientificnunc_96_wellplate_1300ul_H3 + A4: thermoscientificnunc_96_wellplate_1300ul_A4 + B4: thermoscientificnunc_96_wellplate_1300ul_B4 + C4: thermoscientificnunc_96_wellplate_1300ul_C4 + D4: thermoscientificnunc_96_wellplate_1300ul_D4 + E4: thermoscientificnunc_96_wellplate_1300ul_E4 + F4: thermoscientificnunc_96_wellplate_1300ul_F4 + G4: thermoscientificnunc_96_wellplate_1300ul_G4 + H4: thermoscientificnunc_96_wellplate_1300ul_H4 + A5: thermoscientificnunc_96_wellplate_1300ul_A5 + B5: thermoscientificnunc_96_wellplate_1300ul_B5 + C5: thermoscientificnunc_96_wellplate_1300ul_C5 + D5: thermoscientificnunc_96_wellplate_1300ul_D5 + E5: thermoscientificnunc_96_wellplate_1300ul_E5 + F5: thermoscientificnunc_96_wellplate_1300ul_F5 + G5: thermoscientificnunc_96_wellplate_1300ul_G5 + H5: thermoscientificnunc_96_wellplate_1300ul_H5 + A6: thermoscientificnunc_96_wellplate_1300ul_A6 + B6: thermoscientificnunc_96_wellplate_1300ul_B6 + C6: thermoscientificnunc_96_wellplate_1300ul_C6 + D6: thermoscientificnunc_96_wellplate_1300ul_D6 + E6: thermoscientificnunc_96_wellplate_1300ul_E6 + F6: thermoscientificnunc_96_wellplate_1300ul_F6 + G6: thermoscientificnunc_96_wellplate_1300ul_G6 + H6: thermoscientificnunc_96_wellplate_1300ul_H6 + A7: thermoscientificnunc_96_wellplate_1300ul_A7 + B7: thermoscientificnunc_96_wellplate_1300ul_B7 + C7: thermoscientificnunc_96_wellplate_1300ul_C7 + D7: thermoscientificnunc_96_wellplate_1300ul_D7 + E7: thermoscientificnunc_96_wellplate_1300ul_E7 + F7: thermoscientificnunc_96_wellplate_1300ul_F7 + G7: thermoscientificnunc_96_wellplate_1300ul_G7 + H7: thermoscientificnunc_96_wellplate_1300ul_H7 + A8: thermoscientificnunc_96_wellplate_1300ul_A8 + B8: thermoscientificnunc_96_wellplate_1300ul_B8 + C8: thermoscientificnunc_96_wellplate_1300ul_C8 + D8: thermoscientificnunc_96_wellplate_1300ul_D8 + E8: thermoscientificnunc_96_wellplate_1300ul_E8 + F8: thermoscientificnunc_96_wellplate_1300ul_F8 + G8: thermoscientificnunc_96_wellplate_1300ul_G8 + H8: thermoscientificnunc_96_wellplate_1300ul_H8 + A9: thermoscientificnunc_96_wellplate_1300ul_A9 + B9: thermoscientificnunc_96_wellplate_1300ul_B9 + C9: thermoscientificnunc_96_wellplate_1300ul_C9 + D9: thermoscientificnunc_96_wellplate_1300ul_D9 + E9: thermoscientificnunc_96_wellplate_1300ul_E9 + F9: thermoscientificnunc_96_wellplate_1300ul_F9 + G9: thermoscientificnunc_96_wellplate_1300ul_G9 + H9: thermoscientificnunc_96_wellplate_1300ul_H9 + A10: thermoscientificnunc_96_wellplate_1300ul_A10 + B10: thermoscientificnunc_96_wellplate_1300ul_B10 + C10: thermoscientificnunc_96_wellplate_1300ul_C10 + D10: thermoscientificnunc_96_wellplate_1300ul_D10 + E10: thermoscientificnunc_96_wellplate_1300ul_E10 + F10: thermoscientificnunc_96_wellplate_1300ul_F10 + G10: thermoscientificnunc_96_wellplate_1300ul_G10 + H10: thermoscientificnunc_96_wellplate_1300ul_H10 + A11: thermoscientificnunc_96_wellplate_1300ul_A11 + B11: thermoscientificnunc_96_wellplate_1300ul_B11 + C11: thermoscientificnunc_96_wellplate_1300ul_C11 + D11: thermoscientificnunc_96_wellplate_1300ul_D11 + E11: thermoscientificnunc_96_wellplate_1300ul_E11 + F11: thermoscientificnunc_96_wellplate_1300ul_F11 + G11: thermoscientificnunc_96_wellplate_1300ul_G11 + H11: thermoscientificnunc_96_wellplate_1300ul_H11 + A12: thermoscientificnunc_96_wellplate_1300ul_A12 + B12: thermoscientificnunc_96_wellplate_1300ul_B12 + C12: thermoscientificnunc_96_wellplate_1300ul_C12 + D12: thermoscientificnunc_96_wellplate_1300ul_D12 + E12: thermoscientificnunc_96_wellplate_1300ul_E12 + F12: thermoscientificnunc_96_wellplate_1300ul_F12 + G12: thermoscientificnunc_96_wellplate_1300ul_G12 + H12: thermoscientificnunc_96_wellplate_1300ul_H12 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.47 + size_z: 31.6 + type: Plate + data: {} + id: thermoscientificnunc_96_wellplate_1300ul + name: thermoscientificnunc_96_wellplate_1300ul + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: plate + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_A1 + name: thermoscientificnunc_96_wellplate_1300ul_A1 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 11.43 + y: 71.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_B1 + name: thermoscientificnunc_96_wellplate_1300ul_B1 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 11.43 + y: 62.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_C1 + name: thermoscientificnunc_96_wellplate_1300ul_C1 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 11.43 + y: 53.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_D1 + name: thermoscientificnunc_96_wellplate_1300ul_D1 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 11.43 + y: 44.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_E1 + name: thermoscientificnunc_96_wellplate_1300ul_E1 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 11.43 + y: 35.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_F1 + name: thermoscientificnunc_96_wellplate_1300ul_F1 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 11.43 + y: 26.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_G1 + name: thermoscientificnunc_96_wellplate_1300ul_G1 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 11.43 + y: 17.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_H1 + name: thermoscientificnunc_96_wellplate_1300ul_H1 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 11.43 + y: 8.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_A2 + name: thermoscientificnunc_96_wellplate_1300ul_A2 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 20.43 + y: 71.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_B2 + name: thermoscientificnunc_96_wellplate_1300ul_B2 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 20.43 + y: 62.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_C2 + name: thermoscientificnunc_96_wellplate_1300ul_C2 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 20.43 + y: 53.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_D2 + name: thermoscientificnunc_96_wellplate_1300ul_D2 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 20.43 + y: 44.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_E2 + name: thermoscientificnunc_96_wellplate_1300ul_E2 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 20.43 + y: 35.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_F2 + name: thermoscientificnunc_96_wellplate_1300ul_F2 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 20.43 + y: 26.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_G2 + name: thermoscientificnunc_96_wellplate_1300ul_G2 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 20.43 + y: 17.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_H2 + name: thermoscientificnunc_96_wellplate_1300ul_H2 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 20.43 + y: 8.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_A3 + name: thermoscientificnunc_96_wellplate_1300ul_A3 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 29.43 + y: 71.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_B3 + name: thermoscientificnunc_96_wellplate_1300ul_B3 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 29.43 + y: 62.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_C3 + name: thermoscientificnunc_96_wellplate_1300ul_C3 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 29.43 + y: 53.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_D3 + name: thermoscientificnunc_96_wellplate_1300ul_D3 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 29.43 + y: 44.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_E3 + name: thermoscientificnunc_96_wellplate_1300ul_E3 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 29.43 + y: 35.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_F3 + name: thermoscientificnunc_96_wellplate_1300ul_F3 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 29.43 + y: 26.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_G3 + name: thermoscientificnunc_96_wellplate_1300ul_G3 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 29.43 + y: 17.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_H3 + name: thermoscientificnunc_96_wellplate_1300ul_H3 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 29.43 + y: 8.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_A4 + name: thermoscientificnunc_96_wellplate_1300ul_A4 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 38.43 + y: 71.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_B4 + name: thermoscientificnunc_96_wellplate_1300ul_B4 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 38.43 + y: 62.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_C4 + name: thermoscientificnunc_96_wellplate_1300ul_C4 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 38.43 + y: 53.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_D4 + name: thermoscientificnunc_96_wellplate_1300ul_D4 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 38.43 + y: 44.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_E4 + name: thermoscientificnunc_96_wellplate_1300ul_E4 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 38.43 + y: 35.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_F4 + name: thermoscientificnunc_96_wellplate_1300ul_F4 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 38.43 + y: 26.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_G4 + name: thermoscientificnunc_96_wellplate_1300ul_G4 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 38.43 + y: 17.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_H4 + name: thermoscientificnunc_96_wellplate_1300ul_H4 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 38.43 + y: 8.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_A5 + name: thermoscientificnunc_96_wellplate_1300ul_A5 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 47.43 + y: 71.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_B5 + name: thermoscientificnunc_96_wellplate_1300ul_B5 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 47.43 + y: 62.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_C5 + name: thermoscientificnunc_96_wellplate_1300ul_C5 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 47.43 + y: 53.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_D5 + name: thermoscientificnunc_96_wellplate_1300ul_D5 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 47.43 + y: 44.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_E5 + name: thermoscientificnunc_96_wellplate_1300ul_E5 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 47.43 + y: 35.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_F5 + name: thermoscientificnunc_96_wellplate_1300ul_F5 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 47.43 + y: 26.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_G5 + name: thermoscientificnunc_96_wellplate_1300ul_G5 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 47.43 + y: 17.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_H5 + name: thermoscientificnunc_96_wellplate_1300ul_H5 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 47.43 + y: 8.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_A6 + name: thermoscientificnunc_96_wellplate_1300ul_A6 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 56.43 + y: 71.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_B6 + name: thermoscientificnunc_96_wellplate_1300ul_B6 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 56.43 + y: 62.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_C6 + name: thermoscientificnunc_96_wellplate_1300ul_C6 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 56.43 + y: 53.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_D6 + name: thermoscientificnunc_96_wellplate_1300ul_D6 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 56.43 + y: 44.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_E6 + name: thermoscientificnunc_96_wellplate_1300ul_E6 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 56.43 + y: 35.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_F6 + name: thermoscientificnunc_96_wellplate_1300ul_F6 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 56.43 + y: 26.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_G6 + name: thermoscientificnunc_96_wellplate_1300ul_G6 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 56.43 + y: 17.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_H6 + name: thermoscientificnunc_96_wellplate_1300ul_H6 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 56.43 + y: 8.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_A7 + name: thermoscientificnunc_96_wellplate_1300ul_A7 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 65.43 + y: 71.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_B7 + name: thermoscientificnunc_96_wellplate_1300ul_B7 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 65.43 + y: 62.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_C7 + name: thermoscientificnunc_96_wellplate_1300ul_C7 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 65.43 + y: 53.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_D7 + name: thermoscientificnunc_96_wellplate_1300ul_D7 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 65.43 + y: 44.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_E7 + name: thermoscientificnunc_96_wellplate_1300ul_E7 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 65.43 + y: 35.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_F7 + name: thermoscientificnunc_96_wellplate_1300ul_F7 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 65.43 + y: 26.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_G7 + name: thermoscientificnunc_96_wellplate_1300ul_G7 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 65.43 + y: 17.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_H7 + name: thermoscientificnunc_96_wellplate_1300ul_H7 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 65.43 + y: 8.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_A8 + name: thermoscientificnunc_96_wellplate_1300ul_A8 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 74.43 + y: 71.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_B8 + name: thermoscientificnunc_96_wellplate_1300ul_B8 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 74.43 + y: 62.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_C8 + name: thermoscientificnunc_96_wellplate_1300ul_C8 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 74.43 + y: 53.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_D8 + name: thermoscientificnunc_96_wellplate_1300ul_D8 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 74.43 + y: 44.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_E8 + name: thermoscientificnunc_96_wellplate_1300ul_E8 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 74.43 + y: 35.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_F8 + name: thermoscientificnunc_96_wellplate_1300ul_F8 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 74.43 + y: 26.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_G8 + name: thermoscientificnunc_96_wellplate_1300ul_G8 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 74.43 + y: 17.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_H8 + name: thermoscientificnunc_96_wellplate_1300ul_H8 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 74.43 + y: 8.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_A9 + name: thermoscientificnunc_96_wellplate_1300ul_A9 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 83.43 + y: 71.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_B9 + name: thermoscientificnunc_96_wellplate_1300ul_B9 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 83.43 + y: 62.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_C9 + name: thermoscientificnunc_96_wellplate_1300ul_C9 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 83.43 + y: 53.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_D9 + name: thermoscientificnunc_96_wellplate_1300ul_D9 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 83.43 + y: 44.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_E9 + name: thermoscientificnunc_96_wellplate_1300ul_E9 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 83.43 + y: 35.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_F9 + name: thermoscientificnunc_96_wellplate_1300ul_F9 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 83.43 + y: 26.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_G9 + name: thermoscientificnunc_96_wellplate_1300ul_G9 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 83.43 + y: 17.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_H9 + name: thermoscientificnunc_96_wellplate_1300ul_H9 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 83.43 + y: 8.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_A10 + name: thermoscientificnunc_96_wellplate_1300ul_A10 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 92.43 + y: 71.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_B10 + name: thermoscientificnunc_96_wellplate_1300ul_B10 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 92.43 + y: 62.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_C10 + name: thermoscientificnunc_96_wellplate_1300ul_C10 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 92.43 + y: 53.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_D10 + name: thermoscientificnunc_96_wellplate_1300ul_D10 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 92.43 + y: 44.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_E10 + name: thermoscientificnunc_96_wellplate_1300ul_E10 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 92.43 + y: 35.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_F10 + name: thermoscientificnunc_96_wellplate_1300ul_F10 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 92.43 + y: 26.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_G10 + name: thermoscientificnunc_96_wellplate_1300ul_G10 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 92.43 + y: 17.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_H10 + name: thermoscientificnunc_96_wellplate_1300ul_H10 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 92.43 + y: 8.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_A11 + name: thermoscientificnunc_96_wellplate_1300ul_A11 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 101.43 + y: 71.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_B11 + name: thermoscientificnunc_96_wellplate_1300ul_B11 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 101.43 + y: 62.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_C11 + name: thermoscientificnunc_96_wellplate_1300ul_C11 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 101.43 + y: 53.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_D11 + name: thermoscientificnunc_96_wellplate_1300ul_D11 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 101.43 + y: 44.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_E11 + name: thermoscientificnunc_96_wellplate_1300ul_E11 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 101.43 + y: 35.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_F11 + name: thermoscientificnunc_96_wellplate_1300ul_F11 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 101.43 + y: 26.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_G11 + name: thermoscientificnunc_96_wellplate_1300ul_G11 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 101.43 + y: 17.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_H11 + name: thermoscientificnunc_96_wellplate_1300ul_H11 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 101.43 + y: 8.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_A12 + name: thermoscientificnunc_96_wellplate_1300ul_A12 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 110.43 + y: 71.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_B12 + name: thermoscientificnunc_96_wellplate_1300ul_B12 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 110.43 + y: 62.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_C12 + name: thermoscientificnunc_96_wellplate_1300ul_C12 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 110.43 + y: 53.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_D12 + name: thermoscientificnunc_96_wellplate_1300ul_D12 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 110.43 + y: 44.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_E12 + name: thermoscientificnunc_96_wellplate_1300ul_E12 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 110.43 + y: 35.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_F12 + name: thermoscientificnunc_96_wellplate_1300ul_F12 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 110.43 + y: 26.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_G12 + name: thermoscientificnunc_96_wellplate_1300ul_G12 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 110.43 + y: 17.3 + z: 2.5 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 1300 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.94 + size_y: 5.94 + size_z: 29.1 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_1300ul_H12 + name: thermoscientificnunc_96_wellplate_1300ul_H12 + parent: thermoscientificnunc_96_wellplate_1300ul + position: + x: 110.43 + y: 8.3 + z: 2.5 + sample_id: null + type: well + description: Thermoscientific Nunc 96 wellplate 1300ul + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/plates.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +thermoscientificnunc_96_wellplate_2000ul: + category: + - plates + class: + module: pylabrobot.resources.opentrons.plates:thermoscientificnunc_96_wellplate_2000ul + type: pylabrobot + config_info: + - children: + - thermoscientificnunc_96_wellplate_2000ul_A1 + - thermoscientificnunc_96_wellplate_2000ul_B1 + - thermoscientificnunc_96_wellplate_2000ul_C1 + - thermoscientificnunc_96_wellplate_2000ul_D1 + - thermoscientificnunc_96_wellplate_2000ul_E1 + - thermoscientificnunc_96_wellplate_2000ul_F1 + - thermoscientificnunc_96_wellplate_2000ul_G1 + - thermoscientificnunc_96_wellplate_2000ul_H1 + - thermoscientificnunc_96_wellplate_2000ul_A2 + - thermoscientificnunc_96_wellplate_2000ul_B2 + - thermoscientificnunc_96_wellplate_2000ul_C2 + - thermoscientificnunc_96_wellplate_2000ul_D2 + - thermoscientificnunc_96_wellplate_2000ul_E2 + - thermoscientificnunc_96_wellplate_2000ul_F2 + - thermoscientificnunc_96_wellplate_2000ul_G2 + - thermoscientificnunc_96_wellplate_2000ul_H2 + - thermoscientificnunc_96_wellplate_2000ul_A3 + - thermoscientificnunc_96_wellplate_2000ul_B3 + - thermoscientificnunc_96_wellplate_2000ul_C3 + - thermoscientificnunc_96_wellplate_2000ul_D3 + - thermoscientificnunc_96_wellplate_2000ul_E3 + - thermoscientificnunc_96_wellplate_2000ul_F3 + - thermoscientificnunc_96_wellplate_2000ul_G3 + - thermoscientificnunc_96_wellplate_2000ul_H3 + - thermoscientificnunc_96_wellplate_2000ul_A4 + - thermoscientificnunc_96_wellplate_2000ul_B4 + - thermoscientificnunc_96_wellplate_2000ul_C4 + - thermoscientificnunc_96_wellplate_2000ul_D4 + - thermoscientificnunc_96_wellplate_2000ul_E4 + - thermoscientificnunc_96_wellplate_2000ul_F4 + - thermoscientificnunc_96_wellplate_2000ul_G4 + - thermoscientificnunc_96_wellplate_2000ul_H4 + - thermoscientificnunc_96_wellplate_2000ul_A5 + - thermoscientificnunc_96_wellplate_2000ul_B5 + - thermoscientificnunc_96_wellplate_2000ul_C5 + - thermoscientificnunc_96_wellplate_2000ul_D5 + - thermoscientificnunc_96_wellplate_2000ul_E5 + - thermoscientificnunc_96_wellplate_2000ul_F5 + - thermoscientificnunc_96_wellplate_2000ul_G5 + - thermoscientificnunc_96_wellplate_2000ul_H5 + - thermoscientificnunc_96_wellplate_2000ul_A6 + - thermoscientificnunc_96_wellplate_2000ul_B6 + - thermoscientificnunc_96_wellplate_2000ul_C6 + - thermoscientificnunc_96_wellplate_2000ul_D6 + - thermoscientificnunc_96_wellplate_2000ul_E6 + - thermoscientificnunc_96_wellplate_2000ul_F6 + - thermoscientificnunc_96_wellplate_2000ul_G6 + - thermoscientificnunc_96_wellplate_2000ul_H6 + - thermoscientificnunc_96_wellplate_2000ul_A7 + - thermoscientificnunc_96_wellplate_2000ul_B7 + - thermoscientificnunc_96_wellplate_2000ul_C7 + - thermoscientificnunc_96_wellplate_2000ul_D7 + - thermoscientificnunc_96_wellplate_2000ul_E7 + - thermoscientificnunc_96_wellplate_2000ul_F7 + - thermoscientificnunc_96_wellplate_2000ul_G7 + - thermoscientificnunc_96_wellplate_2000ul_H7 + - thermoscientificnunc_96_wellplate_2000ul_A8 + - thermoscientificnunc_96_wellplate_2000ul_B8 + - thermoscientificnunc_96_wellplate_2000ul_C8 + - thermoscientificnunc_96_wellplate_2000ul_D8 + - thermoscientificnunc_96_wellplate_2000ul_E8 + - thermoscientificnunc_96_wellplate_2000ul_F8 + - thermoscientificnunc_96_wellplate_2000ul_G8 + - thermoscientificnunc_96_wellplate_2000ul_H8 + - thermoscientificnunc_96_wellplate_2000ul_A9 + - thermoscientificnunc_96_wellplate_2000ul_B9 + - thermoscientificnunc_96_wellplate_2000ul_C9 + - thermoscientificnunc_96_wellplate_2000ul_D9 + - thermoscientificnunc_96_wellplate_2000ul_E9 + - thermoscientificnunc_96_wellplate_2000ul_F9 + - thermoscientificnunc_96_wellplate_2000ul_G9 + - thermoscientificnunc_96_wellplate_2000ul_H9 + - thermoscientificnunc_96_wellplate_2000ul_A10 + - thermoscientificnunc_96_wellplate_2000ul_B10 + - thermoscientificnunc_96_wellplate_2000ul_C10 + - thermoscientificnunc_96_wellplate_2000ul_D10 + - thermoscientificnunc_96_wellplate_2000ul_E10 + - thermoscientificnunc_96_wellplate_2000ul_F10 + - thermoscientificnunc_96_wellplate_2000ul_G10 + - thermoscientificnunc_96_wellplate_2000ul_H10 + - thermoscientificnunc_96_wellplate_2000ul_A11 + - thermoscientificnunc_96_wellplate_2000ul_B11 + - thermoscientificnunc_96_wellplate_2000ul_C11 + - thermoscientificnunc_96_wellplate_2000ul_D11 + - thermoscientificnunc_96_wellplate_2000ul_E11 + - thermoscientificnunc_96_wellplate_2000ul_F11 + - thermoscientificnunc_96_wellplate_2000ul_G11 + - thermoscientificnunc_96_wellplate_2000ul_H11 + - thermoscientificnunc_96_wellplate_2000ul_A12 + - thermoscientificnunc_96_wellplate_2000ul_B12 + - thermoscientificnunc_96_wellplate_2000ul_C12 + - thermoscientificnunc_96_wellplate_2000ul_D12 + - thermoscientificnunc_96_wellplate_2000ul_E12 + - thermoscientificnunc_96_wellplate_2000ul_F12 + - thermoscientificnunc_96_wellplate_2000ul_G12 + - thermoscientificnunc_96_wellplate_2000ul_H12 + class: '' + config: + barcode: null + category: plate + model: Thermo Scientific Nunc 96 Well Plate 2000 µL + ordering: + A1: thermoscientificnunc_96_wellplate_2000ul_A1 + B1: thermoscientificnunc_96_wellplate_2000ul_B1 + C1: thermoscientificnunc_96_wellplate_2000ul_C1 + D1: thermoscientificnunc_96_wellplate_2000ul_D1 + E1: thermoscientificnunc_96_wellplate_2000ul_E1 + F1: thermoscientificnunc_96_wellplate_2000ul_F1 + G1: thermoscientificnunc_96_wellplate_2000ul_G1 + H1: thermoscientificnunc_96_wellplate_2000ul_H1 + A2: thermoscientificnunc_96_wellplate_2000ul_A2 + B2: thermoscientificnunc_96_wellplate_2000ul_B2 + C2: thermoscientificnunc_96_wellplate_2000ul_C2 + D2: thermoscientificnunc_96_wellplate_2000ul_D2 + E2: thermoscientificnunc_96_wellplate_2000ul_E2 + F2: thermoscientificnunc_96_wellplate_2000ul_F2 + G2: thermoscientificnunc_96_wellplate_2000ul_G2 + H2: thermoscientificnunc_96_wellplate_2000ul_H2 + A3: thermoscientificnunc_96_wellplate_2000ul_A3 + B3: thermoscientificnunc_96_wellplate_2000ul_B3 + C3: thermoscientificnunc_96_wellplate_2000ul_C3 + D3: thermoscientificnunc_96_wellplate_2000ul_D3 + E3: thermoscientificnunc_96_wellplate_2000ul_E3 + F3: thermoscientificnunc_96_wellplate_2000ul_F3 + G3: thermoscientificnunc_96_wellplate_2000ul_G3 + H3: thermoscientificnunc_96_wellplate_2000ul_H3 + A4: thermoscientificnunc_96_wellplate_2000ul_A4 + B4: thermoscientificnunc_96_wellplate_2000ul_B4 + C4: thermoscientificnunc_96_wellplate_2000ul_C4 + D4: thermoscientificnunc_96_wellplate_2000ul_D4 + E4: thermoscientificnunc_96_wellplate_2000ul_E4 + F4: thermoscientificnunc_96_wellplate_2000ul_F4 + G4: thermoscientificnunc_96_wellplate_2000ul_G4 + H4: thermoscientificnunc_96_wellplate_2000ul_H4 + A5: thermoscientificnunc_96_wellplate_2000ul_A5 + B5: thermoscientificnunc_96_wellplate_2000ul_B5 + C5: thermoscientificnunc_96_wellplate_2000ul_C5 + D5: thermoscientificnunc_96_wellplate_2000ul_D5 + E5: thermoscientificnunc_96_wellplate_2000ul_E5 + F5: thermoscientificnunc_96_wellplate_2000ul_F5 + G5: thermoscientificnunc_96_wellplate_2000ul_G5 + H5: thermoscientificnunc_96_wellplate_2000ul_H5 + A6: thermoscientificnunc_96_wellplate_2000ul_A6 + B6: thermoscientificnunc_96_wellplate_2000ul_B6 + C6: thermoscientificnunc_96_wellplate_2000ul_C6 + D6: thermoscientificnunc_96_wellplate_2000ul_D6 + E6: thermoscientificnunc_96_wellplate_2000ul_E6 + F6: thermoscientificnunc_96_wellplate_2000ul_F6 + G6: thermoscientificnunc_96_wellplate_2000ul_G6 + H6: thermoscientificnunc_96_wellplate_2000ul_H6 + A7: thermoscientificnunc_96_wellplate_2000ul_A7 + B7: thermoscientificnunc_96_wellplate_2000ul_B7 + C7: thermoscientificnunc_96_wellplate_2000ul_C7 + D7: thermoscientificnunc_96_wellplate_2000ul_D7 + E7: thermoscientificnunc_96_wellplate_2000ul_E7 + F7: thermoscientificnunc_96_wellplate_2000ul_F7 + G7: thermoscientificnunc_96_wellplate_2000ul_G7 + H7: thermoscientificnunc_96_wellplate_2000ul_H7 + A8: thermoscientificnunc_96_wellplate_2000ul_A8 + B8: thermoscientificnunc_96_wellplate_2000ul_B8 + C8: thermoscientificnunc_96_wellplate_2000ul_C8 + D8: thermoscientificnunc_96_wellplate_2000ul_D8 + E8: thermoscientificnunc_96_wellplate_2000ul_E8 + F8: thermoscientificnunc_96_wellplate_2000ul_F8 + G8: thermoscientificnunc_96_wellplate_2000ul_G8 + H8: thermoscientificnunc_96_wellplate_2000ul_H8 + A9: thermoscientificnunc_96_wellplate_2000ul_A9 + B9: thermoscientificnunc_96_wellplate_2000ul_B9 + C9: thermoscientificnunc_96_wellplate_2000ul_C9 + D9: thermoscientificnunc_96_wellplate_2000ul_D9 + E9: thermoscientificnunc_96_wellplate_2000ul_E9 + F9: thermoscientificnunc_96_wellplate_2000ul_F9 + G9: thermoscientificnunc_96_wellplate_2000ul_G9 + H9: thermoscientificnunc_96_wellplate_2000ul_H9 + A10: thermoscientificnunc_96_wellplate_2000ul_A10 + B10: thermoscientificnunc_96_wellplate_2000ul_B10 + C10: thermoscientificnunc_96_wellplate_2000ul_C10 + D10: thermoscientificnunc_96_wellplate_2000ul_D10 + E10: thermoscientificnunc_96_wellplate_2000ul_E10 + F10: thermoscientificnunc_96_wellplate_2000ul_F10 + G10: thermoscientificnunc_96_wellplate_2000ul_G10 + H10: thermoscientificnunc_96_wellplate_2000ul_H10 + A11: thermoscientificnunc_96_wellplate_2000ul_A11 + B11: thermoscientificnunc_96_wellplate_2000ul_B11 + C11: thermoscientificnunc_96_wellplate_2000ul_C11 + D11: thermoscientificnunc_96_wellplate_2000ul_D11 + E11: thermoscientificnunc_96_wellplate_2000ul_E11 + F11: thermoscientificnunc_96_wellplate_2000ul_F11 + G11: thermoscientificnunc_96_wellplate_2000ul_G11 + H11: thermoscientificnunc_96_wellplate_2000ul_H11 + A12: thermoscientificnunc_96_wellplate_2000ul_A12 + B12: thermoscientificnunc_96_wellplate_2000ul_B12 + C12: thermoscientificnunc_96_wellplate_2000ul_C12 + D12: thermoscientificnunc_96_wellplate_2000ul_D12 + E12: thermoscientificnunc_96_wellplate_2000ul_E12 + F12: thermoscientificnunc_96_wellplate_2000ul_F12 + G12: thermoscientificnunc_96_wellplate_2000ul_G12 + H12: thermoscientificnunc_96_wellplate_2000ul_H12 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.8 + size_y: 85.5 + size_z: 43.6 + type: Plate + data: {} + id: thermoscientificnunc_96_wellplate_2000ul + name: thermoscientificnunc_96_wellplate_2000ul + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: plate + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_A1 + name: thermoscientificnunc_96_wellplate_2000ul_A1 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 11.295 + y: 71.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_B1 + name: thermoscientificnunc_96_wellplate_2000ul_B1 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 11.295 + y: 62.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_C1 + name: thermoscientificnunc_96_wellplate_2000ul_C1 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 11.295 + y: 53.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_D1 + name: thermoscientificnunc_96_wellplate_2000ul_D1 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 11.295 + y: 44.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_E1 + name: thermoscientificnunc_96_wellplate_2000ul_E1 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 11.295 + y: 35.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_F1 + name: thermoscientificnunc_96_wellplate_2000ul_F1 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 11.295 + y: 26.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_G1 + name: thermoscientificnunc_96_wellplate_2000ul_G1 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 11.295 + y: 17.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_H1 + name: thermoscientificnunc_96_wellplate_2000ul_H1 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 11.295 + y: 8.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_A2 + name: thermoscientificnunc_96_wellplate_2000ul_A2 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 20.295 + y: 71.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_B2 + name: thermoscientificnunc_96_wellplate_2000ul_B2 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 20.295 + y: 62.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_C2 + name: thermoscientificnunc_96_wellplate_2000ul_C2 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 20.295 + y: 53.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_D2 + name: thermoscientificnunc_96_wellplate_2000ul_D2 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 20.295 + y: 44.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_E2 + name: thermoscientificnunc_96_wellplate_2000ul_E2 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 20.295 + y: 35.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_F2 + name: thermoscientificnunc_96_wellplate_2000ul_F2 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 20.295 + y: 26.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_G2 + name: thermoscientificnunc_96_wellplate_2000ul_G2 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 20.295 + y: 17.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_H2 + name: thermoscientificnunc_96_wellplate_2000ul_H2 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 20.295 + y: 8.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_A3 + name: thermoscientificnunc_96_wellplate_2000ul_A3 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 29.295 + y: 71.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_B3 + name: thermoscientificnunc_96_wellplate_2000ul_B3 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 29.295 + y: 62.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_C3 + name: thermoscientificnunc_96_wellplate_2000ul_C3 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 29.295 + y: 53.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_D3 + name: thermoscientificnunc_96_wellplate_2000ul_D3 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 29.295 + y: 44.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_E3 + name: thermoscientificnunc_96_wellplate_2000ul_E3 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 29.295 + y: 35.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_F3 + name: thermoscientificnunc_96_wellplate_2000ul_F3 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 29.295 + y: 26.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_G3 + name: thermoscientificnunc_96_wellplate_2000ul_G3 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 29.295 + y: 17.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_H3 + name: thermoscientificnunc_96_wellplate_2000ul_H3 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 29.295 + y: 8.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_A4 + name: thermoscientificnunc_96_wellplate_2000ul_A4 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 38.295 + y: 71.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_B4 + name: thermoscientificnunc_96_wellplate_2000ul_B4 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 38.295 + y: 62.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_C4 + name: thermoscientificnunc_96_wellplate_2000ul_C4 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 38.295 + y: 53.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_D4 + name: thermoscientificnunc_96_wellplate_2000ul_D4 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 38.295 + y: 44.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_E4 + name: thermoscientificnunc_96_wellplate_2000ul_E4 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 38.295 + y: 35.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_F4 + name: thermoscientificnunc_96_wellplate_2000ul_F4 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 38.295 + y: 26.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_G4 + name: thermoscientificnunc_96_wellplate_2000ul_G4 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 38.295 + y: 17.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_H4 + name: thermoscientificnunc_96_wellplate_2000ul_H4 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 38.295 + y: 8.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_A5 + name: thermoscientificnunc_96_wellplate_2000ul_A5 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 47.295 + y: 71.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_B5 + name: thermoscientificnunc_96_wellplate_2000ul_B5 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 47.295 + y: 62.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_C5 + name: thermoscientificnunc_96_wellplate_2000ul_C5 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 47.295 + y: 53.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_D5 + name: thermoscientificnunc_96_wellplate_2000ul_D5 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 47.295 + y: 44.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_E5 + name: thermoscientificnunc_96_wellplate_2000ul_E5 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 47.295 + y: 35.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_F5 + name: thermoscientificnunc_96_wellplate_2000ul_F5 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 47.295 + y: 26.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_G5 + name: thermoscientificnunc_96_wellplate_2000ul_G5 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 47.295 + y: 17.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_H5 + name: thermoscientificnunc_96_wellplate_2000ul_H5 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 47.295 + y: 8.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_A6 + name: thermoscientificnunc_96_wellplate_2000ul_A6 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 56.295 + y: 71.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_B6 + name: thermoscientificnunc_96_wellplate_2000ul_B6 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 56.295 + y: 62.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_C6 + name: thermoscientificnunc_96_wellplate_2000ul_C6 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 56.295 + y: 53.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_D6 + name: thermoscientificnunc_96_wellplate_2000ul_D6 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 56.295 + y: 44.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_E6 + name: thermoscientificnunc_96_wellplate_2000ul_E6 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 56.295 + y: 35.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_F6 + name: thermoscientificnunc_96_wellplate_2000ul_F6 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 56.295 + y: 26.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_G6 + name: thermoscientificnunc_96_wellplate_2000ul_G6 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 56.295 + y: 17.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_H6 + name: thermoscientificnunc_96_wellplate_2000ul_H6 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 56.295 + y: 8.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_A7 + name: thermoscientificnunc_96_wellplate_2000ul_A7 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 65.295 + y: 71.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_B7 + name: thermoscientificnunc_96_wellplate_2000ul_B7 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 65.295 + y: 62.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_C7 + name: thermoscientificnunc_96_wellplate_2000ul_C7 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 65.295 + y: 53.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_D7 + name: thermoscientificnunc_96_wellplate_2000ul_D7 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 65.295 + y: 44.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_E7 + name: thermoscientificnunc_96_wellplate_2000ul_E7 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 65.295 + y: 35.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_F7 + name: thermoscientificnunc_96_wellplate_2000ul_F7 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 65.295 + y: 26.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_G7 + name: thermoscientificnunc_96_wellplate_2000ul_G7 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 65.295 + y: 17.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_H7 + name: thermoscientificnunc_96_wellplate_2000ul_H7 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 65.295 + y: 8.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_A8 + name: thermoscientificnunc_96_wellplate_2000ul_A8 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 74.295 + y: 71.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_B8 + name: thermoscientificnunc_96_wellplate_2000ul_B8 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 74.295 + y: 62.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_C8 + name: thermoscientificnunc_96_wellplate_2000ul_C8 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 74.295 + y: 53.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_D8 + name: thermoscientificnunc_96_wellplate_2000ul_D8 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 74.295 + y: 44.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_E8 + name: thermoscientificnunc_96_wellplate_2000ul_E8 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 74.295 + y: 35.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_F8 + name: thermoscientificnunc_96_wellplate_2000ul_F8 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 74.295 + y: 26.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_G8 + name: thermoscientificnunc_96_wellplate_2000ul_G8 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 74.295 + y: 17.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_H8 + name: thermoscientificnunc_96_wellplate_2000ul_H8 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 74.295 + y: 8.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_A9 + name: thermoscientificnunc_96_wellplate_2000ul_A9 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 83.295 + y: 71.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_B9 + name: thermoscientificnunc_96_wellplate_2000ul_B9 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 83.295 + y: 62.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_C9 + name: thermoscientificnunc_96_wellplate_2000ul_C9 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 83.295 + y: 53.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_D9 + name: thermoscientificnunc_96_wellplate_2000ul_D9 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 83.295 + y: 44.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_E9 + name: thermoscientificnunc_96_wellplate_2000ul_E9 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 83.295 + y: 35.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_F9 + name: thermoscientificnunc_96_wellplate_2000ul_F9 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 83.295 + y: 26.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_G9 + name: thermoscientificnunc_96_wellplate_2000ul_G9 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 83.295 + y: 17.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_H9 + name: thermoscientificnunc_96_wellplate_2000ul_H9 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 83.295 + y: 8.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_A10 + name: thermoscientificnunc_96_wellplate_2000ul_A10 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 92.295 + y: 71.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_B10 + name: thermoscientificnunc_96_wellplate_2000ul_B10 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 92.295 + y: 62.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_C10 + name: thermoscientificnunc_96_wellplate_2000ul_C10 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 92.295 + y: 53.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_D10 + name: thermoscientificnunc_96_wellplate_2000ul_D10 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 92.295 + y: 44.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_E10 + name: thermoscientificnunc_96_wellplate_2000ul_E10 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 92.295 + y: 35.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_F10 + name: thermoscientificnunc_96_wellplate_2000ul_F10 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 92.295 + y: 26.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_G10 + name: thermoscientificnunc_96_wellplate_2000ul_G10 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 92.295 + y: 17.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_H10 + name: thermoscientificnunc_96_wellplate_2000ul_H10 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 92.295 + y: 8.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_A11 + name: thermoscientificnunc_96_wellplate_2000ul_A11 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 101.295 + y: 71.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_B11 + name: thermoscientificnunc_96_wellplate_2000ul_B11 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 101.295 + y: 62.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_C11 + name: thermoscientificnunc_96_wellplate_2000ul_C11 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 101.295 + y: 53.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_D11 + name: thermoscientificnunc_96_wellplate_2000ul_D11 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 101.295 + y: 44.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_E11 + name: thermoscientificnunc_96_wellplate_2000ul_E11 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 101.295 + y: 35.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_F11 + name: thermoscientificnunc_96_wellplate_2000ul_F11 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 101.295 + y: 26.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_G11 + name: thermoscientificnunc_96_wellplate_2000ul_G11 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 101.295 + y: 17.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_H11 + name: thermoscientificnunc_96_wellplate_2000ul_H11 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 101.295 + y: 8.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_A12 + name: thermoscientificnunc_96_wellplate_2000ul_A12 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 110.295 + y: 71.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_B12 + name: thermoscientificnunc_96_wellplate_2000ul_B12 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 110.295 + y: 62.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_C12 + name: thermoscientificnunc_96_wellplate_2000ul_C12 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 110.295 + y: 53.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_D12 + name: thermoscientificnunc_96_wellplate_2000ul_D12 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 110.295 + y: 44.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_E12 + name: thermoscientificnunc_96_wellplate_2000ul_E12 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 110.295 + y: 35.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_F12 + name: thermoscientificnunc_96_wellplate_2000ul_F12 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 110.295 + y: 26.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_G12 + name: thermoscientificnunc_96_wellplate_2000ul_G12 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 110.295 + y: 17.195 + z: 2.1 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: circle + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 41.5 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: thermoscientificnunc_96_wellplate_2000ul_H12 + name: thermoscientificnunc_96_wellplate_2000ul_H12 + parent: thermoscientificnunc_96_wellplate_2000ul + position: + x: 110.295 + y: 8.195 + z: 2.1 + sample_id: null + type: well + description: Thermoscientific Nunc 96 wellplate 2000ul + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/plates.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +usascientific_96_wellplate_2point4ml_deep: + category: + - plates + class: + module: pylabrobot.resources.opentrons.plates:usascientific_96_wellplate_2point4ml_deep + type: pylabrobot + config_info: + - children: + - usascientific_96_wellplate_2point4ml_deep_A1 + - usascientific_96_wellplate_2point4ml_deep_B1 + - usascientific_96_wellplate_2point4ml_deep_C1 + - usascientific_96_wellplate_2point4ml_deep_D1 + - usascientific_96_wellplate_2point4ml_deep_E1 + - usascientific_96_wellplate_2point4ml_deep_F1 + - usascientific_96_wellplate_2point4ml_deep_G1 + - usascientific_96_wellplate_2point4ml_deep_H1 + - usascientific_96_wellplate_2point4ml_deep_A2 + - usascientific_96_wellplate_2point4ml_deep_B2 + - usascientific_96_wellplate_2point4ml_deep_C2 + - usascientific_96_wellplate_2point4ml_deep_D2 + - usascientific_96_wellplate_2point4ml_deep_E2 + - usascientific_96_wellplate_2point4ml_deep_F2 + - usascientific_96_wellplate_2point4ml_deep_G2 + - usascientific_96_wellplate_2point4ml_deep_H2 + - usascientific_96_wellplate_2point4ml_deep_A3 + - usascientific_96_wellplate_2point4ml_deep_B3 + - usascientific_96_wellplate_2point4ml_deep_C3 + - usascientific_96_wellplate_2point4ml_deep_D3 + - usascientific_96_wellplate_2point4ml_deep_E3 + - usascientific_96_wellplate_2point4ml_deep_F3 + - usascientific_96_wellplate_2point4ml_deep_G3 + - usascientific_96_wellplate_2point4ml_deep_H3 + - usascientific_96_wellplate_2point4ml_deep_A4 + - usascientific_96_wellplate_2point4ml_deep_B4 + - usascientific_96_wellplate_2point4ml_deep_C4 + - usascientific_96_wellplate_2point4ml_deep_D4 + - usascientific_96_wellplate_2point4ml_deep_E4 + - usascientific_96_wellplate_2point4ml_deep_F4 + - usascientific_96_wellplate_2point4ml_deep_G4 + - usascientific_96_wellplate_2point4ml_deep_H4 + - usascientific_96_wellplate_2point4ml_deep_A5 + - usascientific_96_wellplate_2point4ml_deep_B5 + - usascientific_96_wellplate_2point4ml_deep_C5 + - usascientific_96_wellplate_2point4ml_deep_D5 + - usascientific_96_wellplate_2point4ml_deep_E5 + - usascientific_96_wellplate_2point4ml_deep_F5 + - usascientific_96_wellplate_2point4ml_deep_G5 + - usascientific_96_wellplate_2point4ml_deep_H5 + - usascientific_96_wellplate_2point4ml_deep_A6 + - usascientific_96_wellplate_2point4ml_deep_B6 + - usascientific_96_wellplate_2point4ml_deep_C6 + - usascientific_96_wellplate_2point4ml_deep_D6 + - usascientific_96_wellplate_2point4ml_deep_E6 + - usascientific_96_wellplate_2point4ml_deep_F6 + - usascientific_96_wellplate_2point4ml_deep_G6 + - usascientific_96_wellplate_2point4ml_deep_H6 + - usascientific_96_wellplate_2point4ml_deep_A7 + - usascientific_96_wellplate_2point4ml_deep_B7 + - usascientific_96_wellplate_2point4ml_deep_C7 + - usascientific_96_wellplate_2point4ml_deep_D7 + - usascientific_96_wellplate_2point4ml_deep_E7 + - usascientific_96_wellplate_2point4ml_deep_F7 + - usascientific_96_wellplate_2point4ml_deep_G7 + - usascientific_96_wellplate_2point4ml_deep_H7 + - usascientific_96_wellplate_2point4ml_deep_A8 + - usascientific_96_wellplate_2point4ml_deep_B8 + - usascientific_96_wellplate_2point4ml_deep_C8 + - usascientific_96_wellplate_2point4ml_deep_D8 + - usascientific_96_wellplate_2point4ml_deep_E8 + - usascientific_96_wellplate_2point4ml_deep_F8 + - usascientific_96_wellplate_2point4ml_deep_G8 + - usascientific_96_wellplate_2point4ml_deep_H8 + - usascientific_96_wellplate_2point4ml_deep_A9 + - usascientific_96_wellplate_2point4ml_deep_B9 + - usascientific_96_wellplate_2point4ml_deep_C9 + - usascientific_96_wellplate_2point4ml_deep_D9 + - usascientific_96_wellplate_2point4ml_deep_E9 + - usascientific_96_wellplate_2point4ml_deep_F9 + - usascientific_96_wellplate_2point4ml_deep_G9 + - usascientific_96_wellplate_2point4ml_deep_H9 + - usascientific_96_wellplate_2point4ml_deep_A10 + - usascientific_96_wellplate_2point4ml_deep_B10 + - usascientific_96_wellplate_2point4ml_deep_C10 + - usascientific_96_wellplate_2point4ml_deep_D10 + - usascientific_96_wellplate_2point4ml_deep_E10 + - usascientific_96_wellplate_2point4ml_deep_F10 + - usascientific_96_wellplate_2point4ml_deep_G10 + - usascientific_96_wellplate_2point4ml_deep_H10 + - usascientific_96_wellplate_2point4ml_deep_A11 + - usascientific_96_wellplate_2point4ml_deep_B11 + - usascientific_96_wellplate_2point4ml_deep_C11 + - usascientific_96_wellplate_2point4ml_deep_D11 + - usascientific_96_wellplate_2point4ml_deep_E11 + - usascientific_96_wellplate_2point4ml_deep_F11 + - usascientific_96_wellplate_2point4ml_deep_G11 + - usascientific_96_wellplate_2point4ml_deep_H11 + - usascientific_96_wellplate_2point4ml_deep_A12 + - usascientific_96_wellplate_2point4ml_deep_B12 + - usascientific_96_wellplate_2point4ml_deep_C12 + - usascientific_96_wellplate_2point4ml_deep_D12 + - usascientific_96_wellplate_2point4ml_deep_E12 + - usascientific_96_wellplate_2point4ml_deep_F12 + - usascientific_96_wellplate_2point4ml_deep_G12 + - usascientific_96_wellplate_2point4ml_deep_H12 + class: '' + config: + barcode: null + category: plate + model: USA Scientific 96 Deep Well Plate 2.4 mL + ordering: + A1: usascientific_96_wellplate_2point4ml_deep_A1 + B1: usascientific_96_wellplate_2point4ml_deep_B1 + C1: usascientific_96_wellplate_2point4ml_deep_C1 + D1: usascientific_96_wellplate_2point4ml_deep_D1 + E1: usascientific_96_wellplate_2point4ml_deep_E1 + F1: usascientific_96_wellplate_2point4ml_deep_F1 + G1: usascientific_96_wellplate_2point4ml_deep_G1 + H1: usascientific_96_wellplate_2point4ml_deep_H1 + A2: usascientific_96_wellplate_2point4ml_deep_A2 + B2: usascientific_96_wellplate_2point4ml_deep_B2 + C2: usascientific_96_wellplate_2point4ml_deep_C2 + D2: usascientific_96_wellplate_2point4ml_deep_D2 + E2: usascientific_96_wellplate_2point4ml_deep_E2 + F2: usascientific_96_wellplate_2point4ml_deep_F2 + G2: usascientific_96_wellplate_2point4ml_deep_G2 + H2: usascientific_96_wellplate_2point4ml_deep_H2 + A3: usascientific_96_wellplate_2point4ml_deep_A3 + B3: usascientific_96_wellplate_2point4ml_deep_B3 + C3: usascientific_96_wellplate_2point4ml_deep_C3 + D3: usascientific_96_wellplate_2point4ml_deep_D3 + E3: usascientific_96_wellplate_2point4ml_deep_E3 + F3: usascientific_96_wellplate_2point4ml_deep_F3 + G3: usascientific_96_wellplate_2point4ml_deep_G3 + H3: usascientific_96_wellplate_2point4ml_deep_H3 + A4: usascientific_96_wellplate_2point4ml_deep_A4 + B4: usascientific_96_wellplate_2point4ml_deep_B4 + C4: usascientific_96_wellplate_2point4ml_deep_C4 + D4: usascientific_96_wellplate_2point4ml_deep_D4 + E4: usascientific_96_wellplate_2point4ml_deep_E4 + F4: usascientific_96_wellplate_2point4ml_deep_F4 + G4: usascientific_96_wellplate_2point4ml_deep_G4 + H4: usascientific_96_wellplate_2point4ml_deep_H4 + A5: usascientific_96_wellplate_2point4ml_deep_A5 + B5: usascientific_96_wellplate_2point4ml_deep_B5 + C5: usascientific_96_wellplate_2point4ml_deep_C5 + D5: usascientific_96_wellplate_2point4ml_deep_D5 + E5: usascientific_96_wellplate_2point4ml_deep_E5 + F5: usascientific_96_wellplate_2point4ml_deep_F5 + G5: usascientific_96_wellplate_2point4ml_deep_G5 + H5: usascientific_96_wellplate_2point4ml_deep_H5 + A6: usascientific_96_wellplate_2point4ml_deep_A6 + B6: usascientific_96_wellplate_2point4ml_deep_B6 + C6: usascientific_96_wellplate_2point4ml_deep_C6 + D6: usascientific_96_wellplate_2point4ml_deep_D6 + E6: usascientific_96_wellplate_2point4ml_deep_E6 + F6: usascientific_96_wellplate_2point4ml_deep_F6 + G6: usascientific_96_wellplate_2point4ml_deep_G6 + H6: usascientific_96_wellplate_2point4ml_deep_H6 + A7: usascientific_96_wellplate_2point4ml_deep_A7 + B7: usascientific_96_wellplate_2point4ml_deep_B7 + C7: usascientific_96_wellplate_2point4ml_deep_C7 + D7: usascientific_96_wellplate_2point4ml_deep_D7 + E7: usascientific_96_wellplate_2point4ml_deep_E7 + F7: usascientific_96_wellplate_2point4ml_deep_F7 + G7: usascientific_96_wellplate_2point4ml_deep_G7 + H7: usascientific_96_wellplate_2point4ml_deep_H7 + A8: usascientific_96_wellplate_2point4ml_deep_A8 + B8: usascientific_96_wellplate_2point4ml_deep_B8 + C8: usascientific_96_wellplate_2point4ml_deep_C8 + D8: usascientific_96_wellplate_2point4ml_deep_D8 + E8: usascientific_96_wellplate_2point4ml_deep_E8 + F8: usascientific_96_wellplate_2point4ml_deep_F8 + G8: usascientific_96_wellplate_2point4ml_deep_G8 + H8: usascientific_96_wellplate_2point4ml_deep_H8 + A9: usascientific_96_wellplate_2point4ml_deep_A9 + B9: usascientific_96_wellplate_2point4ml_deep_B9 + C9: usascientific_96_wellplate_2point4ml_deep_C9 + D9: usascientific_96_wellplate_2point4ml_deep_D9 + E9: usascientific_96_wellplate_2point4ml_deep_E9 + F9: usascientific_96_wellplate_2point4ml_deep_F9 + G9: usascientific_96_wellplate_2point4ml_deep_G9 + H9: usascientific_96_wellplate_2point4ml_deep_H9 + A10: usascientific_96_wellplate_2point4ml_deep_A10 + B10: usascientific_96_wellplate_2point4ml_deep_B10 + C10: usascientific_96_wellplate_2point4ml_deep_C10 + D10: usascientific_96_wellplate_2point4ml_deep_D10 + E10: usascientific_96_wellplate_2point4ml_deep_E10 + F10: usascientific_96_wellplate_2point4ml_deep_F10 + G10: usascientific_96_wellplate_2point4ml_deep_G10 + H10: usascientific_96_wellplate_2point4ml_deep_H10 + A11: usascientific_96_wellplate_2point4ml_deep_A11 + B11: usascientific_96_wellplate_2point4ml_deep_B11 + C11: usascientific_96_wellplate_2point4ml_deep_C11 + D11: usascientific_96_wellplate_2point4ml_deep_D11 + E11: usascientific_96_wellplate_2point4ml_deep_E11 + F11: usascientific_96_wellplate_2point4ml_deep_F11 + G11: usascientific_96_wellplate_2point4ml_deep_G11 + H11: usascientific_96_wellplate_2point4ml_deep_H11 + A12: usascientific_96_wellplate_2point4ml_deep_A12 + B12: usascientific_96_wellplate_2point4ml_deep_B12 + C12: usascientific_96_wellplate_2point4ml_deep_C12 + D12: usascientific_96_wellplate_2point4ml_deep_D12 + E12: usascientific_96_wellplate_2point4ml_deep_E12 + F12: usascientific_96_wellplate_2point4ml_deep_F12 + G12: usascientific_96_wellplate_2point4ml_deep_G12 + H12: usascientific_96_wellplate_2point4ml_deep_H12 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.8 + size_y: 85.5 + size_z: 44.1 + type: Plate + data: {} + id: usascientific_96_wellplate_2point4ml_deep + name: usascientific_96_wellplate_2point4ml_deep + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: plate + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_A1 + name: usascientific_96_wellplate_2point4ml_deep_A1 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 10.3 + y: 70.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_B1 + name: usascientific_96_wellplate_2point4ml_deep_B1 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 10.3 + y: 61.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_C1 + name: usascientific_96_wellplate_2point4ml_deep_C1 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 10.3 + y: 52.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_D1 + name: usascientific_96_wellplate_2point4ml_deep_D1 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 10.3 + y: 43.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_E1 + name: usascientific_96_wellplate_2point4ml_deep_E1 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 10.3 + y: 34.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_F1 + name: usascientific_96_wellplate_2point4ml_deep_F1 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 10.3 + y: 25.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_G1 + name: usascientific_96_wellplate_2point4ml_deep_G1 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 10.3 + y: 16.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_H1 + name: usascientific_96_wellplate_2point4ml_deep_H1 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 10.3 + y: 7.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_A2 + name: usascientific_96_wellplate_2point4ml_deep_A2 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 19.3 + y: 70.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_B2 + name: usascientific_96_wellplate_2point4ml_deep_B2 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 19.3 + y: 61.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_C2 + name: usascientific_96_wellplate_2point4ml_deep_C2 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 19.3 + y: 52.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_D2 + name: usascientific_96_wellplate_2point4ml_deep_D2 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 19.3 + y: 43.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_E2 + name: usascientific_96_wellplate_2point4ml_deep_E2 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 19.3 + y: 34.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_F2 + name: usascientific_96_wellplate_2point4ml_deep_F2 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 19.3 + y: 25.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_G2 + name: usascientific_96_wellplate_2point4ml_deep_G2 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 19.3 + y: 16.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_H2 + name: usascientific_96_wellplate_2point4ml_deep_H2 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 19.3 + y: 7.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_A3 + name: usascientific_96_wellplate_2point4ml_deep_A3 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 28.3 + y: 70.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_B3 + name: usascientific_96_wellplate_2point4ml_deep_B3 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 28.3 + y: 61.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_C3 + name: usascientific_96_wellplate_2point4ml_deep_C3 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 28.3 + y: 52.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_D3 + name: usascientific_96_wellplate_2point4ml_deep_D3 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 28.3 + y: 43.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_E3 + name: usascientific_96_wellplate_2point4ml_deep_E3 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 28.3 + y: 34.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_F3 + name: usascientific_96_wellplate_2point4ml_deep_F3 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 28.3 + y: 25.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_G3 + name: usascientific_96_wellplate_2point4ml_deep_G3 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 28.3 + y: 16.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_H3 + name: usascientific_96_wellplate_2point4ml_deep_H3 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 28.3 + y: 7.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_A4 + name: usascientific_96_wellplate_2point4ml_deep_A4 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 37.3 + y: 70.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_B4 + name: usascientific_96_wellplate_2point4ml_deep_B4 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 37.3 + y: 61.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_C4 + name: usascientific_96_wellplate_2point4ml_deep_C4 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 37.3 + y: 52.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_D4 + name: usascientific_96_wellplate_2point4ml_deep_D4 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 37.3 + y: 43.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_E4 + name: usascientific_96_wellplate_2point4ml_deep_E4 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 37.3 + y: 34.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_F4 + name: usascientific_96_wellplate_2point4ml_deep_F4 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 37.3 + y: 25.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_G4 + name: usascientific_96_wellplate_2point4ml_deep_G4 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 37.3 + y: 16.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_H4 + name: usascientific_96_wellplate_2point4ml_deep_H4 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 37.3 + y: 7.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_A5 + name: usascientific_96_wellplate_2point4ml_deep_A5 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 46.3 + y: 70.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_B5 + name: usascientific_96_wellplate_2point4ml_deep_B5 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 46.3 + y: 61.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_C5 + name: usascientific_96_wellplate_2point4ml_deep_C5 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 46.3 + y: 52.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_D5 + name: usascientific_96_wellplate_2point4ml_deep_D5 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 46.3 + y: 43.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_E5 + name: usascientific_96_wellplate_2point4ml_deep_E5 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 46.3 + y: 34.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_F5 + name: usascientific_96_wellplate_2point4ml_deep_F5 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 46.3 + y: 25.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_G5 + name: usascientific_96_wellplate_2point4ml_deep_G5 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 46.3 + y: 16.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_H5 + name: usascientific_96_wellplate_2point4ml_deep_H5 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 46.3 + y: 7.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_A6 + name: usascientific_96_wellplate_2point4ml_deep_A6 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 55.3 + y: 70.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_B6 + name: usascientific_96_wellplate_2point4ml_deep_B6 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 55.3 + y: 61.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_C6 + name: usascientific_96_wellplate_2point4ml_deep_C6 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 55.3 + y: 52.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_D6 + name: usascientific_96_wellplate_2point4ml_deep_D6 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 55.3 + y: 43.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_E6 + name: usascientific_96_wellplate_2point4ml_deep_E6 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 55.3 + y: 34.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_F6 + name: usascientific_96_wellplate_2point4ml_deep_F6 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 55.3 + y: 25.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_G6 + name: usascientific_96_wellplate_2point4ml_deep_G6 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 55.3 + y: 16.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_H6 + name: usascientific_96_wellplate_2point4ml_deep_H6 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 55.3 + y: 7.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_A7 + name: usascientific_96_wellplate_2point4ml_deep_A7 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 64.3 + y: 70.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_B7 + name: usascientific_96_wellplate_2point4ml_deep_B7 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 64.3 + y: 61.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_C7 + name: usascientific_96_wellplate_2point4ml_deep_C7 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 64.3 + y: 52.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_D7 + name: usascientific_96_wellplate_2point4ml_deep_D7 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 64.3 + y: 43.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_E7 + name: usascientific_96_wellplate_2point4ml_deep_E7 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 64.3 + y: 34.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_F7 + name: usascientific_96_wellplate_2point4ml_deep_F7 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 64.3 + y: 25.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_G7 + name: usascientific_96_wellplate_2point4ml_deep_G7 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 64.3 + y: 16.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_H7 + name: usascientific_96_wellplate_2point4ml_deep_H7 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 64.3 + y: 7.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_A8 + name: usascientific_96_wellplate_2point4ml_deep_A8 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 73.3 + y: 70.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_B8 + name: usascientific_96_wellplate_2point4ml_deep_B8 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 73.3 + y: 61.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_C8 + name: usascientific_96_wellplate_2point4ml_deep_C8 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 73.3 + y: 52.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_D8 + name: usascientific_96_wellplate_2point4ml_deep_D8 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 73.3 + y: 43.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_E8 + name: usascientific_96_wellplate_2point4ml_deep_E8 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 73.3 + y: 34.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_F8 + name: usascientific_96_wellplate_2point4ml_deep_F8 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 73.3 + y: 25.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_G8 + name: usascientific_96_wellplate_2point4ml_deep_G8 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 73.3 + y: 16.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_H8 + name: usascientific_96_wellplate_2point4ml_deep_H8 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 73.3 + y: 7.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_A9 + name: usascientific_96_wellplate_2point4ml_deep_A9 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 82.3 + y: 70.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_B9 + name: usascientific_96_wellplate_2point4ml_deep_B9 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 82.3 + y: 61.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_C9 + name: usascientific_96_wellplate_2point4ml_deep_C9 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 82.3 + y: 52.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_D9 + name: usascientific_96_wellplate_2point4ml_deep_D9 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 82.3 + y: 43.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_E9 + name: usascientific_96_wellplate_2point4ml_deep_E9 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 82.3 + y: 34.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_F9 + name: usascientific_96_wellplate_2point4ml_deep_F9 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 82.3 + y: 25.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_G9 + name: usascientific_96_wellplate_2point4ml_deep_G9 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 82.3 + y: 16.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_H9 + name: usascientific_96_wellplate_2point4ml_deep_H9 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 82.3 + y: 7.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_A10 + name: usascientific_96_wellplate_2point4ml_deep_A10 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 91.3 + y: 70.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_B10 + name: usascientific_96_wellplate_2point4ml_deep_B10 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 91.3 + y: 61.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_C10 + name: usascientific_96_wellplate_2point4ml_deep_C10 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 91.3 + y: 52.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_D10 + name: usascientific_96_wellplate_2point4ml_deep_D10 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 91.3 + y: 43.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_E10 + name: usascientific_96_wellplate_2point4ml_deep_E10 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 91.3 + y: 34.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_F10 + name: usascientific_96_wellplate_2point4ml_deep_F10 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 91.3 + y: 25.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_G10 + name: usascientific_96_wellplate_2point4ml_deep_G10 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 91.3 + y: 16.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_H10 + name: usascientific_96_wellplate_2point4ml_deep_H10 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 91.3 + y: 7.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_A11 + name: usascientific_96_wellplate_2point4ml_deep_A11 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 100.3 + y: 70.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_B11 + name: usascientific_96_wellplate_2point4ml_deep_B11 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 100.3 + y: 61.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_C11 + name: usascientific_96_wellplate_2point4ml_deep_C11 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 100.3 + y: 52.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_D11 + name: usascientific_96_wellplate_2point4ml_deep_D11 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 100.3 + y: 43.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_E11 + name: usascientific_96_wellplate_2point4ml_deep_E11 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 100.3 + y: 34.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_F11 + name: usascientific_96_wellplate_2point4ml_deep_F11 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 100.3 + y: 25.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_G11 + name: usascientific_96_wellplate_2point4ml_deep_G11 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 100.3 + y: 16.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_H11 + name: usascientific_96_wellplate_2point4ml_deep_H11 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 100.3 + y: 7.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_A12 + name: usascientific_96_wellplate_2point4ml_deep_A12 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 109.3 + y: 70.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_B12 + name: usascientific_96_wellplate_2point4ml_deep_B12 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 109.3 + y: 61.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_C12 + name: usascientific_96_wellplate_2point4ml_deep_C12 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 109.3 + y: 52.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_D12 + name: usascientific_96_wellplate_2point4ml_deep_D12 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 109.3 + y: 43.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_E12 + name: usascientific_96_wellplate_2point4ml_deep_E12 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 109.3 + y: 34.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_F12 + name: usascientific_96_wellplate_2point4ml_deep_F12 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 109.3 + y: 25.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_G12 + name: usascientific_96_wellplate_2point4ml_deep_G12 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 109.3 + y: 16.1 + z: 2.8 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 2400 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 8.2 + size_z: 41.3 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_96_wellplate_2point4ml_deep_H12 + name: usascientific_96_wellplate_2point4ml_deep_H12 + parent: usascientific_96_wellplate_2point4ml_deep + position: + x: 109.3 + y: 7.1 + z: 2.8 + sample_id: null + type: well + description: USAScientific 96 wellplate 2.4ml deep + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/plates.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 diff --git a/unilabos/registry/resources/opentrons/reservoirs.yaml b/unilabos/registry/resources/opentrons/reservoirs.yaml index fbc8490..71f014b 100644 --- a/unilabos/registry/resources/opentrons/reservoirs.yaml +++ b/unilabos/registry/resources/opentrons/reservoirs.yaml @@ -1,35 +1,1248 @@ agilent_1_reservoir_290ml: - description: Agilent 1 reservoir 290ml - class: + category: + - reservoirs + class: module: pylabrobot.resources.opentrons.reservoirs:agilent_1_reservoir_290ml type: pylabrobot - + config_info: + - children: + - agilent_1_reservoir_290ml_A1 + class: '' + config: + barcode: null + category: plate + model: Agilent 1 Well Reservoir 290 mL + ordering: + A1: agilent_1_reservoir_290ml_A1 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.57 + size_z: 44.04 + type: Plate + data: {} + id: agilent_1_reservoir_290ml + name: agilent_1_reservoir_290ml + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: plate + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 290000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 108 + size_y: 72 + size_z: 39.22 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: agilent_1_reservoir_290ml_A1 + name: agilent_1_reservoir_290ml_A1 + parent: agilent_1_reservoir_290ml + position: + x: 9.88 + y: 6.785 + z: 4.82 + sample_id: null + type: well + description: Agilent 1 reservoir 290ml + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/reservoirs.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 axygen_1_reservoir_90ml: - description: Axygen 1 reservoir 90ml - class: + category: + - reservoirs + class: module: pylabrobot.resources.opentrons.reservoirs:axygen_1_reservoir_90ml type: pylabrobot - + config_info: + - children: + - axygen_1_reservoir_90ml_A1 + class: '' + config: + barcode: null + category: plate + model: Axygen 1 Well Reservoir 90 mL + ordering: + A1: axygen_1_reservoir_90ml_A1 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.47 + size_z: 19.05 + type: Plate + data: {} + id: axygen_1_reservoir_90ml + name: axygen_1_reservoir_90ml + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: plate + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 90000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 106.76 + size_y: 70.52 + size_z: 12.42 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: axygen_1_reservoir_90ml_A1 + name: axygen_1_reservoir_90ml_A1 + parent: axygen_1_reservoir_90ml + position: + x: 10.5 + y: 7.475 + z: 6.63 + sample_id: null + type: well + description: Axygen 1 reservoir 90ml + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/reservoirs.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 nest_12_reservoir_15ml: - description: Nest 12 reservoir 15ml - class: + category: + - reservoirs + class: module: pylabrobot.resources.opentrons.reservoirs:nest_12_reservoir_15ml type: pylabrobot - + config_info: + - children: + - nest_12_reservoir_15ml_A1 + - nest_12_reservoir_15ml_A2 + - nest_12_reservoir_15ml_A3 + - nest_12_reservoir_15ml_A4 + - nest_12_reservoir_15ml_A5 + - nest_12_reservoir_15ml_A6 + - nest_12_reservoir_15ml_A7 + - nest_12_reservoir_15ml_A8 + - nest_12_reservoir_15ml_A9 + - nest_12_reservoir_15ml_A10 + - nest_12_reservoir_15ml_A11 + - nest_12_reservoir_15ml_A12 + class: '' + config: + barcode: null + category: plate + model: NEST 12 Well Reservoir 15 mL + ordering: + A1: nest_12_reservoir_15ml_A1 + A2: nest_12_reservoir_15ml_A2 + A3: nest_12_reservoir_15ml_A3 + A4: nest_12_reservoir_15ml_A4 + A5: nest_12_reservoir_15ml_A5 + A6: nest_12_reservoir_15ml_A6 + A7: nest_12_reservoir_15ml_A7 + A8: nest_12_reservoir_15ml_A8 + A9: nest_12_reservoir_15ml_A9 + A10: nest_12_reservoir_15ml_A10 + A11: nest_12_reservoir_15ml_A11 + A12: nest_12_reservoir_15ml_A12 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.48 + size_z: 31.4 + type: Plate + data: {} + id: nest_12_reservoir_15ml + name: nest_12_reservoir_15ml + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: plate + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 71.2 + size_z: 26.85 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_12_reservoir_15ml_A1 + name: nest_12_reservoir_15ml_A1 + parent: nest_12_reservoir_15ml + position: + x: 10.28 + y: 7.18 + z: 4.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 71.2 + size_z: 26.85 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_12_reservoir_15ml_A2 + name: nest_12_reservoir_15ml_A2 + parent: nest_12_reservoir_15ml + position: + x: 19.28 + y: 7.18 + z: 4.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 71.2 + size_z: 26.85 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_12_reservoir_15ml_A3 + name: nest_12_reservoir_15ml_A3 + parent: nest_12_reservoir_15ml + position: + x: 28.28 + y: 7.18 + z: 4.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 71.2 + size_z: 26.85 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_12_reservoir_15ml_A4 + name: nest_12_reservoir_15ml_A4 + parent: nest_12_reservoir_15ml + position: + x: 37.28 + y: 7.18 + z: 4.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 71.2 + size_z: 26.85 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_12_reservoir_15ml_A5 + name: nest_12_reservoir_15ml_A5 + parent: nest_12_reservoir_15ml + position: + x: 46.28 + y: 7.18 + z: 4.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 71.2 + size_z: 26.85 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_12_reservoir_15ml_A6 + name: nest_12_reservoir_15ml_A6 + parent: nest_12_reservoir_15ml + position: + x: 55.28 + y: 7.18 + z: 4.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 71.2 + size_z: 26.85 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_12_reservoir_15ml_A7 + name: nest_12_reservoir_15ml_A7 + parent: nest_12_reservoir_15ml + position: + x: 64.28 + y: 7.18 + z: 4.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 71.2 + size_z: 26.85 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_12_reservoir_15ml_A8 + name: nest_12_reservoir_15ml_A8 + parent: nest_12_reservoir_15ml + position: + x: 73.28 + y: 7.18 + z: 4.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 71.2 + size_z: 26.85 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_12_reservoir_15ml_A9 + name: nest_12_reservoir_15ml_A9 + parent: nest_12_reservoir_15ml + position: + x: 82.28 + y: 7.18 + z: 4.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 71.2 + size_z: 26.85 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_12_reservoir_15ml_A10 + name: nest_12_reservoir_15ml_A10 + parent: nest_12_reservoir_15ml + position: + x: 91.28 + y: 7.18 + z: 4.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 71.2 + size_z: 26.85 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_12_reservoir_15ml_A11 + name: nest_12_reservoir_15ml_A11 + parent: nest_12_reservoir_15ml + position: + x: 100.28 + y: 7.18 + z: 4.55 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.2 + size_y: 71.2 + size_z: 26.85 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_12_reservoir_15ml_A12 + name: nest_12_reservoir_15ml_A12 + parent: nest_12_reservoir_15ml + position: + x: 109.28 + y: 7.18 + z: 4.55 + sample_id: null + type: well + description: Nest 12 reservoir 15ml + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/reservoirs.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 nest_1_reservoir_195ml: - description: Nest 1 reservoir 195ml - class: + category: + - reservoirs + class: module: pylabrobot.resources.opentrons.reservoirs:nest_1_reservoir_195ml type: pylabrobot - + config_info: + - children: + - nest_1_reservoir_195ml_A1 + class: '' + config: + barcode: null + category: plate + model: NEST 1 Well Reservoir 195 mL + ordering: + A1: nest_1_reservoir_195ml_A1 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.48 + size_z: 31.4 + type: Plate + data: {} + id: nest_1_reservoir_195ml + name: nest_1_reservoir_195ml + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: plate + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 195000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 106.8 + size_y: 71.2 + size_z: 25 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_1_reservoir_195ml_A1 + name: nest_1_reservoir_195ml_A1 + parent: nest_1_reservoir_195ml + position: + x: 10.48 + y: 7.14 + z: 4.55 + sample_id: null + type: well + description: Nest 1 reservoir 195ml + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/reservoirs.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 nest_1_reservoir_290ml: - description: Nest 1 reservoir 290ml - class: + category: + - reservoirs + class: module: pylabrobot.resources.opentrons.reservoirs:nest_1_reservoir_290ml type: pylabrobot - + config_info: + - children: + - nest_1_reservoir_290ml_A1 + class: '' + config: + barcode: null + category: plate + model: NEST 1 Well Reservoir 290 mL + ordering: + A1: nest_1_reservoir_290ml_A1 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.47 + size_z: 44.4 + type: Plate + data: {} + id: nest_1_reservoir_290ml + name: nest_1_reservoir_290ml + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: plate + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 290000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 106.8 + size_y: 71.2 + size_z: 39.55 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: nest_1_reservoir_290ml_A1 + name: nest_1_reservoir_290ml_A1 + parent: nest_1_reservoir_290ml + position: + x: 10.48 + y: 7.14 + z: 4.85 + sample_id: null + type: well + description: Nest 1 reservoir 290ml + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/reservoirs.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 usascientific_12_reservoir_22ml: - description: USAScientific 12 reservoir 22ml - class: + category: + - reservoirs + class: module: pylabrobot.resources.opentrons.reservoirs:usascientific_12_reservoir_22ml type: pylabrobot + config_info: + - children: + - usascientific_12_reservoir_22ml_A1 + - usascientific_12_reservoir_22ml_A2 + - usascientific_12_reservoir_22ml_A3 + - usascientific_12_reservoir_22ml_A4 + - usascientific_12_reservoir_22ml_A5 + - usascientific_12_reservoir_22ml_A6 + - usascientific_12_reservoir_22ml_A7 + - usascientific_12_reservoir_22ml_A8 + - usascientific_12_reservoir_22ml_A9 + - usascientific_12_reservoir_22ml_A10 + - usascientific_12_reservoir_22ml_A11 + - usascientific_12_reservoir_22ml_A12 + class: '' + config: + barcode: null + category: plate + model: USA Scientific 12 Well Reservoir 22 mL + ordering: + A1: usascientific_12_reservoir_22ml_A1 + A2: usascientific_12_reservoir_22ml_A2 + A3: usascientific_12_reservoir_22ml_A3 + A4: usascientific_12_reservoir_22ml_A4 + A5: usascientific_12_reservoir_22ml_A5 + A6: usascientific_12_reservoir_22ml_A6 + A7: usascientific_12_reservoir_22ml_A7 + A8: usascientific_12_reservoir_22ml_A8 + A9: usascientific_12_reservoir_22ml_A9 + A10: usascientific_12_reservoir_22ml_A10 + A11: usascientific_12_reservoir_22ml_A11 + A12: usascientific_12_reservoir_22ml_A12 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.8 + size_z: 44.45 + type: Plate + data: {} + id: usascientific_12_reservoir_22ml + name: usascientific_12_reservoir_22ml + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: plate + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 22000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.33 + size_y: 71.88 + size_z: 42.16 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_12_reservoir_22ml_A1 + name: usascientific_12_reservoir_22ml_A1 + parent: usascientific_12_reservoir_22ml + position: + x: 9.775 + y: 6.96 + z: 2.29 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 22000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.33 + size_y: 71.88 + size_z: 42.16 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_12_reservoir_22ml_A2 + name: usascientific_12_reservoir_22ml_A2 + parent: usascientific_12_reservoir_22ml + position: + x: 18.865 + y: 6.96 + z: 2.29 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 22000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.33 + size_y: 71.88 + size_z: 42.16 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_12_reservoir_22ml_A3 + name: usascientific_12_reservoir_22ml_A3 + parent: usascientific_12_reservoir_22ml + position: + x: 27.955 + y: 6.96 + z: 2.29 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 22000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.33 + size_y: 71.88 + size_z: 42.16 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_12_reservoir_22ml_A4 + name: usascientific_12_reservoir_22ml_A4 + parent: usascientific_12_reservoir_22ml + position: + x: 37.045 + y: 6.96 + z: 2.29 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 22000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.33 + size_y: 71.88 + size_z: 42.16 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_12_reservoir_22ml_A5 + name: usascientific_12_reservoir_22ml_A5 + parent: usascientific_12_reservoir_22ml + position: + x: 46.135 + y: 6.96 + z: 2.29 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 22000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.33 + size_y: 71.88 + size_z: 42.16 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_12_reservoir_22ml_A6 + name: usascientific_12_reservoir_22ml_A6 + parent: usascientific_12_reservoir_22ml + position: + x: 55.225 + y: 6.96 + z: 2.29 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 22000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.33 + size_y: 71.88 + size_z: 42.16 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_12_reservoir_22ml_A7 + name: usascientific_12_reservoir_22ml_A7 + parent: usascientific_12_reservoir_22ml + position: + x: 64.315 + y: 6.96 + z: 2.29 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 22000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.33 + size_y: 71.88 + size_z: 42.16 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_12_reservoir_22ml_A8 + name: usascientific_12_reservoir_22ml_A8 + parent: usascientific_12_reservoir_22ml + position: + x: 73.405 + y: 6.96 + z: 2.29 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 22000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.33 + size_y: 71.88 + size_z: 42.16 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_12_reservoir_22ml_A9 + name: usascientific_12_reservoir_22ml_A9 + parent: usascientific_12_reservoir_22ml + position: + x: 82.495 + y: 6.96 + z: 2.29 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 22000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.33 + size_y: 71.88 + size_z: 42.16 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_12_reservoir_22ml_A10 + name: usascientific_12_reservoir_22ml_A10 + parent: usascientific_12_reservoir_22ml + position: + x: 91.585 + y: 6.96 + z: 2.29 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 22000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.33 + size_y: 71.88 + size_z: 42.16 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_12_reservoir_22ml_A11 + name: usascientific_12_reservoir_22ml_A11 + parent: usascientific_12_reservoir_22ml + position: + x: 100.675 + y: 6.96 + z: 2.29 + sample_id: null + type: well + - children: [] + class: '' + config: + barcode: null + bottom_type: unknown + category: well + compute_height_from_volume: null + compute_volume_from_height: null + cross_section_type: rectangle + material_z_thickness: null + max_volume: 22000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 8.33 + size_y: 71.88 + size_z: 42.16 + type: Well + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: usascientific_12_reservoir_22ml_A12 + name: usascientific_12_reservoir_22ml_A12 + parent: usascientific_12_reservoir_22ml + position: + x: 109.765 + y: 6.96 + z: 2.29 + sample_id: null + type: well + description: USAScientific 12 reservoir 22ml + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/reservoirs.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 diff --git a/unilabos/registry/resources/opentrons/tip_racks.yaml b/unilabos/registry/resources/opentrons/tip_racks.yaml index a605b55..c549ddd 100644 --- a/unilabos/registry/resources/opentrons/tip_racks.yaml +++ b/unilabos/registry/resources/opentrons/tip_racks.yaml @@ -1,83 +1,61690 @@ eppendorf_96_tiprack_1000ul_eptips: - description: Eppendorf 96 tiprack 1000ul eptips - class: + category: + - tip_racks + class: module: pylabrobot.resources.opentrons.tip_racks:eppendorf_96_tiprack_1000ul_eptips type: pylabrobot - -tipone_96_tiprack_200ul: - description: TipOne 96 tiprack 200ul - class: - module: pylabrobot.resources.opentrons.tip_racks:tipone_96_tiprack_200ul - type: pylabrobot - -opentrons_96_tiprack_300ul: - description: Opentrons 96 tiprack 300ul - class: - module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_tiprack_300ul - type: pylabrobot - -opentrons_96_tiprack_10ul: - description: Opentrons 96 tiprack 10ul - class: - module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_tiprack_10ul - type: pylabrobot - -opentrons_96_filtertiprack_10ul: - description: Opentrons 96 filtertiprack 10ul - class: - module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_filtertiprack_10ul - type: pylabrobot - -geb_96_tiprack_10ul: - description: Geb 96 tiprack 10ul - class: - module: pylabrobot.resources.opentrons.tip_racks:geb_96_tiprack_10ul - type: pylabrobot - -opentrons_96_filtertiprack_200ul: - description: Opentrons 96 filtertiprack 200ul - class: - module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_filtertiprack_200ul - type: pylabrobot - + config_info: + - children: + - eppendorf_96_tiprack_1000ul_eptips_A1 + - eppendorf_96_tiprack_1000ul_eptips_B1 + - eppendorf_96_tiprack_1000ul_eptips_C1 + - eppendorf_96_tiprack_1000ul_eptips_D1 + - eppendorf_96_tiprack_1000ul_eptips_E1 + - eppendorf_96_tiprack_1000ul_eptips_F1 + - eppendorf_96_tiprack_1000ul_eptips_G1 + - eppendorf_96_tiprack_1000ul_eptips_H1 + - eppendorf_96_tiprack_1000ul_eptips_A2 + - eppendorf_96_tiprack_1000ul_eptips_B2 + - eppendorf_96_tiprack_1000ul_eptips_C2 + - eppendorf_96_tiprack_1000ul_eptips_D2 + - eppendorf_96_tiprack_1000ul_eptips_E2 + - eppendorf_96_tiprack_1000ul_eptips_F2 + - eppendorf_96_tiprack_1000ul_eptips_G2 + - eppendorf_96_tiprack_1000ul_eptips_H2 + - eppendorf_96_tiprack_1000ul_eptips_A3 + - eppendorf_96_tiprack_1000ul_eptips_B3 + - eppendorf_96_tiprack_1000ul_eptips_C3 + - eppendorf_96_tiprack_1000ul_eptips_D3 + - eppendorf_96_tiprack_1000ul_eptips_E3 + - eppendorf_96_tiprack_1000ul_eptips_F3 + - eppendorf_96_tiprack_1000ul_eptips_G3 + - eppendorf_96_tiprack_1000ul_eptips_H3 + - eppendorf_96_tiprack_1000ul_eptips_A4 + - eppendorf_96_tiprack_1000ul_eptips_B4 + - eppendorf_96_tiprack_1000ul_eptips_C4 + - eppendorf_96_tiprack_1000ul_eptips_D4 + - eppendorf_96_tiprack_1000ul_eptips_E4 + - eppendorf_96_tiprack_1000ul_eptips_F4 + - eppendorf_96_tiprack_1000ul_eptips_G4 + - eppendorf_96_tiprack_1000ul_eptips_H4 + - eppendorf_96_tiprack_1000ul_eptips_A5 + - eppendorf_96_tiprack_1000ul_eptips_B5 + - eppendorf_96_tiprack_1000ul_eptips_C5 + - eppendorf_96_tiprack_1000ul_eptips_D5 + - eppendorf_96_tiprack_1000ul_eptips_E5 + - eppendorf_96_tiprack_1000ul_eptips_F5 + - eppendorf_96_tiprack_1000ul_eptips_G5 + - eppendorf_96_tiprack_1000ul_eptips_H5 + - eppendorf_96_tiprack_1000ul_eptips_A6 + - eppendorf_96_tiprack_1000ul_eptips_B6 + - eppendorf_96_tiprack_1000ul_eptips_C6 + - eppendorf_96_tiprack_1000ul_eptips_D6 + - eppendorf_96_tiprack_1000ul_eptips_E6 + - eppendorf_96_tiprack_1000ul_eptips_F6 + - eppendorf_96_tiprack_1000ul_eptips_G6 + - eppendorf_96_tiprack_1000ul_eptips_H6 + - eppendorf_96_tiprack_1000ul_eptips_A7 + - eppendorf_96_tiprack_1000ul_eptips_B7 + - eppendorf_96_tiprack_1000ul_eptips_C7 + - eppendorf_96_tiprack_1000ul_eptips_D7 + - eppendorf_96_tiprack_1000ul_eptips_E7 + - eppendorf_96_tiprack_1000ul_eptips_F7 + - eppendorf_96_tiprack_1000ul_eptips_G7 + - eppendorf_96_tiprack_1000ul_eptips_H7 + - eppendorf_96_tiprack_1000ul_eptips_A8 + - eppendorf_96_tiprack_1000ul_eptips_B8 + - eppendorf_96_tiprack_1000ul_eptips_C8 + - eppendorf_96_tiprack_1000ul_eptips_D8 + - eppendorf_96_tiprack_1000ul_eptips_E8 + - eppendorf_96_tiprack_1000ul_eptips_F8 + - eppendorf_96_tiprack_1000ul_eptips_G8 + - eppendorf_96_tiprack_1000ul_eptips_H8 + - eppendorf_96_tiprack_1000ul_eptips_A9 + - eppendorf_96_tiprack_1000ul_eptips_B9 + - eppendorf_96_tiprack_1000ul_eptips_C9 + - eppendorf_96_tiprack_1000ul_eptips_D9 + - eppendorf_96_tiprack_1000ul_eptips_E9 + - eppendorf_96_tiprack_1000ul_eptips_F9 + - eppendorf_96_tiprack_1000ul_eptips_G9 + - eppendorf_96_tiprack_1000ul_eptips_H9 + - eppendorf_96_tiprack_1000ul_eptips_A10 + - eppendorf_96_tiprack_1000ul_eptips_B10 + - eppendorf_96_tiprack_1000ul_eptips_C10 + - eppendorf_96_tiprack_1000ul_eptips_D10 + - eppendorf_96_tiprack_1000ul_eptips_E10 + - eppendorf_96_tiprack_1000ul_eptips_F10 + - eppendorf_96_tiprack_1000ul_eptips_G10 + - eppendorf_96_tiprack_1000ul_eptips_H10 + - eppendorf_96_tiprack_1000ul_eptips_A11 + - eppendorf_96_tiprack_1000ul_eptips_B11 + - eppendorf_96_tiprack_1000ul_eptips_C11 + - eppendorf_96_tiprack_1000ul_eptips_D11 + - eppendorf_96_tiprack_1000ul_eptips_E11 + - eppendorf_96_tiprack_1000ul_eptips_F11 + - eppendorf_96_tiprack_1000ul_eptips_G11 + - eppendorf_96_tiprack_1000ul_eptips_H11 + - eppendorf_96_tiprack_1000ul_eptips_A12 + - eppendorf_96_tiprack_1000ul_eptips_B12 + - eppendorf_96_tiprack_1000ul_eptips_C12 + - eppendorf_96_tiprack_1000ul_eptips_D12 + - eppendorf_96_tiprack_1000ul_eptips_E12 + - eppendorf_96_tiprack_1000ul_eptips_F12 + - eppendorf_96_tiprack_1000ul_eptips_G12 + - eppendorf_96_tiprack_1000ul_eptips_H12 + class: '' + config: + barcode: null + category: tip_rack + model: Eppendorf epT.I.P.S. 96 Tip Rack 1000 µL + ordering: + A1: eppendorf_96_tiprack_1000ul_eptips_A1 + B1: eppendorf_96_tiprack_1000ul_eptips_B1 + C1: eppendorf_96_tiprack_1000ul_eptips_C1 + D1: eppendorf_96_tiprack_1000ul_eptips_D1 + E1: eppendorf_96_tiprack_1000ul_eptips_E1 + F1: eppendorf_96_tiprack_1000ul_eptips_F1 + G1: eppendorf_96_tiprack_1000ul_eptips_G1 + H1: eppendorf_96_tiprack_1000ul_eptips_H1 + A2: eppendorf_96_tiprack_1000ul_eptips_A2 + B2: eppendorf_96_tiprack_1000ul_eptips_B2 + C2: eppendorf_96_tiprack_1000ul_eptips_C2 + D2: eppendorf_96_tiprack_1000ul_eptips_D2 + E2: eppendorf_96_tiprack_1000ul_eptips_E2 + F2: eppendorf_96_tiprack_1000ul_eptips_F2 + G2: eppendorf_96_tiprack_1000ul_eptips_G2 + H2: eppendorf_96_tiprack_1000ul_eptips_H2 + A3: eppendorf_96_tiprack_1000ul_eptips_A3 + B3: eppendorf_96_tiprack_1000ul_eptips_B3 + C3: eppendorf_96_tiprack_1000ul_eptips_C3 + D3: eppendorf_96_tiprack_1000ul_eptips_D3 + E3: eppendorf_96_tiprack_1000ul_eptips_E3 + F3: eppendorf_96_tiprack_1000ul_eptips_F3 + G3: eppendorf_96_tiprack_1000ul_eptips_G3 + H3: eppendorf_96_tiprack_1000ul_eptips_H3 + A4: eppendorf_96_tiprack_1000ul_eptips_A4 + B4: eppendorf_96_tiprack_1000ul_eptips_B4 + C4: eppendorf_96_tiprack_1000ul_eptips_C4 + D4: eppendorf_96_tiprack_1000ul_eptips_D4 + E4: eppendorf_96_tiprack_1000ul_eptips_E4 + F4: eppendorf_96_tiprack_1000ul_eptips_F4 + G4: eppendorf_96_tiprack_1000ul_eptips_G4 + H4: eppendorf_96_tiprack_1000ul_eptips_H4 + A5: eppendorf_96_tiprack_1000ul_eptips_A5 + B5: eppendorf_96_tiprack_1000ul_eptips_B5 + C5: eppendorf_96_tiprack_1000ul_eptips_C5 + D5: eppendorf_96_tiprack_1000ul_eptips_D5 + E5: eppendorf_96_tiprack_1000ul_eptips_E5 + F5: eppendorf_96_tiprack_1000ul_eptips_F5 + G5: eppendorf_96_tiprack_1000ul_eptips_G5 + H5: eppendorf_96_tiprack_1000ul_eptips_H5 + A6: eppendorf_96_tiprack_1000ul_eptips_A6 + B6: eppendorf_96_tiprack_1000ul_eptips_B6 + C6: eppendorf_96_tiprack_1000ul_eptips_C6 + D6: eppendorf_96_tiprack_1000ul_eptips_D6 + E6: eppendorf_96_tiprack_1000ul_eptips_E6 + F6: eppendorf_96_tiprack_1000ul_eptips_F6 + G6: eppendorf_96_tiprack_1000ul_eptips_G6 + H6: eppendorf_96_tiprack_1000ul_eptips_H6 + A7: eppendorf_96_tiprack_1000ul_eptips_A7 + B7: eppendorf_96_tiprack_1000ul_eptips_B7 + C7: eppendorf_96_tiprack_1000ul_eptips_C7 + D7: eppendorf_96_tiprack_1000ul_eptips_D7 + E7: eppendorf_96_tiprack_1000ul_eptips_E7 + F7: eppendorf_96_tiprack_1000ul_eptips_F7 + G7: eppendorf_96_tiprack_1000ul_eptips_G7 + H7: eppendorf_96_tiprack_1000ul_eptips_H7 + A8: eppendorf_96_tiprack_1000ul_eptips_A8 + B8: eppendorf_96_tiprack_1000ul_eptips_B8 + C8: eppendorf_96_tiprack_1000ul_eptips_C8 + D8: eppendorf_96_tiprack_1000ul_eptips_D8 + E8: eppendorf_96_tiprack_1000ul_eptips_E8 + F8: eppendorf_96_tiprack_1000ul_eptips_F8 + G8: eppendorf_96_tiprack_1000ul_eptips_G8 + H8: eppendorf_96_tiprack_1000ul_eptips_H8 + A9: eppendorf_96_tiprack_1000ul_eptips_A9 + B9: eppendorf_96_tiprack_1000ul_eptips_B9 + C9: eppendorf_96_tiprack_1000ul_eptips_C9 + D9: eppendorf_96_tiprack_1000ul_eptips_D9 + E9: eppendorf_96_tiprack_1000ul_eptips_E9 + F9: eppendorf_96_tiprack_1000ul_eptips_F9 + G9: eppendorf_96_tiprack_1000ul_eptips_G9 + H9: eppendorf_96_tiprack_1000ul_eptips_H9 + A10: eppendorf_96_tiprack_1000ul_eptips_A10 + B10: eppendorf_96_tiprack_1000ul_eptips_B10 + C10: eppendorf_96_tiprack_1000ul_eptips_C10 + D10: eppendorf_96_tiprack_1000ul_eptips_D10 + E10: eppendorf_96_tiprack_1000ul_eptips_E10 + F10: eppendorf_96_tiprack_1000ul_eptips_F10 + G10: eppendorf_96_tiprack_1000ul_eptips_G10 + H10: eppendorf_96_tiprack_1000ul_eptips_H10 + A11: eppendorf_96_tiprack_1000ul_eptips_A11 + B11: eppendorf_96_tiprack_1000ul_eptips_B11 + C11: eppendorf_96_tiprack_1000ul_eptips_C11 + D11: eppendorf_96_tiprack_1000ul_eptips_D11 + E11: eppendorf_96_tiprack_1000ul_eptips_E11 + F11: eppendorf_96_tiprack_1000ul_eptips_F11 + G11: eppendorf_96_tiprack_1000ul_eptips_G11 + H11: eppendorf_96_tiprack_1000ul_eptips_H11 + A12: eppendorf_96_tiprack_1000ul_eptips_A12 + B12: eppendorf_96_tiprack_1000ul_eptips_B12 + C12: eppendorf_96_tiprack_1000ul_eptips_C12 + D12: eppendorf_96_tiprack_1000ul_eptips_D12 + E12: eppendorf_96_tiprack_1000ul_eptips_E12 + F12: eppendorf_96_tiprack_1000ul_eptips_F12 + G12: eppendorf_96_tiprack_1000ul_eptips_G12 + H12: eppendorf_96_tiprack_1000ul_eptips_H12 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.48 + size_z: 121.9 + type: TipRack + data: {} + id: eppendorf_96_tiprack_1000ul_eptips + name: eppendorf_96_tiprack_1000ul_eptips + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_A1 + name: eppendorf_96_tiprack_1000ul_eptips_A1 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 11.2685 + y: 71.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_B1 + name: eppendorf_96_tiprack_1000ul_eptips_B1 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 11.2685 + y: 62.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_C1 + name: eppendorf_96_tiprack_1000ul_eptips_C1 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 11.2685 + y: 53.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_D1 + name: eppendorf_96_tiprack_1000ul_eptips_D1 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 11.2685 + y: 44.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_E1 + name: eppendorf_96_tiprack_1000ul_eptips_E1 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 11.2685 + y: 35.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_F1 + name: eppendorf_96_tiprack_1000ul_eptips_F1 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 11.2685 + y: 26.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_G1 + name: eppendorf_96_tiprack_1000ul_eptips_G1 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 11.2685 + y: 17.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_H1 + name: eppendorf_96_tiprack_1000ul_eptips_H1 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 11.2685 + y: 8.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_A2 + name: eppendorf_96_tiprack_1000ul_eptips_A2 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 20.2685 + y: 71.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_B2 + name: eppendorf_96_tiprack_1000ul_eptips_B2 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 20.2685 + y: 62.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_C2 + name: eppendorf_96_tiprack_1000ul_eptips_C2 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 20.2685 + y: 53.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_D2 + name: eppendorf_96_tiprack_1000ul_eptips_D2 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 20.2685 + y: 44.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_E2 + name: eppendorf_96_tiprack_1000ul_eptips_E2 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 20.2685 + y: 35.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_F2 + name: eppendorf_96_tiprack_1000ul_eptips_F2 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 20.2685 + y: 26.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_G2 + name: eppendorf_96_tiprack_1000ul_eptips_G2 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 20.2685 + y: 17.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_H2 + name: eppendorf_96_tiprack_1000ul_eptips_H2 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 20.2685 + y: 8.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_A3 + name: eppendorf_96_tiprack_1000ul_eptips_A3 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 29.2685 + y: 71.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_B3 + name: eppendorf_96_tiprack_1000ul_eptips_B3 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 29.2685 + y: 62.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_C3 + name: eppendorf_96_tiprack_1000ul_eptips_C3 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 29.2685 + y: 53.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_D3 + name: eppendorf_96_tiprack_1000ul_eptips_D3 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 29.2685 + y: 44.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_E3 + name: eppendorf_96_tiprack_1000ul_eptips_E3 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 29.2685 + y: 35.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_F3 + name: eppendorf_96_tiprack_1000ul_eptips_F3 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 29.2685 + y: 26.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_G3 + name: eppendorf_96_tiprack_1000ul_eptips_G3 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 29.2685 + y: 17.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_H3 + name: eppendorf_96_tiprack_1000ul_eptips_H3 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 29.2685 + y: 8.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_A4 + name: eppendorf_96_tiprack_1000ul_eptips_A4 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 38.2685 + y: 71.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_B4 + name: eppendorf_96_tiprack_1000ul_eptips_B4 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 38.2685 + y: 62.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_C4 + name: eppendorf_96_tiprack_1000ul_eptips_C4 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 38.2685 + y: 53.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_D4 + name: eppendorf_96_tiprack_1000ul_eptips_D4 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 38.2685 + y: 44.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_E4 + name: eppendorf_96_tiprack_1000ul_eptips_E4 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 38.2685 + y: 35.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_F4 + name: eppendorf_96_tiprack_1000ul_eptips_F4 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 38.2685 + y: 26.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_G4 + name: eppendorf_96_tiprack_1000ul_eptips_G4 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 38.2685 + y: 17.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_H4 + name: eppendorf_96_tiprack_1000ul_eptips_H4 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 38.2685 + y: 8.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_A5 + name: eppendorf_96_tiprack_1000ul_eptips_A5 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 47.2685 + y: 71.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_B5 + name: eppendorf_96_tiprack_1000ul_eptips_B5 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 47.2685 + y: 62.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_C5 + name: eppendorf_96_tiprack_1000ul_eptips_C5 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 47.2685 + y: 53.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_D5 + name: eppendorf_96_tiprack_1000ul_eptips_D5 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 47.2685 + y: 44.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_E5 + name: eppendorf_96_tiprack_1000ul_eptips_E5 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 47.2685 + y: 35.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_F5 + name: eppendorf_96_tiprack_1000ul_eptips_F5 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 47.2685 + y: 26.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_G5 + name: eppendorf_96_tiprack_1000ul_eptips_G5 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 47.2685 + y: 17.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_H5 + name: eppendorf_96_tiprack_1000ul_eptips_H5 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 47.2685 + y: 8.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_A6 + name: eppendorf_96_tiprack_1000ul_eptips_A6 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 56.2685 + y: 71.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_B6 + name: eppendorf_96_tiprack_1000ul_eptips_B6 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 56.2685 + y: 62.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_C6 + name: eppendorf_96_tiprack_1000ul_eptips_C6 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 56.2685 + y: 53.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_D6 + name: eppendorf_96_tiprack_1000ul_eptips_D6 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 56.2685 + y: 44.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_E6 + name: eppendorf_96_tiprack_1000ul_eptips_E6 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 56.2685 + y: 35.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_F6 + name: eppendorf_96_tiprack_1000ul_eptips_F6 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 56.2685 + y: 26.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_G6 + name: eppendorf_96_tiprack_1000ul_eptips_G6 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 56.2685 + y: 17.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_H6 + name: eppendorf_96_tiprack_1000ul_eptips_H6 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 56.2685 + y: 8.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_A7 + name: eppendorf_96_tiprack_1000ul_eptips_A7 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 65.2685 + y: 71.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_B7 + name: eppendorf_96_tiprack_1000ul_eptips_B7 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 65.2685 + y: 62.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_C7 + name: eppendorf_96_tiprack_1000ul_eptips_C7 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 65.2685 + y: 53.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_D7 + name: eppendorf_96_tiprack_1000ul_eptips_D7 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 65.2685 + y: 44.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_E7 + name: eppendorf_96_tiprack_1000ul_eptips_E7 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 65.2685 + y: 35.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_F7 + name: eppendorf_96_tiprack_1000ul_eptips_F7 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 65.2685 + y: 26.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_G7 + name: eppendorf_96_tiprack_1000ul_eptips_G7 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 65.2685 + y: 17.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_H7 + name: eppendorf_96_tiprack_1000ul_eptips_H7 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 65.2685 + y: 8.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_A8 + name: eppendorf_96_tiprack_1000ul_eptips_A8 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 74.2685 + y: 71.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_B8 + name: eppendorf_96_tiprack_1000ul_eptips_B8 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 74.2685 + y: 62.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_C8 + name: eppendorf_96_tiprack_1000ul_eptips_C8 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 74.2685 + y: 53.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_D8 + name: eppendorf_96_tiprack_1000ul_eptips_D8 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 74.2685 + y: 44.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_E8 + name: eppendorf_96_tiprack_1000ul_eptips_E8 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 74.2685 + y: 35.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_F8 + name: eppendorf_96_tiprack_1000ul_eptips_F8 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 74.2685 + y: 26.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_G8 + name: eppendorf_96_tiprack_1000ul_eptips_G8 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 74.2685 + y: 17.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_H8 + name: eppendorf_96_tiprack_1000ul_eptips_H8 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 74.2685 + y: 8.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_A9 + name: eppendorf_96_tiprack_1000ul_eptips_A9 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 83.2685 + y: 71.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_B9 + name: eppendorf_96_tiprack_1000ul_eptips_B9 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 83.2685 + y: 62.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_C9 + name: eppendorf_96_tiprack_1000ul_eptips_C9 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 83.2685 + y: 53.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_D9 + name: eppendorf_96_tiprack_1000ul_eptips_D9 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 83.2685 + y: 44.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_E9 + name: eppendorf_96_tiprack_1000ul_eptips_E9 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 83.2685 + y: 35.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_F9 + name: eppendorf_96_tiprack_1000ul_eptips_F9 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 83.2685 + y: 26.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_G9 + name: eppendorf_96_tiprack_1000ul_eptips_G9 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 83.2685 + y: 17.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_H9 + name: eppendorf_96_tiprack_1000ul_eptips_H9 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 83.2685 + y: 8.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_A10 + name: eppendorf_96_tiprack_1000ul_eptips_A10 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 92.2685 + y: 71.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_B10 + name: eppendorf_96_tiprack_1000ul_eptips_B10 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 92.2685 + y: 62.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_C10 + name: eppendorf_96_tiprack_1000ul_eptips_C10 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 92.2685 + y: 53.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_D10 + name: eppendorf_96_tiprack_1000ul_eptips_D10 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 92.2685 + y: 44.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_E10 + name: eppendorf_96_tiprack_1000ul_eptips_E10 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 92.2685 + y: 35.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_F10 + name: eppendorf_96_tiprack_1000ul_eptips_F10 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 92.2685 + y: 26.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_G10 + name: eppendorf_96_tiprack_1000ul_eptips_G10 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 92.2685 + y: 17.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_H10 + name: eppendorf_96_tiprack_1000ul_eptips_H10 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 92.2685 + y: 8.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_A11 + name: eppendorf_96_tiprack_1000ul_eptips_A11 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 101.2685 + y: 71.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_B11 + name: eppendorf_96_tiprack_1000ul_eptips_B11 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 101.2685 + y: 62.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_C11 + name: eppendorf_96_tiprack_1000ul_eptips_C11 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 101.2685 + y: 53.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_D11 + name: eppendorf_96_tiprack_1000ul_eptips_D11 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 101.2685 + y: 44.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_E11 + name: eppendorf_96_tiprack_1000ul_eptips_E11 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 101.2685 + y: 35.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_F11 + name: eppendorf_96_tiprack_1000ul_eptips_F11 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 101.2685 + y: 26.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_G11 + name: eppendorf_96_tiprack_1000ul_eptips_G11 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 101.2685 + y: 17.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_H11 + name: eppendorf_96_tiprack_1000ul_eptips_H11 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 101.2685 + y: 8.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_A12 + name: eppendorf_96_tiprack_1000ul_eptips_A12 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 110.2685 + y: 71.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_B12 + name: eppendorf_96_tiprack_1000ul_eptips_B12 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 110.2685 + y: 62.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_C12 + name: eppendorf_96_tiprack_1000ul_eptips_C12 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 110.2685 + y: 53.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_D12 + name: eppendorf_96_tiprack_1000ul_eptips_D12 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 110.2685 + y: 44.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_E12 + name: eppendorf_96_tiprack_1000ul_eptips_E12 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 110.2685 + y: 35.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_F12 + name: eppendorf_96_tiprack_1000ul_eptips_F12 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 110.2685 + y: 26.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_G12 + name: eppendorf_96_tiprack_1000ul_eptips_G12 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 110.2685 + y: 17.1285 + z: 56.9 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip: + fitting_depth: 0 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 70.7 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_1000ul_eptips_H12 + name: eppendorf_96_tiprack_1000ul_eptips_H12 + parent: eppendorf_96_tiprack_1000ul_eptips + position: + x: 110.2685 + y: 8.1285 + z: 56.9 + sample_id: null + type: container + description: Eppendorf 96 tiprack 1000ul eptips + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tip_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 eppendorf_96_tiprack_10ul_eptips: - description: Eppendorf 96 tiprack 10ul eptips - class: + category: + - tip_racks + class: module: pylabrobot.resources.opentrons.tip_racks:eppendorf_96_tiprack_10ul_eptips type: pylabrobot - -opentrons_96_tiprack_1000ul: - description: Opentrons 96 tiprack 1000ul - class: - module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_tiprack_1000ul - type: pylabrobot - -opentrons_96_tiprack_20ul: - description: Opentrons 96 tiprack 20ul - class: - module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_tiprack_20ul - type: pylabrobot - -opentrons_96_filtertiprack_1000ul: - description: Opentrons 96 filtertiprack 1000ul - class: - module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_filtertiprack_1000ul - type: pylabrobot - model: - type: resource - mesh: tecan_nested_tip_rack/meshes/plate.stl - mesh_tf: [0.064, 0.043, 0, -1.5708, 0, 1.5708] - children_mesh: generic_labware_tube_10_75/meshes/0_base.stl - children_mesh_tf: [0.0018, 0.0018, 0, -1.5708,0, 0] - -opentrons_96_filtertiprack_20ul: - description: Opentrons 96 filtertiprack 20ul - class: - module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_filtertiprack_20ul - type: pylabrobot - + config_info: + - children: + - eppendorf_96_tiprack_10ul_eptips_A1 + - eppendorf_96_tiprack_10ul_eptips_B1 + - eppendorf_96_tiprack_10ul_eptips_C1 + - eppendorf_96_tiprack_10ul_eptips_D1 + - eppendorf_96_tiprack_10ul_eptips_E1 + - eppendorf_96_tiprack_10ul_eptips_F1 + - eppendorf_96_tiprack_10ul_eptips_G1 + - eppendorf_96_tiprack_10ul_eptips_H1 + - eppendorf_96_tiprack_10ul_eptips_A2 + - eppendorf_96_tiprack_10ul_eptips_B2 + - eppendorf_96_tiprack_10ul_eptips_C2 + - eppendorf_96_tiprack_10ul_eptips_D2 + - eppendorf_96_tiprack_10ul_eptips_E2 + - eppendorf_96_tiprack_10ul_eptips_F2 + - eppendorf_96_tiprack_10ul_eptips_G2 + - eppendorf_96_tiprack_10ul_eptips_H2 + - eppendorf_96_tiprack_10ul_eptips_A3 + - eppendorf_96_tiprack_10ul_eptips_B3 + - eppendorf_96_tiprack_10ul_eptips_C3 + - eppendorf_96_tiprack_10ul_eptips_D3 + - eppendorf_96_tiprack_10ul_eptips_E3 + - eppendorf_96_tiprack_10ul_eptips_F3 + - eppendorf_96_tiprack_10ul_eptips_G3 + - eppendorf_96_tiprack_10ul_eptips_H3 + - eppendorf_96_tiprack_10ul_eptips_A4 + - eppendorf_96_tiprack_10ul_eptips_B4 + - eppendorf_96_tiprack_10ul_eptips_C4 + - eppendorf_96_tiprack_10ul_eptips_D4 + - eppendorf_96_tiprack_10ul_eptips_E4 + - eppendorf_96_tiprack_10ul_eptips_F4 + - eppendorf_96_tiprack_10ul_eptips_G4 + - eppendorf_96_tiprack_10ul_eptips_H4 + - eppendorf_96_tiprack_10ul_eptips_A5 + - eppendorf_96_tiprack_10ul_eptips_B5 + - eppendorf_96_tiprack_10ul_eptips_C5 + - eppendorf_96_tiprack_10ul_eptips_D5 + - eppendorf_96_tiprack_10ul_eptips_E5 + - eppendorf_96_tiprack_10ul_eptips_F5 + - eppendorf_96_tiprack_10ul_eptips_G5 + - eppendorf_96_tiprack_10ul_eptips_H5 + - eppendorf_96_tiprack_10ul_eptips_A6 + - eppendorf_96_tiprack_10ul_eptips_B6 + - eppendorf_96_tiprack_10ul_eptips_C6 + - eppendorf_96_tiprack_10ul_eptips_D6 + - eppendorf_96_tiprack_10ul_eptips_E6 + - eppendorf_96_tiprack_10ul_eptips_F6 + - eppendorf_96_tiprack_10ul_eptips_G6 + - eppendorf_96_tiprack_10ul_eptips_H6 + - eppendorf_96_tiprack_10ul_eptips_A7 + - eppendorf_96_tiprack_10ul_eptips_B7 + - eppendorf_96_tiprack_10ul_eptips_C7 + - eppendorf_96_tiprack_10ul_eptips_D7 + - eppendorf_96_tiprack_10ul_eptips_E7 + - eppendorf_96_tiprack_10ul_eptips_F7 + - eppendorf_96_tiprack_10ul_eptips_G7 + - eppendorf_96_tiprack_10ul_eptips_H7 + - eppendorf_96_tiprack_10ul_eptips_A8 + - eppendorf_96_tiprack_10ul_eptips_B8 + - eppendorf_96_tiprack_10ul_eptips_C8 + - eppendorf_96_tiprack_10ul_eptips_D8 + - eppendorf_96_tiprack_10ul_eptips_E8 + - eppendorf_96_tiprack_10ul_eptips_F8 + - eppendorf_96_tiprack_10ul_eptips_G8 + - eppendorf_96_tiprack_10ul_eptips_H8 + - eppendorf_96_tiprack_10ul_eptips_A9 + - eppendorf_96_tiprack_10ul_eptips_B9 + - eppendorf_96_tiprack_10ul_eptips_C9 + - eppendorf_96_tiprack_10ul_eptips_D9 + - eppendorf_96_tiprack_10ul_eptips_E9 + - eppendorf_96_tiprack_10ul_eptips_F9 + - eppendorf_96_tiprack_10ul_eptips_G9 + - eppendorf_96_tiprack_10ul_eptips_H9 + - eppendorf_96_tiprack_10ul_eptips_A10 + - eppendorf_96_tiprack_10ul_eptips_B10 + - eppendorf_96_tiprack_10ul_eptips_C10 + - eppendorf_96_tiprack_10ul_eptips_D10 + - eppendorf_96_tiprack_10ul_eptips_E10 + - eppendorf_96_tiprack_10ul_eptips_F10 + - eppendorf_96_tiprack_10ul_eptips_G10 + - eppendorf_96_tiprack_10ul_eptips_H10 + - eppendorf_96_tiprack_10ul_eptips_A11 + - eppendorf_96_tiprack_10ul_eptips_B11 + - eppendorf_96_tiprack_10ul_eptips_C11 + - eppendorf_96_tiprack_10ul_eptips_D11 + - eppendorf_96_tiprack_10ul_eptips_E11 + - eppendorf_96_tiprack_10ul_eptips_F11 + - eppendorf_96_tiprack_10ul_eptips_G11 + - eppendorf_96_tiprack_10ul_eptips_H11 + - eppendorf_96_tiprack_10ul_eptips_A12 + - eppendorf_96_tiprack_10ul_eptips_B12 + - eppendorf_96_tiprack_10ul_eptips_C12 + - eppendorf_96_tiprack_10ul_eptips_D12 + - eppendorf_96_tiprack_10ul_eptips_E12 + - eppendorf_96_tiprack_10ul_eptips_F12 + - eppendorf_96_tiprack_10ul_eptips_G12 + - eppendorf_96_tiprack_10ul_eptips_H12 + class: '' + config: + barcode: null + category: tip_rack + model: Eppendorf epT.I.P.S. 96 Tip Rack 10 µL + ordering: + A1: eppendorf_96_tiprack_10ul_eptips_A1 + B1: eppendorf_96_tiprack_10ul_eptips_B1 + C1: eppendorf_96_tiprack_10ul_eptips_C1 + D1: eppendorf_96_tiprack_10ul_eptips_D1 + E1: eppendorf_96_tiprack_10ul_eptips_E1 + F1: eppendorf_96_tiprack_10ul_eptips_F1 + G1: eppendorf_96_tiprack_10ul_eptips_G1 + H1: eppendorf_96_tiprack_10ul_eptips_H1 + A2: eppendorf_96_tiprack_10ul_eptips_A2 + B2: eppendorf_96_tiprack_10ul_eptips_B2 + C2: eppendorf_96_tiprack_10ul_eptips_C2 + D2: eppendorf_96_tiprack_10ul_eptips_D2 + E2: eppendorf_96_tiprack_10ul_eptips_E2 + F2: eppendorf_96_tiprack_10ul_eptips_F2 + G2: eppendorf_96_tiprack_10ul_eptips_G2 + H2: eppendorf_96_tiprack_10ul_eptips_H2 + A3: eppendorf_96_tiprack_10ul_eptips_A3 + B3: eppendorf_96_tiprack_10ul_eptips_B3 + C3: eppendorf_96_tiprack_10ul_eptips_C3 + D3: eppendorf_96_tiprack_10ul_eptips_D3 + E3: eppendorf_96_tiprack_10ul_eptips_E3 + F3: eppendorf_96_tiprack_10ul_eptips_F3 + G3: eppendorf_96_tiprack_10ul_eptips_G3 + H3: eppendorf_96_tiprack_10ul_eptips_H3 + A4: eppendorf_96_tiprack_10ul_eptips_A4 + B4: eppendorf_96_tiprack_10ul_eptips_B4 + C4: eppendorf_96_tiprack_10ul_eptips_C4 + D4: eppendorf_96_tiprack_10ul_eptips_D4 + E4: eppendorf_96_tiprack_10ul_eptips_E4 + F4: eppendorf_96_tiprack_10ul_eptips_F4 + G4: eppendorf_96_tiprack_10ul_eptips_G4 + H4: eppendorf_96_tiprack_10ul_eptips_H4 + A5: eppendorf_96_tiprack_10ul_eptips_A5 + B5: eppendorf_96_tiprack_10ul_eptips_B5 + C5: eppendorf_96_tiprack_10ul_eptips_C5 + D5: eppendorf_96_tiprack_10ul_eptips_D5 + E5: eppendorf_96_tiprack_10ul_eptips_E5 + F5: eppendorf_96_tiprack_10ul_eptips_F5 + G5: eppendorf_96_tiprack_10ul_eptips_G5 + H5: eppendorf_96_tiprack_10ul_eptips_H5 + A6: eppendorf_96_tiprack_10ul_eptips_A6 + B6: eppendorf_96_tiprack_10ul_eptips_B6 + C6: eppendorf_96_tiprack_10ul_eptips_C6 + D6: eppendorf_96_tiprack_10ul_eptips_D6 + E6: eppendorf_96_tiprack_10ul_eptips_E6 + F6: eppendorf_96_tiprack_10ul_eptips_F6 + G6: eppendorf_96_tiprack_10ul_eptips_G6 + H6: eppendorf_96_tiprack_10ul_eptips_H6 + A7: eppendorf_96_tiprack_10ul_eptips_A7 + B7: eppendorf_96_tiprack_10ul_eptips_B7 + C7: eppendorf_96_tiprack_10ul_eptips_C7 + D7: eppendorf_96_tiprack_10ul_eptips_D7 + E7: eppendorf_96_tiprack_10ul_eptips_E7 + F7: eppendorf_96_tiprack_10ul_eptips_F7 + G7: eppendorf_96_tiprack_10ul_eptips_G7 + H7: eppendorf_96_tiprack_10ul_eptips_H7 + A8: eppendorf_96_tiprack_10ul_eptips_A8 + B8: eppendorf_96_tiprack_10ul_eptips_B8 + C8: eppendorf_96_tiprack_10ul_eptips_C8 + D8: eppendorf_96_tiprack_10ul_eptips_D8 + E8: eppendorf_96_tiprack_10ul_eptips_E8 + F8: eppendorf_96_tiprack_10ul_eptips_F8 + G8: eppendorf_96_tiprack_10ul_eptips_G8 + H8: eppendorf_96_tiprack_10ul_eptips_H8 + A9: eppendorf_96_tiprack_10ul_eptips_A9 + B9: eppendorf_96_tiprack_10ul_eptips_B9 + C9: eppendorf_96_tiprack_10ul_eptips_C9 + D9: eppendorf_96_tiprack_10ul_eptips_D9 + E9: eppendorf_96_tiprack_10ul_eptips_E9 + F9: eppendorf_96_tiprack_10ul_eptips_F9 + G9: eppendorf_96_tiprack_10ul_eptips_G9 + H9: eppendorf_96_tiprack_10ul_eptips_H9 + A10: eppendorf_96_tiprack_10ul_eptips_A10 + B10: eppendorf_96_tiprack_10ul_eptips_B10 + C10: eppendorf_96_tiprack_10ul_eptips_C10 + D10: eppendorf_96_tiprack_10ul_eptips_D10 + E10: eppendorf_96_tiprack_10ul_eptips_E10 + F10: eppendorf_96_tiprack_10ul_eptips_F10 + G10: eppendorf_96_tiprack_10ul_eptips_G10 + H10: eppendorf_96_tiprack_10ul_eptips_H10 + A11: eppendorf_96_tiprack_10ul_eptips_A11 + B11: eppendorf_96_tiprack_10ul_eptips_B11 + C11: eppendorf_96_tiprack_10ul_eptips_C11 + D11: eppendorf_96_tiprack_10ul_eptips_D11 + E11: eppendorf_96_tiprack_10ul_eptips_E11 + F11: eppendorf_96_tiprack_10ul_eptips_F11 + G11: eppendorf_96_tiprack_10ul_eptips_G11 + H11: eppendorf_96_tiprack_10ul_eptips_H11 + A12: eppendorf_96_tiprack_10ul_eptips_A12 + B12: eppendorf_96_tiprack_10ul_eptips_B12 + C12: eppendorf_96_tiprack_10ul_eptips_C12 + D12: eppendorf_96_tiprack_10ul_eptips_D12 + E12: eppendorf_96_tiprack_10ul_eptips_E12 + F12: eppendorf_96_tiprack_10ul_eptips_F12 + G12: eppendorf_96_tiprack_10ul_eptips_G12 + H12: eppendorf_96_tiprack_10ul_eptips_H12 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.48 + size_z: 65.4 + type: TipRack + data: {} + id: eppendorf_96_tiprack_10ul_eptips + name: eppendorf_96_tiprack_10ul_eptips + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_A1 + name: eppendorf_96_tiprack_10ul_eptips_A1 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 12.2585 + y: 72.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_B1 + name: eppendorf_96_tiprack_10ul_eptips_B1 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 12.2585 + y: 63.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_C1 + name: eppendorf_96_tiprack_10ul_eptips_C1 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 12.2585 + y: 54.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_D1 + name: eppendorf_96_tiprack_10ul_eptips_D1 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 12.2585 + y: 45.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_E1 + name: eppendorf_96_tiprack_10ul_eptips_E1 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 12.2585 + y: 36.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_F1 + name: eppendorf_96_tiprack_10ul_eptips_F1 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 12.2585 + y: 27.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_G1 + name: eppendorf_96_tiprack_10ul_eptips_G1 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 12.2585 + y: 18.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_H1 + name: eppendorf_96_tiprack_10ul_eptips_H1 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 12.2585 + y: 9.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_A2 + name: eppendorf_96_tiprack_10ul_eptips_A2 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 21.2585 + y: 72.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_B2 + name: eppendorf_96_tiprack_10ul_eptips_B2 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 21.2585 + y: 63.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_C2 + name: eppendorf_96_tiprack_10ul_eptips_C2 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 21.2585 + y: 54.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_D2 + name: eppendorf_96_tiprack_10ul_eptips_D2 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 21.2585 + y: 45.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_E2 + name: eppendorf_96_tiprack_10ul_eptips_E2 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 21.2585 + y: 36.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_F2 + name: eppendorf_96_tiprack_10ul_eptips_F2 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 21.2585 + y: 27.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_G2 + name: eppendorf_96_tiprack_10ul_eptips_G2 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 21.2585 + y: 18.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_H2 + name: eppendorf_96_tiprack_10ul_eptips_H2 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 21.2585 + y: 9.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_A3 + name: eppendorf_96_tiprack_10ul_eptips_A3 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 30.2585 + y: 72.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_B3 + name: eppendorf_96_tiprack_10ul_eptips_B3 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 30.2585 + y: 63.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_C3 + name: eppendorf_96_tiprack_10ul_eptips_C3 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 30.2585 + y: 54.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_D3 + name: eppendorf_96_tiprack_10ul_eptips_D3 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 30.2585 + y: 45.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_E3 + name: eppendorf_96_tiprack_10ul_eptips_E3 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 30.2585 + y: 36.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_F3 + name: eppendorf_96_tiprack_10ul_eptips_F3 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 30.2585 + y: 27.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_G3 + name: eppendorf_96_tiprack_10ul_eptips_G3 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 30.2585 + y: 18.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_H3 + name: eppendorf_96_tiprack_10ul_eptips_H3 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 30.2585 + y: 9.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_A4 + name: eppendorf_96_tiprack_10ul_eptips_A4 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 39.2585 + y: 72.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_B4 + name: eppendorf_96_tiprack_10ul_eptips_B4 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 39.2585 + y: 63.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_C4 + name: eppendorf_96_tiprack_10ul_eptips_C4 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 39.2585 + y: 54.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_D4 + name: eppendorf_96_tiprack_10ul_eptips_D4 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 39.2585 + y: 45.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_E4 + name: eppendorf_96_tiprack_10ul_eptips_E4 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 39.2585 + y: 36.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_F4 + name: eppendorf_96_tiprack_10ul_eptips_F4 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 39.2585 + y: 27.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_G4 + name: eppendorf_96_tiprack_10ul_eptips_G4 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 39.2585 + y: 18.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_H4 + name: eppendorf_96_tiprack_10ul_eptips_H4 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 39.2585 + y: 9.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_A5 + name: eppendorf_96_tiprack_10ul_eptips_A5 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 48.2585 + y: 72.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_B5 + name: eppendorf_96_tiprack_10ul_eptips_B5 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 48.2585 + y: 63.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_C5 + name: eppendorf_96_tiprack_10ul_eptips_C5 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 48.2585 + y: 54.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_D5 + name: eppendorf_96_tiprack_10ul_eptips_D5 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 48.2585 + y: 45.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_E5 + name: eppendorf_96_tiprack_10ul_eptips_E5 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 48.2585 + y: 36.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_F5 + name: eppendorf_96_tiprack_10ul_eptips_F5 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 48.2585 + y: 27.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_G5 + name: eppendorf_96_tiprack_10ul_eptips_G5 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 48.2585 + y: 18.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_H5 + name: eppendorf_96_tiprack_10ul_eptips_H5 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 48.2585 + y: 9.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_A6 + name: eppendorf_96_tiprack_10ul_eptips_A6 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 57.2585 + y: 72.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_B6 + name: eppendorf_96_tiprack_10ul_eptips_B6 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 57.2585 + y: 63.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_C6 + name: eppendorf_96_tiprack_10ul_eptips_C6 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 57.2585 + y: 54.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_D6 + name: eppendorf_96_tiprack_10ul_eptips_D6 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 57.2585 + y: 45.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_E6 + name: eppendorf_96_tiprack_10ul_eptips_E6 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 57.2585 + y: 36.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_F6 + name: eppendorf_96_tiprack_10ul_eptips_F6 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 57.2585 + y: 27.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_G6 + name: eppendorf_96_tiprack_10ul_eptips_G6 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 57.2585 + y: 18.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_H6 + name: eppendorf_96_tiprack_10ul_eptips_H6 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 57.2585 + y: 9.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_A7 + name: eppendorf_96_tiprack_10ul_eptips_A7 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 66.2585 + y: 72.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_B7 + name: eppendorf_96_tiprack_10ul_eptips_B7 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 66.2585 + y: 63.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_C7 + name: eppendorf_96_tiprack_10ul_eptips_C7 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 66.2585 + y: 54.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_D7 + name: eppendorf_96_tiprack_10ul_eptips_D7 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 66.2585 + y: 45.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_E7 + name: eppendorf_96_tiprack_10ul_eptips_E7 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 66.2585 + y: 36.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_F7 + name: eppendorf_96_tiprack_10ul_eptips_F7 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 66.2585 + y: 27.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_G7 + name: eppendorf_96_tiprack_10ul_eptips_G7 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 66.2585 + y: 18.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_H7 + name: eppendorf_96_tiprack_10ul_eptips_H7 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 66.2585 + y: 9.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_A8 + name: eppendorf_96_tiprack_10ul_eptips_A8 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 75.2585 + y: 72.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_B8 + name: eppendorf_96_tiprack_10ul_eptips_B8 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 75.2585 + y: 63.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_C8 + name: eppendorf_96_tiprack_10ul_eptips_C8 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 75.2585 + y: 54.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_D8 + name: eppendorf_96_tiprack_10ul_eptips_D8 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 75.2585 + y: 45.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_E8 + name: eppendorf_96_tiprack_10ul_eptips_E8 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 75.2585 + y: 36.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_F8 + name: eppendorf_96_tiprack_10ul_eptips_F8 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 75.2585 + y: 27.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_G8 + name: eppendorf_96_tiprack_10ul_eptips_G8 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 75.2585 + y: 18.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_H8 + name: eppendorf_96_tiprack_10ul_eptips_H8 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 75.2585 + y: 9.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_A9 + name: eppendorf_96_tiprack_10ul_eptips_A9 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 84.2585 + y: 72.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_B9 + name: eppendorf_96_tiprack_10ul_eptips_B9 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 84.2585 + y: 63.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_C9 + name: eppendorf_96_tiprack_10ul_eptips_C9 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 84.2585 + y: 54.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_D9 + name: eppendorf_96_tiprack_10ul_eptips_D9 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 84.2585 + y: 45.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_E9 + name: eppendorf_96_tiprack_10ul_eptips_E9 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 84.2585 + y: 36.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_F9 + name: eppendorf_96_tiprack_10ul_eptips_F9 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 84.2585 + y: 27.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_G9 + name: eppendorf_96_tiprack_10ul_eptips_G9 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 84.2585 + y: 18.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_H9 + name: eppendorf_96_tiprack_10ul_eptips_H9 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 84.2585 + y: 9.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_A10 + name: eppendorf_96_tiprack_10ul_eptips_A10 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 93.2585 + y: 72.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_B10 + name: eppendorf_96_tiprack_10ul_eptips_B10 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 93.2585 + y: 63.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_C10 + name: eppendorf_96_tiprack_10ul_eptips_C10 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 93.2585 + y: 54.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_D10 + name: eppendorf_96_tiprack_10ul_eptips_D10 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 93.2585 + y: 45.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_E10 + name: eppendorf_96_tiprack_10ul_eptips_E10 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 93.2585 + y: 36.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_F10 + name: eppendorf_96_tiprack_10ul_eptips_F10 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 93.2585 + y: 27.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_G10 + name: eppendorf_96_tiprack_10ul_eptips_G10 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 93.2585 + y: 18.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_H10 + name: eppendorf_96_tiprack_10ul_eptips_H10 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 93.2585 + y: 9.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_A11 + name: eppendorf_96_tiprack_10ul_eptips_A11 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 102.2585 + y: 72.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_B11 + name: eppendorf_96_tiprack_10ul_eptips_B11 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 102.2585 + y: 63.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_C11 + name: eppendorf_96_tiprack_10ul_eptips_C11 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 102.2585 + y: 54.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_D11 + name: eppendorf_96_tiprack_10ul_eptips_D11 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 102.2585 + y: 45.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_E11 + name: eppendorf_96_tiprack_10ul_eptips_E11 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 102.2585 + y: 36.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_F11 + name: eppendorf_96_tiprack_10ul_eptips_F11 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 102.2585 + y: 27.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_G11 + name: eppendorf_96_tiprack_10ul_eptips_G11 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 102.2585 + y: 18.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_H11 + name: eppendorf_96_tiprack_10ul_eptips_H11 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 102.2585 + y: 9.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_A12 + name: eppendorf_96_tiprack_10ul_eptips_A12 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 111.2585 + y: 72.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_B12 + name: eppendorf_96_tiprack_10ul_eptips_B12 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 111.2585 + y: 63.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_C12 + name: eppendorf_96_tiprack_10ul_eptips_C12 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 111.2585 + y: 54.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_D12 + name: eppendorf_96_tiprack_10ul_eptips_D12 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 111.2585 + y: 45.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_E12 + name: eppendorf_96_tiprack_10ul_eptips_E12 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 111.2585 + y: 36.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_F12 + name: eppendorf_96_tiprack_10ul_eptips_F12 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 111.2585 + y: 27.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_G12 + name: eppendorf_96_tiprack_10ul_eptips_G12 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 111.2585 + y: 18.1185 + z: 35.4 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip: + fitting_depth: 1 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 34 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: eppendorf_96_tiprack_10ul_eptips_H12 + name: eppendorf_96_tiprack_10ul_eptips_H12 + parent: eppendorf_96_tiprack_10ul_eptips + position: + x: 111.2585 + y: 9.1185 + z: 35.4 + sample_id: null + type: container + description: Eppendorf 96 tiprack 10ul eptips + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tip_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 geb_96_tiprack_1000ul: - description: Geb 96 tiprack 1000ul - class: + category: + - tip_racks + class: module: pylabrobot.resources.opentrons.tip_racks:geb_96_tiprack_1000ul type: pylabrobot + config_info: + - children: + - geb_96_tiprack_1000ul_A1 + - geb_96_tiprack_1000ul_B1 + - geb_96_tiprack_1000ul_C1 + - geb_96_tiprack_1000ul_D1 + - geb_96_tiprack_1000ul_E1 + - geb_96_tiprack_1000ul_F1 + - geb_96_tiprack_1000ul_G1 + - geb_96_tiprack_1000ul_H1 + - geb_96_tiprack_1000ul_A2 + - geb_96_tiprack_1000ul_B2 + - geb_96_tiprack_1000ul_C2 + - geb_96_tiprack_1000ul_D2 + - geb_96_tiprack_1000ul_E2 + - geb_96_tiprack_1000ul_F2 + - geb_96_tiprack_1000ul_G2 + - geb_96_tiprack_1000ul_H2 + - geb_96_tiprack_1000ul_A3 + - geb_96_tiprack_1000ul_B3 + - geb_96_tiprack_1000ul_C3 + - geb_96_tiprack_1000ul_D3 + - geb_96_tiprack_1000ul_E3 + - geb_96_tiprack_1000ul_F3 + - geb_96_tiprack_1000ul_G3 + - geb_96_tiprack_1000ul_H3 + - geb_96_tiprack_1000ul_A4 + - geb_96_tiprack_1000ul_B4 + - geb_96_tiprack_1000ul_C4 + - geb_96_tiprack_1000ul_D4 + - geb_96_tiprack_1000ul_E4 + - geb_96_tiprack_1000ul_F4 + - geb_96_tiprack_1000ul_G4 + - geb_96_tiprack_1000ul_H4 + - geb_96_tiprack_1000ul_A5 + - geb_96_tiprack_1000ul_B5 + - geb_96_tiprack_1000ul_C5 + - geb_96_tiprack_1000ul_D5 + - geb_96_tiprack_1000ul_E5 + - geb_96_tiprack_1000ul_F5 + - geb_96_tiprack_1000ul_G5 + - geb_96_tiprack_1000ul_H5 + - geb_96_tiprack_1000ul_A6 + - geb_96_tiprack_1000ul_B6 + - geb_96_tiprack_1000ul_C6 + - geb_96_tiprack_1000ul_D6 + - geb_96_tiprack_1000ul_E6 + - geb_96_tiprack_1000ul_F6 + - geb_96_tiprack_1000ul_G6 + - geb_96_tiprack_1000ul_H6 + - geb_96_tiprack_1000ul_A7 + - geb_96_tiprack_1000ul_B7 + - geb_96_tiprack_1000ul_C7 + - geb_96_tiprack_1000ul_D7 + - geb_96_tiprack_1000ul_E7 + - geb_96_tiprack_1000ul_F7 + - geb_96_tiprack_1000ul_G7 + - geb_96_tiprack_1000ul_H7 + - geb_96_tiprack_1000ul_A8 + - geb_96_tiprack_1000ul_B8 + - geb_96_tiprack_1000ul_C8 + - geb_96_tiprack_1000ul_D8 + - geb_96_tiprack_1000ul_E8 + - geb_96_tiprack_1000ul_F8 + - geb_96_tiprack_1000ul_G8 + - geb_96_tiprack_1000ul_H8 + - geb_96_tiprack_1000ul_A9 + - geb_96_tiprack_1000ul_B9 + - geb_96_tiprack_1000ul_C9 + - geb_96_tiprack_1000ul_D9 + - geb_96_tiprack_1000ul_E9 + - geb_96_tiprack_1000ul_F9 + - geb_96_tiprack_1000ul_G9 + - geb_96_tiprack_1000ul_H9 + - geb_96_tiprack_1000ul_A10 + - geb_96_tiprack_1000ul_B10 + - geb_96_tiprack_1000ul_C10 + - geb_96_tiprack_1000ul_D10 + - geb_96_tiprack_1000ul_E10 + - geb_96_tiprack_1000ul_F10 + - geb_96_tiprack_1000ul_G10 + - geb_96_tiprack_1000ul_H10 + - geb_96_tiprack_1000ul_A11 + - geb_96_tiprack_1000ul_B11 + - geb_96_tiprack_1000ul_C11 + - geb_96_tiprack_1000ul_D11 + - geb_96_tiprack_1000ul_E11 + - geb_96_tiprack_1000ul_F11 + - geb_96_tiprack_1000ul_G11 + - geb_96_tiprack_1000ul_H11 + - geb_96_tiprack_1000ul_A12 + - geb_96_tiprack_1000ul_B12 + - geb_96_tiprack_1000ul_C12 + - geb_96_tiprack_1000ul_D12 + - geb_96_tiprack_1000ul_E12 + - geb_96_tiprack_1000ul_F12 + - geb_96_tiprack_1000ul_G12 + - geb_96_tiprack_1000ul_H12 + class: '' + config: + barcode: null + category: tip_rack + model: GEB 96 Tip Rack 1000 µL + ordering: + A1: geb_96_tiprack_1000ul_A1 + B1: geb_96_tiprack_1000ul_B1 + C1: geb_96_tiprack_1000ul_C1 + D1: geb_96_tiprack_1000ul_D1 + E1: geb_96_tiprack_1000ul_E1 + F1: geb_96_tiprack_1000ul_F1 + G1: geb_96_tiprack_1000ul_G1 + H1: geb_96_tiprack_1000ul_H1 + A2: geb_96_tiprack_1000ul_A2 + B2: geb_96_tiprack_1000ul_B2 + C2: geb_96_tiprack_1000ul_C2 + D2: geb_96_tiprack_1000ul_D2 + E2: geb_96_tiprack_1000ul_E2 + F2: geb_96_tiprack_1000ul_F2 + G2: geb_96_tiprack_1000ul_G2 + H2: geb_96_tiprack_1000ul_H2 + A3: geb_96_tiprack_1000ul_A3 + B3: geb_96_tiprack_1000ul_B3 + C3: geb_96_tiprack_1000ul_C3 + D3: geb_96_tiprack_1000ul_D3 + E3: geb_96_tiprack_1000ul_E3 + F3: geb_96_tiprack_1000ul_F3 + G3: geb_96_tiprack_1000ul_G3 + H3: geb_96_tiprack_1000ul_H3 + A4: geb_96_tiprack_1000ul_A4 + B4: geb_96_tiprack_1000ul_B4 + C4: geb_96_tiprack_1000ul_C4 + D4: geb_96_tiprack_1000ul_D4 + E4: geb_96_tiprack_1000ul_E4 + F4: geb_96_tiprack_1000ul_F4 + G4: geb_96_tiprack_1000ul_G4 + H4: geb_96_tiprack_1000ul_H4 + A5: geb_96_tiprack_1000ul_A5 + B5: geb_96_tiprack_1000ul_B5 + C5: geb_96_tiprack_1000ul_C5 + D5: geb_96_tiprack_1000ul_D5 + E5: geb_96_tiprack_1000ul_E5 + F5: geb_96_tiprack_1000ul_F5 + G5: geb_96_tiprack_1000ul_G5 + H5: geb_96_tiprack_1000ul_H5 + A6: geb_96_tiprack_1000ul_A6 + B6: geb_96_tiprack_1000ul_B6 + C6: geb_96_tiprack_1000ul_C6 + D6: geb_96_tiprack_1000ul_D6 + E6: geb_96_tiprack_1000ul_E6 + F6: geb_96_tiprack_1000ul_F6 + G6: geb_96_tiprack_1000ul_G6 + H6: geb_96_tiprack_1000ul_H6 + A7: geb_96_tiprack_1000ul_A7 + B7: geb_96_tiprack_1000ul_B7 + C7: geb_96_tiprack_1000ul_C7 + D7: geb_96_tiprack_1000ul_D7 + E7: geb_96_tiprack_1000ul_E7 + F7: geb_96_tiprack_1000ul_F7 + G7: geb_96_tiprack_1000ul_G7 + H7: geb_96_tiprack_1000ul_H7 + A8: geb_96_tiprack_1000ul_A8 + B8: geb_96_tiprack_1000ul_B8 + C8: geb_96_tiprack_1000ul_C8 + D8: geb_96_tiprack_1000ul_D8 + E8: geb_96_tiprack_1000ul_E8 + F8: geb_96_tiprack_1000ul_F8 + G8: geb_96_tiprack_1000ul_G8 + H8: geb_96_tiprack_1000ul_H8 + A9: geb_96_tiprack_1000ul_A9 + B9: geb_96_tiprack_1000ul_B9 + C9: geb_96_tiprack_1000ul_C9 + D9: geb_96_tiprack_1000ul_D9 + E9: geb_96_tiprack_1000ul_E9 + F9: geb_96_tiprack_1000ul_F9 + G9: geb_96_tiprack_1000ul_G9 + H9: geb_96_tiprack_1000ul_H9 + A10: geb_96_tiprack_1000ul_A10 + B10: geb_96_tiprack_1000ul_B10 + C10: geb_96_tiprack_1000ul_C10 + D10: geb_96_tiprack_1000ul_D10 + E10: geb_96_tiprack_1000ul_E10 + F10: geb_96_tiprack_1000ul_F10 + G10: geb_96_tiprack_1000ul_G10 + H10: geb_96_tiprack_1000ul_H10 + A11: geb_96_tiprack_1000ul_A11 + B11: geb_96_tiprack_1000ul_B11 + C11: geb_96_tiprack_1000ul_C11 + D11: geb_96_tiprack_1000ul_D11 + E11: geb_96_tiprack_1000ul_E11 + F11: geb_96_tiprack_1000ul_F11 + G11: geb_96_tiprack_1000ul_G11 + H11: geb_96_tiprack_1000ul_H11 + A12: geb_96_tiprack_1000ul_A12 + B12: geb_96_tiprack_1000ul_B12 + C12: geb_96_tiprack_1000ul_C12 + D12: geb_96_tiprack_1000ul_D12 + E12: geb_96_tiprack_1000ul_E12 + F12: geb_96_tiprack_1000ul_F12 + G12: geb_96_tiprack_1000ul_G12 + H12: geb_96_tiprack_1000ul_H12 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.75 + size_y: 85.5 + size_z: 100.25 + type: TipRack + data: {} + id: geb_96_tiprack_1000ul + name: geb_96_tiprack_1000ul + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_A1 + name: geb_96_tiprack_1000ul_A1 + parent: geb_96_tiprack_1000ul + position: + x: 11.5625 + y: 71.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_B1 + name: geb_96_tiprack_1000ul_B1 + parent: geb_96_tiprack_1000ul + position: + x: 11.5625 + y: 62.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_C1 + name: geb_96_tiprack_1000ul_C1 + parent: geb_96_tiprack_1000ul + position: + x: 11.5625 + y: 53.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_D1 + name: geb_96_tiprack_1000ul_D1 + parent: geb_96_tiprack_1000ul + position: + x: 11.5625 + y: 44.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_E1 + name: geb_96_tiprack_1000ul_E1 + parent: geb_96_tiprack_1000ul + position: + x: 11.5625 + y: 35.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_F1 + name: geb_96_tiprack_1000ul_F1 + parent: geb_96_tiprack_1000ul + position: + x: 11.5625 + y: 26.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_G1 + name: geb_96_tiprack_1000ul_G1 + parent: geb_96_tiprack_1000ul + position: + x: 11.5625 + y: 17.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_H1 + name: geb_96_tiprack_1000ul_H1 + parent: geb_96_tiprack_1000ul + position: + x: 11.5625 + y: 8.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_A2 + name: geb_96_tiprack_1000ul_A2 + parent: geb_96_tiprack_1000ul + position: + x: 20.5625 + y: 71.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_B2 + name: geb_96_tiprack_1000ul_B2 + parent: geb_96_tiprack_1000ul + position: + x: 20.5625 + y: 62.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_C2 + name: geb_96_tiprack_1000ul_C2 + parent: geb_96_tiprack_1000ul + position: + x: 20.5625 + y: 53.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_D2 + name: geb_96_tiprack_1000ul_D2 + parent: geb_96_tiprack_1000ul + position: + x: 20.5625 + y: 44.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_E2 + name: geb_96_tiprack_1000ul_E2 + parent: geb_96_tiprack_1000ul + position: + x: 20.5625 + y: 35.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_F2 + name: geb_96_tiprack_1000ul_F2 + parent: geb_96_tiprack_1000ul + position: + x: 20.5625 + y: 26.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_G2 + name: geb_96_tiprack_1000ul_G2 + parent: geb_96_tiprack_1000ul + position: + x: 20.5625 + y: 17.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_H2 + name: geb_96_tiprack_1000ul_H2 + parent: geb_96_tiprack_1000ul + position: + x: 20.5625 + y: 8.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_A3 + name: geb_96_tiprack_1000ul_A3 + parent: geb_96_tiprack_1000ul + position: + x: 29.5625 + y: 71.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_B3 + name: geb_96_tiprack_1000ul_B3 + parent: geb_96_tiprack_1000ul + position: + x: 29.5625 + y: 62.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_C3 + name: geb_96_tiprack_1000ul_C3 + parent: geb_96_tiprack_1000ul + position: + x: 29.5625 + y: 53.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_D3 + name: geb_96_tiprack_1000ul_D3 + parent: geb_96_tiprack_1000ul + position: + x: 29.5625 + y: 44.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_E3 + name: geb_96_tiprack_1000ul_E3 + parent: geb_96_tiprack_1000ul + position: + x: 29.5625 + y: 35.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_F3 + name: geb_96_tiprack_1000ul_F3 + parent: geb_96_tiprack_1000ul + position: + x: 29.5625 + y: 26.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_G3 + name: geb_96_tiprack_1000ul_G3 + parent: geb_96_tiprack_1000ul + position: + x: 29.5625 + y: 17.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_H3 + name: geb_96_tiprack_1000ul_H3 + parent: geb_96_tiprack_1000ul + position: + x: 29.5625 + y: 8.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_A4 + name: geb_96_tiprack_1000ul_A4 + parent: geb_96_tiprack_1000ul + position: + x: 38.5625 + y: 71.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_B4 + name: geb_96_tiprack_1000ul_B4 + parent: geb_96_tiprack_1000ul + position: + x: 38.5625 + y: 62.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_C4 + name: geb_96_tiprack_1000ul_C4 + parent: geb_96_tiprack_1000ul + position: + x: 38.5625 + y: 53.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_D4 + name: geb_96_tiprack_1000ul_D4 + parent: geb_96_tiprack_1000ul + position: + x: 38.5625 + y: 44.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_E4 + name: geb_96_tiprack_1000ul_E4 + parent: geb_96_tiprack_1000ul + position: + x: 38.5625 + y: 35.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_F4 + name: geb_96_tiprack_1000ul_F4 + parent: geb_96_tiprack_1000ul + position: + x: 38.5625 + y: 26.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_G4 + name: geb_96_tiprack_1000ul_G4 + parent: geb_96_tiprack_1000ul + position: + x: 38.5625 + y: 17.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_H4 + name: geb_96_tiprack_1000ul_H4 + parent: geb_96_tiprack_1000ul + position: + x: 38.5625 + y: 8.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_A5 + name: geb_96_tiprack_1000ul_A5 + parent: geb_96_tiprack_1000ul + position: + x: 47.5625 + y: 71.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_B5 + name: geb_96_tiprack_1000ul_B5 + parent: geb_96_tiprack_1000ul + position: + x: 47.5625 + y: 62.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_C5 + name: geb_96_tiprack_1000ul_C5 + parent: geb_96_tiprack_1000ul + position: + x: 47.5625 + y: 53.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_D5 + name: geb_96_tiprack_1000ul_D5 + parent: geb_96_tiprack_1000ul + position: + x: 47.5625 + y: 44.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_E5 + name: geb_96_tiprack_1000ul_E5 + parent: geb_96_tiprack_1000ul + position: + x: 47.5625 + y: 35.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_F5 + name: geb_96_tiprack_1000ul_F5 + parent: geb_96_tiprack_1000ul + position: + x: 47.5625 + y: 26.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_G5 + name: geb_96_tiprack_1000ul_G5 + parent: geb_96_tiprack_1000ul + position: + x: 47.5625 + y: 17.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_H5 + name: geb_96_tiprack_1000ul_H5 + parent: geb_96_tiprack_1000ul + position: + x: 47.5625 + y: 8.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_A6 + name: geb_96_tiprack_1000ul_A6 + parent: geb_96_tiprack_1000ul + position: + x: 56.5625 + y: 71.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_B6 + name: geb_96_tiprack_1000ul_B6 + parent: geb_96_tiprack_1000ul + position: + x: 56.5625 + y: 62.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_C6 + name: geb_96_tiprack_1000ul_C6 + parent: geb_96_tiprack_1000ul + position: + x: 56.5625 + y: 53.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_D6 + name: geb_96_tiprack_1000ul_D6 + parent: geb_96_tiprack_1000ul + position: + x: 56.5625 + y: 44.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_E6 + name: geb_96_tiprack_1000ul_E6 + parent: geb_96_tiprack_1000ul + position: + x: 56.5625 + y: 35.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_F6 + name: geb_96_tiprack_1000ul_F6 + parent: geb_96_tiprack_1000ul + position: + x: 56.5625 + y: 26.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_G6 + name: geb_96_tiprack_1000ul_G6 + parent: geb_96_tiprack_1000ul + position: + x: 56.5625 + y: 17.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_H6 + name: geb_96_tiprack_1000ul_H6 + parent: geb_96_tiprack_1000ul + position: + x: 56.5625 + y: 8.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_A7 + name: geb_96_tiprack_1000ul_A7 + parent: geb_96_tiprack_1000ul + position: + x: 65.5625 + y: 71.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_B7 + name: geb_96_tiprack_1000ul_B7 + parent: geb_96_tiprack_1000ul + position: + x: 65.5625 + y: 62.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_C7 + name: geb_96_tiprack_1000ul_C7 + parent: geb_96_tiprack_1000ul + position: + x: 65.5625 + y: 53.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_D7 + name: geb_96_tiprack_1000ul_D7 + parent: geb_96_tiprack_1000ul + position: + x: 65.5625 + y: 44.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_E7 + name: geb_96_tiprack_1000ul_E7 + parent: geb_96_tiprack_1000ul + position: + x: 65.5625 + y: 35.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_F7 + name: geb_96_tiprack_1000ul_F7 + parent: geb_96_tiprack_1000ul + position: + x: 65.5625 + y: 26.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_G7 + name: geb_96_tiprack_1000ul_G7 + parent: geb_96_tiprack_1000ul + position: + x: 65.5625 + y: 17.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_H7 + name: geb_96_tiprack_1000ul_H7 + parent: geb_96_tiprack_1000ul + position: + x: 65.5625 + y: 8.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_A8 + name: geb_96_tiprack_1000ul_A8 + parent: geb_96_tiprack_1000ul + position: + x: 74.5625 + y: 71.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_B8 + name: geb_96_tiprack_1000ul_B8 + parent: geb_96_tiprack_1000ul + position: + x: 74.5625 + y: 62.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_C8 + name: geb_96_tiprack_1000ul_C8 + parent: geb_96_tiprack_1000ul + position: + x: 74.5625 + y: 53.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_D8 + name: geb_96_tiprack_1000ul_D8 + parent: geb_96_tiprack_1000ul + position: + x: 74.5625 + y: 44.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_E8 + name: geb_96_tiprack_1000ul_E8 + parent: geb_96_tiprack_1000ul + position: + x: 74.5625 + y: 35.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_F8 + name: geb_96_tiprack_1000ul_F8 + parent: geb_96_tiprack_1000ul + position: + x: 74.5625 + y: 26.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_G8 + name: geb_96_tiprack_1000ul_G8 + parent: geb_96_tiprack_1000ul + position: + x: 74.5625 + y: 17.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_H8 + name: geb_96_tiprack_1000ul_H8 + parent: geb_96_tiprack_1000ul + position: + x: 74.5625 + y: 8.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_A9 + name: geb_96_tiprack_1000ul_A9 + parent: geb_96_tiprack_1000ul + position: + x: 83.5625 + y: 71.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_B9 + name: geb_96_tiprack_1000ul_B9 + parent: geb_96_tiprack_1000ul + position: + x: 83.5625 + y: 62.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_C9 + name: geb_96_tiprack_1000ul_C9 + parent: geb_96_tiprack_1000ul + position: + x: 83.5625 + y: 53.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_D9 + name: geb_96_tiprack_1000ul_D9 + parent: geb_96_tiprack_1000ul + position: + x: 83.5625 + y: 44.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_E9 + name: geb_96_tiprack_1000ul_E9 + parent: geb_96_tiprack_1000ul + position: + x: 83.5625 + y: 35.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_F9 + name: geb_96_tiprack_1000ul_F9 + parent: geb_96_tiprack_1000ul + position: + x: 83.5625 + y: 26.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_G9 + name: geb_96_tiprack_1000ul_G9 + parent: geb_96_tiprack_1000ul + position: + x: 83.5625 + y: 17.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_H9 + name: geb_96_tiprack_1000ul_H9 + parent: geb_96_tiprack_1000ul + position: + x: 83.5625 + y: 8.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_A10 + name: geb_96_tiprack_1000ul_A10 + parent: geb_96_tiprack_1000ul + position: + x: 92.5625 + y: 71.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_B10 + name: geb_96_tiprack_1000ul_B10 + parent: geb_96_tiprack_1000ul + position: + x: 92.5625 + y: 62.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_C10 + name: geb_96_tiprack_1000ul_C10 + parent: geb_96_tiprack_1000ul + position: + x: 92.5625 + y: 53.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_D10 + name: geb_96_tiprack_1000ul_D10 + parent: geb_96_tiprack_1000ul + position: + x: 92.5625 + y: 44.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_E10 + name: geb_96_tiprack_1000ul_E10 + parent: geb_96_tiprack_1000ul + position: + x: 92.5625 + y: 35.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_F10 + name: geb_96_tiprack_1000ul_F10 + parent: geb_96_tiprack_1000ul + position: + x: 92.5625 + y: 26.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_G10 + name: geb_96_tiprack_1000ul_G10 + parent: geb_96_tiprack_1000ul + position: + x: 92.5625 + y: 17.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_H10 + name: geb_96_tiprack_1000ul_H10 + parent: geb_96_tiprack_1000ul + position: + x: 92.5625 + y: 8.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_A11 + name: geb_96_tiprack_1000ul_A11 + parent: geb_96_tiprack_1000ul + position: + x: 101.5625 + y: 71.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_B11 + name: geb_96_tiprack_1000ul_B11 + parent: geb_96_tiprack_1000ul + position: + x: 101.5625 + y: 62.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_C11 + name: geb_96_tiprack_1000ul_C11 + parent: geb_96_tiprack_1000ul + position: + x: 101.5625 + y: 53.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_D11 + name: geb_96_tiprack_1000ul_D11 + parent: geb_96_tiprack_1000ul + position: + x: 101.5625 + y: 44.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_E11 + name: geb_96_tiprack_1000ul_E11 + parent: geb_96_tiprack_1000ul + position: + x: 101.5625 + y: 35.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_F11 + name: geb_96_tiprack_1000ul_F11 + parent: geb_96_tiprack_1000ul + position: + x: 101.5625 + y: 26.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_G11 + name: geb_96_tiprack_1000ul_G11 + parent: geb_96_tiprack_1000ul + position: + x: 101.5625 + y: 17.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_H11 + name: geb_96_tiprack_1000ul_H11 + parent: geb_96_tiprack_1000ul + position: + x: 101.5625 + y: 8.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_A12 + name: geb_96_tiprack_1000ul_A12 + parent: geb_96_tiprack_1000ul + position: + x: 110.5625 + y: 71.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_B12 + name: geb_96_tiprack_1000ul_B12 + parent: geb_96_tiprack_1000ul + position: + x: 110.5625 + y: 62.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_C12 + name: geb_96_tiprack_1000ul_C12 + parent: geb_96_tiprack_1000ul + position: + x: 110.5625 + y: 53.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_D12 + name: geb_96_tiprack_1000ul_D12 + parent: geb_96_tiprack_1000ul + position: + x: 110.5625 + y: 44.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_E12 + name: geb_96_tiprack_1000ul_E12 + parent: geb_96_tiprack_1000ul + position: + x: 110.5625 + y: 35.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_F12 + name: geb_96_tiprack_1000ul_F12 + parent: geb_96_tiprack_1000ul + position: + x: 110.5625 + y: 26.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_G12 + name: geb_96_tiprack_1000ul_G12 + parent: geb_96_tiprack_1000ul + position: + x: 110.5625 + y: 17.5625 + z: 18.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.275 + size_y: 5.275 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip: + fitting_depth: 11.2 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 87.9 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_1000ul_H12 + name: geb_96_tiprack_1000ul_H12 + parent: geb_96_tiprack_1000ul + position: + x: 110.5625 + y: 8.5625 + z: 18.25 + sample_id: null + type: container + description: Geb 96 tiprack 1000ul + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tip_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +geb_96_tiprack_10ul: + category: + - tip_racks + class: + module: pylabrobot.resources.opentrons.tip_racks:geb_96_tiprack_10ul + type: pylabrobot + config_info: + - children: + - geb_96_tiprack_10ul_A1 + - geb_96_tiprack_10ul_B1 + - geb_96_tiprack_10ul_C1 + - geb_96_tiprack_10ul_D1 + - geb_96_tiprack_10ul_E1 + - geb_96_tiprack_10ul_F1 + - geb_96_tiprack_10ul_G1 + - geb_96_tiprack_10ul_H1 + - geb_96_tiprack_10ul_A2 + - geb_96_tiprack_10ul_B2 + - geb_96_tiprack_10ul_C2 + - geb_96_tiprack_10ul_D2 + - geb_96_tiprack_10ul_E2 + - geb_96_tiprack_10ul_F2 + - geb_96_tiprack_10ul_G2 + - geb_96_tiprack_10ul_H2 + - geb_96_tiprack_10ul_A3 + - geb_96_tiprack_10ul_B3 + - geb_96_tiprack_10ul_C3 + - geb_96_tiprack_10ul_D3 + - geb_96_tiprack_10ul_E3 + - geb_96_tiprack_10ul_F3 + - geb_96_tiprack_10ul_G3 + - geb_96_tiprack_10ul_H3 + - geb_96_tiprack_10ul_A4 + - geb_96_tiprack_10ul_B4 + - geb_96_tiprack_10ul_C4 + - geb_96_tiprack_10ul_D4 + - geb_96_tiprack_10ul_E4 + - geb_96_tiprack_10ul_F4 + - geb_96_tiprack_10ul_G4 + - geb_96_tiprack_10ul_H4 + - geb_96_tiprack_10ul_A5 + - geb_96_tiprack_10ul_B5 + - geb_96_tiprack_10ul_C5 + - geb_96_tiprack_10ul_D5 + - geb_96_tiprack_10ul_E5 + - geb_96_tiprack_10ul_F5 + - geb_96_tiprack_10ul_G5 + - geb_96_tiprack_10ul_H5 + - geb_96_tiprack_10ul_A6 + - geb_96_tiprack_10ul_B6 + - geb_96_tiprack_10ul_C6 + - geb_96_tiprack_10ul_D6 + - geb_96_tiprack_10ul_E6 + - geb_96_tiprack_10ul_F6 + - geb_96_tiprack_10ul_G6 + - geb_96_tiprack_10ul_H6 + - geb_96_tiprack_10ul_A7 + - geb_96_tiprack_10ul_B7 + - geb_96_tiprack_10ul_C7 + - geb_96_tiprack_10ul_D7 + - geb_96_tiprack_10ul_E7 + - geb_96_tiprack_10ul_F7 + - geb_96_tiprack_10ul_G7 + - geb_96_tiprack_10ul_H7 + - geb_96_tiprack_10ul_A8 + - geb_96_tiprack_10ul_B8 + - geb_96_tiprack_10ul_C8 + - geb_96_tiprack_10ul_D8 + - geb_96_tiprack_10ul_E8 + - geb_96_tiprack_10ul_F8 + - geb_96_tiprack_10ul_G8 + - geb_96_tiprack_10ul_H8 + - geb_96_tiprack_10ul_A9 + - geb_96_tiprack_10ul_B9 + - geb_96_tiprack_10ul_C9 + - geb_96_tiprack_10ul_D9 + - geb_96_tiprack_10ul_E9 + - geb_96_tiprack_10ul_F9 + - geb_96_tiprack_10ul_G9 + - geb_96_tiprack_10ul_H9 + - geb_96_tiprack_10ul_A10 + - geb_96_tiprack_10ul_B10 + - geb_96_tiprack_10ul_C10 + - geb_96_tiprack_10ul_D10 + - geb_96_tiprack_10ul_E10 + - geb_96_tiprack_10ul_F10 + - geb_96_tiprack_10ul_G10 + - geb_96_tiprack_10ul_H10 + - geb_96_tiprack_10ul_A11 + - geb_96_tiprack_10ul_B11 + - geb_96_tiprack_10ul_C11 + - geb_96_tiprack_10ul_D11 + - geb_96_tiprack_10ul_E11 + - geb_96_tiprack_10ul_F11 + - geb_96_tiprack_10ul_G11 + - geb_96_tiprack_10ul_H11 + - geb_96_tiprack_10ul_A12 + - geb_96_tiprack_10ul_B12 + - geb_96_tiprack_10ul_C12 + - geb_96_tiprack_10ul_D12 + - geb_96_tiprack_10ul_E12 + - geb_96_tiprack_10ul_F12 + - geb_96_tiprack_10ul_G12 + - geb_96_tiprack_10ul_H12 + class: '' + config: + barcode: null + category: tip_rack + model: GEB 96 Tip Rack 10 µL + ordering: + A1: geb_96_tiprack_10ul_A1 + B1: geb_96_tiprack_10ul_B1 + C1: geb_96_tiprack_10ul_C1 + D1: geb_96_tiprack_10ul_D1 + E1: geb_96_tiprack_10ul_E1 + F1: geb_96_tiprack_10ul_F1 + G1: geb_96_tiprack_10ul_G1 + H1: geb_96_tiprack_10ul_H1 + A2: geb_96_tiprack_10ul_A2 + B2: geb_96_tiprack_10ul_B2 + C2: geb_96_tiprack_10ul_C2 + D2: geb_96_tiprack_10ul_D2 + E2: geb_96_tiprack_10ul_E2 + F2: geb_96_tiprack_10ul_F2 + G2: geb_96_tiprack_10ul_G2 + H2: geb_96_tiprack_10ul_H2 + A3: geb_96_tiprack_10ul_A3 + B3: geb_96_tiprack_10ul_B3 + C3: geb_96_tiprack_10ul_C3 + D3: geb_96_tiprack_10ul_D3 + E3: geb_96_tiprack_10ul_E3 + F3: geb_96_tiprack_10ul_F3 + G3: geb_96_tiprack_10ul_G3 + H3: geb_96_tiprack_10ul_H3 + A4: geb_96_tiprack_10ul_A4 + B4: geb_96_tiprack_10ul_B4 + C4: geb_96_tiprack_10ul_C4 + D4: geb_96_tiprack_10ul_D4 + E4: geb_96_tiprack_10ul_E4 + F4: geb_96_tiprack_10ul_F4 + G4: geb_96_tiprack_10ul_G4 + H4: geb_96_tiprack_10ul_H4 + A5: geb_96_tiprack_10ul_A5 + B5: geb_96_tiprack_10ul_B5 + C5: geb_96_tiprack_10ul_C5 + D5: geb_96_tiprack_10ul_D5 + E5: geb_96_tiprack_10ul_E5 + F5: geb_96_tiprack_10ul_F5 + G5: geb_96_tiprack_10ul_G5 + H5: geb_96_tiprack_10ul_H5 + A6: geb_96_tiprack_10ul_A6 + B6: geb_96_tiprack_10ul_B6 + C6: geb_96_tiprack_10ul_C6 + D6: geb_96_tiprack_10ul_D6 + E6: geb_96_tiprack_10ul_E6 + F6: geb_96_tiprack_10ul_F6 + G6: geb_96_tiprack_10ul_G6 + H6: geb_96_tiprack_10ul_H6 + A7: geb_96_tiprack_10ul_A7 + B7: geb_96_tiprack_10ul_B7 + C7: geb_96_tiprack_10ul_C7 + D7: geb_96_tiprack_10ul_D7 + E7: geb_96_tiprack_10ul_E7 + F7: geb_96_tiprack_10ul_F7 + G7: geb_96_tiprack_10ul_G7 + H7: geb_96_tiprack_10ul_H7 + A8: geb_96_tiprack_10ul_A8 + B8: geb_96_tiprack_10ul_B8 + C8: geb_96_tiprack_10ul_C8 + D8: geb_96_tiprack_10ul_D8 + E8: geb_96_tiprack_10ul_E8 + F8: geb_96_tiprack_10ul_F8 + G8: geb_96_tiprack_10ul_G8 + H8: geb_96_tiprack_10ul_H8 + A9: geb_96_tiprack_10ul_A9 + B9: geb_96_tiprack_10ul_B9 + C9: geb_96_tiprack_10ul_C9 + D9: geb_96_tiprack_10ul_D9 + E9: geb_96_tiprack_10ul_E9 + F9: geb_96_tiprack_10ul_F9 + G9: geb_96_tiprack_10ul_G9 + H9: geb_96_tiprack_10ul_H9 + A10: geb_96_tiprack_10ul_A10 + B10: geb_96_tiprack_10ul_B10 + C10: geb_96_tiprack_10ul_C10 + D10: geb_96_tiprack_10ul_D10 + E10: geb_96_tiprack_10ul_E10 + F10: geb_96_tiprack_10ul_F10 + G10: geb_96_tiprack_10ul_G10 + H10: geb_96_tiprack_10ul_H10 + A11: geb_96_tiprack_10ul_A11 + B11: geb_96_tiprack_10ul_B11 + C11: geb_96_tiprack_10ul_C11 + D11: geb_96_tiprack_10ul_D11 + E11: geb_96_tiprack_10ul_E11 + F11: geb_96_tiprack_10ul_F11 + G11: geb_96_tiprack_10ul_G11 + H11: geb_96_tiprack_10ul_H11 + A12: geb_96_tiprack_10ul_A12 + B12: geb_96_tiprack_10ul_B12 + C12: geb_96_tiprack_10ul_C12 + D12: geb_96_tiprack_10ul_D12 + E12: geb_96_tiprack_10ul_E12 + F12: geb_96_tiprack_10ul_F12 + G12: geb_96_tiprack_10ul_G12 + H12: geb_96_tiprack_10ul_H12 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.75 + size_y: 85.5 + size_z: 52.25 + type: TipRack + data: {} + id: geb_96_tiprack_10ul + name: geb_96_tiprack_10ul + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_A1 + name: geb_96_tiprack_10ul_A1 + parent: geb_96_tiprack_10ul + position: + x: 13.1565 + y: 73.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_B1 + name: geb_96_tiprack_10ul_B1 + parent: geb_96_tiprack_10ul + position: + x: 13.1565 + y: 64.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_C1 + name: geb_96_tiprack_10ul_C1 + parent: geb_96_tiprack_10ul + position: + x: 13.1565 + y: 55.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_D1 + name: geb_96_tiprack_10ul_D1 + parent: geb_96_tiprack_10ul + position: + x: 13.1565 + y: 46.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_E1 + name: geb_96_tiprack_10ul_E1 + parent: geb_96_tiprack_10ul + position: + x: 13.1565 + y: 37.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_F1 + name: geb_96_tiprack_10ul_F1 + parent: geb_96_tiprack_10ul + position: + x: 13.1565 + y: 28.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_G1 + name: geb_96_tiprack_10ul_G1 + parent: geb_96_tiprack_10ul + position: + x: 13.1565 + y: 19.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_H1 + name: geb_96_tiprack_10ul_H1 + parent: geb_96_tiprack_10ul + position: + x: 13.1565 + y: 10.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_A2 + name: geb_96_tiprack_10ul_A2 + parent: geb_96_tiprack_10ul + position: + x: 22.1565 + y: 73.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_B2 + name: geb_96_tiprack_10ul_B2 + parent: geb_96_tiprack_10ul + position: + x: 22.1565 + y: 64.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_C2 + name: geb_96_tiprack_10ul_C2 + parent: geb_96_tiprack_10ul + position: + x: 22.1565 + y: 55.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_D2 + name: geb_96_tiprack_10ul_D2 + parent: geb_96_tiprack_10ul + position: + x: 22.1565 + y: 46.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_E2 + name: geb_96_tiprack_10ul_E2 + parent: geb_96_tiprack_10ul + position: + x: 22.1565 + y: 37.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_F2 + name: geb_96_tiprack_10ul_F2 + parent: geb_96_tiprack_10ul + position: + x: 22.1565 + y: 28.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_G2 + name: geb_96_tiprack_10ul_G2 + parent: geb_96_tiprack_10ul + position: + x: 22.1565 + y: 19.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_H2 + name: geb_96_tiprack_10ul_H2 + parent: geb_96_tiprack_10ul + position: + x: 22.1565 + y: 10.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_A3 + name: geb_96_tiprack_10ul_A3 + parent: geb_96_tiprack_10ul + position: + x: 31.1565 + y: 73.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_B3 + name: geb_96_tiprack_10ul_B3 + parent: geb_96_tiprack_10ul + position: + x: 31.1565 + y: 64.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_C3 + name: geb_96_tiprack_10ul_C3 + parent: geb_96_tiprack_10ul + position: + x: 31.1565 + y: 55.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_D3 + name: geb_96_tiprack_10ul_D3 + parent: geb_96_tiprack_10ul + position: + x: 31.1565 + y: 46.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_E3 + name: geb_96_tiprack_10ul_E3 + parent: geb_96_tiprack_10ul + position: + x: 31.1565 + y: 37.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_F3 + name: geb_96_tiprack_10ul_F3 + parent: geb_96_tiprack_10ul + position: + x: 31.1565 + y: 28.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_G3 + name: geb_96_tiprack_10ul_G3 + parent: geb_96_tiprack_10ul + position: + x: 31.1565 + y: 19.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_H3 + name: geb_96_tiprack_10ul_H3 + parent: geb_96_tiprack_10ul + position: + x: 31.1565 + y: 10.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_A4 + name: geb_96_tiprack_10ul_A4 + parent: geb_96_tiprack_10ul + position: + x: 40.1565 + y: 73.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_B4 + name: geb_96_tiprack_10ul_B4 + parent: geb_96_tiprack_10ul + position: + x: 40.1565 + y: 64.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_C4 + name: geb_96_tiprack_10ul_C4 + parent: geb_96_tiprack_10ul + position: + x: 40.1565 + y: 55.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_D4 + name: geb_96_tiprack_10ul_D4 + parent: geb_96_tiprack_10ul + position: + x: 40.1565 + y: 46.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_E4 + name: geb_96_tiprack_10ul_E4 + parent: geb_96_tiprack_10ul + position: + x: 40.1565 + y: 37.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_F4 + name: geb_96_tiprack_10ul_F4 + parent: geb_96_tiprack_10ul + position: + x: 40.1565 + y: 28.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_G4 + name: geb_96_tiprack_10ul_G4 + parent: geb_96_tiprack_10ul + position: + x: 40.1565 + y: 19.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_H4 + name: geb_96_tiprack_10ul_H4 + parent: geb_96_tiprack_10ul + position: + x: 40.1565 + y: 10.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_A5 + name: geb_96_tiprack_10ul_A5 + parent: geb_96_tiprack_10ul + position: + x: 49.1565 + y: 73.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_B5 + name: geb_96_tiprack_10ul_B5 + parent: geb_96_tiprack_10ul + position: + x: 49.1565 + y: 64.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_C5 + name: geb_96_tiprack_10ul_C5 + parent: geb_96_tiprack_10ul + position: + x: 49.1565 + y: 55.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_D5 + name: geb_96_tiprack_10ul_D5 + parent: geb_96_tiprack_10ul + position: + x: 49.1565 + y: 46.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_E5 + name: geb_96_tiprack_10ul_E5 + parent: geb_96_tiprack_10ul + position: + x: 49.1565 + y: 37.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_F5 + name: geb_96_tiprack_10ul_F5 + parent: geb_96_tiprack_10ul + position: + x: 49.1565 + y: 28.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_G5 + name: geb_96_tiprack_10ul_G5 + parent: geb_96_tiprack_10ul + position: + x: 49.1565 + y: 19.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_H5 + name: geb_96_tiprack_10ul_H5 + parent: geb_96_tiprack_10ul + position: + x: 49.1565 + y: 10.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_A6 + name: geb_96_tiprack_10ul_A6 + parent: geb_96_tiprack_10ul + position: + x: 58.1565 + y: 73.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_B6 + name: geb_96_tiprack_10ul_B6 + parent: geb_96_tiprack_10ul + position: + x: 58.1565 + y: 64.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_C6 + name: geb_96_tiprack_10ul_C6 + parent: geb_96_tiprack_10ul + position: + x: 58.1565 + y: 55.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_D6 + name: geb_96_tiprack_10ul_D6 + parent: geb_96_tiprack_10ul + position: + x: 58.1565 + y: 46.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_E6 + name: geb_96_tiprack_10ul_E6 + parent: geb_96_tiprack_10ul + position: + x: 58.1565 + y: 37.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_F6 + name: geb_96_tiprack_10ul_F6 + parent: geb_96_tiprack_10ul + position: + x: 58.1565 + y: 28.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_G6 + name: geb_96_tiprack_10ul_G6 + parent: geb_96_tiprack_10ul + position: + x: 58.1565 + y: 19.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_H6 + name: geb_96_tiprack_10ul_H6 + parent: geb_96_tiprack_10ul + position: + x: 58.1565 + y: 10.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_A7 + name: geb_96_tiprack_10ul_A7 + parent: geb_96_tiprack_10ul + position: + x: 67.1565 + y: 73.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_B7 + name: geb_96_tiprack_10ul_B7 + parent: geb_96_tiprack_10ul + position: + x: 67.1565 + y: 64.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_C7 + name: geb_96_tiprack_10ul_C7 + parent: geb_96_tiprack_10ul + position: + x: 67.1565 + y: 55.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_D7 + name: geb_96_tiprack_10ul_D7 + parent: geb_96_tiprack_10ul + position: + x: 67.1565 + y: 46.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_E7 + name: geb_96_tiprack_10ul_E7 + parent: geb_96_tiprack_10ul + position: + x: 67.1565 + y: 37.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_F7 + name: geb_96_tiprack_10ul_F7 + parent: geb_96_tiprack_10ul + position: + x: 67.1565 + y: 28.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_G7 + name: geb_96_tiprack_10ul_G7 + parent: geb_96_tiprack_10ul + position: + x: 67.1565 + y: 19.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_H7 + name: geb_96_tiprack_10ul_H7 + parent: geb_96_tiprack_10ul + position: + x: 67.1565 + y: 10.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_A8 + name: geb_96_tiprack_10ul_A8 + parent: geb_96_tiprack_10ul + position: + x: 76.1565 + y: 73.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_B8 + name: geb_96_tiprack_10ul_B8 + parent: geb_96_tiprack_10ul + position: + x: 76.1565 + y: 64.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_C8 + name: geb_96_tiprack_10ul_C8 + parent: geb_96_tiprack_10ul + position: + x: 76.1565 + y: 55.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_D8 + name: geb_96_tiprack_10ul_D8 + parent: geb_96_tiprack_10ul + position: + x: 76.1565 + y: 46.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_E8 + name: geb_96_tiprack_10ul_E8 + parent: geb_96_tiprack_10ul + position: + x: 76.1565 + y: 37.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_F8 + name: geb_96_tiprack_10ul_F8 + parent: geb_96_tiprack_10ul + position: + x: 76.1565 + y: 28.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_G8 + name: geb_96_tiprack_10ul_G8 + parent: geb_96_tiprack_10ul + position: + x: 76.1565 + y: 19.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_H8 + name: geb_96_tiprack_10ul_H8 + parent: geb_96_tiprack_10ul + position: + x: 76.1565 + y: 10.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_A9 + name: geb_96_tiprack_10ul_A9 + parent: geb_96_tiprack_10ul + position: + x: 85.1565 + y: 73.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_B9 + name: geb_96_tiprack_10ul_B9 + parent: geb_96_tiprack_10ul + position: + x: 85.1565 + y: 64.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_C9 + name: geb_96_tiprack_10ul_C9 + parent: geb_96_tiprack_10ul + position: + x: 85.1565 + y: 55.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_D9 + name: geb_96_tiprack_10ul_D9 + parent: geb_96_tiprack_10ul + position: + x: 85.1565 + y: 46.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_E9 + name: geb_96_tiprack_10ul_E9 + parent: geb_96_tiprack_10ul + position: + x: 85.1565 + y: 37.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_F9 + name: geb_96_tiprack_10ul_F9 + parent: geb_96_tiprack_10ul + position: + x: 85.1565 + y: 28.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_G9 + name: geb_96_tiprack_10ul_G9 + parent: geb_96_tiprack_10ul + position: + x: 85.1565 + y: 19.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_H9 + name: geb_96_tiprack_10ul_H9 + parent: geb_96_tiprack_10ul + position: + x: 85.1565 + y: 10.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_A10 + name: geb_96_tiprack_10ul_A10 + parent: geb_96_tiprack_10ul + position: + x: 94.1565 + y: 73.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_B10 + name: geb_96_tiprack_10ul_B10 + parent: geb_96_tiprack_10ul + position: + x: 94.1565 + y: 64.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_C10 + name: geb_96_tiprack_10ul_C10 + parent: geb_96_tiprack_10ul + position: + x: 94.1565 + y: 55.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_D10 + name: geb_96_tiprack_10ul_D10 + parent: geb_96_tiprack_10ul + position: + x: 94.1565 + y: 46.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_E10 + name: geb_96_tiprack_10ul_E10 + parent: geb_96_tiprack_10ul + position: + x: 94.1565 + y: 37.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_F10 + name: geb_96_tiprack_10ul_F10 + parent: geb_96_tiprack_10ul + position: + x: 94.1565 + y: 28.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_G10 + name: geb_96_tiprack_10ul_G10 + parent: geb_96_tiprack_10ul + position: + x: 94.1565 + y: 19.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_H10 + name: geb_96_tiprack_10ul_H10 + parent: geb_96_tiprack_10ul + position: + x: 94.1565 + y: 10.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_A11 + name: geb_96_tiprack_10ul_A11 + parent: geb_96_tiprack_10ul + position: + x: 103.1565 + y: 73.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_B11 + name: geb_96_tiprack_10ul_B11 + parent: geb_96_tiprack_10ul + position: + x: 103.1565 + y: 64.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_C11 + name: geb_96_tiprack_10ul_C11 + parent: geb_96_tiprack_10ul + position: + x: 103.1565 + y: 55.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_D11 + name: geb_96_tiprack_10ul_D11 + parent: geb_96_tiprack_10ul + position: + x: 103.1565 + y: 46.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_E11 + name: geb_96_tiprack_10ul_E11 + parent: geb_96_tiprack_10ul + position: + x: 103.1565 + y: 37.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_F11 + name: geb_96_tiprack_10ul_F11 + parent: geb_96_tiprack_10ul + position: + x: 103.1565 + y: 28.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_G11 + name: geb_96_tiprack_10ul_G11 + parent: geb_96_tiprack_10ul + position: + x: 103.1565 + y: 19.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_H11 + name: geb_96_tiprack_10ul_H11 + parent: geb_96_tiprack_10ul + position: + x: 103.1565 + y: 10.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_A12 + name: geb_96_tiprack_10ul_A12 + parent: geb_96_tiprack_10ul + position: + x: 112.1565 + y: 73.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_B12 + name: geb_96_tiprack_10ul_B12 + parent: geb_96_tiprack_10ul + position: + x: 112.1565 + y: 64.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_C12 + name: geb_96_tiprack_10ul_C12 + parent: geb_96_tiprack_10ul + position: + x: 112.1565 + y: 55.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_D12 + name: geb_96_tiprack_10ul_D12 + parent: geb_96_tiprack_10ul + position: + x: 112.1565 + y: 46.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_E12 + name: geb_96_tiprack_10ul_E12 + parent: geb_96_tiprack_10ul + position: + x: 112.1565 + y: 37.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_F12 + name: geb_96_tiprack_10ul_F12 + parent: geb_96_tiprack_10ul + position: + x: 112.1565 + y: 28.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_G12 + name: geb_96_tiprack_10ul_G12 + parent: geb_96_tiprack_10ul + position: + x: 112.1565 + y: 19.0265 + z: 22.25 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.447 + size_y: 2.447 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 6.2 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: geb_96_tiprack_10ul_H12 + name: geb_96_tiprack_10ul_H12 + parent: geb_96_tiprack_10ul + position: + x: 112.1565 + y: 10.0265 + z: 22.25 + sample_id: null + type: container + description: Geb 96 tiprack 10ul + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tip_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +opentrons_96_filtertiprack_1000ul: + category: + - tip_racks + class: + module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_filtertiprack_1000ul + type: pylabrobot + config_info: + - children: + - opentrons_96_filtertiprack_1000ul_A1 + - opentrons_96_filtertiprack_1000ul_B1 + - opentrons_96_filtertiprack_1000ul_C1 + - opentrons_96_filtertiprack_1000ul_D1 + - opentrons_96_filtertiprack_1000ul_E1 + - opentrons_96_filtertiprack_1000ul_F1 + - opentrons_96_filtertiprack_1000ul_G1 + - opentrons_96_filtertiprack_1000ul_H1 + - opentrons_96_filtertiprack_1000ul_A2 + - opentrons_96_filtertiprack_1000ul_B2 + - opentrons_96_filtertiprack_1000ul_C2 + - opentrons_96_filtertiprack_1000ul_D2 + - opentrons_96_filtertiprack_1000ul_E2 + - opentrons_96_filtertiprack_1000ul_F2 + - opentrons_96_filtertiprack_1000ul_G2 + - opentrons_96_filtertiprack_1000ul_H2 + - opentrons_96_filtertiprack_1000ul_A3 + - opentrons_96_filtertiprack_1000ul_B3 + - opentrons_96_filtertiprack_1000ul_C3 + - opentrons_96_filtertiprack_1000ul_D3 + - opentrons_96_filtertiprack_1000ul_E3 + - opentrons_96_filtertiprack_1000ul_F3 + - opentrons_96_filtertiprack_1000ul_G3 + - opentrons_96_filtertiprack_1000ul_H3 + - opentrons_96_filtertiprack_1000ul_A4 + - opentrons_96_filtertiprack_1000ul_B4 + - opentrons_96_filtertiprack_1000ul_C4 + - opentrons_96_filtertiprack_1000ul_D4 + - opentrons_96_filtertiprack_1000ul_E4 + - opentrons_96_filtertiprack_1000ul_F4 + - opentrons_96_filtertiprack_1000ul_G4 + - opentrons_96_filtertiprack_1000ul_H4 + - opentrons_96_filtertiprack_1000ul_A5 + - opentrons_96_filtertiprack_1000ul_B5 + - opentrons_96_filtertiprack_1000ul_C5 + - opentrons_96_filtertiprack_1000ul_D5 + - opentrons_96_filtertiprack_1000ul_E5 + - opentrons_96_filtertiprack_1000ul_F5 + - opentrons_96_filtertiprack_1000ul_G5 + - opentrons_96_filtertiprack_1000ul_H5 + - opentrons_96_filtertiprack_1000ul_A6 + - opentrons_96_filtertiprack_1000ul_B6 + - opentrons_96_filtertiprack_1000ul_C6 + - opentrons_96_filtertiprack_1000ul_D6 + - opentrons_96_filtertiprack_1000ul_E6 + - opentrons_96_filtertiprack_1000ul_F6 + - opentrons_96_filtertiprack_1000ul_G6 + - opentrons_96_filtertiprack_1000ul_H6 + - opentrons_96_filtertiprack_1000ul_A7 + - opentrons_96_filtertiprack_1000ul_B7 + - opentrons_96_filtertiprack_1000ul_C7 + - opentrons_96_filtertiprack_1000ul_D7 + - opentrons_96_filtertiprack_1000ul_E7 + - opentrons_96_filtertiprack_1000ul_F7 + - opentrons_96_filtertiprack_1000ul_G7 + - opentrons_96_filtertiprack_1000ul_H7 + - opentrons_96_filtertiprack_1000ul_A8 + - opentrons_96_filtertiprack_1000ul_B8 + - opentrons_96_filtertiprack_1000ul_C8 + - opentrons_96_filtertiprack_1000ul_D8 + - opentrons_96_filtertiprack_1000ul_E8 + - opentrons_96_filtertiprack_1000ul_F8 + - opentrons_96_filtertiprack_1000ul_G8 + - opentrons_96_filtertiprack_1000ul_H8 + - opentrons_96_filtertiprack_1000ul_A9 + - opentrons_96_filtertiprack_1000ul_B9 + - opentrons_96_filtertiprack_1000ul_C9 + - opentrons_96_filtertiprack_1000ul_D9 + - opentrons_96_filtertiprack_1000ul_E9 + - opentrons_96_filtertiprack_1000ul_F9 + - opentrons_96_filtertiprack_1000ul_G9 + - opentrons_96_filtertiprack_1000ul_H9 + - opentrons_96_filtertiprack_1000ul_A10 + - opentrons_96_filtertiprack_1000ul_B10 + - opentrons_96_filtertiprack_1000ul_C10 + - opentrons_96_filtertiprack_1000ul_D10 + - opentrons_96_filtertiprack_1000ul_E10 + - opentrons_96_filtertiprack_1000ul_F10 + - opentrons_96_filtertiprack_1000ul_G10 + - opentrons_96_filtertiprack_1000ul_H10 + - opentrons_96_filtertiprack_1000ul_A11 + - opentrons_96_filtertiprack_1000ul_B11 + - opentrons_96_filtertiprack_1000ul_C11 + - opentrons_96_filtertiprack_1000ul_D11 + - opentrons_96_filtertiprack_1000ul_E11 + - opentrons_96_filtertiprack_1000ul_F11 + - opentrons_96_filtertiprack_1000ul_G11 + - opentrons_96_filtertiprack_1000ul_H11 + - opentrons_96_filtertiprack_1000ul_A12 + - opentrons_96_filtertiprack_1000ul_B12 + - opentrons_96_filtertiprack_1000ul_C12 + - opentrons_96_filtertiprack_1000ul_D12 + - opentrons_96_filtertiprack_1000ul_E12 + - opentrons_96_filtertiprack_1000ul_F12 + - opentrons_96_filtertiprack_1000ul_G12 + - opentrons_96_filtertiprack_1000ul_H12 + class: '' + config: + barcode: null + category: tip_rack + model: Opentrons OT-2 96 Filter Tip Rack 1000 µL + ordering: + A1: opentrons_96_filtertiprack_1000ul_A1 + B1: opentrons_96_filtertiprack_1000ul_B1 + C1: opentrons_96_filtertiprack_1000ul_C1 + D1: opentrons_96_filtertiprack_1000ul_D1 + E1: opentrons_96_filtertiprack_1000ul_E1 + F1: opentrons_96_filtertiprack_1000ul_F1 + G1: opentrons_96_filtertiprack_1000ul_G1 + H1: opentrons_96_filtertiprack_1000ul_H1 + A2: opentrons_96_filtertiprack_1000ul_A2 + B2: opentrons_96_filtertiprack_1000ul_B2 + C2: opentrons_96_filtertiprack_1000ul_C2 + D2: opentrons_96_filtertiprack_1000ul_D2 + E2: opentrons_96_filtertiprack_1000ul_E2 + F2: opentrons_96_filtertiprack_1000ul_F2 + G2: opentrons_96_filtertiprack_1000ul_G2 + H2: opentrons_96_filtertiprack_1000ul_H2 + A3: opentrons_96_filtertiprack_1000ul_A3 + B3: opentrons_96_filtertiprack_1000ul_B3 + C3: opentrons_96_filtertiprack_1000ul_C3 + D3: opentrons_96_filtertiprack_1000ul_D3 + E3: opentrons_96_filtertiprack_1000ul_E3 + F3: opentrons_96_filtertiprack_1000ul_F3 + G3: opentrons_96_filtertiprack_1000ul_G3 + H3: opentrons_96_filtertiprack_1000ul_H3 + A4: opentrons_96_filtertiprack_1000ul_A4 + B4: opentrons_96_filtertiprack_1000ul_B4 + C4: opentrons_96_filtertiprack_1000ul_C4 + D4: opentrons_96_filtertiprack_1000ul_D4 + E4: opentrons_96_filtertiprack_1000ul_E4 + F4: opentrons_96_filtertiprack_1000ul_F4 + G4: opentrons_96_filtertiprack_1000ul_G4 + H4: opentrons_96_filtertiprack_1000ul_H4 + A5: opentrons_96_filtertiprack_1000ul_A5 + B5: opentrons_96_filtertiprack_1000ul_B5 + C5: opentrons_96_filtertiprack_1000ul_C5 + D5: opentrons_96_filtertiprack_1000ul_D5 + E5: opentrons_96_filtertiprack_1000ul_E5 + F5: opentrons_96_filtertiprack_1000ul_F5 + G5: opentrons_96_filtertiprack_1000ul_G5 + H5: opentrons_96_filtertiprack_1000ul_H5 + A6: opentrons_96_filtertiprack_1000ul_A6 + B6: opentrons_96_filtertiprack_1000ul_B6 + C6: opentrons_96_filtertiprack_1000ul_C6 + D6: opentrons_96_filtertiprack_1000ul_D6 + E6: opentrons_96_filtertiprack_1000ul_E6 + F6: opentrons_96_filtertiprack_1000ul_F6 + G6: opentrons_96_filtertiprack_1000ul_G6 + H6: opentrons_96_filtertiprack_1000ul_H6 + A7: opentrons_96_filtertiprack_1000ul_A7 + B7: opentrons_96_filtertiprack_1000ul_B7 + C7: opentrons_96_filtertiprack_1000ul_C7 + D7: opentrons_96_filtertiprack_1000ul_D7 + E7: opentrons_96_filtertiprack_1000ul_E7 + F7: opentrons_96_filtertiprack_1000ul_F7 + G7: opentrons_96_filtertiprack_1000ul_G7 + H7: opentrons_96_filtertiprack_1000ul_H7 + A8: opentrons_96_filtertiprack_1000ul_A8 + B8: opentrons_96_filtertiprack_1000ul_B8 + C8: opentrons_96_filtertiprack_1000ul_C8 + D8: opentrons_96_filtertiprack_1000ul_D8 + E8: opentrons_96_filtertiprack_1000ul_E8 + F8: opentrons_96_filtertiprack_1000ul_F8 + G8: opentrons_96_filtertiprack_1000ul_G8 + H8: opentrons_96_filtertiprack_1000ul_H8 + A9: opentrons_96_filtertiprack_1000ul_A9 + B9: opentrons_96_filtertiprack_1000ul_B9 + C9: opentrons_96_filtertiprack_1000ul_C9 + D9: opentrons_96_filtertiprack_1000ul_D9 + E9: opentrons_96_filtertiprack_1000ul_E9 + F9: opentrons_96_filtertiprack_1000ul_F9 + G9: opentrons_96_filtertiprack_1000ul_G9 + H9: opentrons_96_filtertiprack_1000ul_H9 + A10: opentrons_96_filtertiprack_1000ul_A10 + B10: opentrons_96_filtertiprack_1000ul_B10 + C10: opentrons_96_filtertiprack_1000ul_C10 + D10: opentrons_96_filtertiprack_1000ul_D10 + E10: opentrons_96_filtertiprack_1000ul_E10 + F10: opentrons_96_filtertiprack_1000ul_F10 + G10: opentrons_96_filtertiprack_1000ul_G10 + H10: opentrons_96_filtertiprack_1000ul_H10 + A11: opentrons_96_filtertiprack_1000ul_A11 + B11: opentrons_96_filtertiprack_1000ul_B11 + C11: opentrons_96_filtertiprack_1000ul_C11 + D11: opentrons_96_filtertiprack_1000ul_D11 + E11: opentrons_96_filtertiprack_1000ul_E11 + F11: opentrons_96_filtertiprack_1000ul_F11 + G11: opentrons_96_filtertiprack_1000ul_G11 + H11: opentrons_96_filtertiprack_1000ul_H11 + A12: opentrons_96_filtertiprack_1000ul_A12 + B12: opentrons_96_filtertiprack_1000ul_B12 + C12: opentrons_96_filtertiprack_1000ul_C12 + D12: opentrons_96_filtertiprack_1000ul_D12 + E12: opentrons_96_filtertiprack_1000ul_E12 + F12: opentrons_96_filtertiprack_1000ul_F12 + G12: opentrons_96_filtertiprack_1000ul_G12 + H12: opentrons_96_filtertiprack_1000ul_H12 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.48 + size_z: 97.47 + type: TipRack + data: {} + id: opentrons_96_filtertiprack_1000ul + name: opentrons_96_filtertiprack_1000ul + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_A1 + name: opentrons_96_filtertiprack_1000ul_A1 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 11.804 + y: 71.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_B1 + name: opentrons_96_filtertiprack_1000ul_B1 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 11.804 + y: 62.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_C1 + name: opentrons_96_filtertiprack_1000ul_C1 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 11.804 + y: 53.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_D1 + name: opentrons_96_filtertiprack_1000ul_D1 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 11.804 + y: 44.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_E1 + name: opentrons_96_filtertiprack_1000ul_E1 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 11.804 + y: 35.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_F1 + name: opentrons_96_filtertiprack_1000ul_F1 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 11.804 + y: 26.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_G1 + name: opentrons_96_filtertiprack_1000ul_G1 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 11.804 + y: 17.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_H1 + name: opentrons_96_filtertiprack_1000ul_H1 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 11.804 + y: 8.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_A2 + name: opentrons_96_filtertiprack_1000ul_A2 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 20.804 + y: 71.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_B2 + name: opentrons_96_filtertiprack_1000ul_B2 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 20.804 + y: 62.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_C2 + name: opentrons_96_filtertiprack_1000ul_C2 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 20.804 + y: 53.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_D2 + name: opentrons_96_filtertiprack_1000ul_D2 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 20.804 + y: 44.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_E2 + name: opentrons_96_filtertiprack_1000ul_E2 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 20.804 + y: 35.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_F2 + name: opentrons_96_filtertiprack_1000ul_F2 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 20.804 + y: 26.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_G2 + name: opentrons_96_filtertiprack_1000ul_G2 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 20.804 + y: 17.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_H2 + name: opentrons_96_filtertiprack_1000ul_H2 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 20.804 + y: 8.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_A3 + name: opentrons_96_filtertiprack_1000ul_A3 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 29.804 + y: 71.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_B3 + name: opentrons_96_filtertiprack_1000ul_B3 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 29.804 + y: 62.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_C3 + name: opentrons_96_filtertiprack_1000ul_C3 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 29.804 + y: 53.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_D3 + name: opentrons_96_filtertiprack_1000ul_D3 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 29.804 + y: 44.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_E3 + name: opentrons_96_filtertiprack_1000ul_E3 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 29.804 + y: 35.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_F3 + name: opentrons_96_filtertiprack_1000ul_F3 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 29.804 + y: 26.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_G3 + name: opentrons_96_filtertiprack_1000ul_G3 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 29.804 + y: 17.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_H3 + name: opentrons_96_filtertiprack_1000ul_H3 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 29.804 + y: 8.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_A4 + name: opentrons_96_filtertiprack_1000ul_A4 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 38.804 + y: 71.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_B4 + name: opentrons_96_filtertiprack_1000ul_B4 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 38.804 + y: 62.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_C4 + name: opentrons_96_filtertiprack_1000ul_C4 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 38.804 + y: 53.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_D4 + name: opentrons_96_filtertiprack_1000ul_D4 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 38.804 + y: 44.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_E4 + name: opentrons_96_filtertiprack_1000ul_E4 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 38.804 + y: 35.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_F4 + name: opentrons_96_filtertiprack_1000ul_F4 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 38.804 + y: 26.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_G4 + name: opentrons_96_filtertiprack_1000ul_G4 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 38.804 + y: 17.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_H4 + name: opentrons_96_filtertiprack_1000ul_H4 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 38.804 + y: 8.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_A5 + name: opentrons_96_filtertiprack_1000ul_A5 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 47.804 + y: 71.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_B5 + name: opentrons_96_filtertiprack_1000ul_B5 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 47.804 + y: 62.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_C5 + name: opentrons_96_filtertiprack_1000ul_C5 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 47.804 + y: 53.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_D5 + name: opentrons_96_filtertiprack_1000ul_D5 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 47.804 + y: 44.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_E5 + name: opentrons_96_filtertiprack_1000ul_E5 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 47.804 + y: 35.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_F5 + name: opentrons_96_filtertiprack_1000ul_F5 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 47.804 + y: 26.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_G5 + name: opentrons_96_filtertiprack_1000ul_G5 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 47.804 + y: 17.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_H5 + name: opentrons_96_filtertiprack_1000ul_H5 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 47.804 + y: 8.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_A6 + name: opentrons_96_filtertiprack_1000ul_A6 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 56.804 + y: 71.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_B6 + name: opentrons_96_filtertiprack_1000ul_B6 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 56.804 + y: 62.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_C6 + name: opentrons_96_filtertiprack_1000ul_C6 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 56.804 + y: 53.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_D6 + name: opentrons_96_filtertiprack_1000ul_D6 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 56.804 + y: 44.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_E6 + name: opentrons_96_filtertiprack_1000ul_E6 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 56.804 + y: 35.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_F6 + name: opentrons_96_filtertiprack_1000ul_F6 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 56.804 + y: 26.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_G6 + name: opentrons_96_filtertiprack_1000ul_G6 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 56.804 + y: 17.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_H6 + name: opentrons_96_filtertiprack_1000ul_H6 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 56.804 + y: 8.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_A7 + name: opentrons_96_filtertiprack_1000ul_A7 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 65.804 + y: 71.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_B7 + name: opentrons_96_filtertiprack_1000ul_B7 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 65.804 + y: 62.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_C7 + name: opentrons_96_filtertiprack_1000ul_C7 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 65.804 + y: 53.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_D7 + name: opentrons_96_filtertiprack_1000ul_D7 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 65.804 + y: 44.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_E7 + name: opentrons_96_filtertiprack_1000ul_E7 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 65.804 + y: 35.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_F7 + name: opentrons_96_filtertiprack_1000ul_F7 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 65.804 + y: 26.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_G7 + name: opentrons_96_filtertiprack_1000ul_G7 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 65.804 + y: 17.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_H7 + name: opentrons_96_filtertiprack_1000ul_H7 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 65.804 + y: 8.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_A8 + name: opentrons_96_filtertiprack_1000ul_A8 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 74.804 + y: 71.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_B8 + name: opentrons_96_filtertiprack_1000ul_B8 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 74.804 + y: 62.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_C8 + name: opentrons_96_filtertiprack_1000ul_C8 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 74.804 + y: 53.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_D8 + name: opentrons_96_filtertiprack_1000ul_D8 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 74.804 + y: 44.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_E8 + name: opentrons_96_filtertiprack_1000ul_E8 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 74.804 + y: 35.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_F8 + name: opentrons_96_filtertiprack_1000ul_F8 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 74.804 + y: 26.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_G8 + name: opentrons_96_filtertiprack_1000ul_G8 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 74.804 + y: 17.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_H8 + name: opentrons_96_filtertiprack_1000ul_H8 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 74.804 + y: 8.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_A9 + name: opentrons_96_filtertiprack_1000ul_A9 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 83.804 + y: 71.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_B9 + name: opentrons_96_filtertiprack_1000ul_B9 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 83.804 + y: 62.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_C9 + name: opentrons_96_filtertiprack_1000ul_C9 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 83.804 + y: 53.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_D9 + name: opentrons_96_filtertiprack_1000ul_D9 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 83.804 + y: 44.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_E9 + name: opentrons_96_filtertiprack_1000ul_E9 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 83.804 + y: 35.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_F9 + name: opentrons_96_filtertiprack_1000ul_F9 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 83.804 + y: 26.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_G9 + name: opentrons_96_filtertiprack_1000ul_G9 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 83.804 + y: 17.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_H9 + name: opentrons_96_filtertiprack_1000ul_H9 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 83.804 + y: 8.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_A10 + name: opentrons_96_filtertiprack_1000ul_A10 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 92.804 + y: 71.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_B10 + name: opentrons_96_filtertiprack_1000ul_B10 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 92.804 + y: 62.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_C10 + name: opentrons_96_filtertiprack_1000ul_C10 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 92.804 + y: 53.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_D10 + name: opentrons_96_filtertiprack_1000ul_D10 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 92.804 + y: 44.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_E10 + name: opentrons_96_filtertiprack_1000ul_E10 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 92.804 + y: 35.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_F10 + name: opentrons_96_filtertiprack_1000ul_F10 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 92.804 + y: 26.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_G10 + name: opentrons_96_filtertiprack_1000ul_G10 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 92.804 + y: 17.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_H10 + name: opentrons_96_filtertiprack_1000ul_H10 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 92.804 + y: 8.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_A11 + name: opentrons_96_filtertiprack_1000ul_A11 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 101.804 + y: 71.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_B11 + name: opentrons_96_filtertiprack_1000ul_B11 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 101.804 + y: 62.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_C11 + name: opentrons_96_filtertiprack_1000ul_C11 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 101.804 + y: 53.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_D11 + name: opentrons_96_filtertiprack_1000ul_D11 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 101.804 + y: 44.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_E11 + name: opentrons_96_filtertiprack_1000ul_E11 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 101.804 + y: 35.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_F11 + name: opentrons_96_filtertiprack_1000ul_F11 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 101.804 + y: 26.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_G11 + name: opentrons_96_filtertiprack_1000ul_G11 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 101.804 + y: 17.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_H11 + name: opentrons_96_filtertiprack_1000ul_H11 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 101.804 + y: 8.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_A12 + name: opentrons_96_filtertiprack_1000ul_A12 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 110.804 + y: 71.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_B12 + name: opentrons_96_filtertiprack_1000ul_B12 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 110.804 + y: 62.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_C12 + name: opentrons_96_filtertiprack_1000ul_C12 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 110.804 + y: 53.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_D12 + name: opentrons_96_filtertiprack_1000ul_D12 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 110.804 + y: 44.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_E12 + name: opentrons_96_filtertiprack_1000ul_E12 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 110.804 + y: 35.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_F12 + name: opentrons_96_filtertiprack_1000ul_F12 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 110.804 + y: 26.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_G12 + name: opentrons_96_filtertiprack_1000ul_G12 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 110.804 + y: 17.704 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: true + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_1000ul_H12 + name: opentrons_96_filtertiprack_1000ul_H12 + parent: opentrons_96_filtertiprack_1000ul + position: + x: 110.804 + y: 8.704 + z: 9.47 + sample_id: null + type: container + description: Opentrons 96 filtertiprack 1000ul + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tip_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + model: + children_mesh: generic_labware_tube_10_75/meshes/0_base.stl + children_mesh_tf: + - 0.0018 + - 0.0018 + - 0 + - -1.5708 + - 0 + - 0 + mesh: tecan_nested_tip_rack/meshes/plate.stl + mesh_tf: + - 0.064 + - 0.043 + - 0 + - -1.5708 + - 0 + - 1.5708 + type: resource + registry_type: resource + version: 1.0.0 +opentrons_96_filtertiprack_10ul: + category: + - tip_racks + class: + module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_filtertiprack_10ul + type: pylabrobot + config_info: + - children: + - opentrons_96_filtertiprack_10ul_A1 + - opentrons_96_filtertiprack_10ul_B1 + - opentrons_96_filtertiprack_10ul_C1 + - opentrons_96_filtertiprack_10ul_D1 + - opentrons_96_filtertiprack_10ul_E1 + - opentrons_96_filtertiprack_10ul_F1 + - opentrons_96_filtertiprack_10ul_G1 + - opentrons_96_filtertiprack_10ul_H1 + - opentrons_96_filtertiprack_10ul_A2 + - opentrons_96_filtertiprack_10ul_B2 + - opentrons_96_filtertiprack_10ul_C2 + - opentrons_96_filtertiprack_10ul_D2 + - opentrons_96_filtertiprack_10ul_E2 + - opentrons_96_filtertiprack_10ul_F2 + - opentrons_96_filtertiprack_10ul_G2 + - opentrons_96_filtertiprack_10ul_H2 + - opentrons_96_filtertiprack_10ul_A3 + - opentrons_96_filtertiprack_10ul_B3 + - opentrons_96_filtertiprack_10ul_C3 + - opentrons_96_filtertiprack_10ul_D3 + - opentrons_96_filtertiprack_10ul_E3 + - opentrons_96_filtertiprack_10ul_F3 + - opentrons_96_filtertiprack_10ul_G3 + - opentrons_96_filtertiprack_10ul_H3 + - opentrons_96_filtertiprack_10ul_A4 + - opentrons_96_filtertiprack_10ul_B4 + - opentrons_96_filtertiprack_10ul_C4 + - opentrons_96_filtertiprack_10ul_D4 + - opentrons_96_filtertiprack_10ul_E4 + - opentrons_96_filtertiprack_10ul_F4 + - opentrons_96_filtertiprack_10ul_G4 + - opentrons_96_filtertiprack_10ul_H4 + - opentrons_96_filtertiprack_10ul_A5 + - opentrons_96_filtertiprack_10ul_B5 + - opentrons_96_filtertiprack_10ul_C5 + - opentrons_96_filtertiprack_10ul_D5 + - opentrons_96_filtertiprack_10ul_E5 + - opentrons_96_filtertiprack_10ul_F5 + - opentrons_96_filtertiprack_10ul_G5 + - opentrons_96_filtertiprack_10ul_H5 + - opentrons_96_filtertiprack_10ul_A6 + - opentrons_96_filtertiprack_10ul_B6 + - opentrons_96_filtertiprack_10ul_C6 + - opentrons_96_filtertiprack_10ul_D6 + - opentrons_96_filtertiprack_10ul_E6 + - opentrons_96_filtertiprack_10ul_F6 + - opentrons_96_filtertiprack_10ul_G6 + - opentrons_96_filtertiprack_10ul_H6 + - opentrons_96_filtertiprack_10ul_A7 + - opentrons_96_filtertiprack_10ul_B7 + - opentrons_96_filtertiprack_10ul_C7 + - opentrons_96_filtertiprack_10ul_D7 + - opentrons_96_filtertiprack_10ul_E7 + - opentrons_96_filtertiprack_10ul_F7 + - opentrons_96_filtertiprack_10ul_G7 + - opentrons_96_filtertiprack_10ul_H7 + - opentrons_96_filtertiprack_10ul_A8 + - opentrons_96_filtertiprack_10ul_B8 + - opentrons_96_filtertiprack_10ul_C8 + - opentrons_96_filtertiprack_10ul_D8 + - opentrons_96_filtertiprack_10ul_E8 + - opentrons_96_filtertiprack_10ul_F8 + - opentrons_96_filtertiprack_10ul_G8 + - opentrons_96_filtertiprack_10ul_H8 + - opentrons_96_filtertiprack_10ul_A9 + - opentrons_96_filtertiprack_10ul_B9 + - opentrons_96_filtertiprack_10ul_C9 + - opentrons_96_filtertiprack_10ul_D9 + - opentrons_96_filtertiprack_10ul_E9 + - opentrons_96_filtertiprack_10ul_F9 + - opentrons_96_filtertiprack_10ul_G9 + - opentrons_96_filtertiprack_10ul_H9 + - opentrons_96_filtertiprack_10ul_A10 + - opentrons_96_filtertiprack_10ul_B10 + - opentrons_96_filtertiprack_10ul_C10 + - opentrons_96_filtertiprack_10ul_D10 + - opentrons_96_filtertiprack_10ul_E10 + - opentrons_96_filtertiprack_10ul_F10 + - opentrons_96_filtertiprack_10ul_G10 + - opentrons_96_filtertiprack_10ul_H10 + - opentrons_96_filtertiprack_10ul_A11 + - opentrons_96_filtertiprack_10ul_B11 + - opentrons_96_filtertiprack_10ul_C11 + - opentrons_96_filtertiprack_10ul_D11 + - opentrons_96_filtertiprack_10ul_E11 + - opentrons_96_filtertiprack_10ul_F11 + - opentrons_96_filtertiprack_10ul_G11 + - opentrons_96_filtertiprack_10ul_H11 + - opentrons_96_filtertiprack_10ul_A12 + - opentrons_96_filtertiprack_10ul_B12 + - opentrons_96_filtertiprack_10ul_C12 + - opentrons_96_filtertiprack_10ul_D12 + - opentrons_96_filtertiprack_10ul_E12 + - opentrons_96_filtertiprack_10ul_F12 + - opentrons_96_filtertiprack_10ul_G12 + - opentrons_96_filtertiprack_10ul_H12 + class: '' + config: + barcode: null + category: tip_rack + model: Opentrons OT-2 96 Filter Tip Rack 10 µL + ordering: + A1: opentrons_96_filtertiprack_10ul_A1 + B1: opentrons_96_filtertiprack_10ul_B1 + C1: opentrons_96_filtertiprack_10ul_C1 + D1: opentrons_96_filtertiprack_10ul_D1 + E1: opentrons_96_filtertiprack_10ul_E1 + F1: opentrons_96_filtertiprack_10ul_F1 + G1: opentrons_96_filtertiprack_10ul_G1 + H1: opentrons_96_filtertiprack_10ul_H1 + A2: opentrons_96_filtertiprack_10ul_A2 + B2: opentrons_96_filtertiprack_10ul_B2 + C2: opentrons_96_filtertiprack_10ul_C2 + D2: opentrons_96_filtertiprack_10ul_D2 + E2: opentrons_96_filtertiprack_10ul_E2 + F2: opentrons_96_filtertiprack_10ul_F2 + G2: opentrons_96_filtertiprack_10ul_G2 + H2: opentrons_96_filtertiprack_10ul_H2 + A3: opentrons_96_filtertiprack_10ul_A3 + B3: opentrons_96_filtertiprack_10ul_B3 + C3: opentrons_96_filtertiprack_10ul_C3 + D3: opentrons_96_filtertiprack_10ul_D3 + E3: opentrons_96_filtertiprack_10ul_E3 + F3: opentrons_96_filtertiprack_10ul_F3 + G3: opentrons_96_filtertiprack_10ul_G3 + H3: opentrons_96_filtertiprack_10ul_H3 + A4: opentrons_96_filtertiprack_10ul_A4 + B4: opentrons_96_filtertiprack_10ul_B4 + C4: opentrons_96_filtertiprack_10ul_C4 + D4: opentrons_96_filtertiprack_10ul_D4 + E4: opentrons_96_filtertiprack_10ul_E4 + F4: opentrons_96_filtertiprack_10ul_F4 + G4: opentrons_96_filtertiprack_10ul_G4 + H4: opentrons_96_filtertiprack_10ul_H4 + A5: opentrons_96_filtertiprack_10ul_A5 + B5: opentrons_96_filtertiprack_10ul_B5 + C5: opentrons_96_filtertiprack_10ul_C5 + D5: opentrons_96_filtertiprack_10ul_D5 + E5: opentrons_96_filtertiprack_10ul_E5 + F5: opentrons_96_filtertiprack_10ul_F5 + G5: opentrons_96_filtertiprack_10ul_G5 + H5: opentrons_96_filtertiprack_10ul_H5 + A6: opentrons_96_filtertiprack_10ul_A6 + B6: opentrons_96_filtertiprack_10ul_B6 + C6: opentrons_96_filtertiprack_10ul_C6 + D6: opentrons_96_filtertiprack_10ul_D6 + E6: opentrons_96_filtertiprack_10ul_E6 + F6: opentrons_96_filtertiprack_10ul_F6 + G6: opentrons_96_filtertiprack_10ul_G6 + H6: opentrons_96_filtertiprack_10ul_H6 + A7: opentrons_96_filtertiprack_10ul_A7 + B7: opentrons_96_filtertiprack_10ul_B7 + C7: opentrons_96_filtertiprack_10ul_C7 + D7: opentrons_96_filtertiprack_10ul_D7 + E7: opentrons_96_filtertiprack_10ul_E7 + F7: opentrons_96_filtertiprack_10ul_F7 + G7: opentrons_96_filtertiprack_10ul_G7 + H7: opentrons_96_filtertiprack_10ul_H7 + A8: opentrons_96_filtertiprack_10ul_A8 + B8: opentrons_96_filtertiprack_10ul_B8 + C8: opentrons_96_filtertiprack_10ul_C8 + D8: opentrons_96_filtertiprack_10ul_D8 + E8: opentrons_96_filtertiprack_10ul_E8 + F8: opentrons_96_filtertiprack_10ul_F8 + G8: opentrons_96_filtertiprack_10ul_G8 + H8: opentrons_96_filtertiprack_10ul_H8 + A9: opentrons_96_filtertiprack_10ul_A9 + B9: opentrons_96_filtertiprack_10ul_B9 + C9: opentrons_96_filtertiprack_10ul_C9 + D9: opentrons_96_filtertiprack_10ul_D9 + E9: opentrons_96_filtertiprack_10ul_E9 + F9: opentrons_96_filtertiprack_10ul_F9 + G9: opentrons_96_filtertiprack_10ul_G9 + H9: opentrons_96_filtertiprack_10ul_H9 + A10: opentrons_96_filtertiprack_10ul_A10 + B10: opentrons_96_filtertiprack_10ul_B10 + C10: opentrons_96_filtertiprack_10ul_C10 + D10: opentrons_96_filtertiprack_10ul_D10 + E10: opentrons_96_filtertiprack_10ul_E10 + F10: opentrons_96_filtertiprack_10ul_F10 + G10: opentrons_96_filtertiprack_10ul_G10 + H10: opentrons_96_filtertiprack_10ul_H10 + A11: opentrons_96_filtertiprack_10ul_A11 + B11: opentrons_96_filtertiprack_10ul_B11 + C11: opentrons_96_filtertiprack_10ul_C11 + D11: opentrons_96_filtertiprack_10ul_D11 + E11: opentrons_96_filtertiprack_10ul_E11 + F11: opentrons_96_filtertiprack_10ul_F11 + G11: opentrons_96_filtertiprack_10ul_G11 + H11: opentrons_96_filtertiprack_10ul_H11 + A12: opentrons_96_filtertiprack_10ul_A12 + B12: opentrons_96_filtertiprack_10ul_B12 + C12: opentrons_96_filtertiprack_10ul_C12 + D12: opentrons_96_filtertiprack_10ul_D12 + E12: opentrons_96_filtertiprack_10ul_E12 + F12: opentrons_96_filtertiprack_10ul_F12 + G12: opentrons_96_filtertiprack_10ul_G12 + H12: opentrons_96_filtertiprack_10ul_H12 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.48 + size_z: 64.69 + type: TipRack + data: {} + id: opentrons_96_filtertiprack_10ul + name: opentrons_96_filtertiprack_10ul + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_A1 + name: opentrons_96_filtertiprack_10ul_A1 + parent: opentrons_96_filtertiprack_10ul + position: + x: 13.204 + y: 73.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_B1 + name: opentrons_96_filtertiprack_10ul_B1 + parent: opentrons_96_filtertiprack_10ul + position: + x: 13.204 + y: 64.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_C1 + name: opentrons_96_filtertiprack_10ul_C1 + parent: opentrons_96_filtertiprack_10ul + position: + x: 13.204 + y: 55.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_D1 + name: opentrons_96_filtertiprack_10ul_D1 + parent: opentrons_96_filtertiprack_10ul + position: + x: 13.204 + y: 46.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_E1 + name: opentrons_96_filtertiprack_10ul_E1 + parent: opentrons_96_filtertiprack_10ul + position: + x: 13.204 + y: 37.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_F1 + name: opentrons_96_filtertiprack_10ul_F1 + parent: opentrons_96_filtertiprack_10ul + position: + x: 13.204 + y: 28.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_G1 + name: opentrons_96_filtertiprack_10ul_G1 + parent: opentrons_96_filtertiprack_10ul + position: + x: 13.204 + y: 19.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_H1 + name: opentrons_96_filtertiprack_10ul_H1 + parent: opentrons_96_filtertiprack_10ul + position: + x: 13.204 + y: 10.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_A2 + name: opentrons_96_filtertiprack_10ul_A2 + parent: opentrons_96_filtertiprack_10ul + position: + x: 22.204 + y: 73.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_B2 + name: opentrons_96_filtertiprack_10ul_B2 + parent: opentrons_96_filtertiprack_10ul + position: + x: 22.204 + y: 64.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_C2 + name: opentrons_96_filtertiprack_10ul_C2 + parent: opentrons_96_filtertiprack_10ul + position: + x: 22.204 + y: 55.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_D2 + name: opentrons_96_filtertiprack_10ul_D2 + parent: opentrons_96_filtertiprack_10ul + position: + x: 22.204 + y: 46.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_E2 + name: opentrons_96_filtertiprack_10ul_E2 + parent: opentrons_96_filtertiprack_10ul + position: + x: 22.204 + y: 37.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_F2 + name: opentrons_96_filtertiprack_10ul_F2 + parent: opentrons_96_filtertiprack_10ul + position: + x: 22.204 + y: 28.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_G2 + name: opentrons_96_filtertiprack_10ul_G2 + parent: opentrons_96_filtertiprack_10ul + position: + x: 22.204 + y: 19.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_H2 + name: opentrons_96_filtertiprack_10ul_H2 + parent: opentrons_96_filtertiprack_10ul + position: + x: 22.204 + y: 10.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_A3 + name: opentrons_96_filtertiprack_10ul_A3 + parent: opentrons_96_filtertiprack_10ul + position: + x: 31.204 + y: 73.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_B3 + name: opentrons_96_filtertiprack_10ul_B3 + parent: opentrons_96_filtertiprack_10ul + position: + x: 31.204 + y: 64.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_C3 + name: opentrons_96_filtertiprack_10ul_C3 + parent: opentrons_96_filtertiprack_10ul + position: + x: 31.204 + y: 55.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_D3 + name: opentrons_96_filtertiprack_10ul_D3 + parent: opentrons_96_filtertiprack_10ul + position: + x: 31.204 + y: 46.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_E3 + name: opentrons_96_filtertiprack_10ul_E3 + parent: opentrons_96_filtertiprack_10ul + position: + x: 31.204 + y: 37.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_F3 + name: opentrons_96_filtertiprack_10ul_F3 + parent: opentrons_96_filtertiprack_10ul + position: + x: 31.204 + y: 28.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_G3 + name: opentrons_96_filtertiprack_10ul_G3 + parent: opentrons_96_filtertiprack_10ul + position: + x: 31.204 + y: 19.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_H3 + name: opentrons_96_filtertiprack_10ul_H3 + parent: opentrons_96_filtertiprack_10ul + position: + x: 31.204 + y: 10.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_A4 + name: opentrons_96_filtertiprack_10ul_A4 + parent: opentrons_96_filtertiprack_10ul + position: + x: 40.204 + y: 73.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_B4 + name: opentrons_96_filtertiprack_10ul_B4 + parent: opentrons_96_filtertiprack_10ul + position: + x: 40.204 + y: 64.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_C4 + name: opentrons_96_filtertiprack_10ul_C4 + parent: opentrons_96_filtertiprack_10ul + position: + x: 40.204 + y: 55.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_D4 + name: opentrons_96_filtertiprack_10ul_D4 + parent: opentrons_96_filtertiprack_10ul + position: + x: 40.204 + y: 46.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_E4 + name: opentrons_96_filtertiprack_10ul_E4 + parent: opentrons_96_filtertiprack_10ul + position: + x: 40.204 + y: 37.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_F4 + name: opentrons_96_filtertiprack_10ul_F4 + parent: opentrons_96_filtertiprack_10ul + position: + x: 40.204 + y: 28.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_G4 + name: opentrons_96_filtertiprack_10ul_G4 + parent: opentrons_96_filtertiprack_10ul + position: + x: 40.204 + y: 19.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_H4 + name: opentrons_96_filtertiprack_10ul_H4 + parent: opentrons_96_filtertiprack_10ul + position: + x: 40.204 + y: 10.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_A5 + name: opentrons_96_filtertiprack_10ul_A5 + parent: opentrons_96_filtertiprack_10ul + position: + x: 49.204 + y: 73.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_B5 + name: opentrons_96_filtertiprack_10ul_B5 + parent: opentrons_96_filtertiprack_10ul + position: + x: 49.204 + y: 64.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_C5 + name: opentrons_96_filtertiprack_10ul_C5 + parent: opentrons_96_filtertiprack_10ul + position: + x: 49.204 + y: 55.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_D5 + name: opentrons_96_filtertiprack_10ul_D5 + parent: opentrons_96_filtertiprack_10ul + position: + x: 49.204 + y: 46.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_E5 + name: opentrons_96_filtertiprack_10ul_E5 + parent: opentrons_96_filtertiprack_10ul + position: + x: 49.204 + y: 37.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_F5 + name: opentrons_96_filtertiprack_10ul_F5 + parent: opentrons_96_filtertiprack_10ul + position: + x: 49.204 + y: 28.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_G5 + name: opentrons_96_filtertiprack_10ul_G5 + parent: opentrons_96_filtertiprack_10ul + position: + x: 49.204 + y: 19.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_H5 + name: opentrons_96_filtertiprack_10ul_H5 + parent: opentrons_96_filtertiprack_10ul + position: + x: 49.204 + y: 10.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_A6 + name: opentrons_96_filtertiprack_10ul_A6 + parent: opentrons_96_filtertiprack_10ul + position: + x: 58.204 + y: 73.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_B6 + name: opentrons_96_filtertiprack_10ul_B6 + parent: opentrons_96_filtertiprack_10ul + position: + x: 58.204 + y: 64.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_C6 + name: opentrons_96_filtertiprack_10ul_C6 + parent: opentrons_96_filtertiprack_10ul + position: + x: 58.204 + y: 55.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_D6 + name: opentrons_96_filtertiprack_10ul_D6 + parent: opentrons_96_filtertiprack_10ul + position: + x: 58.204 + y: 46.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_E6 + name: opentrons_96_filtertiprack_10ul_E6 + parent: opentrons_96_filtertiprack_10ul + position: + x: 58.204 + y: 37.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_F6 + name: opentrons_96_filtertiprack_10ul_F6 + parent: opentrons_96_filtertiprack_10ul + position: + x: 58.204 + y: 28.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_G6 + name: opentrons_96_filtertiprack_10ul_G6 + parent: opentrons_96_filtertiprack_10ul + position: + x: 58.204 + y: 19.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_H6 + name: opentrons_96_filtertiprack_10ul_H6 + parent: opentrons_96_filtertiprack_10ul + position: + x: 58.204 + y: 10.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_A7 + name: opentrons_96_filtertiprack_10ul_A7 + parent: opentrons_96_filtertiprack_10ul + position: + x: 67.204 + y: 73.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_B7 + name: opentrons_96_filtertiprack_10ul_B7 + parent: opentrons_96_filtertiprack_10ul + position: + x: 67.204 + y: 64.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_C7 + name: opentrons_96_filtertiprack_10ul_C7 + parent: opentrons_96_filtertiprack_10ul + position: + x: 67.204 + y: 55.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_D7 + name: opentrons_96_filtertiprack_10ul_D7 + parent: opentrons_96_filtertiprack_10ul + position: + x: 67.204 + y: 46.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_E7 + name: opentrons_96_filtertiprack_10ul_E7 + parent: opentrons_96_filtertiprack_10ul + position: + x: 67.204 + y: 37.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_F7 + name: opentrons_96_filtertiprack_10ul_F7 + parent: opentrons_96_filtertiprack_10ul + position: + x: 67.204 + y: 28.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_G7 + name: opentrons_96_filtertiprack_10ul_G7 + parent: opentrons_96_filtertiprack_10ul + position: + x: 67.204 + y: 19.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_H7 + name: opentrons_96_filtertiprack_10ul_H7 + parent: opentrons_96_filtertiprack_10ul + position: + x: 67.204 + y: 10.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_A8 + name: opentrons_96_filtertiprack_10ul_A8 + parent: opentrons_96_filtertiprack_10ul + position: + x: 76.204 + y: 73.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_B8 + name: opentrons_96_filtertiprack_10ul_B8 + parent: opentrons_96_filtertiprack_10ul + position: + x: 76.204 + y: 64.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_C8 + name: opentrons_96_filtertiprack_10ul_C8 + parent: opentrons_96_filtertiprack_10ul + position: + x: 76.204 + y: 55.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_D8 + name: opentrons_96_filtertiprack_10ul_D8 + parent: opentrons_96_filtertiprack_10ul + position: + x: 76.204 + y: 46.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_E8 + name: opentrons_96_filtertiprack_10ul_E8 + parent: opentrons_96_filtertiprack_10ul + position: + x: 76.204 + y: 37.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_F8 + name: opentrons_96_filtertiprack_10ul_F8 + parent: opentrons_96_filtertiprack_10ul + position: + x: 76.204 + y: 28.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_G8 + name: opentrons_96_filtertiprack_10ul_G8 + parent: opentrons_96_filtertiprack_10ul + position: + x: 76.204 + y: 19.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_H8 + name: opentrons_96_filtertiprack_10ul_H8 + parent: opentrons_96_filtertiprack_10ul + position: + x: 76.204 + y: 10.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_A9 + name: opentrons_96_filtertiprack_10ul_A9 + parent: opentrons_96_filtertiprack_10ul + position: + x: 85.204 + y: 73.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_B9 + name: opentrons_96_filtertiprack_10ul_B9 + parent: opentrons_96_filtertiprack_10ul + position: + x: 85.204 + y: 64.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_C9 + name: opentrons_96_filtertiprack_10ul_C9 + parent: opentrons_96_filtertiprack_10ul + position: + x: 85.204 + y: 55.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_D9 + name: opentrons_96_filtertiprack_10ul_D9 + parent: opentrons_96_filtertiprack_10ul + position: + x: 85.204 + y: 46.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_E9 + name: opentrons_96_filtertiprack_10ul_E9 + parent: opentrons_96_filtertiprack_10ul + position: + x: 85.204 + y: 37.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_F9 + name: opentrons_96_filtertiprack_10ul_F9 + parent: opentrons_96_filtertiprack_10ul + position: + x: 85.204 + y: 28.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_G9 + name: opentrons_96_filtertiprack_10ul_G9 + parent: opentrons_96_filtertiprack_10ul + position: + x: 85.204 + y: 19.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_H9 + name: opentrons_96_filtertiprack_10ul_H9 + parent: opentrons_96_filtertiprack_10ul + position: + x: 85.204 + y: 10.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_A10 + name: opentrons_96_filtertiprack_10ul_A10 + parent: opentrons_96_filtertiprack_10ul + position: + x: 94.204 + y: 73.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_B10 + name: opentrons_96_filtertiprack_10ul_B10 + parent: opentrons_96_filtertiprack_10ul + position: + x: 94.204 + y: 64.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_C10 + name: opentrons_96_filtertiprack_10ul_C10 + parent: opentrons_96_filtertiprack_10ul + position: + x: 94.204 + y: 55.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_D10 + name: opentrons_96_filtertiprack_10ul_D10 + parent: opentrons_96_filtertiprack_10ul + position: + x: 94.204 + y: 46.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_E10 + name: opentrons_96_filtertiprack_10ul_E10 + parent: opentrons_96_filtertiprack_10ul + position: + x: 94.204 + y: 37.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_F10 + name: opentrons_96_filtertiprack_10ul_F10 + parent: opentrons_96_filtertiprack_10ul + position: + x: 94.204 + y: 28.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_G10 + name: opentrons_96_filtertiprack_10ul_G10 + parent: opentrons_96_filtertiprack_10ul + position: + x: 94.204 + y: 19.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_H10 + name: opentrons_96_filtertiprack_10ul_H10 + parent: opentrons_96_filtertiprack_10ul + position: + x: 94.204 + y: 10.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_A11 + name: opentrons_96_filtertiprack_10ul_A11 + parent: opentrons_96_filtertiprack_10ul + position: + x: 103.204 + y: 73.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_B11 + name: opentrons_96_filtertiprack_10ul_B11 + parent: opentrons_96_filtertiprack_10ul + position: + x: 103.204 + y: 64.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_C11 + name: opentrons_96_filtertiprack_10ul_C11 + parent: opentrons_96_filtertiprack_10ul + position: + x: 103.204 + y: 55.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_D11 + name: opentrons_96_filtertiprack_10ul_D11 + parent: opentrons_96_filtertiprack_10ul + position: + x: 103.204 + y: 46.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_E11 + name: opentrons_96_filtertiprack_10ul_E11 + parent: opentrons_96_filtertiprack_10ul + position: + x: 103.204 + y: 37.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_F11 + name: opentrons_96_filtertiprack_10ul_F11 + parent: opentrons_96_filtertiprack_10ul + position: + x: 103.204 + y: 28.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_G11 + name: opentrons_96_filtertiprack_10ul_G11 + parent: opentrons_96_filtertiprack_10ul + position: + x: 103.204 + y: 19.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_H11 + name: opentrons_96_filtertiprack_10ul_H11 + parent: opentrons_96_filtertiprack_10ul + position: + x: 103.204 + y: 10.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_A12 + name: opentrons_96_filtertiprack_10ul_A12 + parent: opentrons_96_filtertiprack_10ul + position: + x: 112.204 + y: 73.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_B12 + name: opentrons_96_filtertiprack_10ul_B12 + parent: opentrons_96_filtertiprack_10ul + position: + x: 112.204 + y: 64.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_C12 + name: opentrons_96_filtertiprack_10ul_C12 + parent: opentrons_96_filtertiprack_10ul + position: + x: 112.204 + y: 55.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_D12 + name: opentrons_96_filtertiprack_10ul_D12 + parent: opentrons_96_filtertiprack_10ul + position: + x: 112.204 + y: 46.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_E12 + name: opentrons_96_filtertiprack_10ul_E12 + parent: opentrons_96_filtertiprack_10ul + position: + x: 112.204 + y: 37.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_F12 + name: opentrons_96_filtertiprack_10ul_F12 + parent: opentrons_96_filtertiprack_10ul + position: + x: 112.204 + y: 28.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_G12 + name: opentrons_96_filtertiprack_10ul_G12 + parent: opentrons_96_filtertiprack_10ul + position: + x: 112.204 + y: 19.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_10ul_H12 + name: opentrons_96_filtertiprack_10ul_H12 + parent: opentrons_96_filtertiprack_10ul + position: + x: 112.204 + y: 10.104 + z: 25.49 + sample_id: null + type: container + description: Opentrons 96 filtertiprack 10ul + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tip_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +opentrons_96_filtertiprack_200ul: + category: + - tip_racks + class: + module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_filtertiprack_200ul + type: pylabrobot + config_info: + - children: + - opentrons_96_filtertiprack_200ul_A1 + - opentrons_96_filtertiprack_200ul_B1 + - opentrons_96_filtertiprack_200ul_C1 + - opentrons_96_filtertiprack_200ul_D1 + - opentrons_96_filtertiprack_200ul_E1 + - opentrons_96_filtertiprack_200ul_F1 + - opentrons_96_filtertiprack_200ul_G1 + - opentrons_96_filtertiprack_200ul_H1 + - opentrons_96_filtertiprack_200ul_A2 + - opentrons_96_filtertiprack_200ul_B2 + - opentrons_96_filtertiprack_200ul_C2 + - opentrons_96_filtertiprack_200ul_D2 + - opentrons_96_filtertiprack_200ul_E2 + - opentrons_96_filtertiprack_200ul_F2 + - opentrons_96_filtertiprack_200ul_G2 + - opentrons_96_filtertiprack_200ul_H2 + - opentrons_96_filtertiprack_200ul_A3 + - opentrons_96_filtertiprack_200ul_B3 + - opentrons_96_filtertiprack_200ul_C3 + - opentrons_96_filtertiprack_200ul_D3 + - opentrons_96_filtertiprack_200ul_E3 + - opentrons_96_filtertiprack_200ul_F3 + - opentrons_96_filtertiprack_200ul_G3 + - opentrons_96_filtertiprack_200ul_H3 + - opentrons_96_filtertiprack_200ul_A4 + - opentrons_96_filtertiprack_200ul_B4 + - opentrons_96_filtertiprack_200ul_C4 + - opentrons_96_filtertiprack_200ul_D4 + - opentrons_96_filtertiprack_200ul_E4 + - opentrons_96_filtertiprack_200ul_F4 + - opentrons_96_filtertiprack_200ul_G4 + - opentrons_96_filtertiprack_200ul_H4 + - opentrons_96_filtertiprack_200ul_A5 + - opentrons_96_filtertiprack_200ul_B5 + - opentrons_96_filtertiprack_200ul_C5 + - opentrons_96_filtertiprack_200ul_D5 + - opentrons_96_filtertiprack_200ul_E5 + - opentrons_96_filtertiprack_200ul_F5 + - opentrons_96_filtertiprack_200ul_G5 + - opentrons_96_filtertiprack_200ul_H5 + - opentrons_96_filtertiprack_200ul_A6 + - opentrons_96_filtertiprack_200ul_B6 + - opentrons_96_filtertiprack_200ul_C6 + - opentrons_96_filtertiprack_200ul_D6 + - opentrons_96_filtertiprack_200ul_E6 + - opentrons_96_filtertiprack_200ul_F6 + - opentrons_96_filtertiprack_200ul_G6 + - opentrons_96_filtertiprack_200ul_H6 + - opentrons_96_filtertiprack_200ul_A7 + - opentrons_96_filtertiprack_200ul_B7 + - opentrons_96_filtertiprack_200ul_C7 + - opentrons_96_filtertiprack_200ul_D7 + - opentrons_96_filtertiprack_200ul_E7 + - opentrons_96_filtertiprack_200ul_F7 + - opentrons_96_filtertiprack_200ul_G7 + - opentrons_96_filtertiprack_200ul_H7 + - opentrons_96_filtertiprack_200ul_A8 + - opentrons_96_filtertiprack_200ul_B8 + - opentrons_96_filtertiprack_200ul_C8 + - opentrons_96_filtertiprack_200ul_D8 + - opentrons_96_filtertiprack_200ul_E8 + - opentrons_96_filtertiprack_200ul_F8 + - opentrons_96_filtertiprack_200ul_G8 + - opentrons_96_filtertiprack_200ul_H8 + - opentrons_96_filtertiprack_200ul_A9 + - opentrons_96_filtertiprack_200ul_B9 + - opentrons_96_filtertiprack_200ul_C9 + - opentrons_96_filtertiprack_200ul_D9 + - opentrons_96_filtertiprack_200ul_E9 + - opentrons_96_filtertiprack_200ul_F9 + - opentrons_96_filtertiprack_200ul_G9 + - opentrons_96_filtertiprack_200ul_H9 + - opentrons_96_filtertiprack_200ul_A10 + - opentrons_96_filtertiprack_200ul_B10 + - opentrons_96_filtertiprack_200ul_C10 + - opentrons_96_filtertiprack_200ul_D10 + - opentrons_96_filtertiprack_200ul_E10 + - opentrons_96_filtertiprack_200ul_F10 + - opentrons_96_filtertiprack_200ul_G10 + - opentrons_96_filtertiprack_200ul_H10 + - opentrons_96_filtertiprack_200ul_A11 + - opentrons_96_filtertiprack_200ul_B11 + - opentrons_96_filtertiprack_200ul_C11 + - opentrons_96_filtertiprack_200ul_D11 + - opentrons_96_filtertiprack_200ul_E11 + - opentrons_96_filtertiprack_200ul_F11 + - opentrons_96_filtertiprack_200ul_G11 + - opentrons_96_filtertiprack_200ul_H11 + - opentrons_96_filtertiprack_200ul_A12 + - opentrons_96_filtertiprack_200ul_B12 + - opentrons_96_filtertiprack_200ul_C12 + - opentrons_96_filtertiprack_200ul_D12 + - opentrons_96_filtertiprack_200ul_E12 + - opentrons_96_filtertiprack_200ul_F12 + - opentrons_96_filtertiprack_200ul_G12 + - opentrons_96_filtertiprack_200ul_H12 + class: '' + config: + barcode: null + category: tip_rack + model: Opentrons OT-2 96 Filter Tip Rack 200 µL + ordering: + A1: opentrons_96_filtertiprack_200ul_A1 + B1: opentrons_96_filtertiprack_200ul_B1 + C1: opentrons_96_filtertiprack_200ul_C1 + D1: opentrons_96_filtertiprack_200ul_D1 + E1: opentrons_96_filtertiprack_200ul_E1 + F1: opentrons_96_filtertiprack_200ul_F1 + G1: opentrons_96_filtertiprack_200ul_G1 + H1: opentrons_96_filtertiprack_200ul_H1 + A2: opentrons_96_filtertiprack_200ul_A2 + B2: opentrons_96_filtertiprack_200ul_B2 + C2: opentrons_96_filtertiprack_200ul_C2 + D2: opentrons_96_filtertiprack_200ul_D2 + E2: opentrons_96_filtertiprack_200ul_E2 + F2: opentrons_96_filtertiprack_200ul_F2 + G2: opentrons_96_filtertiprack_200ul_G2 + H2: opentrons_96_filtertiprack_200ul_H2 + A3: opentrons_96_filtertiprack_200ul_A3 + B3: opentrons_96_filtertiprack_200ul_B3 + C3: opentrons_96_filtertiprack_200ul_C3 + D3: opentrons_96_filtertiprack_200ul_D3 + E3: opentrons_96_filtertiprack_200ul_E3 + F3: opentrons_96_filtertiprack_200ul_F3 + G3: opentrons_96_filtertiprack_200ul_G3 + H3: opentrons_96_filtertiprack_200ul_H3 + A4: opentrons_96_filtertiprack_200ul_A4 + B4: opentrons_96_filtertiprack_200ul_B4 + C4: opentrons_96_filtertiprack_200ul_C4 + D4: opentrons_96_filtertiprack_200ul_D4 + E4: opentrons_96_filtertiprack_200ul_E4 + F4: opentrons_96_filtertiprack_200ul_F4 + G4: opentrons_96_filtertiprack_200ul_G4 + H4: opentrons_96_filtertiprack_200ul_H4 + A5: opentrons_96_filtertiprack_200ul_A5 + B5: opentrons_96_filtertiprack_200ul_B5 + C5: opentrons_96_filtertiprack_200ul_C5 + D5: opentrons_96_filtertiprack_200ul_D5 + E5: opentrons_96_filtertiprack_200ul_E5 + F5: opentrons_96_filtertiprack_200ul_F5 + G5: opentrons_96_filtertiprack_200ul_G5 + H5: opentrons_96_filtertiprack_200ul_H5 + A6: opentrons_96_filtertiprack_200ul_A6 + B6: opentrons_96_filtertiprack_200ul_B6 + C6: opentrons_96_filtertiprack_200ul_C6 + D6: opentrons_96_filtertiprack_200ul_D6 + E6: opentrons_96_filtertiprack_200ul_E6 + F6: opentrons_96_filtertiprack_200ul_F6 + G6: opentrons_96_filtertiprack_200ul_G6 + H6: opentrons_96_filtertiprack_200ul_H6 + A7: opentrons_96_filtertiprack_200ul_A7 + B7: opentrons_96_filtertiprack_200ul_B7 + C7: opentrons_96_filtertiprack_200ul_C7 + D7: opentrons_96_filtertiprack_200ul_D7 + E7: opentrons_96_filtertiprack_200ul_E7 + F7: opentrons_96_filtertiprack_200ul_F7 + G7: opentrons_96_filtertiprack_200ul_G7 + H7: opentrons_96_filtertiprack_200ul_H7 + A8: opentrons_96_filtertiprack_200ul_A8 + B8: opentrons_96_filtertiprack_200ul_B8 + C8: opentrons_96_filtertiprack_200ul_C8 + D8: opentrons_96_filtertiprack_200ul_D8 + E8: opentrons_96_filtertiprack_200ul_E8 + F8: opentrons_96_filtertiprack_200ul_F8 + G8: opentrons_96_filtertiprack_200ul_G8 + H8: opentrons_96_filtertiprack_200ul_H8 + A9: opentrons_96_filtertiprack_200ul_A9 + B9: opentrons_96_filtertiprack_200ul_B9 + C9: opentrons_96_filtertiprack_200ul_C9 + D9: opentrons_96_filtertiprack_200ul_D9 + E9: opentrons_96_filtertiprack_200ul_E9 + F9: opentrons_96_filtertiprack_200ul_F9 + G9: opentrons_96_filtertiprack_200ul_G9 + H9: opentrons_96_filtertiprack_200ul_H9 + A10: opentrons_96_filtertiprack_200ul_A10 + B10: opentrons_96_filtertiprack_200ul_B10 + C10: opentrons_96_filtertiprack_200ul_C10 + D10: opentrons_96_filtertiprack_200ul_D10 + E10: opentrons_96_filtertiprack_200ul_E10 + F10: opentrons_96_filtertiprack_200ul_F10 + G10: opentrons_96_filtertiprack_200ul_G10 + H10: opentrons_96_filtertiprack_200ul_H10 + A11: opentrons_96_filtertiprack_200ul_A11 + B11: opentrons_96_filtertiprack_200ul_B11 + C11: opentrons_96_filtertiprack_200ul_C11 + D11: opentrons_96_filtertiprack_200ul_D11 + E11: opentrons_96_filtertiprack_200ul_E11 + F11: opentrons_96_filtertiprack_200ul_F11 + G11: opentrons_96_filtertiprack_200ul_G11 + H11: opentrons_96_filtertiprack_200ul_H11 + A12: opentrons_96_filtertiprack_200ul_A12 + B12: opentrons_96_filtertiprack_200ul_B12 + C12: opentrons_96_filtertiprack_200ul_C12 + D12: opentrons_96_filtertiprack_200ul_D12 + E12: opentrons_96_filtertiprack_200ul_E12 + F12: opentrons_96_filtertiprack_200ul_F12 + G12: opentrons_96_filtertiprack_200ul_G12 + H12: opentrons_96_filtertiprack_200ul_H12 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.48 + size_z: 64.49 + type: TipRack + data: {} + id: opentrons_96_filtertiprack_200ul + name: opentrons_96_filtertiprack_200ul + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_A1 + name: opentrons_96_filtertiprack_200ul_A1 + parent: opentrons_96_filtertiprack_200ul + position: + x: 12.531 + y: 72.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_B1 + name: opentrons_96_filtertiprack_200ul_B1 + parent: opentrons_96_filtertiprack_200ul + position: + x: 12.531 + y: 63.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_C1 + name: opentrons_96_filtertiprack_200ul_C1 + parent: opentrons_96_filtertiprack_200ul + position: + x: 12.531 + y: 54.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_D1 + name: opentrons_96_filtertiprack_200ul_D1 + parent: opentrons_96_filtertiprack_200ul + position: + x: 12.531 + y: 45.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_E1 + name: opentrons_96_filtertiprack_200ul_E1 + parent: opentrons_96_filtertiprack_200ul + position: + x: 12.531 + y: 36.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_F1 + name: opentrons_96_filtertiprack_200ul_F1 + parent: opentrons_96_filtertiprack_200ul + position: + x: 12.531 + y: 27.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_G1 + name: opentrons_96_filtertiprack_200ul_G1 + parent: opentrons_96_filtertiprack_200ul + position: + x: 12.531 + y: 18.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_H1 + name: opentrons_96_filtertiprack_200ul_H1 + parent: opentrons_96_filtertiprack_200ul + position: + x: 12.531 + y: 9.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_A2 + name: opentrons_96_filtertiprack_200ul_A2 + parent: opentrons_96_filtertiprack_200ul + position: + x: 21.531 + y: 72.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_B2 + name: opentrons_96_filtertiprack_200ul_B2 + parent: opentrons_96_filtertiprack_200ul + position: + x: 21.531 + y: 63.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_C2 + name: opentrons_96_filtertiprack_200ul_C2 + parent: opentrons_96_filtertiprack_200ul + position: + x: 21.531 + y: 54.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_D2 + name: opentrons_96_filtertiprack_200ul_D2 + parent: opentrons_96_filtertiprack_200ul + position: + x: 21.531 + y: 45.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_E2 + name: opentrons_96_filtertiprack_200ul_E2 + parent: opentrons_96_filtertiprack_200ul + position: + x: 21.531 + y: 36.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_F2 + name: opentrons_96_filtertiprack_200ul_F2 + parent: opentrons_96_filtertiprack_200ul + position: + x: 21.531 + y: 27.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_G2 + name: opentrons_96_filtertiprack_200ul_G2 + parent: opentrons_96_filtertiprack_200ul + position: + x: 21.531 + y: 18.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_H2 + name: opentrons_96_filtertiprack_200ul_H2 + parent: opentrons_96_filtertiprack_200ul + position: + x: 21.531 + y: 9.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_A3 + name: opentrons_96_filtertiprack_200ul_A3 + parent: opentrons_96_filtertiprack_200ul + position: + x: 30.531 + y: 72.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_B3 + name: opentrons_96_filtertiprack_200ul_B3 + parent: opentrons_96_filtertiprack_200ul + position: + x: 30.531 + y: 63.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_C3 + name: opentrons_96_filtertiprack_200ul_C3 + parent: opentrons_96_filtertiprack_200ul + position: + x: 30.531 + y: 54.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_D3 + name: opentrons_96_filtertiprack_200ul_D3 + parent: opentrons_96_filtertiprack_200ul + position: + x: 30.531 + y: 45.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_E3 + name: opentrons_96_filtertiprack_200ul_E3 + parent: opentrons_96_filtertiprack_200ul + position: + x: 30.531 + y: 36.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_F3 + name: opentrons_96_filtertiprack_200ul_F3 + parent: opentrons_96_filtertiprack_200ul + position: + x: 30.531 + y: 27.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_G3 + name: opentrons_96_filtertiprack_200ul_G3 + parent: opentrons_96_filtertiprack_200ul + position: + x: 30.531 + y: 18.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_H3 + name: opentrons_96_filtertiprack_200ul_H3 + parent: opentrons_96_filtertiprack_200ul + position: + x: 30.531 + y: 9.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_A4 + name: opentrons_96_filtertiprack_200ul_A4 + parent: opentrons_96_filtertiprack_200ul + position: + x: 39.531 + y: 72.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_B4 + name: opentrons_96_filtertiprack_200ul_B4 + parent: opentrons_96_filtertiprack_200ul + position: + x: 39.531 + y: 63.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_C4 + name: opentrons_96_filtertiprack_200ul_C4 + parent: opentrons_96_filtertiprack_200ul + position: + x: 39.531 + y: 54.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_D4 + name: opentrons_96_filtertiprack_200ul_D4 + parent: opentrons_96_filtertiprack_200ul + position: + x: 39.531 + y: 45.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_E4 + name: opentrons_96_filtertiprack_200ul_E4 + parent: opentrons_96_filtertiprack_200ul + position: + x: 39.531 + y: 36.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_F4 + name: opentrons_96_filtertiprack_200ul_F4 + parent: opentrons_96_filtertiprack_200ul + position: + x: 39.531 + y: 27.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_G4 + name: opentrons_96_filtertiprack_200ul_G4 + parent: opentrons_96_filtertiprack_200ul + position: + x: 39.531 + y: 18.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_H4 + name: opentrons_96_filtertiprack_200ul_H4 + parent: opentrons_96_filtertiprack_200ul + position: + x: 39.531 + y: 9.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_A5 + name: opentrons_96_filtertiprack_200ul_A5 + parent: opentrons_96_filtertiprack_200ul + position: + x: 48.531 + y: 72.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_B5 + name: opentrons_96_filtertiprack_200ul_B5 + parent: opentrons_96_filtertiprack_200ul + position: + x: 48.531 + y: 63.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_C5 + name: opentrons_96_filtertiprack_200ul_C5 + parent: opentrons_96_filtertiprack_200ul + position: + x: 48.531 + y: 54.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_D5 + name: opentrons_96_filtertiprack_200ul_D5 + parent: opentrons_96_filtertiprack_200ul + position: + x: 48.531 + y: 45.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_E5 + name: opentrons_96_filtertiprack_200ul_E5 + parent: opentrons_96_filtertiprack_200ul + position: + x: 48.531 + y: 36.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_F5 + name: opentrons_96_filtertiprack_200ul_F5 + parent: opentrons_96_filtertiprack_200ul + position: + x: 48.531 + y: 27.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_G5 + name: opentrons_96_filtertiprack_200ul_G5 + parent: opentrons_96_filtertiprack_200ul + position: + x: 48.531 + y: 18.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_H5 + name: opentrons_96_filtertiprack_200ul_H5 + parent: opentrons_96_filtertiprack_200ul + position: + x: 48.531 + y: 9.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_A6 + name: opentrons_96_filtertiprack_200ul_A6 + parent: opentrons_96_filtertiprack_200ul + position: + x: 57.531 + y: 72.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_B6 + name: opentrons_96_filtertiprack_200ul_B6 + parent: opentrons_96_filtertiprack_200ul + position: + x: 57.531 + y: 63.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_C6 + name: opentrons_96_filtertiprack_200ul_C6 + parent: opentrons_96_filtertiprack_200ul + position: + x: 57.531 + y: 54.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_D6 + name: opentrons_96_filtertiprack_200ul_D6 + parent: opentrons_96_filtertiprack_200ul + position: + x: 57.531 + y: 45.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_E6 + name: opentrons_96_filtertiprack_200ul_E6 + parent: opentrons_96_filtertiprack_200ul + position: + x: 57.531 + y: 36.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_F6 + name: opentrons_96_filtertiprack_200ul_F6 + parent: opentrons_96_filtertiprack_200ul + position: + x: 57.531 + y: 27.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_G6 + name: opentrons_96_filtertiprack_200ul_G6 + parent: opentrons_96_filtertiprack_200ul + position: + x: 57.531 + y: 18.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_H6 + name: opentrons_96_filtertiprack_200ul_H6 + parent: opentrons_96_filtertiprack_200ul + position: + x: 57.531 + y: 9.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_A7 + name: opentrons_96_filtertiprack_200ul_A7 + parent: opentrons_96_filtertiprack_200ul + position: + x: 66.531 + y: 72.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_B7 + name: opentrons_96_filtertiprack_200ul_B7 + parent: opentrons_96_filtertiprack_200ul + position: + x: 66.531 + y: 63.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_C7 + name: opentrons_96_filtertiprack_200ul_C7 + parent: opentrons_96_filtertiprack_200ul + position: + x: 66.531 + y: 54.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_D7 + name: opentrons_96_filtertiprack_200ul_D7 + parent: opentrons_96_filtertiprack_200ul + position: + x: 66.531 + y: 45.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_E7 + name: opentrons_96_filtertiprack_200ul_E7 + parent: opentrons_96_filtertiprack_200ul + position: + x: 66.531 + y: 36.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_F7 + name: opentrons_96_filtertiprack_200ul_F7 + parent: opentrons_96_filtertiprack_200ul + position: + x: 66.531 + y: 27.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_G7 + name: opentrons_96_filtertiprack_200ul_G7 + parent: opentrons_96_filtertiprack_200ul + position: + x: 66.531 + y: 18.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_H7 + name: opentrons_96_filtertiprack_200ul_H7 + parent: opentrons_96_filtertiprack_200ul + position: + x: 66.531 + y: 9.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_A8 + name: opentrons_96_filtertiprack_200ul_A8 + parent: opentrons_96_filtertiprack_200ul + position: + x: 75.531 + y: 72.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_B8 + name: opentrons_96_filtertiprack_200ul_B8 + parent: opentrons_96_filtertiprack_200ul + position: + x: 75.531 + y: 63.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_C8 + name: opentrons_96_filtertiprack_200ul_C8 + parent: opentrons_96_filtertiprack_200ul + position: + x: 75.531 + y: 54.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_D8 + name: opentrons_96_filtertiprack_200ul_D8 + parent: opentrons_96_filtertiprack_200ul + position: + x: 75.531 + y: 45.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_E8 + name: opentrons_96_filtertiprack_200ul_E8 + parent: opentrons_96_filtertiprack_200ul + position: + x: 75.531 + y: 36.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_F8 + name: opentrons_96_filtertiprack_200ul_F8 + parent: opentrons_96_filtertiprack_200ul + position: + x: 75.531 + y: 27.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_G8 + name: opentrons_96_filtertiprack_200ul_G8 + parent: opentrons_96_filtertiprack_200ul + position: + x: 75.531 + y: 18.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_H8 + name: opentrons_96_filtertiprack_200ul_H8 + parent: opentrons_96_filtertiprack_200ul + position: + x: 75.531 + y: 9.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_A9 + name: opentrons_96_filtertiprack_200ul_A9 + parent: opentrons_96_filtertiprack_200ul + position: + x: 84.531 + y: 72.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_B9 + name: opentrons_96_filtertiprack_200ul_B9 + parent: opentrons_96_filtertiprack_200ul + position: + x: 84.531 + y: 63.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_C9 + name: opentrons_96_filtertiprack_200ul_C9 + parent: opentrons_96_filtertiprack_200ul + position: + x: 84.531 + y: 54.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_D9 + name: opentrons_96_filtertiprack_200ul_D9 + parent: opentrons_96_filtertiprack_200ul + position: + x: 84.531 + y: 45.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_E9 + name: opentrons_96_filtertiprack_200ul_E9 + parent: opentrons_96_filtertiprack_200ul + position: + x: 84.531 + y: 36.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_F9 + name: opentrons_96_filtertiprack_200ul_F9 + parent: opentrons_96_filtertiprack_200ul + position: + x: 84.531 + y: 27.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_G9 + name: opentrons_96_filtertiprack_200ul_G9 + parent: opentrons_96_filtertiprack_200ul + position: + x: 84.531 + y: 18.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_H9 + name: opentrons_96_filtertiprack_200ul_H9 + parent: opentrons_96_filtertiprack_200ul + position: + x: 84.531 + y: 9.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_A10 + name: opentrons_96_filtertiprack_200ul_A10 + parent: opentrons_96_filtertiprack_200ul + position: + x: 93.531 + y: 72.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_B10 + name: opentrons_96_filtertiprack_200ul_B10 + parent: opentrons_96_filtertiprack_200ul + position: + x: 93.531 + y: 63.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_C10 + name: opentrons_96_filtertiprack_200ul_C10 + parent: opentrons_96_filtertiprack_200ul + position: + x: 93.531 + y: 54.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_D10 + name: opentrons_96_filtertiprack_200ul_D10 + parent: opentrons_96_filtertiprack_200ul + position: + x: 93.531 + y: 45.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_E10 + name: opentrons_96_filtertiprack_200ul_E10 + parent: opentrons_96_filtertiprack_200ul + position: + x: 93.531 + y: 36.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_F10 + name: opentrons_96_filtertiprack_200ul_F10 + parent: opentrons_96_filtertiprack_200ul + position: + x: 93.531 + y: 27.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_G10 + name: opentrons_96_filtertiprack_200ul_G10 + parent: opentrons_96_filtertiprack_200ul + position: + x: 93.531 + y: 18.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_H10 + name: opentrons_96_filtertiprack_200ul_H10 + parent: opentrons_96_filtertiprack_200ul + position: + x: 93.531 + y: 9.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_A11 + name: opentrons_96_filtertiprack_200ul_A11 + parent: opentrons_96_filtertiprack_200ul + position: + x: 102.531 + y: 72.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_B11 + name: opentrons_96_filtertiprack_200ul_B11 + parent: opentrons_96_filtertiprack_200ul + position: + x: 102.531 + y: 63.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_C11 + name: opentrons_96_filtertiprack_200ul_C11 + parent: opentrons_96_filtertiprack_200ul + position: + x: 102.531 + y: 54.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_D11 + name: opentrons_96_filtertiprack_200ul_D11 + parent: opentrons_96_filtertiprack_200ul + position: + x: 102.531 + y: 45.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_E11 + name: opentrons_96_filtertiprack_200ul_E11 + parent: opentrons_96_filtertiprack_200ul + position: + x: 102.531 + y: 36.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_F11 + name: opentrons_96_filtertiprack_200ul_F11 + parent: opentrons_96_filtertiprack_200ul + position: + x: 102.531 + y: 27.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_G11 + name: opentrons_96_filtertiprack_200ul_G11 + parent: opentrons_96_filtertiprack_200ul + position: + x: 102.531 + y: 18.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_H11 + name: opentrons_96_filtertiprack_200ul_H11 + parent: opentrons_96_filtertiprack_200ul + position: + x: 102.531 + y: 9.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_A12 + name: opentrons_96_filtertiprack_200ul_A12 + parent: opentrons_96_filtertiprack_200ul + position: + x: 111.531 + y: 72.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_B12 + name: opentrons_96_filtertiprack_200ul_B12 + parent: opentrons_96_filtertiprack_200ul + position: + x: 111.531 + y: 63.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_C12 + name: opentrons_96_filtertiprack_200ul_C12 + parent: opentrons_96_filtertiprack_200ul + position: + x: 111.531 + y: 54.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_D12 + name: opentrons_96_filtertiprack_200ul_D12 + parent: opentrons_96_filtertiprack_200ul + position: + x: 111.531 + y: 45.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_E12 + name: opentrons_96_filtertiprack_200ul_E12 + parent: opentrons_96_filtertiprack_200ul + position: + x: 111.531 + y: 36.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_F12 + name: opentrons_96_filtertiprack_200ul_F12 + parent: opentrons_96_filtertiprack_200ul + position: + x: 111.531 + y: 27.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_G12 + name: opentrons_96_filtertiprack_200ul_G12 + parent: opentrons_96_filtertiprack_200ul + position: + x: 111.531 + y: 18.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: true + maximal_volume: 200.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_200ul_H12 + name: opentrons_96_filtertiprack_200ul_H12 + parent: opentrons_96_filtertiprack_200ul + position: + x: 111.531 + y: 9.391 + z: 5.39 + sample_id: null + type: container + description: Opentrons 96 filtertiprack 200ul + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tip_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +opentrons_96_filtertiprack_20ul: + category: + - tip_racks + class: + module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_filtertiprack_20ul + type: pylabrobot + config_info: + - children: + - opentrons_96_filtertiprack_20ul_A1 + - opentrons_96_filtertiprack_20ul_B1 + - opentrons_96_filtertiprack_20ul_C1 + - opentrons_96_filtertiprack_20ul_D1 + - opentrons_96_filtertiprack_20ul_E1 + - opentrons_96_filtertiprack_20ul_F1 + - opentrons_96_filtertiprack_20ul_G1 + - opentrons_96_filtertiprack_20ul_H1 + - opentrons_96_filtertiprack_20ul_A2 + - opentrons_96_filtertiprack_20ul_B2 + - opentrons_96_filtertiprack_20ul_C2 + - opentrons_96_filtertiprack_20ul_D2 + - opentrons_96_filtertiprack_20ul_E2 + - opentrons_96_filtertiprack_20ul_F2 + - opentrons_96_filtertiprack_20ul_G2 + - opentrons_96_filtertiprack_20ul_H2 + - opentrons_96_filtertiprack_20ul_A3 + - opentrons_96_filtertiprack_20ul_B3 + - opentrons_96_filtertiprack_20ul_C3 + - opentrons_96_filtertiprack_20ul_D3 + - opentrons_96_filtertiprack_20ul_E3 + - opentrons_96_filtertiprack_20ul_F3 + - opentrons_96_filtertiprack_20ul_G3 + - opentrons_96_filtertiprack_20ul_H3 + - opentrons_96_filtertiprack_20ul_A4 + - opentrons_96_filtertiprack_20ul_B4 + - opentrons_96_filtertiprack_20ul_C4 + - opentrons_96_filtertiprack_20ul_D4 + - opentrons_96_filtertiprack_20ul_E4 + - opentrons_96_filtertiprack_20ul_F4 + - opentrons_96_filtertiprack_20ul_G4 + - opentrons_96_filtertiprack_20ul_H4 + - opentrons_96_filtertiprack_20ul_A5 + - opentrons_96_filtertiprack_20ul_B5 + - opentrons_96_filtertiprack_20ul_C5 + - opentrons_96_filtertiprack_20ul_D5 + - opentrons_96_filtertiprack_20ul_E5 + - opentrons_96_filtertiprack_20ul_F5 + - opentrons_96_filtertiprack_20ul_G5 + - opentrons_96_filtertiprack_20ul_H5 + - opentrons_96_filtertiprack_20ul_A6 + - opentrons_96_filtertiprack_20ul_B6 + - opentrons_96_filtertiprack_20ul_C6 + - opentrons_96_filtertiprack_20ul_D6 + - opentrons_96_filtertiprack_20ul_E6 + - opentrons_96_filtertiprack_20ul_F6 + - opentrons_96_filtertiprack_20ul_G6 + - opentrons_96_filtertiprack_20ul_H6 + - opentrons_96_filtertiprack_20ul_A7 + - opentrons_96_filtertiprack_20ul_B7 + - opentrons_96_filtertiprack_20ul_C7 + - opentrons_96_filtertiprack_20ul_D7 + - opentrons_96_filtertiprack_20ul_E7 + - opentrons_96_filtertiprack_20ul_F7 + - opentrons_96_filtertiprack_20ul_G7 + - opentrons_96_filtertiprack_20ul_H7 + - opentrons_96_filtertiprack_20ul_A8 + - opentrons_96_filtertiprack_20ul_B8 + - opentrons_96_filtertiprack_20ul_C8 + - opentrons_96_filtertiprack_20ul_D8 + - opentrons_96_filtertiprack_20ul_E8 + - opentrons_96_filtertiprack_20ul_F8 + - opentrons_96_filtertiprack_20ul_G8 + - opentrons_96_filtertiprack_20ul_H8 + - opentrons_96_filtertiprack_20ul_A9 + - opentrons_96_filtertiprack_20ul_B9 + - opentrons_96_filtertiprack_20ul_C9 + - opentrons_96_filtertiprack_20ul_D9 + - opentrons_96_filtertiprack_20ul_E9 + - opentrons_96_filtertiprack_20ul_F9 + - opentrons_96_filtertiprack_20ul_G9 + - opentrons_96_filtertiprack_20ul_H9 + - opentrons_96_filtertiprack_20ul_A10 + - opentrons_96_filtertiprack_20ul_B10 + - opentrons_96_filtertiprack_20ul_C10 + - opentrons_96_filtertiprack_20ul_D10 + - opentrons_96_filtertiprack_20ul_E10 + - opentrons_96_filtertiprack_20ul_F10 + - opentrons_96_filtertiprack_20ul_G10 + - opentrons_96_filtertiprack_20ul_H10 + - opentrons_96_filtertiprack_20ul_A11 + - opentrons_96_filtertiprack_20ul_B11 + - opentrons_96_filtertiprack_20ul_C11 + - opentrons_96_filtertiprack_20ul_D11 + - opentrons_96_filtertiprack_20ul_E11 + - opentrons_96_filtertiprack_20ul_F11 + - opentrons_96_filtertiprack_20ul_G11 + - opentrons_96_filtertiprack_20ul_H11 + - opentrons_96_filtertiprack_20ul_A12 + - opentrons_96_filtertiprack_20ul_B12 + - opentrons_96_filtertiprack_20ul_C12 + - opentrons_96_filtertiprack_20ul_D12 + - opentrons_96_filtertiprack_20ul_E12 + - opentrons_96_filtertiprack_20ul_F12 + - opentrons_96_filtertiprack_20ul_G12 + - opentrons_96_filtertiprack_20ul_H12 + class: '' + config: + barcode: null + category: tip_rack + model: Opentrons OT-2 96 Filter Tip Rack 20 µL + ordering: + A1: opentrons_96_filtertiprack_20ul_A1 + B1: opentrons_96_filtertiprack_20ul_B1 + C1: opentrons_96_filtertiprack_20ul_C1 + D1: opentrons_96_filtertiprack_20ul_D1 + E1: opentrons_96_filtertiprack_20ul_E1 + F1: opentrons_96_filtertiprack_20ul_F1 + G1: opentrons_96_filtertiprack_20ul_G1 + H1: opentrons_96_filtertiprack_20ul_H1 + A2: opentrons_96_filtertiprack_20ul_A2 + B2: opentrons_96_filtertiprack_20ul_B2 + C2: opentrons_96_filtertiprack_20ul_C2 + D2: opentrons_96_filtertiprack_20ul_D2 + E2: opentrons_96_filtertiprack_20ul_E2 + F2: opentrons_96_filtertiprack_20ul_F2 + G2: opentrons_96_filtertiprack_20ul_G2 + H2: opentrons_96_filtertiprack_20ul_H2 + A3: opentrons_96_filtertiprack_20ul_A3 + B3: opentrons_96_filtertiprack_20ul_B3 + C3: opentrons_96_filtertiprack_20ul_C3 + D3: opentrons_96_filtertiprack_20ul_D3 + E3: opentrons_96_filtertiprack_20ul_E3 + F3: opentrons_96_filtertiprack_20ul_F3 + G3: opentrons_96_filtertiprack_20ul_G3 + H3: opentrons_96_filtertiprack_20ul_H3 + A4: opentrons_96_filtertiprack_20ul_A4 + B4: opentrons_96_filtertiprack_20ul_B4 + C4: opentrons_96_filtertiprack_20ul_C4 + D4: opentrons_96_filtertiprack_20ul_D4 + E4: opentrons_96_filtertiprack_20ul_E4 + F4: opentrons_96_filtertiprack_20ul_F4 + G4: opentrons_96_filtertiprack_20ul_G4 + H4: opentrons_96_filtertiprack_20ul_H4 + A5: opentrons_96_filtertiprack_20ul_A5 + B5: opentrons_96_filtertiprack_20ul_B5 + C5: opentrons_96_filtertiprack_20ul_C5 + D5: opentrons_96_filtertiprack_20ul_D5 + E5: opentrons_96_filtertiprack_20ul_E5 + F5: opentrons_96_filtertiprack_20ul_F5 + G5: opentrons_96_filtertiprack_20ul_G5 + H5: opentrons_96_filtertiprack_20ul_H5 + A6: opentrons_96_filtertiprack_20ul_A6 + B6: opentrons_96_filtertiprack_20ul_B6 + C6: opentrons_96_filtertiprack_20ul_C6 + D6: opentrons_96_filtertiprack_20ul_D6 + E6: opentrons_96_filtertiprack_20ul_E6 + F6: opentrons_96_filtertiprack_20ul_F6 + G6: opentrons_96_filtertiprack_20ul_G6 + H6: opentrons_96_filtertiprack_20ul_H6 + A7: opentrons_96_filtertiprack_20ul_A7 + B7: opentrons_96_filtertiprack_20ul_B7 + C7: opentrons_96_filtertiprack_20ul_C7 + D7: opentrons_96_filtertiprack_20ul_D7 + E7: opentrons_96_filtertiprack_20ul_E7 + F7: opentrons_96_filtertiprack_20ul_F7 + G7: opentrons_96_filtertiprack_20ul_G7 + H7: opentrons_96_filtertiprack_20ul_H7 + A8: opentrons_96_filtertiprack_20ul_A8 + B8: opentrons_96_filtertiprack_20ul_B8 + C8: opentrons_96_filtertiprack_20ul_C8 + D8: opentrons_96_filtertiprack_20ul_D8 + E8: opentrons_96_filtertiprack_20ul_E8 + F8: opentrons_96_filtertiprack_20ul_F8 + G8: opentrons_96_filtertiprack_20ul_G8 + H8: opentrons_96_filtertiprack_20ul_H8 + A9: opentrons_96_filtertiprack_20ul_A9 + B9: opentrons_96_filtertiprack_20ul_B9 + C9: opentrons_96_filtertiprack_20ul_C9 + D9: opentrons_96_filtertiprack_20ul_D9 + E9: opentrons_96_filtertiprack_20ul_E9 + F9: opentrons_96_filtertiprack_20ul_F9 + G9: opentrons_96_filtertiprack_20ul_G9 + H9: opentrons_96_filtertiprack_20ul_H9 + A10: opentrons_96_filtertiprack_20ul_A10 + B10: opentrons_96_filtertiprack_20ul_B10 + C10: opentrons_96_filtertiprack_20ul_C10 + D10: opentrons_96_filtertiprack_20ul_D10 + E10: opentrons_96_filtertiprack_20ul_E10 + F10: opentrons_96_filtertiprack_20ul_F10 + G10: opentrons_96_filtertiprack_20ul_G10 + H10: opentrons_96_filtertiprack_20ul_H10 + A11: opentrons_96_filtertiprack_20ul_A11 + B11: opentrons_96_filtertiprack_20ul_B11 + C11: opentrons_96_filtertiprack_20ul_C11 + D11: opentrons_96_filtertiprack_20ul_D11 + E11: opentrons_96_filtertiprack_20ul_E11 + F11: opentrons_96_filtertiprack_20ul_F11 + G11: opentrons_96_filtertiprack_20ul_G11 + H11: opentrons_96_filtertiprack_20ul_H11 + A12: opentrons_96_filtertiprack_20ul_A12 + B12: opentrons_96_filtertiprack_20ul_B12 + C12: opentrons_96_filtertiprack_20ul_C12 + D12: opentrons_96_filtertiprack_20ul_D12 + E12: opentrons_96_filtertiprack_20ul_E12 + F12: opentrons_96_filtertiprack_20ul_F12 + G12: opentrons_96_filtertiprack_20ul_G12 + H12: opentrons_96_filtertiprack_20ul_H12 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.48 + size_z: 64.69 + type: TipRack + data: {} + id: opentrons_96_filtertiprack_20ul + name: opentrons_96_filtertiprack_20ul + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_A1 + name: opentrons_96_filtertiprack_20ul_A1 + parent: opentrons_96_filtertiprack_20ul + position: + x: 13.204 + y: 73.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_B1 + name: opentrons_96_filtertiprack_20ul_B1 + parent: opentrons_96_filtertiprack_20ul + position: + x: 13.204 + y: 64.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_C1 + name: opentrons_96_filtertiprack_20ul_C1 + parent: opentrons_96_filtertiprack_20ul + position: + x: 13.204 + y: 55.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_D1 + name: opentrons_96_filtertiprack_20ul_D1 + parent: opentrons_96_filtertiprack_20ul + position: + x: 13.204 + y: 46.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_E1 + name: opentrons_96_filtertiprack_20ul_E1 + parent: opentrons_96_filtertiprack_20ul + position: + x: 13.204 + y: 37.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_F1 + name: opentrons_96_filtertiprack_20ul_F1 + parent: opentrons_96_filtertiprack_20ul + position: + x: 13.204 + y: 28.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_G1 + name: opentrons_96_filtertiprack_20ul_G1 + parent: opentrons_96_filtertiprack_20ul + position: + x: 13.204 + y: 19.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_H1 + name: opentrons_96_filtertiprack_20ul_H1 + parent: opentrons_96_filtertiprack_20ul + position: + x: 13.204 + y: 10.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_A2 + name: opentrons_96_filtertiprack_20ul_A2 + parent: opentrons_96_filtertiprack_20ul + position: + x: 22.204 + y: 73.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_B2 + name: opentrons_96_filtertiprack_20ul_B2 + parent: opentrons_96_filtertiprack_20ul + position: + x: 22.204 + y: 64.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_C2 + name: opentrons_96_filtertiprack_20ul_C2 + parent: opentrons_96_filtertiprack_20ul + position: + x: 22.204 + y: 55.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_D2 + name: opentrons_96_filtertiprack_20ul_D2 + parent: opentrons_96_filtertiprack_20ul + position: + x: 22.204 + y: 46.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_E2 + name: opentrons_96_filtertiprack_20ul_E2 + parent: opentrons_96_filtertiprack_20ul + position: + x: 22.204 + y: 37.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_F2 + name: opentrons_96_filtertiprack_20ul_F2 + parent: opentrons_96_filtertiprack_20ul + position: + x: 22.204 + y: 28.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_G2 + name: opentrons_96_filtertiprack_20ul_G2 + parent: opentrons_96_filtertiprack_20ul + position: + x: 22.204 + y: 19.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_H2 + name: opentrons_96_filtertiprack_20ul_H2 + parent: opentrons_96_filtertiprack_20ul + position: + x: 22.204 + y: 10.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_A3 + name: opentrons_96_filtertiprack_20ul_A3 + parent: opentrons_96_filtertiprack_20ul + position: + x: 31.204 + y: 73.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_B3 + name: opentrons_96_filtertiprack_20ul_B3 + parent: opentrons_96_filtertiprack_20ul + position: + x: 31.204 + y: 64.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_C3 + name: opentrons_96_filtertiprack_20ul_C3 + parent: opentrons_96_filtertiprack_20ul + position: + x: 31.204 + y: 55.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_D3 + name: opentrons_96_filtertiprack_20ul_D3 + parent: opentrons_96_filtertiprack_20ul + position: + x: 31.204 + y: 46.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_E3 + name: opentrons_96_filtertiprack_20ul_E3 + parent: opentrons_96_filtertiprack_20ul + position: + x: 31.204 + y: 37.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_F3 + name: opentrons_96_filtertiprack_20ul_F3 + parent: opentrons_96_filtertiprack_20ul + position: + x: 31.204 + y: 28.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_G3 + name: opentrons_96_filtertiprack_20ul_G3 + parent: opentrons_96_filtertiprack_20ul + position: + x: 31.204 + y: 19.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_H3 + name: opentrons_96_filtertiprack_20ul_H3 + parent: opentrons_96_filtertiprack_20ul + position: + x: 31.204 + y: 10.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_A4 + name: opentrons_96_filtertiprack_20ul_A4 + parent: opentrons_96_filtertiprack_20ul + position: + x: 40.204 + y: 73.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_B4 + name: opentrons_96_filtertiprack_20ul_B4 + parent: opentrons_96_filtertiprack_20ul + position: + x: 40.204 + y: 64.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_C4 + name: opentrons_96_filtertiprack_20ul_C4 + parent: opentrons_96_filtertiprack_20ul + position: + x: 40.204 + y: 55.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_D4 + name: opentrons_96_filtertiprack_20ul_D4 + parent: opentrons_96_filtertiprack_20ul + position: + x: 40.204 + y: 46.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_E4 + name: opentrons_96_filtertiprack_20ul_E4 + parent: opentrons_96_filtertiprack_20ul + position: + x: 40.204 + y: 37.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_F4 + name: opentrons_96_filtertiprack_20ul_F4 + parent: opentrons_96_filtertiprack_20ul + position: + x: 40.204 + y: 28.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_G4 + name: opentrons_96_filtertiprack_20ul_G4 + parent: opentrons_96_filtertiprack_20ul + position: + x: 40.204 + y: 19.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_H4 + name: opentrons_96_filtertiprack_20ul_H4 + parent: opentrons_96_filtertiprack_20ul + position: + x: 40.204 + y: 10.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_A5 + name: opentrons_96_filtertiprack_20ul_A5 + parent: opentrons_96_filtertiprack_20ul + position: + x: 49.204 + y: 73.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_B5 + name: opentrons_96_filtertiprack_20ul_B5 + parent: opentrons_96_filtertiprack_20ul + position: + x: 49.204 + y: 64.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_C5 + name: opentrons_96_filtertiprack_20ul_C5 + parent: opentrons_96_filtertiprack_20ul + position: + x: 49.204 + y: 55.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_D5 + name: opentrons_96_filtertiprack_20ul_D5 + parent: opentrons_96_filtertiprack_20ul + position: + x: 49.204 + y: 46.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_E5 + name: opentrons_96_filtertiprack_20ul_E5 + parent: opentrons_96_filtertiprack_20ul + position: + x: 49.204 + y: 37.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_F5 + name: opentrons_96_filtertiprack_20ul_F5 + parent: opentrons_96_filtertiprack_20ul + position: + x: 49.204 + y: 28.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_G5 + name: opentrons_96_filtertiprack_20ul_G5 + parent: opentrons_96_filtertiprack_20ul + position: + x: 49.204 + y: 19.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_H5 + name: opentrons_96_filtertiprack_20ul_H5 + parent: opentrons_96_filtertiprack_20ul + position: + x: 49.204 + y: 10.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_A6 + name: opentrons_96_filtertiprack_20ul_A6 + parent: opentrons_96_filtertiprack_20ul + position: + x: 58.204 + y: 73.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_B6 + name: opentrons_96_filtertiprack_20ul_B6 + parent: opentrons_96_filtertiprack_20ul + position: + x: 58.204 + y: 64.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_C6 + name: opentrons_96_filtertiprack_20ul_C6 + parent: opentrons_96_filtertiprack_20ul + position: + x: 58.204 + y: 55.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_D6 + name: opentrons_96_filtertiprack_20ul_D6 + parent: opentrons_96_filtertiprack_20ul + position: + x: 58.204 + y: 46.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_E6 + name: opentrons_96_filtertiprack_20ul_E6 + parent: opentrons_96_filtertiprack_20ul + position: + x: 58.204 + y: 37.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_F6 + name: opentrons_96_filtertiprack_20ul_F6 + parent: opentrons_96_filtertiprack_20ul + position: + x: 58.204 + y: 28.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_G6 + name: opentrons_96_filtertiprack_20ul_G6 + parent: opentrons_96_filtertiprack_20ul + position: + x: 58.204 + y: 19.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_H6 + name: opentrons_96_filtertiprack_20ul_H6 + parent: opentrons_96_filtertiprack_20ul + position: + x: 58.204 + y: 10.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_A7 + name: opentrons_96_filtertiprack_20ul_A7 + parent: opentrons_96_filtertiprack_20ul + position: + x: 67.204 + y: 73.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_B7 + name: opentrons_96_filtertiprack_20ul_B7 + parent: opentrons_96_filtertiprack_20ul + position: + x: 67.204 + y: 64.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_C7 + name: opentrons_96_filtertiprack_20ul_C7 + parent: opentrons_96_filtertiprack_20ul + position: + x: 67.204 + y: 55.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_D7 + name: opentrons_96_filtertiprack_20ul_D7 + parent: opentrons_96_filtertiprack_20ul + position: + x: 67.204 + y: 46.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_E7 + name: opentrons_96_filtertiprack_20ul_E7 + parent: opentrons_96_filtertiprack_20ul + position: + x: 67.204 + y: 37.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_F7 + name: opentrons_96_filtertiprack_20ul_F7 + parent: opentrons_96_filtertiprack_20ul + position: + x: 67.204 + y: 28.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_G7 + name: opentrons_96_filtertiprack_20ul_G7 + parent: opentrons_96_filtertiprack_20ul + position: + x: 67.204 + y: 19.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_H7 + name: opentrons_96_filtertiprack_20ul_H7 + parent: opentrons_96_filtertiprack_20ul + position: + x: 67.204 + y: 10.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_A8 + name: opentrons_96_filtertiprack_20ul_A8 + parent: opentrons_96_filtertiprack_20ul + position: + x: 76.204 + y: 73.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_B8 + name: opentrons_96_filtertiprack_20ul_B8 + parent: opentrons_96_filtertiprack_20ul + position: + x: 76.204 + y: 64.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_C8 + name: opentrons_96_filtertiprack_20ul_C8 + parent: opentrons_96_filtertiprack_20ul + position: + x: 76.204 + y: 55.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_D8 + name: opentrons_96_filtertiprack_20ul_D8 + parent: opentrons_96_filtertiprack_20ul + position: + x: 76.204 + y: 46.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_E8 + name: opentrons_96_filtertiprack_20ul_E8 + parent: opentrons_96_filtertiprack_20ul + position: + x: 76.204 + y: 37.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_F8 + name: opentrons_96_filtertiprack_20ul_F8 + parent: opentrons_96_filtertiprack_20ul + position: + x: 76.204 + y: 28.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_G8 + name: opentrons_96_filtertiprack_20ul_G8 + parent: opentrons_96_filtertiprack_20ul + position: + x: 76.204 + y: 19.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_H8 + name: opentrons_96_filtertiprack_20ul_H8 + parent: opentrons_96_filtertiprack_20ul + position: + x: 76.204 + y: 10.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_A9 + name: opentrons_96_filtertiprack_20ul_A9 + parent: opentrons_96_filtertiprack_20ul + position: + x: 85.204 + y: 73.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_B9 + name: opentrons_96_filtertiprack_20ul_B9 + parent: opentrons_96_filtertiprack_20ul + position: + x: 85.204 + y: 64.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_C9 + name: opentrons_96_filtertiprack_20ul_C9 + parent: opentrons_96_filtertiprack_20ul + position: + x: 85.204 + y: 55.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_D9 + name: opentrons_96_filtertiprack_20ul_D9 + parent: opentrons_96_filtertiprack_20ul + position: + x: 85.204 + y: 46.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_E9 + name: opentrons_96_filtertiprack_20ul_E9 + parent: opentrons_96_filtertiprack_20ul + position: + x: 85.204 + y: 37.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_F9 + name: opentrons_96_filtertiprack_20ul_F9 + parent: opentrons_96_filtertiprack_20ul + position: + x: 85.204 + y: 28.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_G9 + name: opentrons_96_filtertiprack_20ul_G9 + parent: opentrons_96_filtertiprack_20ul + position: + x: 85.204 + y: 19.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_H9 + name: opentrons_96_filtertiprack_20ul_H9 + parent: opentrons_96_filtertiprack_20ul + position: + x: 85.204 + y: 10.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_A10 + name: opentrons_96_filtertiprack_20ul_A10 + parent: opentrons_96_filtertiprack_20ul + position: + x: 94.204 + y: 73.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_B10 + name: opentrons_96_filtertiprack_20ul_B10 + parent: opentrons_96_filtertiprack_20ul + position: + x: 94.204 + y: 64.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_C10 + name: opentrons_96_filtertiprack_20ul_C10 + parent: opentrons_96_filtertiprack_20ul + position: + x: 94.204 + y: 55.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_D10 + name: opentrons_96_filtertiprack_20ul_D10 + parent: opentrons_96_filtertiprack_20ul + position: + x: 94.204 + y: 46.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_E10 + name: opentrons_96_filtertiprack_20ul_E10 + parent: opentrons_96_filtertiprack_20ul + position: + x: 94.204 + y: 37.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_F10 + name: opentrons_96_filtertiprack_20ul_F10 + parent: opentrons_96_filtertiprack_20ul + position: + x: 94.204 + y: 28.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_G10 + name: opentrons_96_filtertiprack_20ul_G10 + parent: opentrons_96_filtertiprack_20ul + position: + x: 94.204 + y: 19.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_H10 + name: opentrons_96_filtertiprack_20ul_H10 + parent: opentrons_96_filtertiprack_20ul + position: + x: 94.204 + y: 10.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_A11 + name: opentrons_96_filtertiprack_20ul_A11 + parent: opentrons_96_filtertiprack_20ul + position: + x: 103.204 + y: 73.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_B11 + name: opentrons_96_filtertiprack_20ul_B11 + parent: opentrons_96_filtertiprack_20ul + position: + x: 103.204 + y: 64.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_C11 + name: opentrons_96_filtertiprack_20ul_C11 + parent: opentrons_96_filtertiprack_20ul + position: + x: 103.204 + y: 55.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_D11 + name: opentrons_96_filtertiprack_20ul_D11 + parent: opentrons_96_filtertiprack_20ul + position: + x: 103.204 + y: 46.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_E11 + name: opentrons_96_filtertiprack_20ul_E11 + parent: opentrons_96_filtertiprack_20ul + position: + x: 103.204 + y: 37.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_F11 + name: opentrons_96_filtertiprack_20ul_F11 + parent: opentrons_96_filtertiprack_20ul + position: + x: 103.204 + y: 28.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_G11 + name: opentrons_96_filtertiprack_20ul_G11 + parent: opentrons_96_filtertiprack_20ul + position: + x: 103.204 + y: 19.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_H11 + name: opentrons_96_filtertiprack_20ul_H11 + parent: opentrons_96_filtertiprack_20ul + position: + x: 103.204 + y: 10.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_A12 + name: opentrons_96_filtertiprack_20ul_A12 + parent: opentrons_96_filtertiprack_20ul + position: + x: 112.204 + y: 73.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_B12 + name: opentrons_96_filtertiprack_20ul_B12 + parent: opentrons_96_filtertiprack_20ul + position: + x: 112.204 + y: 64.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_C12 + name: opentrons_96_filtertiprack_20ul_C12 + parent: opentrons_96_filtertiprack_20ul + position: + x: 112.204 + y: 55.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_D12 + name: opentrons_96_filtertiprack_20ul_D12 + parent: opentrons_96_filtertiprack_20ul + position: + x: 112.204 + y: 46.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_E12 + name: opentrons_96_filtertiprack_20ul_E12 + parent: opentrons_96_filtertiprack_20ul + position: + x: 112.204 + y: 37.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_F12 + name: opentrons_96_filtertiprack_20ul_F12 + parent: opentrons_96_filtertiprack_20ul + position: + x: 112.204 + y: 28.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_G12 + name: opentrons_96_filtertiprack_20ul_G12 + parent: opentrons_96_filtertiprack_20ul + position: + x: 112.204 + y: 19.104 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: true + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_filtertiprack_20ul_H12 + name: opentrons_96_filtertiprack_20ul_H12 + parent: opentrons_96_filtertiprack_20ul + position: + x: 112.204 + y: 10.104 + z: 25.49 + sample_id: null + type: container + description: Opentrons 96 filtertiprack 20ul + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tip_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +opentrons_96_tiprack_1000ul: + category: + - tip_racks + class: + module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_tiprack_1000ul + type: pylabrobot + config_info: + - children: + - opentrons_96_tiprack_1000ul_A1 + - opentrons_96_tiprack_1000ul_B1 + - opentrons_96_tiprack_1000ul_C1 + - opentrons_96_tiprack_1000ul_D1 + - opentrons_96_tiprack_1000ul_E1 + - opentrons_96_tiprack_1000ul_F1 + - opentrons_96_tiprack_1000ul_G1 + - opentrons_96_tiprack_1000ul_H1 + - opentrons_96_tiprack_1000ul_A2 + - opentrons_96_tiprack_1000ul_B2 + - opentrons_96_tiprack_1000ul_C2 + - opentrons_96_tiprack_1000ul_D2 + - opentrons_96_tiprack_1000ul_E2 + - opentrons_96_tiprack_1000ul_F2 + - opentrons_96_tiprack_1000ul_G2 + - opentrons_96_tiprack_1000ul_H2 + - opentrons_96_tiprack_1000ul_A3 + - opentrons_96_tiprack_1000ul_B3 + - opentrons_96_tiprack_1000ul_C3 + - opentrons_96_tiprack_1000ul_D3 + - opentrons_96_tiprack_1000ul_E3 + - opentrons_96_tiprack_1000ul_F3 + - opentrons_96_tiprack_1000ul_G3 + - opentrons_96_tiprack_1000ul_H3 + - opentrons_96_tiprack_1000ul_A4 + - opentrons_96_tiprack_1000ul_B4 + - opentrons_96_tiprack_1000ul_C4 + - opentrons_96_tiprack_1000ul_D4 + - opentrons_96_tiprack_1000ul_E4 + - opentrons_96_tiprack_1000ul_F4 + - opentrons_96_tiprack_1000ul_G4 + - opentrons_96_tiprack_1000ul_H4 + - opentrons_96_tiprack_1000ul_A5 + - opentrons_96_tiprack_1000ul_B5 + - opentrons_96_tiprack_1000ul_C5 + - opentrons_96_tiprack_1000ul_D5 + - opentrons_96_tiprack_1000ul_E5 + - opentrons_96_tiprack_1000ul_F5 + - opentrons_96_tiprack_1000ul_G5 + - opentrons_96_tiprack_1000ul_H5 + - opentrons_96_tiprack_1000ul_A6 + - opentrons_96_tiprack_1000ul_B6 + - opentrons_96_tiprack_1000ul_C6 + - opentrons_96_tiprack_1000ul_D6 + - opentrons_96_tiprack_1000ul_E6 + - opentrons_96_tiprack_1000ul_F6 + - opentrons_96_tiprack_1000ul_G6 + - opentrons_96_tiprack_1000ul_H6 + - opentrons_96_tiprack_1000ul_A7 + - opentrons_96_tiprack_1000ul_B7 + - opentrons_96_tiprack_1000ul_C7 + - opentrons_96_tiprack_1000ul_D7 + - opentrons_96_tiprack_1000ul_E7 + - opentrons_96_tiprack_1000ul_F7 + - opentrons_96_tiprack_1000ul_G7 + - opentrons_96_tiprack_1000ul_H7 + - opentrons_96_tiprack_1000ul_A8 + - opentrons_96_tiprack_1000ul_B8 + - opentrons_96_tiprack_1000ul_C8 + - opentrons_96_tiprack_1000ul_D8 + - opentrons_96_tiprack_1000ul_E8 + - opentrons_96_tiprack_1000ul_F8 + - opentrons_96_tiprack_1000ul_G8 + - opentrons_96_tiprack_1000ul_H8 + - opentrons_96_tiprack_1000ul_A9 + - opentrons_96_tiprack_1000ul_B9 + - opentrons_96_tiprack_1000ul_C9 + - opentrons_96_tiprack_1000ul_D9 + - opentrons_96_tiprack_1000ul_E9 + - opentrons_96_tiprack_1000ul_F9 + - opentrons_96_tiprack_1000ul_G9 + - opentrons_96_tiprack_1000ul_H9 + - opentrons_96_tiprack_1000ul_A10 + - opentrons_96_tiprack_1000ul_B10 + - opentrons_96_tiprack_1000ul_C10 + - opentrons_96_tiprack_1000ul_D10 + - opentrons_96_tiprack_1000ul_E10 + - opentrons_96_tiprack_1000ul_F10 + - opentrons_96_tiprack_1000ul_G10 + - opentrons_96_tiprack_1000ul_H10 + - opentrons_96_tiprack_1000ul_A11 + - opentrons_96_tiprack_1000ul_B11 + - opentrons_96_tiprack_1000ul_C11 + - opentrons_96_tiprack_1000ul_D11 + - opentrons_96_tiprack_1000ul_E11 + - opentrons_96_tiprack_1000ul_F11 + - opentrons_96_tiprack_1000ul_G11 + - opentrons_96_tiprack_1000ul_H11 + - opentrons_96_tiprack_1000ul_A12 + - opentrons_96_tiprack_1000ul_B12 + - opentrons_96_tiprack_1000ul_C12 + - opentrons_96_tiprack_1000ul_D12 + - opentrons_96_tiprack_1000ul_E12 + - opentrons_96_tiprack_1000ul_F12 + - opentrons_96_tiprack_1000ul_G12 + - opentrons_96_tiprack_1000ul_H12 + class: '' + config: + barcode: null + category: tip_rack + model: Opentrons OT-2 96 Tip Rack 1000 µL + ordering: + A1: opentrons_96_tiprack_1000ul_A1 + B1: opentrons_96_tiprack_1000ul_B1 + C1: opentrons_96_tiprack_1000ul_C1 + D1: opentrons_96_tiprack_1000ul_D1 + E1: opentrons_96_tiprack_1000ul_E1 + F1: opentrons_96_tiprack_1000ul_F1 + G1: opentrons_96_tiprack_1000ul_G1 + H1: opentrons_96_tiprack_1000ul_H1 + A2: opentrons_96_tiprack_1000ul_A2 + B2: opentrons_96_tiprack_1000ul_B2 + C2: opentrons_96_tiprack_1000ul_C2 + D2: opentrons_96_tiprack_1000ul_D2 + E2: opentrons_96_tiprack_1000ul_E2 + F2: opentrons_96_tiprack_1000ul_F2 + G2: opentrons_96_tiprack_1000ul_G2 + H2: opentrons_96_tiprack_1000ul_H2 + A3: opentrons_96_tiprack_1000ul_A3 + B3: opentrons_96_tiprack_1000ul_B3 + C3: opentrons_96_tiprack_1000ul_C3 + D3: opentrons_96_tiprack_1000ul_D3 + E3: opentrons_96_tiprack_1000ul_E3 + F3: opentrons_96_tiprack_1000ul_F3 + G3: opentrons_96_tiprack_1000ul_G3 + H3: opentrons_96_tiprack_1000ul_H3 + A4: opentrons_96_tiprack_1000ul_A4 + B4: opentrons_96_tiprack_1000ul_B4 + C4: opentrons_96_tiprack_1000ul_C4 + D4: opentrons_96_tiprack_1000ul_D4 + E4: opentrons_96_tiprack_1000ul_E4 + F4: opentrons_96_tiprack_1000ul_F4 + G4: opentrons_96_tiprack_1000ul_G4 + H4: opentrons_96_tiprack_1000ul_H4 + A5: opentrons_96_tiprack_1000ul_A5 + B5: opentrons_96_tiprack_1000ul_B5 + C5: opentrons_96_tiprack_1000ul_C5 + D5: opentrons_96_tiprack_1000ul_D5 + E5: opentrons_96_tiprack_1000ul_E5 + F5: opentrons_96_tiprack_1000ul_F5 + G5: opentrons_96_tiprack_1000ul_G5 + H5: opentrons_96_tiprack_1000ul_H5 + A6: opentrons_96_tiprack_1000ul_A6 + B6: opentrons_96_tiprack_1000ul_B6 + C6: opentrons_96_tiprack_1000ul_C6 + D6: opentrons_96_tiprack_1000ul_D6 + E6: opentrons_96_tiprack_1000ul_E6 + F6: opentrons_96_tiprack_1000ul_F6 + G6: opentrons_96_tiprack_1000ul_G6 + H6: opentrons_96_tiprack_1000ul_H6 + A7: opentrons_96_tiprack_1000ul_A7 + B7: opentrons_96_tiprack_1000ul_B7 + C7: opentrons_96_tiprack_1000ul_C7 + D7: opentrons_96_tiprack_1000ul_D7 + E7: opentrons_96_tiprack_1000ul_E7 + F7: opentrons_96_tiprack_1000ul_F7 + G7: opentrons_96_tiprack_1000ul_G7 + H7: opentrons_96_tiprack_1000ul_H7 + A8: opentrons_96_tiprack_1000ul_A8 + B8: opentrons_96_tiprack_1000ul_B8 + C8: opentrons_96_tiprack_1000ul_C8 + D8: opentrons_96_tiprack_1000ul_D8 + E8: opentrons_96_tiprack_1000ul_E8 + F8: opentrons_96_tiprack_1000ul_F8 + G8: opentrons_96_tiprack_1000ul_G8 + H8: opentrons_96_tiprack_1000ul_H8 + A9: opentrons_96_tiprack_1000ul_A9 + B9: opentrons_96_tiprack_1000ul_B9 + C9: opentrons_96_tiprack_1000ul_C9 + D9: opentrons_96_tiprack_1000ul_D9 + E9: opentrons_96_tiprack_1000ul_E9 + F9: opentrons_96_tiprack_1000ul_F9 + G9: opentrons_96_tiprack_1000ul_G9 + H9: opentrons_96_tiprack_1000ul_H9 + A10: opentrons_96_tiprack_1000ul_A10 + B10: opentrons_96_tiprack_1000ul_B10 + C10: opentrons_96_tiprack_1000ul_C10 + D10: opentrons_96_tiprack_1000ul_D10 + E10: opentrons_96_tiprack_1000ul_E10 + F10: opentrons_96_tiprack_1000ul_F10 + G10: opentrons_96_tiprack_1000ul_G10 + H10: opentrons_96_tiprack_1000ul_H10 + A11: opentrons_96_tiprack_1000ul_A11 + B11: opentrons_96_tiprack_1000ul_B11 + C11: opentrons_96_tiprack_1000ul_C11 + D11: opentrons_96_tiprack_1000ul_D11 + E11: opentrons_96_tiprack_1000ul_E11 + F11: opentrons_96_tiprack_1000ul_F11 + G11: opentrons_96_tiprack_1000ul_G11 + H11: opentrons_96_tiprack_1000ul_H11 + A12: opentrons_96_tiprack_1000ul_A12 + B12: opentrons_96_tiprack_1000ul_B12 + C12: opentrons_96_tiprack_1000ul_C12 + D12: opentrons_96_tiprack_1000ul_D12 + E12: opentrons_96_tiprack_1000ul_E12 + F12: opentrons_96_tiprack_1000ul_F12 + G12: opentrons_96_tiprack_1000ul_G12 + H12: opentrons_96_tiprack_1000ul_H12 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.48 + size_z: 97.47 + type: TipRack + data: {} + id: opentrons_96_tiprack_1000ul + name: opentrons_96_tiprack_1000ul + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_A1 + name: opentrons_96_tiprack_1000ul_A1 + parent: opentrons_96_tiprack_1000ul + position: + x: 11.824 + y: 71.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_B1 + name: opentrons_96_tiprack_1000ul_B1 + parent: opentrons_96_tiprack_1000ul + position: + x: 11.824 + y: 62.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_C1 + name: opentrons_96_tiprack_1000ul_C1 + parent: opentrons_96_tiprack_1000ul + position: + x: 11.824 + y: 53.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_D1 + name: opentrons_96_tiprack_1000ul_D1 + parent: opentrons_96_tiprack_1000ul + position: + x: 11.824 + y: 44.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_E1 + name: opentrons_96_tiprack_1000ul_E1 + parent: opentrons_96_tiprack_1000ul + position: + x: 11.824 + y: 35.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_F1 + name: opentrons_96_tiprack_1000ul_F1 + parent: opentrons_96_tiprack_1000ul + position: + x: 11.824 + y: 26.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_G1 + name: opentrons_96_tiprack_1000ul_G1 + parent: opentrons_96_tiprack_1000ul + position: + x: 11.824 + y: 17.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_H1 + name: opentrons_96_tiprack_1000ul_H1 + parent: opentrons_96_tiprack_1000ul + position: + x: 11.824 + y: 8.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_A2 + name: opentrons_96_tiprack_1000ul_A2 + parent: opentrons_96_tiprack_1000ul + position: + x: 20.824 + y: 71.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_B2 + name: opentrons_96_tiprack_1000ul_B2 + parent: opentrons_96_tiprack_1000ul + position: + x: 20.824 + y: 62.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_C2 + name: opentrons_96_tiprack_1000ul_C2 + parent: opentrons_96_tiprack_1000ul + position: + x: 20.824 + y: 53.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_D2 + name: opentrons_96_tiprack_1000ul_D2 + parent: opentrons_96_tiprack_1000ul + position: + x: 20.824 + y: 44.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_E2 + name: opentrons_96_tiprack_1000ul_E2 + parent: opentrons_96_tiprack_1000ul + position: + x: 20.824 + y: 35.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_F2 + name: opentrons_96_tiprack_1000ul_F2 + parent: opentrons_96_tiprack_1000ul + position: + x: 20.824 + y: 26.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_G2 + name: opentrons_96_tiprack_1000ul_G2 + parent: opentrons_96_tiprack_1000ul + position: + x: 20.824 + y: 17.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_H2 + name: opentrons_96_tiprack_1000ul_H2 + parent: opentrons_96_tiprack_1000ul + position: + x: 20.824 + y: 8.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_A3 + name: opentrons_96_tiprack_1000ul_A3 + parent: opentrons_96_tiprack_1000ul + position: + x: 29.824 + y: 71.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_B3 + name: opentrons_96_tiprack_1000ul_B3 + parent: opentrons_96_tiprack_1000ul + position: + x: 29.824 + y: 62.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_C3 + name: opentrons_96_tiprack_1000ul_C3 + parent: opentrons_96_tiprack_1000ul + position: + x: 29.824 + y: 53.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_D3 + name: opentrons_96_tiprack_1000ul_D3 + parent: opentrons_96_tiprack_1000ul + position: + x: 29.824 + y: 44.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_E3 + name: opentrons_96_tiprack_1000ul_E3 + parent: opentrons_96_tiprack_1000ul + position: + x: 29.824 + y: 35.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_F3 + name: opentrons_96_tiprack_1000ul_F3 + parent: opentrons_96_tiprack_1000ul + position: + x: 29.824 + y: 26.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_G3 + name: opentrons_96_tiprack_1000ul_G3 + parent: opentrons_96_tiprack_1000ul + position: + x: 29.824 + y: 17.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_H3 + name: opentrons_96_tiprack_1000ul_H3 + parent: opentrons_96_tiprack_1000ul + position: + x: 29.824 + y: 8.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_A4 + name: opentrons_96_tiprack_1000ul_A4 + parent: opentrons_96_tiprack_1000ul + position: + x: 38.824 + y: 71.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_B4 + name: opentrons_96_tiprack_1000ul_B4 + parent: opentrons_96_tiprack_1000ul + position: + x: 38.824 + y: 62.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_C4 + name: opentrons_96_tiprack_1000ul_C4 + parent: opentrons_96_tiprack_1000ul + position: + x: 38.824 + y: 53.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_D4 + name: opentrons_96_tiprack_1000ul_D4 + parent: opentrons_96_tiprack_1000ul + position: + x: 38.824 + y: 44.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_E4 + name: opentrons_96_tiprack_1000ul_E4 + parent: opentrons_96_tiprack_1000ul + position: + x: 38.824 + y: 35.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_F4 + name: opentrons_96_tiprack_1000ul_F4 + parent: opentrons_96_tiprack_1000ul + position: + x: 38.824 + y: 26.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_G4 + name: opentrons_96_tiprack_1000ul_G4 + parent: opentrons_96_tiprack_1000ul + position: + x: 38.824 + y: 17.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_H4 + name: opentrons_96_tiprack_1000ul_H4 + parent: opentrons_96_tiprack_1000ul + position: + x: 38.824 + y: 8.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_A5 + name: opentrons_96_tiprack_1000ul_A5 + parent: opentrons_96_tiprack_1000ul + position: + x: 47.824 + y: 71.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_B5 + name: opentrons_96_tiprack_1000ul_B5 + parent: opentrons_96_tiprack_1000ul + position: + x: 47.824 + y: 62.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_C5 + name: opentrons_96_tiprack_1000ul_C5 + parent: opentrons_96_tiprack_1000ul + position: + x: 47.824 + y: 53.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_D5 + name: opentrons_96_tiprack_1000ul_D5 + parent: opentrons_96_tiprack_1000ul + position: + x: 47.824 + y: 44.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_E5 + name: opentrons_96_tiprack_1000ul_E5 + parent: opentrons_96_tiprack_1000ul + position: + x: 47.824 + y: 35.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_F5 + name: opentrons_96_tiprack_1000ul_F5 + parent: opentrons_96_tiprack_1000ul + position: + x: 47.824 + y: 26.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_G5 + name: opentrons_96_tiprack_1000ul_G5 + parent: opentrons_96_tiprack_1000ul + position: + x: 47.824 + y: 17.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_H5 + name: opentrons_96_tiprack_1000ul_H5 + parent: opentrons_96_tiprack_1000ul + position: + x: 47.824 + y: 8.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_A6 + name: opentrons_96_tiprack_1000ul_A6 + parent: opentrons_96_tiprack_1000ul + position: + x: 56.824 + y: 71.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_B6 + name: opentrons_96_tiprack_1000ul_B6 + parent: opentrons_96_tiprack_1000ul + position: + x: 56.824 + y: 62.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_C6 + name: opentrons_96_tiprack_1000ul_C6 + parent: opentrons_96_tiprack_1000ul + position: + x: 56.824 + y: 53.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_D6 + name: opentrons_96_tiprack_1000ul_D6 + parent: opentrons_96_tiprack_1000ul + position: + x: 56.824 + y: 44.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_E6 + name: opentrons_96_tiprack_1000ul_E6 + parent: opentrons_96_tiprack_1000ul + position: + x: 56.824 + y: 35.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_F6 + name: opentrons_96_tiprack_1000ul_F6 + parent: opentrons_96_tiprack_1000ul + position: + x: 56.824 + y: 26.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_G6 + name: opentrons_96_tiprack_1000ul_G6 + parent: opentrons_96_tiprack_1000ul + position: + x: 56.824 + y: 17.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_H6 + name: opentrons_96_tiprack_1000ul_H6 + parent: opentrons_96_tiprack_1000ul + position: + x: 56.824 + y: 8.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_A7 + name: opentrons_96_tiprack_1000ul_A7 + parent: opentrons_96_tiprack_1000ul + position: + x: 65.824 + y: 71.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_B7 + name: opentrons_96_tiprack_1000ul_B7 + parent: opentrons_96_tiprack_1000ul + position: + x: 65.824 + y: 62.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_C7 + name: opentrons_96_tiprack_1000ul_C7 + parent: opentrons_96_tiprack_1000ul + position: + x: 65.824 + y: 53.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_D7 + name: opentrons_96_tiprack_1000ul_D7 + parent: opentrons_96_tiprack_1000ul + position: + x: 65.824 + y: 44.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_E7 + name: opentrons_96_tiprack_1000ul_E7 + parent: opentrons_96_tiprack_1000ul + position: + x: 65.824 + y: 35.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_F7 + name: opentrons_96_tiprack_1000ul_F7 + parent: opentrons_96_tiprack_1000ul + position: + x: 65.824 + y: 26.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_G7 + name: opentrons_96_tiprack_1000ul_G7 + parent: opentrons_96_tiprack_1000ul + position: + x: 65.824 + y: 17.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_H7 + name: opentrons_96_tiprack_1000ul_H7 + parent: opentrons_96_tiprack_1000ul + position: + x: 65.824 + y: 8.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_A8 + name: opentrons_96_tiprack_1000ul_A8 + parent: opentrons_96_tiprack_1000ul + position: + x: 74.824 + y: 71.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_B8 + name: opentrons_96_tiprack_1000ul_B8 + parent: opentrons_96_tiprack_1000ul + position: + x: 74.824 + y: 62.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_C8 + name: opentrons_96_tiprack_1000ul_C8 + parent: opentrons_96_tiprack_1000ul + position: + x: 74.824 + y: 53.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_D8 + name: opentrons_96_tiprack_1000ul_D8 + parent: opentrons_96_tiprack_1000ul + position: + x: 74.824 + y: 44.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_E8 + name: opentrons_96_tiprack_1000ul_E8 + parent: opentrons_96_tiprack_1000ul + position: + x: 74.824 + y: 35.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_F8 + name: opentrons_96_tiprack_1000ul_F8 + parent: opentrons_96_tiprack_1000ul + position: + x: 74.824 + y: 26.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_G8 + name: opentrons_96_tiprack_1000ul_G8 + parent: opentrons_96_tiprack_1000ul + position: + x: 74.824 + y: 17.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_H8 + name: opentrons_96_tiprack_1000ul_H8 + parent: opentrons_96_tiprack_1000ul + position: + x: 74.824 + y: 8.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_A9 + name: opentrons_96_tiprack_1000ul_A9 + parent: opentrons_96_tiprack_1000ul + position: + x: 83.824 + y: 71.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_B9 + name: opentrons_96_tiprack_1000ul_B9 + parent: opentrons_96_tiprack_1000ul + position: + x: 83.824 + y: 62.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_C9 + name: opentrons_96_tiprack_1000ul_C9 + parent: opentrons_96_tiprack_1000ul + position: + x: 83.824 + y: 53.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_D9 + name: opentrons_96_tiprack_1000ul_D9 + parent: opentrons_96_tiprack_1000ul + position: + x: 83.824 + y: 44.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_E9 + name: opentrons_96_tiprack_1000ul_E9 + parent: opentrons_96_tiprack_1000ul + position: + x: 83.824 + y: 35.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_F9 + name: opentrons_96_tiprack_1000ul_F9 + parent: opentrons_96_tiprack_1000ul + position: + x: 83.824 + y: 26.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_G9 + name: opentrons_96_tiprack_1000ul_G9 + parent: opentrons_96_tiprack_1000ul + position: + x: 83.824 + y: 17.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_H9 + name: opentrons_96_tiprack_1000ul_H9 + parent: opentrons_96_tiprack_1000ul + position: + x: 83.824 + y: 8.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_A10 + name: opentrons_96_tiprack_1000ul_A10 + parent: opentrons_96_tiprack_1000ul + position: + x: 92.824 + y: 71.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_B10 + name: opentrons_96_tiprack_1000ul_B10 + parent: opentrons_96_tiprack_1000ul + position: + x: 92.824 + y: 62.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_C10 + name: opentrons_96_tiprack_1000ul_C10 + parent: opentrons_96_tiprack_1000ul + position: + x: 92.824 + y: 53.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_D10 + name: opentrons_96_tiprack_1000ul_D10 + parent: opentrons_96_tiprack_1000ul + position: + x: 92.824 + y: 44.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_E10 + name: opentrons_96_tiprack_1000ul_E10 + parent: opentrons_96_tiprack_1000ul + position: + x: 92.824 + y: 35.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_F10 + name: opentrons_96_tiprack_1000ul_F10 + parent: opentrons_96_tiprack_1000ul + position: + x: 92.824 + y: 26.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_G10 + name: opentrons_96_tiprack_1000ul_G10 + parent: opentrons_96_tiprack_1000ul + position: + x: 92.824 + y: 17.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_H10 + name: opentrons_96_tiprack_1000ul_H10 + parent: opentrons_96_tiprack_1000ul + position: + x: 92.824 + y: 8.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_A11 + name: opentrons_96_tiprack_1000ul_A11 + parent: opentrons_96_tiprack_1000ul + position: + x: 101.824 + y: 71.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_B11 + name: opentrons_96_tiprack_1000ul_B11 + parent: opentrons_96_tiprack_1000ul + position: + x: 101.824 + y: 62.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_C11 + name: opentrons_96_tiprack_1000ul_C11 + parent: opentrons_96_tiprack_1000ul + position: + x: 101.824 + y: 53.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_D11 + name: opentrons_96_tiprack_1000ul_D11 + parent: opentrons_96_tiprack_1000ul + position: + x: 101.824 + y: 44.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_E11 + name: opentrons_96_tiprack_1000ul_E11 + parent: opentrons_96_tiprack_1000ul + position: + x: 101.824 + y: 35.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_F11 + name: opentrons_96_tiprack_1000ul_F11 + parent: opentrons_96_tiprack_1000ul + position: + x: 101.824 + y: 26.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_G11 + name: opentrons_96_tiprack_1000ul_G11 + parent: opentrons_96_tiprack_1000ul + position: + x: 101.824 + y: 17.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_H11 + name: opentrons_96_tiprack_1000ul_H11 + parent: opentrons_96_tiprack_1000ul + position: + x: 101.824 + y: 8.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_A12 + name: opentrons_96_tiprack_1000ul_A12 + parent: opentrons_96_tiprack_1000ul + position: + x: 110.824 + y: 71.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_B12 + name: opentrons_96_tiprack_1000ul_B12 + parent: opentrons_96_tiprack_1000ul + position: + x: 110.824 + y: 62.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_C12 + name: opentrons_96_tiprack_1000ul_C12 + parent: opentrons_96_tiprack_1000ul + position: + x: 110.824 + y: 53.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_D12 + name: opentrons_96_tiprack_1000ul_D12 + parent: opentrons_96_tiprack_1000ul + position: + x: 110.824 + y: 44.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_E12 + name: opentrons_96_tiprack_1000ul_E12 + parent: opentrons_96_tiprack_1000ul + position: + x: 110.824 + y: 35.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_F12 + name: opentrons_96_tiprack_1000ul_F12 + parent: opentrons_96_tiprack_1000ul + position: + x: 110.824 + y: 26.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_G12 + name: opentrons_96_tiprack_1000ul_G12 + parent: opentrons_96_tiprack_1000ul + position: + x: 110.824 + y: 17.684 + z: 9.47 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 5.112 + size_y: 5.112 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip: + fitting_depth: 7.95 + has_filter: false + maximal_volume: 1000.0 + total_tip_length: 88 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_1000ul_H12 + name: opentrons_96_tiprack_1000ul_H12 + parent: opentrons_96_tiprack_1000ul + position: + x: 110.824 + y: 8.684 + z: 9.47 + sample_id: null + type: container + description: Opentrons 96 tiprack 1000ul + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tip_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +opentrons_96_tiprack_10ul: + category: + - tip_racks + class: + module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_tiprack_10ul + type: pylabrobot + config_info: + - children: + - opentrons_96_tiprack_10ul_A1 + - opentrons_96_tiprack_10ul_B1 + - opentrons_96_tiprack_10ul_C1 + - opentrons_96_tiprack_10ul_D1 + - opentrons_96_tiprack_10ul_E1 + - opentrons_96_tiprack_10ul_F1 + - opentrons_96_tiprack_10ul_G1 + - opentrons_96_tiprack_10ul_H1 + - opentrons_96_tiprack_10ul_A2 + - opentrons_96_tiprack_10ul_B2 + - opentrons_96_tiprack_10ul_C2 + - opentrons_96_tiprack_10ul_D2 + - opentrons_96_tiprack_10ul_E2 + - opentrons_96_tiprack_10ul_F2 + - opentrons_96_tiprack_10ul_G2 + - opentrons_96_tiprack_10ul_H2 + - opentrons_96_tiprack_10ul_A3 + - opentrons_96_tiprack_10ul_B3 + - opentrons_96_tiprack_10ul_C3 + - opentrons_96_tiprack_10ul_D3 + - opentrons_96_tiprack_10ul_E3 + - opentrons_96_tiprack_10ul_F3 + - opentrons_96_tiprack_10ul_G3 + - opentrons_96_tiprack_10ul_H3 + - opentrons_96_tiprack_10ul_A4 + - opentrons_96_tiprack_10ul_B4 + - opentrons_96_tiprack_10ul_C4 + - opentrons_96_tiprack_10ul_D4 + - opentrons_96_tiprack_10ul_E4 + - opentrons_96_tiprack_10ul_F4 + - opentrons_96_tiprack_10ul_G4 + - opentrons_96_tiprack_10ul_H4 + - opentrons_96_tiprack_10ul_A5 + - opentrons_96_tiprack_10ul_B5 + - opentrons_96_tiprack_10ul_C5 + - opentrons_96_tiprack_10ul_D5 + - opentrons_96_tiprack_10ul_E5 + - opentrons_96_tiprack_10ul_F5 + - opentrons_96_tiprack_10ul_G5 + - opentrons_96_tiprack_10ul_H5 + - opentrons_96_tiprack_10ul_A6 + - opentrons_96_tiprack_10ul_B6 + - opentrons_96_tiprack_10ul_C6 + - opentrons_96_tiprack_10ul_D6 + - opentrons_96_tiprack_10ul_E6 + - opentrons_96_tiprack_10ul_F6 + - opentrons_96_tiprack_10ul_G6 + - opentrons_96_tiprack_10ul_H6 + - opentrons_96_tiprack_10ul_A7 + - opentrons_96_tiprack_10ul_B7 + - opentrons_96_tiprack_10ul_C7 + - opentrons_96_tiprack_10ul_D7 + - opentrons_96_tiprack_10ul_E7 + - opentrons_96_tiprack_10ul_F7 + - opentrons_96_tiprack_10ul_G7 + - opentrons_96_tiprack_10ul_H7 + - opentrons_96_tiprack_10ul_A8 + - opentrons_96_tiprack_10ul_B8 + - opentrons_96_tiprack_10ul_C8 + - opentrons_96_tiprack_10ul_D8 + - opentrons_96_tiprack_10ul_E8 + - opentrons_96_tiprack_10ul_F8 + - opentrons_96_tiprack_10ul_G8 + - opentrons_96_tiprack_10ul_H8 + - opentrons_96_tiprack_10ul_A9 + - opentrons_96_tiprack_10ul_B9 + - opentrons_96_tiprack_10ul_C9 + - opentrons_96_tiprack_10ul_D9 + - opentrons_96_tiprack_10ul_E9 + - opentrons_96_tiprack_10ul_F9 + - opentrons_96_tiprack_10ul_G9 + - opentrons_96_tiprack_10ul_H9 + - opentrons_96_tiprack_10ul_A10 + - opentrons_96_tiprack_10ul_B10 + - opentrons_96_tiprack_10ul_C10 + - opentrons_96_tiprack_10ul_D10 + - opentrons_96_tiprack_10ul_E10 + - opentrons_96_tiprack_10ul_F10 + - opentrons_96_tiprack_10ul_G10 + - opentrons_96_tiprack_10ul_H10 + - opentrons_96_tiprack_10ul_A11 + - opentrons_96_tiprack_10ul_B11 + - opentrons_96_tiprack_10ul_C11 + - opentrons_96_tiprack_10ul_D11 + - opentrons_96_tiprack_10ul_E11 + - opentrons_96_tiprack_10ul_F11 + - opentrons_96_tiprack_10ul_G11 + - opentrons_96_tiprack_10ul_H11 + - opentrons_96_tiprack_10ul_A12 + - opentrons_96_tiprack_10ul_B12 + - opentrons_96_tiprack_10ul_C12 + - opentrons_96_tiprack_10ul_D12 + - opentrons_96_tiprack_10ul_E12 + - opentrons_96_tiprack_10ul_F12 + - opentrons_96_tiprack_10ul_G12 + - opentrons_96_tiprack_10ul_H12 + class: '' + config: + barcode: null + category: tip_rack + model: Opentrons OT-2 96 Tip Rack 10 µL + ordering: + A1: opentrons_96_tiprack_10ul_A1 + B1: opentrons_96_tiprack_10ul_B1 + C1: opentrons_96_tiprack_10ul_C1 + D1: opentrons_96_tiprack_10ul_D1 + E1: opentrons_96_tiprack_10ul_E1 + F1: opentrons_96_tiprack_10ul_F1 + G1: opentrons_96_tiprack_10ul_G1 + H1: opentrons_96_tiprack_10ul_H1 + A2: opentrons_96_tiprack_10ul_A2 + B2: opentrons_96_tiprack_10ul_B2 + C2: opentrons_96_tiprack_10ul_C2 + D2: opentrons_96_tiprack_10ul_D2 + E2: opentrons_96_tiprack_10ul_E2 + F2: opentrons_96_tiprack_10ul_F2 + G2: opentrons_96_tiprack_10ul_G2 + H2: opentrons_96_tiprack_10ul_H2 + A3: opentrons_96_tiprack_10ul_A3 + B3: opentrons_96_tiprack_10ul_B3 + C3: opentrons_96_tiprack_10ul_C3 + D3: opentrons_96_tiprack_10ul_D3 + E3: opentrons_96_tiprack_10ul_E3 + F3: opentrons_96_tiprack_10ul_F3 + G3: opentrons_96_tiprack_10ul_G3 + H3: opentrons_96_tiprack_10ul_H3 + A4: opentrons_96_tiprack_10ul_A4 + B4: opentrons_96_tiprack_10ul_B4 + C4: opentrons_96_tiprack_10ul_C4 + D4: opentrons_96_tiprack_10ul_D4 + E4: opentrons_96_tiprack_10ul_E4 + F4: opentrons_96_tiprack_10ul_F4 + G4: opentrons_96_tiprack_10ul_G4 + H4: opentrons_96_tiprack_10ul_H4 + A5: opentrons_96_tiprack_10ul_A5 + B5: opentrons_96_tiprack_10ul_B5 + C5: opentrons_96_tiprack_10ul_C5 + D5: opentrons_96_tiprack_10ul_D5 + E5: opentrons_96_tiprack_10ul_E5 + F5: opentrons_96_tiprack_10ul_F5 + G5: opentrons_96_tiprack_10ul_G5 + H5: opentrons_96_tiprack_10ul_H5 + A6: opentrons_96_tiprack_10ul_A6 + B6: opentrons_96_tiprack_10ul_B6 + C6: opentrons_96_tiprack_10ul_C6 + D6: opentrons_96_tiprack_10ul_D6 + E6: opentrons_96_tiprack_10ul_E6 + F6: opentrons_96_tiprack_10ul_F6 + G6: opentrons_96_tiprack_10ul_G6 + H6: opentrons_96_tiprack_10ul_H6 + A7: opentrons_96_tiprack_10ul_A7 + B7: opentrons_96_tiprack_10ul_B7 + C7: opentrons_96_tiprack_10ul_C7 + D7: opentrons_96_tiprack_10ul_D7 + E7: opentrons_96_tiprack_10ul_E7 + F7: opentrons_96_tiprack_10ul_F7 + G7: opentrons_96_tiprack_10ul_G7 + H7: opentrons_96_tiprack_10ul_H7 + A8: opentrons_96_tiprack_10ul_A8 + B8: opentrons_96_tiprack_10ul_B8 + C8: opentrons_96_tiprack_10ul_C8 + D8: opentrons_96_tiprack_10ul_D8 + E8: opentrons_96_tiprack_10ul_E8 + F8: opentrons_96_tiprack_10ul_F8 + G8: opentrons_96_tiprack_10ul_G8 + H8: opentrons_96_tiprack_10ul_H8 + A9: opentrons_96_tiprack_10ul_A9 + B9: opentrons_96_tiprack_10ul_B9 + C9: opentrons_96_tiprack_10ul_C9 + D9: opentrons_96_tiprack_10ul_D9 + E9: opentrons_96_tiprack_10ul_E9 + F9: opentrons_96_tiprack_10ul_F9 + G9: opentrons_96_tiprack_10ul_G9 + H9: opentrons_96_tiprack_10ul_H9 + A10: opentrons_96_tiprack_10ul_A10 + B10: opentrons_96_tiprack_10ul_B10 + C10: opentrons_96_tiprack_10ul_C10 + D10: opentrons_96_tiprack_10ul_D10 + E10: opentrons_96_tiprack_10ul_E10 + F10: opentrons_96_tiprack_10ul_F10 + G10: opentrons_96_tiprack_10ul_G10 + H10: opentrons_96_tiprack_10ul_H10 + A11: opentrons_96_tiprack_10ul_A11 + B11: opentrons_96_tiprack_10ul_B11 + C11: opentrons_96_tiprack_10ul_C11 + D11: opentrons_96_tiprack_10ul_D11 + E11: opentrons_96_tiprack_10ul_E11 + F11: opentrons_96_tiprack_10ul_F11 + G11: opentrons_96_tiprack_10ul_G11 + H11: opentrons_96_tiprack_10ul_H11 + A12: opentrons_96_tiprack_10ul_A12 + B12: opentrons_96_tiprack_10ul_B12 + C12: opentrons_96_tiprack_10ul_C12 + D12: opentrons_96_tiprack_10ul_D12 + E12: opentrons_96_tiprack_10ul_E12 + F12: opentrons_96_tiprack_10ul_F12 + G12: opentrons_96_tiprack_10ul_G12 + H12: opentrons_96_tiprack_10ul_H12 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.48 + size_z: 64.69 + type: TipRack + data: {} + id: opentrons_96_tiprack_10ul + name: opentrons_96_tiprack_10ul + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_A1 + name: opentrons_96_tiprack_10ul_A1 + parent: opentrons_96_tiprack_10ul + position: + x: 13.224 + y: 73.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_B1 + name: opentrons_96_tiprack_10ul_B1 + parent: opentrons_96_tiprack_10ul + position: + x: 13.224 + y: 64.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_C1 + name: opentrons_96_tiprack_10ul_C1 + parent: opentrons_96_tiprack_10ul + position: + x: 13.224 + y: 55.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_D1 + name: opentrons_96_tiprack_10ul_D1 + parent: opentrons_96_tiprack_10ul + position: + x: 13.224 + y: 46.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_E1 + name: opentrons_96_tiprack_10ul_E1 + parent: opentrons_96_tiprack_10ul + position: + x: 13.224 + y: 37.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_F1 + name: opentrons_96_tiprack_10ul_F1 + parent: opentrons_96_tiprack_10ul + position: + x: 13.224 + y: 28.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_G1 + name: opentrons_96_tiprack_10ul_G1 + parent: opentrons_96_tiprack_10ul + position: + x: 13.224 + y: 19.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_H1 + name: opentrons_96_tiprack_10ul_H1 + parent: opentrons_96_tiprack_10ul + position: + x: 13.224 + y: 10.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_A2 + name: opentrons_96_tiprack_10ul_A2 + parent: opentrons_96_tiprack_10ul + position: + x: 22.224 + y: 73.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_B2 + name: opentrons_96_tiprack_10ul_B2 + parent: opentrons_96_tiprack_10ul + position: + x: 22.224 + y: 64.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_C2 + name: opentrons_96_tiprack_10ul_C2 + parent: opentrons_96_tiprack_10ul + position: + x: 22.224 + y: 55.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_D2 + name: opentrons_96_tiprack_10ul_D2 + parent: opentrons_96_tiprack_10ul + position: + x: 22.224 + y: 46.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_E2 + name: opentrons_96_tiprack_10ul_E2 + parent: opentrons_96_tiprack_10ul + position: + x: 22.224 + y: 37.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_F2 + name: opentrons_96_tiprack_10ul_F2 + parent: opentrons_96_tiprack_10ul + position: + x: 22.224 + y: 28.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_G2 + name: opentrons_96_tiprack_10ul_G2 + parent: opentrons_96_tiprack_10ul + position: + x: 22.224 + y: 19.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_H2 + name: opentrons_96_tiprack_10ul_H2 + parent: opentrons_96_tiprack_10ul + position: + x: 22.224 + y: 10.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_A3 + name: opentrons_96_tiprack_10ul_A3 + parent: opentrons_96_tiprack_10ul + position: + x: 31.224 + y: 73.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_B3 + name: opentrons_96_tiprack_10ul_B3 + parent: opentrons_96_tiprack_10ul + position: + x: 31.224 + y: 64.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_C3 + name: opentrons_96_tiprack_10ul_C3 + parent: opentrons_96_tiprack_10ul + position: + x: 31.224 + y: 55.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_D3 + name: opentrons_96_tiprack_10ul_D3 + parent: opentrons_96_tiprack_10ul + position: + x: 31.224 + y: 46.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_E3 + name: opentrons_96_tiprack_10ul_E3 + parent: opentrons_96_tiprack_10ul + position: + x: 31.224 + y: 37.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_F3 + name: opentrons_96_tiprack_10ul_F3 + parent: opentrons_96_tiprack_10ul + position: + x: 31.224 + y: 28.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_G3 + name: opentrons_96_tiprack_10ul_G3 + parent: opentrons_96_tiprack_10ul + position: + x: 31.224 + y: 19.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_H3 + name: opentrons_96_tiprack_10ul_H3 + parent: opentrons_96_tiprack_10ul + position: + x: 31.224 + y: 10.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_A4 + name: opentrons_96_tiprack_10ul_A4 + parent: opentrons_96_tiprack_10ul + position: + x: 40.224 + y: 73.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_B4 + name: opentrons_96_tiprack_10ul_B4 + parent: opentrons_96_tiprack_10ul + position: + x: 40.224 + y: 64.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_C4 + name: opentrons_96_tiprack_10ul_C4 + parent: opentrons_96_tiprack_10ul + position: + x: 40.224 + y: 55.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_D4 + name: opentrons_96_tiprack_10ul_D4 + parent: opentrons_96_tiprack_10ul + position: + x: 40.224 + y: 46.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_E4 + name: opentrons_96_tiprack_10ul_E4 + parent: opentrons_96_tiprack_10ul + position: + x: 40.224 + y: 37.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_F4 + name: opentrons_96_tiprack_10ul_F4 + parent: opentrons_96_tiprack_10ul + position: + x: 40.224 + y: 28.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_G4 + name: opentrons_96_tiprack_10ul_G4 + parent: opentrons_96_tiprack_10ul + position: + x: 40.224 + y: 19.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_H4 + name: opentrons_96_tiprack_10ul_H4 + parent: opentrons_96_tiprack_10ul + position: + x: 40.224 + y: 10.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_A5 + name: opentrons_96_tiprack_10ul_A5 + parent: opentrons_96_tiprack_10ul + position: + x: 49.224 + y: 73.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_B5 + name: opentrons_96_tiprack_10ul_B5 + parent: opentrons_96_tiprack_10ul + position: + x: 49.224 + y: 64.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_C5 + name: opentrons_96_tiprack_10ul_C5 + parent: opentrons_96_tiprack_10ul + position: + x: 49.224 + y: 55.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_D5 + name: opentrons_96_tiprack_10ul_D5 + parent: opentrons_96_tiprack_10ul + position: + x: 49.224 + y: 46.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_E5 + name: opentrons_96_tiprack_10ul_E5 + parent: opentrons_96_tiprack_10ul + position: + x: 49.224 + y: 37.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_F5 + name: opentrons_96_tiprack_10ul_F5 + parent: opentrons_96_tiprack_10ul + position: + x: 49.224 + y: 28.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_G5 + name: opentrons_96_tiprack_10ul_G5 + parent: opentrons_96_tiprack_10ul + position: + x: 49.224 + y: 19.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_H5 + name: opentrons_96_tiprack_10ul_H5 + parent: opentrons_96_tiprack_10ul + position: + x: 49.224 + y: 10.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_A6 + name: opentrons_96_tiprack_10ul_A6 + parent: opentrons_96_tiprack_10ul + position: + x: 58.224 + y: 73.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_B6 + name: opentrons_96_tiprack_10ul_B6 + parent: opentrons_96_tiprack_10ul + position: + x: 58.224 + y: 64.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_C6 + name: opentrons_96_tiprack_10ul_C6 + parent: opentrons_96_tiprack_10ul + position: + x: 58.224 + y: 55.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_D6 + name: opentrons_96_tiprack_10ul_D6 + parent: opentrons_96_tiprack_10ul + position: + x: 58.224 + y: 46.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_E6 + name: opentrons_96_tiprack_10ul_E6 + parent: opentrons_96_tiprack_10ul + position: + x: 58.224 + y: 37.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_F6 + name: opentrons_96_tiprack_10ul_F6 + parent: opentrons_96_tiprack_10ul + position: + x: 58.224 + y: 28.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_G6 + name: opentrons_96_tiprack_10ul_G6 + parent: opentrons_96_tiprack_10ul + position: + x: 58.224 + y: 19.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_H6 + name: opentrons_96_tiprack_10ul_H6 + parent: opentrons_96_tiprack_10ul + position: + x: 58.224 + y: 10.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_A7 + name: opentrons_96_tiprack_10ul_A7 + parent: opentrons_96_tiprack_10ul + position: + x: 67.224 + y: 73.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_B7 + name: opentrons_96_tiprack_10ul_B7 + parent: opentrons_96_tiprack_10ul + position: + x: 67.224 + y: 64.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_C7 + name: opentrons_96_tiprack_10ul_C7 + parent: opentrons_96_tiprack_10ul + position: + x: 67.224 + y: 55.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_D7 + name: opentrons_96_tiprack_10ul_D7 + parent: opentrons_96_tiprack_10ul + position: + x: 67.224 + y: 46.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_E7 + name: opentrons_96_tiprack_10ul_E7 + parent: opentrons_96_tiprack_10ul + position: + x: 67.224 + y: 37.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_F7 + name: opentrons_96_tiprack_10ul_F7 + parent: opentrons_96_tiprack_10ul + position: + x: 67.224 + y: 28.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_G7 + name: opentrons_96_tiprack_10ul_G7 + parent: opentrons_96_tiprack_10ul + position: + x: 67.224 + y: 19.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_H7 + name: opentrons_96_tiprack_10ul_H7 + parent: opentrons_96_tiprack_10ul + position: + x: 67.224 + y: 10.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_A8 + name: opentrons_96_tiprack_10ul_A8 + parent: opentrons_96_tiprack_10ul + position: + x: 76.224 + y: 73.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_B8 + name: opentrons_96_tiprack_10ul_B8 + parent: opentrons_96_tiprack_10ul + position: + x: 76.224 + y: 64.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_C8 + name: opentrons_96_tiprack_10ul_C8 + parent: opentrons_96_tiprack_10ul + position: + x: 76.224 + y: 55.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_D8 + name: opentrons_96_tiprack_10ul_D8 + parent: opentrons_96_tiprack_10ul + position: + x: 76.224 + y: 46.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_E8 + name: opentrons_96_tiprack_10ul_E8 + parent: opentrons_96_tiprack_10ul + position: + x: 76.224 + y: 37.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_F8 + name: opentrons_96_tiprack_10ul_F8 + parent: opentrons_96_tiprack_10ul + position: + x: 76.224 + y: 28.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_G8 + name: opentrons_96_tiprack_10ul_G8 + parent: opentrons_96_tiprack_10ul + position: + x: 76.224 + y: 19.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_H8 + name: opentrons_96_tiprack_10ul_H8 + parent: opentrons_96_tiprack_10ul + position: + x: 76.224 + y: 10.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_A9 + name: opentrons_96_tiprack_10ul_A9 + parent: opentrons_96_tiprack_10ul + position: + x: 85.224 + y: 73.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_B9 + name: opentrons_96_tiprack_10ul_B9 + parent: opentrons_96_tiprack_10ul + position: + x: 85.224 + y: 64.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_C9 + name: opentrons_96_tiprack_10ul_C9 + parent: opentrons_96_tiprack_10ul + position: + x: 85.224 + y: 55.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_D9 + name: opentrons_96_tiprack_10ul_D9 + parent: opentrons_96_tiprack_10ul + position: + x: 85.224 + y: 46.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_E9 + name: opentrons_96_tiprack_10ul_E9 + parent: opentrons_96_tiprack_10ul + position: + x: 85.224 + y: 37.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_F9 + name: opentrons_96_tiprack_10ul_F9 + parent: opentrons_96_tiprack_10ul + position: + x: 85.224 + y: 28.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_G9 + name: opentrons_96_tiprack_10ul_G9 + parent: opentrons_96_tiprack_10ul + position: + x: 85.224 + y: 19.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_H9 + name: opentrons_96_tiprack_10ul_H9 + parent: opentrons_96_tiprack_10ul + position: + x: 85.224 + y: 10.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_A10 + name: opentrons_96_tiprack_10ul_A10 + parent: opentrons_96_tiprack_10ul + position: + x: 94.224 + y: 73.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_B10 + name: opentrons_96_tiprack_10ul_B10 + parent: opentrons_96_tiprack_10ul + position: + x: 94.224 + y: 64.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_C10 + name: opentrons_96_tiprack_10ul_C10 + parent: opentrons_96_tiprack_10ul + position: + x: 94.224 + y: 55.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_D10 + name: opentrons_96_tiprack_10ul_D10 + parent: opentrons_96_tiprack_10ul + position: + x: 94.224 + y: 46.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_E10 + name: opentrons_96_tiprack_10ul_E10 + parent: opentrons_96_tiprack_10ul + position: + x: 94.224 + y: 37.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_F10 + name: opentrons_96_tiprack_10ul_F10 + parent: opentrons_96_tiprack_10ul + position: + x: 94.224 + y: 28.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_G10 + name: opentrons_96_tiprack_10ul_G10 + parent: opentrons_96_tiprack_10ul + position: + x: 94.224 + y: 19.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_H10 + name: opentrons_96_tiprack_10ul_H10 + parent: opentrons_96_tiprack_10ul + position: + x: 94.224 + y: 10.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_A11 + name: opentrons_96_tiprack_10ul_A11 + parent: opentrons_96_tiprack_10ul + position: + x: 103.224 + y: 73.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_B11 + name: opentrons_96_tiprack_10ul_B11 + parent: opentrons_96_tiprack_10ul + position: + x: 103.224 + y: 64.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_C11 + name: opentrons_96_tiprack_10ul_C11 + parent: opentrons_96_tiprack_10ul + position: + x: 103.224 + y: 55.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_D11 + name: opentrons_96_tiprack_10ul_D11 + parent: opentrons_96_tiprack_10ul + position: + x: 103.224 + y: 46.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_E11 + name: opentrons_96_tiprack_10ul_E11 + parent: opentrons_96_tiprack_10ul + position: + x: 103.224 + y: 37.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_F11 + name: opentrons_96_tiprack_10ul_F11 + parent: opentrons_96_tiprack_10ul + position: + x: 103.224 + y: 28.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_G11 + name: opentrons_96_tiprack_10ul_G11 + parent: opentrons_96_tiprack_10ul + position: + x: 103.224 + y: 19.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_H11 + name: opentrons_96_tiprack_10ul_H11 + parent: opentrons_96_tiprack_10ul + position: + x: 103.224 + y: 10.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_A12 + name: opentrons_96_tiprack_10ul_A12 + parent: opentrons_96_tiprack_10ul + position: + x: 112.224 + y: 73.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_B12 + name: opentrons_96_tiprack_10ul_B12 + parent: opentrons_96_tiprack_10ul + position: + x: 112.224 + y: 64.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_C12 + name: opentrons_96_tiprack_10ul_C12 + parent: opentrons_96_tiprack_10ul + position: + x: 112.224 + y: 55.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_D12 + name: opentrons_96_tiprack_10ul_D12 + parent: opentrons_96_tiprack_10ul + position: + x: 112.224 + y: 46.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_E12 + name: opentrons_96_tiprack_10ul_E12 + parent: opentrons_96_tiprack_10ul + position: + x: 112.224 + y: 37.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_F12 + name: opentrons_96_tiprack_10ul_F12 + parent: opentrons_96_tiprack_10ul + position: + x: 112.224 + y: 28.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_G12 + name: opentrons_96_tiprack_10ul_G12 + parent: opentrons_96_tiprack_10ul + position: + x: 112.224 + y: 19.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 3.29 + has_filter: false + maximal_volume: 10.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_10ul_H12 + name: opentrons_96_tiprack_10ul_H12 + parent: opentrons_96_tiprack_10ul + position: + x: 112.224 + y: 10.084 + z: 25.49 + sample_id: null + type: container + description: Opentrons 96 tiprack 10ul + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tip_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +opentrons_96_tiprack_20ul: + category: + - tip_racks + class: + module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_tiprack_20ul + type: pylabrobot + config_info: + - children: + - opentrons_96_tiprack_20ul_A1 + - opentrons_96_tiprack_20ul_B1 + - opentrons_96_tiprack_20ul_C1 + - opentrons_96_tiprack_20ul_D1 + - opentrons_96_tiprack_20ul_E1 + - opentrons_96_tiprack_20ul_F1 + - opentrons_96_tiprack_20ul_G1 + - opentrons_96_tiprack_20ul_H1 + - opentrons_96_tiprack_20ul_A2 + - opentrons_96_tiprack_20ul_B2 + - opentrons_96_tiprack_20ul_C2 + - opentrons_96_tiprack_20ul_D2 + - opentrons_96_tiprack_20ul_E2 + - opentrons_96_tiprack_20ul_F2 + - opentrons_96_tiprack_20ul_G2 + - opentrons_96_tiprack_20ul_H2 + - opentrons_96_tiprack_20ul_A3 + - opentrons_96_tiprack_20ul_B3 + - opentrons_96_tiprack_20ul_C3 + - opentrons_96_tiprack_20ul_D3 + - opentrons_96_tiprack_20ul_E3 + - opentrons_96_tiprack_20ul_F3 + - opentrons_96_tiprack_20ul_G3 + - opentrons_96_tiprack_20ul_H3 + - opentrons_96_tiprack_20ul_A4 + - opentrons_96_tiprack_20ul_B4 + - opentrons_96_tiprack_20ul_C4 + - opentrons_96_tiprack_20ul_D4 + - opentrons_96_tiprack_20ul_E4 + - opentrons_96_tiprack_20ul_F4 + - opentrons_96_tiprack_20ul_G4 + - opentrons_96_tiprack_20ul_H4 + - opentrons_96_tiprack_20ul_A5 + - opentrons_96_tiprack_20ul_B5 + - opentrons_96_tiprack_20ul_C5 + - opentrons_96_tiprack_20ul_D5 + - opentrons_96_tiprack_20ul_E5 + - opentrons_96_tiprack_20ul_F5 + - opentrons_96_tiprack_20ul_G5 + - opentrons_96_tiprack_20ul_H5 + - opentrons_96_tiprack_20ul_A6 + - opentrons_96_tiprack_20ul_B6 + - opentrons_96_tiprack_20ul_C6 + - opentrons_96_tiprack_20ul_D6 + - opentrons_96_tiprack_20ul_E6 + - opentrons_96_tiprack_20ul_F6 + - opentrons_96_tiprack_20ul_G6 + - opentrons_96_tiprack_20ul_H6 + - opentrons_96_tiprack_20ul_A7 + - opentrons_96_tiprack_20ul_B7 + - opentrons_96_tiprack_20ul_C7 + - opentrons_96_tiprack_20ul_D7 + - opentrons_96_tiprack_20ul_E7 + - opentrons_96_tiprack_20ul_F7 + - opentrons_96_tiprack_20ul_G7 + - opentrons_96_tiprack_20ul_H7 + - opentrons_96_tiprack_20ul_A8 + - opentrons_96_tiprack_20ul_B8 + - opentrons_96_tiprack_20ul_C8 + - opentrons_96_tiprack_20ul_D8 + - opentrons_96_tiprack_20ul_E8 + - opentrons_96_tiprack_20ul_F8 + - opentrons_96_tiprack_20ul_G8 + - opentrons_96_tiprack_20ul_H8 + - opentrons_96_tiprack_20ul_A9 + - opentrons_96_tiprack_20ul_B9 + - opentrons_96_tiprack_20ul_C9 + - opentrons_96_tiprack_20ul_D9 + - opentrons_96_tiprack_20ul_E9 + - opentrons_96_tiprack_20ul_F9 + - opentrons_96_tiprack_20ul_G9 + - opentrons_96_tiprack_20ul_H9 + - opentrons_96_tiprack_20ul_A10 + - opentrons_96_tiprack_20ul_B10 + - opentrons_96_tiprack_20ul_C10 + - opentrons_96_tiprack_20ul_D10 + - opentrons_96_tiprack_20ul_E10 + - opentrons_96_tiprack_20ul_F10 + - opentrons_96_tiprack_20ul_G10 + - opentrons_96_tiprack_20ul_H10 + - opentrons_96_tiprack_20ul_A11 + - opentrons_96_tiprack_20ul_B11 + - opentrons_96_tiprack_20ul_C11 + - opentrons_96_tiprack_20ul_D11 + - opentrons_96_tiprack_20ul_E11 + - opentrons_96_tiprack_20ul_F11 + - opentrons_96_tiprack_20ul_G11 + - opentrons_96_tiprack_20ul_H11 + - opentrons_96_tiprack_20ul_A12 + - opentrons_96_tiprack_20ul_B12 + - opentrons_96_tiprack_20ul_C12 + - opentrons_96_tiprack_20ul_D12 + - opentrons_96_tiprack_20ul_E12 + - opentrons_96_tiprack_20ul_F12 + - opentrons_96_tiprack_20ul_G12 + - opentrons_96_tiprack_20ul_H12 + class: '' + config: + barcode: null + category: tip_rack + model: Opentrons OT-2 96 Tip Rack 20 µL + ordering: + A1: opentrons_96_tiprack_20ul_A1 + B1: opentrons_96_tiprack_20ul_B1 + C1: opentrons_96_tiprack_20ul_C1 + D1: opentrons_96_tiprack_20ul_D1 + E1: opentrons_96_tiprack_20ul_E1 + F1: opentrons_96_tiprack_20ul_F1 + G1: opentrons_96_tiprack_20ul_G1 + H1: opentrons_96_tiprack_20ul_H1 + A2: opentrons_96_tiprack_20ul_A2 + B2: opentrons_96_tiprack_20ul_B2 + C2: opentrons_96_tiprack_20ul_C2 + D2: opentrons_96_tiprack_20ul_D2 + E2: opentrons_96_tiprack_20ul_E2 + F2: opentrons_96_tiprack_20ul_F2 + G2: opentrons_96_tiprack_20ul_G2 + H2: opentrons_96_tiprack_20ul_H2 + A3: opentrons_96_tiprack_20ul_A3 + B3: opentrons_96_tiprack_20ul_B3 + C3: opentrons_96_tiprack_20ul_C3 + D3: opentrons_96_tiprack_20ul_D3 + E3: opentrons_96_tiprack_20ul_E3 + F3: opentrons_96_tiprack_20ul_F3 + G3: opentrons_96_tiprack_20ul_G3 + H3: opentrons_96_tiprack_20ul_H3 + A4: opentrons_96_tiprack_20ul_A4 + B4: opentrons_96_tiprack_20ul_B4 + C4: opentrons_96_tiprack_20ul_C4 + D4: opentrons_96_tiprack_20ul_D4 + E4: opentrons_96_tiprack_20ul_E4 + F4: opentrons_96_tiprack_20ul_F4 + G4: opentrons_96_tiprack_20ul_G4 + H4: opentrons_96_tiprack_20ul_H4 + A5: opentrons_96_tiprack_20ul_A5 + B5: opentrons_96_tiprack_20ul_B5 + C5: opentrons_96_tiprack_20ul_C5 + D5: opentrons_96_tiprack_20ul_D5 + E5: opentrons_96_tiprack_20ul_E5 + F5: opentrons_96_tiprack_20ul_F5 + G5: opentrons_96_tiprack_20ul_G5 + H5: opentrons_96_tiprack_20ul_H5 + A6: opentrons_96_tiprack_20ul_A6 + B6: opentrons_96_tiprack_20ul_B6 + C6: opentrons_96_tiprack_20ul_C6 + D6: opentrons_96_tiprack_20ul_D6 + E6: opentrons_96_tiprack_20ul_E6 + F6: opentrons_96_tiprack_20ul_F6 + G6: opentrons_96_tiprack_20ul_G6 + H6: opentrons_96_tiprack_20ul_H6 + A7: opentrons_96_tiprack_20ul_A7 + B7: opentrons_96_tiprack_20ul_B7 + C7: opentrons_96_tiprack_20ul_C7 + D7: opentrons_96_tiprack_20ul_D7 + E7: opentrons_96_tiprack_20ul_E7 + F7: opentrons_96_tiprack_20ul_F7 + G7: opentrons_96_tiprack_20ul_G7 + H7: opentrons_96_tiprack_20ul_H7 + A8: opentrons_96_tiprack_20ul_A8 + B8: opentrons_96_tiprack_20ul_B8 + C8: opentrons_96_tiprack_20ul_C8 + D8: opentrons_96_tiprack_20ul_D8 + E8: opentrons_96_tiprack_20ul_E8 + F8: opentrons_96_tiprack_20ul_F8 + G8: opentrons_96_tiprack_20ul_G8 + H8: opentrons_96_tiprack_20ul_H8 + A9: opentrons_96_tiprack_20ul_A9 + B9: opentrons_96_tiprack_20ul_B9 + C9: opentrons_96_tiprack_20ul_C9 + D9: opentrons_96_tiprack_20ul_D9 + E9: opentrons_96_tiprack_20ul_E9 + F9: opentrons_96_tiprack_20ul_F9 + G9: opentrons_96_tiprack_20ul_G9 + H9: opentrons_96_tiprack_20ul_H9 + A10: opentrons_96_tiprack_20ul_A10 + B10: opentrons_96_tiprack_20ul_B10 + C10: opentrons_96_tiprack_20ul_C10 + D10: opentrons_96_tiprack_20ul_D10 + E10: opentrons_96_tiprack_20ul_E10 + F10: opentrons_96_tiprack_20ul_F10 + G10: opentrons_96_tiprack_20ul_G10 + H10: opentrons_96_tiprack_20ul_H10 + A11: opentrons_96_tiprack_20ul_A11 + B11: opentrons_96_tiprack_20ul_B11 + C11: opentrons_96_tiprack_20ul_C11 + D11: opentrons_96_tiprack_20ul_D11 + E11: opentrons_96_tiprack_20ul_E11 + F11: opentrons_96_tiprack_20ul_F11 + G11: opentrons_96_tiprack_20ul_G11 + H11: opentrons_96_tiprack_20ul_H11 + A12: opentrons_96_tiprack_20ul_A12 + B12: opentrons_96_tiprack_20ul_B12 + C12: opentrons_96_tiprack_20ul_C12 + D12: opentrons_96_tiprack_20ul_D12 + E12: opentrons_96_tiprack_20ul_E12 + F12: opentrons_96_tiprack_20ul_F12 + G12: opentrons_96_tiprack_20ul_G12 + H12: opentrons_96_tiprack_20ul_H12 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.48 + size_z: 64.69 + type: TipRack + data: {} + id: opentrons_96_tiprack_20ul + name: opentrons_96_tiprack_20ul + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_A1 + name: opentrons_96_tiprack_20ul_A1 + parent: opentrons_96_tiprack_20ul + position: + x: 13.224 + y: 73.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_B1 + name: opentrons_96_tiprack_20ul_B1 + parent: opentrons_96_tiprack_20ul + position: + x: 13.224 + y: 64.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_C1 + name: opentrons_96_tiprack_20ul_C1 + parent: opentrons_96_tiprack_20ul + position: + x: 13.224 + y: 55.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_D1 + name: opentrons_96_tiprack_20ul_D1 + parent: opentrons_96_tiprack_20ul + position: + x: 13.224 + y: 46.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_E1 + name: opentrons_96_tiprack_20ul_E1 + parent: opentrons_96_tiprack_20ul + position: + x: 13.224 + y: 37.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_F1 + name: opentrons_96_tiprack_20ul_F1 + parent: opentrons_96_tiprack_20ul + position: + x: 13.224 + y: 28.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_G1 + name: opentrons_96_tiprack_20ul_G1 + parent: opentrons_96_tiprack_20ul + position: + x: 13.224 + y: 19.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_H1 + name: opentrons_96_tiprack_20ul_H1 + parent: opentrons_96_tiprack_20ul + position: + x: 13.224 + y: 10.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_A2 + name: opentrons_96_tiprack_20ul_A2 + parent: opentrons_96_tiprack_20ul + position: + x: 22.224 + y: 73.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_B2 + name: opentrons_96_tiprack_20ul_B2 + parent: opentrons_96_tiprack_20ul + position: + x: 22.224 + y: 64.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_C2 + name: opentrons_96_tiprack_20ul_C2 + parent: opentrons_96_tiprack_20ul + position: + x: 22.224 + y: 55.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_D2 + name: opentrons_96_tiprack_20ul_D2 + parent: opentrons_96_tiprack_20ul + position: + x: 22.224 + y: 46.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_E2 + name: opentrons_96_tiprack_20ul_E2 + parent: opentrons_96_tiprack_20ul + position: + x: 22.224 + y: 37.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_F2 + name: opentrons_96_tiprack_20ul_F2 + parent: opentrons_96_tiprack_20ul + position: + x: 22.224 + y: 28.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_G2 + name: opentrons_96_tiprack_20ul_G2 + parent: opentrons_96_tiprack_20ul + position: + x: 22.224 + y: 19.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_H2 + name: opentrons_96_tiprack_20ul_H2 + parent: opentrons_96_tiprack_20ul + position: + x: 22.224 + y: 10.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_A3 + name: opentrons_96_tiprack_20ul_A3 + parent: opentrons_96_tiprack_20ul + position: + x: 31.224 + y: 73.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_B3 + name: opentrons_96_tiprack_20ul_B3 + parent: opentrons_96_tiprack_20ul + position: + x: 31.224 + y: 64.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_C3 + name: opentrons_96_tiprack_20ul_C3 + parent: opentrons_96_tiprack_20ul + position: + x: 31.224 + y: 55.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_D3 + name: opentrons_96_tiprack_20ul_D3 + parent: opentrons_96_tiprack_20ul + position: + x: 31.224 + y: 46.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_E3 + name: opentrons_96_tiprack_20ul_E3 + parent: opentrons_96_tiprack_20ul + position: + x: 31.224 + y: 37.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_F3 + name: opentrons_96_tiprack_20ul_F3 + parent: opentrons_96_tiprack_20ul + position: + x: 31.224 + y: 28.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_G3 + name: opentrons_96_tiprack_20ul_G3 + parent: opentrons_96_tiprack_20ul + position: + x: 31.224 + y: 19.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_H3 + name: opentrons_96_tiprack_20ul_H3 + parent: opentrons_96_tiprack_20ul + position: + x: 31.224 + y: 10.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_A4 + name: opentrons_96_tiprack_20ul_A4 + parent: opentrons_96_tiprack_20ul + position: + x: 40.224 + y: 73.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_B4 + name: opentrons_96_tiprack_20ul_B4 + parent: opentrons_96_tiprack_20ul + position: + x: 40.224 + y: 64.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_C4 + name: opentrons_96_tiprack_20ul_C4 + parent: opentrons_96_tiprack_20ul + position: + x: 40.224 + y: 55.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_D4 + name: opentrons_96_tiprack_20ul_D4 + parent: opentrons_96_tiprack_20ul + position: + x: 40.224 + y: 46.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_E4 + name: opentrons_96_tiprack_20ul_E4 + parent: opentrons_96_tiprack_20ul + position: + x: 40.224 + y: 37.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_F4 + name: opentrons_96_tiprack_20ul_F4 + parent: opentrons_96_tiprack_20ul + position: + x: 40.224 + y: 28.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_G4 + name: opentrons_96_tiprack_20ul_G4 + parent: opentrons_96_tiprack_20ul + position: + x: 40.224 + y: 19.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_H4 + name: opentrons_96_tiprack_20ul_H4 + parent: opentrons_96_tiprack_20ul + position: + x: 40.224 + y: 10.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_A5 + name: opentrons_96_tiprack_20ul_A5 + parent: opentrons_96_tiprack_20ul + position: + x: 49.224 + y: 73.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_B5 + name: opentrons_96_tiprack_20ul_B5 + parent: opentrons_96_tiprack_20ul + position: + x: 49.224 + y: 64.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_C5 + name: opentrons_96_tiprack_20ul_C5 + parent: opentrons_96_tiprack_20ul + position: + x: 49.224 + y: 55.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_D5 + name: opentrons_96_tiprack_20ul_D5 + parent: opentrons_96_tiprack_20ul + position: + x: 49.224 + y: 46.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_E5 + name: opentrons_96_tiprack_20ul_E5 + parent: opentrons_96_tiprack_20ul + position: + x: 49.224 + y: 37.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_F5 + name: opentrons_96_tiprack_20ul_F5 + parent: opentrons_96_tiprack_20ul + position: + x: 49.224 + y: 28.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_G5 + name: opentrons_96_tiprack_20ul_G5 + parent: opentrons_96_tiprack_20ul + position: + x: 49.224 + y: 19.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_H5 + name: opentrons_96_tiprack_20ul_H5 + parent: opentrons_96_tiprack_20ul + position: + x: 49.224 + y: 10.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_A6 + name: opentrons_96_tiprack_20ul_A6 + parent: opentrons_96_tiprack_20ul + position: + x: 58.224 + y: 73.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_B6 + name: opentrons_96_tiprack_20ul_B6 + parent: opentrons_96_tiprack_20ul + position: + x: 58.224 + y: 64.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_C6 + name: opentrons_96_tiprack_20ul_C6 + parent: opentrons_96_tiprack_20ul + position: + x: 58.224 + y: 55.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_D6 + name: opentrons_96_tiprack_20ul_D6 + parent: opentrons_96_tiprack_20ul + position: + x: 58.224 + y: 46.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_E6 + name: opentrons_96_tiprack_20ul_E6 + parent: opentrons_96_tiprack_20ul + position: + x: 58.224 + y: 37.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_F6 + name: opentrons_96_tiprack_20ul_F6 + parent: opentrons_96_tiprack_20ul + position: + x: 58.224 + y: 28.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_G6 + name: opentrons_96_tiprack_20ul_G6 + parent: opentrons_96_tiprack_20ul + position: + x: 58.224 + y: 19.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_H6 + name: opentrons_96_tiprack_20ul_H6 + parent: opentrons_96_tiprack_20ul + position: + x: 58.224 + y: 10.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_A7 + name: opentrons_96_tiprack_20ul_A7 + parent: opentrons_96_tiprack_20ul + position: + x: 67.224 + y: 73.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_B7 + name: opentrons_96_tiprack_20ul_B7 + parent: opentrons_96_tiprack_20ul + position: + x: 67.224 + y: 64.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_C7 + name: opentrons_96_tiprack_20ul_C7 + parent: opentrons_96_tiprack_20ul + position: + x: 67.224 + y: 55.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_D7 + name: opentrons_96_tiprack_20ul_D7 + parent: opentrons_96_tiprack_20ul + position: + x: 67.224 + y: 46.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_E7 + name: opentrons_96_tiprack_20ul_E7 + parent: opentrons_96_tiprack_20ul + position: + x: 67.224 + y: 37.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_F7 + name: opentrons_96_tiprack_20ul_F7 + parent: opentrons_96_tiprack_20ul + position: + x: 67.224 + y: 28.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_G7 + name: opentrons_96_tiprack_20ul_G7 + parent: opentrons_96_tiprack_20ul + position: + x: 67.224 + y: 19.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_H7 + name: opentrons_96_tiprack_20ul_H7 + parent: opentrons_96_tiprack_20ul + position: + x: 67.224 + y: 10.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_A8 + name: opentrons_96_tiprack_20ul_A8 + parent: opentrons_96_tiprack_20ul + position: + x: 76.224 + y: 73.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_B8 + name: opentrons_96_tiprack_20ul_B8 + parent: opentrons_96_tiprack_20ul + position: + x: 76.224 + y: 64.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_C8 + name: opentrons_96_tiprack_20ul_C8 + parent: opentrons_96_tiprack_20ul + position: + x: 76.224 + y: 55.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_D8 + name: opentrons_96_tiprack_20ul_D8 + parent: opentrons_96_tiprack_20ul + position: + x: 76.224 + y: 46.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_E8 + name: opentrons_96_tiprack_20ul_E8 + parent: opentrons_96_tiprack_20ul + position: + x: 76.224 + y: 37.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_F8 + name: opentrons_96_tiprack_20ul_F8 + parent: opentrons_96_tiprack_20ul + position: + x: 76.224 + y: 28.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_G8 + name: opentrons_96_tiprack_20ul_G8 + parent: opentrons_96_tiprack_20ul + position: + x: 76.224 + y: 19.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_H8 + name: opentrons_96_tiprack_20ul_H8 + parent: opentrons_96_tiprack_20ul + position: + x: 76.224 + y: 10.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_A9 + name: opentrons_96_tiprack_20ul_A9 + parent: opentrons_96_tiprack_20ul + position: + x: 85.224 + y: 73.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_B9 + name: opentrons_96_tiprack_20ul_B9 + parent: opentrons_96_tiprack_20ul + position: + x: 85.224 + y: 64.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_C9 + name: opentrons_96_tiprack_20ul_C9 + parent: opentrons_96_tiprack_20ul + position: + x: 85.224 + y: 55.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_D9 + name: opentrons_96_tiprack_20ul_D9 + parent: opentrons_96_tiprack_20ul + position: + x: 85.224 + y: 46.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_E9 + name: opentrons_96_tiprack_20ul_E9 + parent: opentrons_96_tiprack_20ul + position: + x: 85.224 + y: 37.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_F9 + name: opentrons_96_tiprack_20ul_F9 + parent: opentrons_96_tiprack_20ul + position: + x: 85.224 + y: 28.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_G9 + name: opentrons_96_tiprack_20ul_G9 + parent: opentrons_96_tiprack_20ul + position: + x: 85.224 + y: 19.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_H9 + name: opentrons_96_tiprack_20ul_H9 + parent: opentrons_96_tiprack_20ul + position: + x: 85.224 + y: 10.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_A10 + name: opentrons_96_tiprack_20ul_A10 + parent: opentrons_96_tiprack_20ul + position: + x: 94.224 + y: 73.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_B10 + name: opentrons_96_tiprack_20ul_B10 + parent: opentrons_96_tiprack_20ul + position: + x: 94.224 + y: 64.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_C10 + name: opentrons_96_tiprack_20ul_C10 + parent: opentrons_96_tiprack_20ul + position: + x: 94.224 + y: 55.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_D10 + name: opentrons_96_tiprack_20ul_D10 + parent: opentrons_96_tiprack_20ul + position: + x: 94.224 + y: 46.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_E10 + name: opentrons_96_tiprack_20ul_E10 + parent: opentrons_96_tiprack_20ul + position: + x: 94.224 + y: 37.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_F10 + name: opentrons_96_tiprack_20ul_F10 + parent: opentrons_96_tiprack_20ul + position: + x: 94.224 + y: 28.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_G10 + name: opentrons_96_tiprack_20ul_G10 + parent: opentrons_96_tiprack_20ul + position: + x: 94.224 + y: 19.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_H10 + name: opentrons_96_tiprack_20ul_H10 + parent: opentrons_96_tiprack_20ul + position: + x: 94.224 + y: 10.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_A11 + name: opentrons_96_tiprack_20ul_A11 + parent: opentrons_96_tiprack_20ul + position: + x: 103.224 + y: 73.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_B11 + name: opentrons_96_tiprack_20ul_B11 + parent: opentrons_96_tiprack_20ul + position: + x: 103.224 + y: 64.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_C11 + name: opentrons_96_tiprack_20ul_C11 + parent: opentrons_96_tiprack_20ul + position: + x: 103.224 + y: 55.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_D11 + name: opentrons_96_tiprack_20ul_D11 + parent: opentrons_96_tiprack_20ul + position: + x: 103.224 + y: 46.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_E11 + name: opentrons_96_tiprack_20ul_E11 + parent: opentrons_96_tiprack_20ul + position: + x: 103.224 + y: 37.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_F11 + name: opentrons_96_tiprack_20ul_F11 + parent: opentrons_96_tiprack_20ul + position: + x: 103.224 + y: 28.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_G11 + name: opentrons_96_tiprack_20ul_G11 + parent: opentrons_96_tiprack_20ul + position: + x: 103.224 + y: 19.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_H11 + name: opentrons_96_tiprack_20ul_H11 + parent: opentrons_96_tiprack_20ul + position: + x: 103.224 + y: 10.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_A12 + name: opentrons_96_tiprack_20ul_A12 + parent: opentrons_96_tiprack_20ul + position: + x: 112.224 + y: 73.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_B12 + name: opentrons_96_tiprack_20ul_B12 + parent: opentrons_96_tiprack_20ul + position: + x: 112.224 + y: 64.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_C12 + name: opentrons_96_tiprack_20ul_C12 + parent: opentrons_96_tiprack_20ul + position: + x: 112.224 + y: 55.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_D12 + name: opentrons_96_tiprack_20ul_D12 + parent: opentrons_96_tiprack_20ul + position: + x: 112.224 + y: 46.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_E12 + name: opentrons_96_tiprack_20ul_E12 + parent: opentrons_96_tiprack_20ul + position: + x: 112.224 + y: 37.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_F12 + name: opentrons_96_tiprack_20ul_F12 + parent: opentrons_96_tiprack_20ul + position: + x: 112.224 + y: 28.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_G12 + name: opentrons_96_tiprack_20ul_G12 + parent: opentrons_96_tiprack_20ul + position: + x: 112.224 + y: 19.084 + z: 25.49 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 2.312 + size_y: 2.312 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip: + fitting_depth: 8.25 + has_filter: false + maximal_volume: 20.0 + total_tip_length: 39.2 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_20ul_H12 + name: opentrons_96_tiprack_20ul_H12 + parent: opentrons_96_tiprack_20ul + position: + x: 112.224 + y: 10.084 + z: 25.49 + sample_id: null + type: container + description: Opentrons 96 tiprack 20ul + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tip_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +opentrons_96_tiprack_300ul: + category: + - tip_racks + class: + module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_tiprack_300ul + type: pylabrobot + config_info: + - children: + - opentrons_96_tiprack_300ul_A1 + - opentrons_96_tiprack_300ul_B1 + - opentrons_96_tiprack_300ul_C1 + - opentrons_96_tiprack_300ul_D1 + - opentrons_96_tiprack_300ul_E1 + - opentrons_96_tiprack_300ul_F1 + - opentrons_96_tiprack_300ul_G1 + - opentrons_96_tiprack_300ul_H1 + - opentrons_96_tiprack_300ul_A2 + - opentrons_96_tiprack_300ul_B2 + - opentrons_96_tiprack_300ul_C2 + - opentrons_96_tiprack_300ul_D2 + - opentrons_96_tiprack_300ul_E2 + - opentrons_96_tiprack_300ul_F2 + - opentrons_96_tiprack_300ul_G2 + - opentrons_96_tiprack_300ul_H2 + - opentrons_96_tiprack_300ul_A3 + - opentrons_96_tiprack_300ul_B3 + - opentrons_96_tiprack_300ul_C3 + - opentrons_96_tiprack_300ul_D3 + - opentrons_96_tiprack_300ul_E3 + - opentrons_96_tiprack_300ul_F3 + - opentrons_96_tiprack_300ul_G3 + - opentrons_96_tiprack_300ul_H3 + - opentrons_96_tiprack_300ul_A4 + - opentrons_96_tiprack_300ul_B4 + - opentrons_96_tiprack_300ul_C4 + - opentrons_96_tiprack_300ul_D4 + - opentrons_96_tiprack_300ul_E4 + - opentrons_96_tiprack_300ul_F4 + - opentrons_96_tiprack_300ul_G4 + - opentrons_96_tiprack_300ul_H4 + - opentrons_96_tiprack_300ul_A5 + - opentrons_96_tiprack_300ul_B5 + - opentrons_96_tiprack_300ul_C5 + - opentrons_96_tiprack_300ul_D5 + - opentrons_96_tiprack_300ul_E5 + - opentrons_96_tiprack_300ul_F5 + - opentrons_96_tiprack_300ul_G5 + - opentrons_96_tiprack_300ul_H5 + - opentrons_96_tiprack_300ul_A6 + - opentrons_96_tiprack_300ul_B6 + - opentrons_96_tiprack_300ul_C6 + - opentrons_96_tiprack_300ul_D6 + - opentrons_96_tiprack_300ul_E6 + - opentrons_96_tiprack_300ul_F6 + - opentrons_96_tiprack_300ul_G6 + - opentrons_96_tiprack_300ul_H6 + - opentrons_96_tiprack_300ul_A7 + - opentrons_96_tiprack_300ul_B7 + - opentrons_96_tiprack_300ul_C7 + - opentrons_96_tiprack_300ul_D7 + - opentrons_96_tiprack_300ul_E7 + - opentrons_96_tiprack_300ul_F7 + - opentrons_96_tiprack_300ul_G7 + - opentrons_96_tiprack_300ul_H7 + - opentrons_96_tiprack_300ul_A8 + - opentrons_96_tiprack_300ul_B8 + - opentrons_96_tiprack_300ul_C8 + - opentrons_96_tiprack_300ul_D8 + - opentrons_96_tiprack_300ul_E8 + - opentrons_96_tiprack_300ul_F8 + - opentrons_96_tiprack_300ul_G8 + - opentrons_96_tiprack_300ul_H8 + - opentrons_96_tiprack_300ul_A9 + - opentrons_96_tiprack_300ul_B9 + - opentrons_96_tiprack_300ul_C9 + - opentrons_96_tiprack_300ul_D9 + - opentrons_96_tiprack_300ul_E9 + - opentrons_96_tiprack_300ul_F9 + - opentrons_96_tiprack_300ul_G9 + - opentrons_96_tiprack_300ul_H9 + - opentrons_96_tiprack_300ul_A10 + - opentrons_96_tiprack_300ul_B10 + - opentrons_96_tiprack_300ul_C10 + - opentrons_96_tiprack_300ul_D10 + - opentrons_96_tiprack_300ul_E10 + - opentrons_96_tiprack_300ul_F10 + - opentrons_96_tiprack_300ul_G10 + - opentrons_96_tiprack_300ul_H10 + - opentrons_96_tiprack_300ul_A11 + - opentrons_96_tiprack_300ul_B11 + - opentrons_96_tiprack_300ul_C11 + - opentrons_96_tiprack_300ul_D11 + - opentrons_96_tiprack_300ul_E11 + - opentrons_96_tiprack_300ul_F11 + - opentrons_96_tiprack_300ul_G11 + - opentrons_96_tiprack_300ul_H11 + - opentrons_96_tiprack_300ul_A12 + - opentrons_96_tiprack_300ul_B12 + - opentrons_96_tiprack_300ul_C12 + - opentrons_96_tiprack_300ul_D12 + - opentrons_96_tiprack_300ul_E12 + - opentrons_96_tiprack_300ul_F12 + - opentrons_96_tiprack_300ul_G12 + - opentrons_96_tiprack_300ul_H12 + class: '' + config: + barcode: null + category: tip_rack + model: Opentrons OT-2 96 Tip Rack 300 µL + ordering: + A1: opentrons_96_tiprack_300ul_A1 + B1: opentrons_96_tiprack_300ul_B1 + C1: opentrons_96_tiprack_300ul_C1 + D1: opentrons_96_tiprack_300ul_D1 + E1: opentrons_96_tiprack_300ul_E1 + F1: opentrons_96_tiprack_300ul_F1 + G1: opentrons_96_tiprack_300ul_G1 + H1: opentrons_96_tiprack_300ul_H1 + A2: opentrons_96_tiprack_300ul_A2 + B2: opentrons_96_tiprack_300ul_B2 + C2: opentrons_96_tiprack_300ul_C2 + D2: opentrons_96_tiprack_300ul_D2 + E2: opentrons_96_tiprack_300ul_E2 + F2: opentrons_96_tiprack_300ul_F2 + G2: opentrons_96_tiprack_300ul_G2 + H2: opentrons_96_tiprack_300ul_H2 + A3: opentrons_96_tiprack_300ul_A3 + B3: opentrons_96_tiprack_300ul_B3 + C3: opentrons_96_tiprack_300ul_C3 + D3: opentrons_96_tiprack_300ul_D3 + E3: opentrons_96_tiprack_300ul_E3 + F3: opentrons_96_tiprack_300ul_F3 + G3: opentrons_96_tiprack_300ul_G3 + H3: opentrons_96_tiprack_300ul_H3 + A4: opentrons_96_tiprack_300ul_A4 + B4: opentrons_96_tiprack_300ul_B4 + C4: opentrons_96_tiprack_300ul_C4 + D4: opentrons_96_tiprack_300ul_D4 + E4: opentrons_96_tiprack_300ul_E4 + F4: opentrons_96_tiprack_300ul_F4 + G4: opentrons_96_tiprack_300ul_G4 + H4: opentrons_96_tiprack_300ul_H4 + A5: opentrons_96_tiprack_300ul_A5 + B5: opentrons_96_tiprack_300ul_B5 + C5: opentrons_96_tiprack_300ul_C5 + D5: opentrons_96_tiprack_300ul_D5 + E5: opentrons_96_tiprack_300ul_E5 + F5: opentrons_96_tiprack_300ul_F5 + G5: opentrons_96_tiprack_300ul_G5 + H5: opentrons_96_tiprack_300ul_H5 + A6: opentrons_96_tiprack_300ul_A6 + B6: opentrons_96_tiprack_300ul_B6 + C6: opentrons_96_tiprack_300ul_C6 + D6: opentrons_96_tiprack_300ul_D6 + E6: opentrons_96_tiprack_300ul_E6 + F6: opentrons_96_tiprack_300ul_F6 + G6: opentrons_96_tiprack_300ul_G6 + H6: opentrons_96_tiprack_300ul_H6 + A7: opentrons_96_tiprack_300ul_A7 + B7: opentrons_96_tiprack_300ul_B7 + C7: opentrons_96_tiprack_300ul_C7 + D7: opentrons_96_tiprack_300ul_D7 + E7: opentrons_96_tiprack_300ul_E7 + F7: opentrons_96_tiprack_300ul_F7 + G7: opentrons_96_tiprack_300ul_G7 + H7: opentrons_96_tiprack_300ul_H7 + A8: opentrons_96_tiprack_300ul_A8 + B8: opentrons_96_tiprack_300ul_B8 + C8: opentrons_96_tiprack_300ul_C8 + D8: opentrons_96_tiprack_300ul_D8 + E8: opentrons_96_tiprack_300ul_E8 + F8: opentrons_96_tiprack_300ul_F8 + G8: opentrons_96_tiprack_300ul_G8 + H8: opentrons_96_tiprack_300ul_H8 + A9: opentrons_96_tiprack_300ul_A9 + B9: opentrons_96_tiprack_300ul_B9 + C9: opentrons_96_tiprack_300ul_C9 + D9: opentrons_96_tiprack_300ul_D9 + E9: opentrons_96_tiprack_300ul_E9 + F9: opentrons_96_tiprack_300ul_F9 + G9: opentrons_96_tiprack_300ul_G9 + H9: opentrons_96_tiprack_300ul_H9 + A10: opentrons_96_tiprack_300ul_A10 + B10: opentrons_96_tiprack_300ul_B10 + C10: opentrons_96_tiprack_300ul_C10 + D10: opentrons_96_tiprack_300ul_D10 + E10: opentrons_96_tiprack_300ul_E10 + F10: opentrons_96_tiprack_300ul_F10 + G10: opentrons_96_tiprack_300ul_G10 + H10: opentrons_96_tiprack_300ul_H10 + A11: opentrons_96_tiprack_300ul_A11 + B11: opentrons_96_tiprack_300ul_B11 + C11: opentrons_96_tiprack_300ul_C11 + D11: opentrons_96_tiprack_300ul_D11 + E11: opentrons_96_tiprack_300ul_E11 + F11: opentrons_96_tiprack_300ul_F11 + G11: opentrons_96_tiprack_300ul_G11 + H11: opentrons_96_tiprack_300ul_H11 + A12: opentrons_96_tiprack_300ul_A12 + B12: opentrons_96_tiprack_300ul_B12 + C12: opentrons_96_tiprack_300ul_C12 + D12: opentrons_96_tiprack_300ul_D12 + E12: opentrons_96_tiprack_300ul_E12 + F12: opentrons_96_tiprack_300ul_F12 + G12: opentrons_96_tiprack_300ul_G12 + H12: opentrons_96_tiprack_300ul_H12 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.48 + size_z: 64.49 + type: TipRack + data: {} + id: opentrons_96_tiprack_300ul + name: opentrons_96_tiprack_300ul + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_A1 + name: opentrons_96_tiprack_300ul_A1 + parent: opentrons_96_tiprack_300ul + position: + x: 12.531 + y: 72.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_B1 + name: opentrons_96_tiprack_300ul_B1 + parent: opentrons_96_tiprack_300ul + position: + x: 12.531 + y: 63.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_C1 + name: opentrons_96_tiprack_300ul_C1 + parent: opentrons_96_tiprack_300ul + position: + x: 12.531 + y: 54.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_D1 + name: opentrons_96_tiprack_300ul_D1 + parent: opentrons_96_tiprack_300ul + position: + x: 12.531 + y: 45.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_E1 + name: opentrons_96_tiprack_300ul_E1 + parent: opentrons_96_tiprack_300ul + position: + x: 12.531 + y: 36.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_F1 + name: opentrons_96_tiprack_300ul_F1 + parent: opentrons_96_tiprack_300ul + position: + x: 12.531 + y: 27.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_G1 + name: opentrons_96_tiprack_300ul_G1 + parent: opentrons_96_tiprack_300ul + position: + x: 12.531 + y: 18.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_H1 + name: opentrons_96_tiprack_300ul_H1 + parent: opentrons_96_tiprack_300ul + position: + x: 12.531 + y: 9.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_A2 + name: opentrons_96_tiprack_300ul_A2 + parent: opentrons_96_tiprack_300ul + position: + x: 21.531 + y: 72.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_B2 + name: opentrons_96_tiprack_300ul_B2 + parent: opentrons_96_tiprack_300ul + position: + x: 21.531 + y: 63.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_C2 + name: opentrons_96_tiprack_300ul_C2 + parent: opentrons_96_tiprack_300ul + position: + x: 21.531 + y: 54.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_D2 + name: opentrons_96_tiprack_300ul_D2 + parent: opentrons_96_tiprack_300ul + position: + x: 21.531 + y: 45.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_E2 + name: opentrons_96_tiprack_300ul_E2 + parent: opentrons_96_tiprack_300ul + position: + x: 21.531 + y: 36.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_F2 + name: opentrons_96_tiprack_300ul_F2 + parent: opentrons_96_tiprack_300ul + position: + x: 21.531 + y: 27.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_G2 + name: opentrons_96_tiprack_300ul_G2 + parent: opentrons_96_tiprack_300ul + position: + x: 21.531 + y: 18.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_H2 + name: opentrons_96_tiprack_300ul_H2 + parent: opentrons_96_tiprack_300ul + position: + x: 21.531 + y: 9.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_A3 + name: opentrons_96_tiprack_300ul_A3 + parent: opentrons_96_tiprack_300ul + position: + x: 30.531 + y: 72.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_B3 + name: opentrons_96_tiprack_300ul_B3 + parent: opentrons_96_tiprack_300ul + position: + x: 30.531 + y: 63.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_C3 + name: opentrons_96_tiprack_300ul_C3 + parent: opentrons_96_tiprack_300ul + position: + x: 30.531 + y: 54.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_D3 + name: opentrons_96_tiprack_300ul_D3 + parent: opentrons_96_tiprack_300ul + position: + x: 30.531 + y: 45.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_E3 + name: opentrons_96_tiprack_300ul_E3 + parent: opentrons_96_tiprack_300ul + position: + x: 30.531 + y: 36.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_F3 + name: opentrons_96_tiprack_300ul_F3 + parent: opentrons_96_tiprack_300ul + position: + x: 30.531 + y: 27.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_G3 + name: opentrons_96_tiprack_300ul_G3 + parent: opentrons_96_tiprack_300ul + position: + x: 30.531 + y: 18.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_H3 + name: opentrons_96_tiprack_300ul_H3 + parent: opentrons_96_tiprack_300ul + position: + x: 30.531 + y: 9.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_A4 + name: opentrons_96_tiprack_300ul_A4 + parent: opentrons_96_tiprack_300ul + position: + x: 39.531 + y: 72.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_B4 + name: opentrons_96_tiprack_300ul_B4 + parent: opentrons_96_tiprack_300ul + position: + x: 39.531 + y: 63.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_C4 + name: opentrons_96_tiprack_300ul_C4 + parent: opentrons_96_tiprack_300ul + position: + x: 39.531 + y: 54.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_D4 + name: opentrons_96_tiprack_300ul_D4 + parent: opentrons_96_tiprack_300ul + position: + x: 39.531 + y: 45.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_E4 + name: opentrons_96_tiprack_300ul_E4 + parent: opentrons_96_tiprack_300ul + position: + x: 39.531 + y: 36.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_F4 + name: opentrons_96_tiprack_300ul_F4 + parent: opentrons_96_tiprack_300ul + position: + x: 39.531 + y: 27.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_G4 + name: opentrons_96_tiprack_300ul_G4 + parent: opentrons_96_tiprack_300ul + position: + x: 39.531 + y: 18.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_H4 + name: opentrons_96_tiprack_300ul_H4 + parent: opentrons_96_tiprack_300ul + position: + x: 39.531 + y: 9.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_A5 + name: opentrons_96_tiprack_300ul_A5 + parent: opentrons_96_tiprack_300ul + position: + x: 48.531 + y: 72.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_B5 + name: opentrons_96_tiprack_300ul_B5 + parent: opentrons_96_tiprack_300ul + position: + x: 48.531 + y: 63.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_C5 + name: opentrons_96_tiprack_300ul_C5 + parent: opentrons_96_tiprack_300ul + position: + x: 48.531 + y: 54.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_D5 + name: opentrons_96_tiprack_300ul_D5 + parent: opentrons_96_tiprack_300ul + position: + x: 48.531 + y: 45.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_E5 + name: opentrons_96_tiprack_300ul_E5 + parent: opentrons_96_tiprack_300ul + position: + x: 48.531 + y: 36.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_F5 + name: opentrons_96_tiprack_300ul_F5 + parent: opentrons_96_tiprack_300ul + position: + x: 48.531 + y: 27.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_G5 + name: opentrons_96_tiprack_300ul_G5 + parent: opentrons_96_tiprack_300ul + position: + x: 48.531 + y: 18.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_H5 + name: opentrons_96_tiprack_300ul_H5 + parent: opentrons_96_tiprack_300ul + position: + x: 48.531 + y: 9.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_A6 + name: opentrons_96_tiprack_300ul_A6 + parent: opentrons_96_tiprack_300ul + position: + x: 57.531 + y: 72.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_B6 + name: opentrons_96_tiprack_300ul_B6 + parent: opentrons_96_tiprack_300ul + position: + x: 57.531 + y: 63.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_C6 + name: opentrons_96_tiprack_300ul_C6 + parent: opentrons_96_tiprack_300ul + position: + x: 57.531 + y: 54.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_D6 + name: opentrons_96_tiprack_300ul_D6 + parent: opentrons_96_tiprack_300ul + position: + x: 57.531 + y: 45.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_E6 + name: opentrons_96_tiprack_300ul_E6 + parent: opentrons_96_tiprack_300ul + position: + x: 57.531 + y: 36.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_F6 + name: opentrons_96_tiprack_300ul_F6 + parent: opentrons_96_tiprack_300ul + position: + x: 57.531 + y: 27.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_G6 + name: opentrons_96_tiprack_300ul_G6 + parent: opentrons_96_tiprack_300ul + position: + x: 57.531 + y: 18.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_H6 + name: opentrons_96_tiprack_300ul_H6 + parent: opentrons_96_tiprack_300ul + position: + x: 57.531 + y: 9.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_A7 + name: opentrons_96_tiprack_300ul_A7 + parent: opentrons_96_tiprack_300ul + position: + x: 66.531 + y: 72.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_B7 + name: opentrons_96_tiprack_300ul_B7 + parent: opentrons_96_tiprack_300ul + position: + x: 66.531 + y: 63.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_C7 + name: opentrons_96_tiprack_300ul_C7 + parent: opentrons_96_tiprack_300ul + position: + x: 66.531 + y: 54.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_D7 + name: opentrons_96_tiprack_300ul_D7 + parent: opentrons_96_tiprack_300ul + position: + x: 66.531 + y: 45.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_E7 + name: opentrons_96_tiprack_300ul_E7 + parent: opentrons_96_tiprack_300ul + position: + x: 66.531 + y: 36.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_F7 + name: opentrons_96_tiprack_300ul_F7 + parent: opentrons_96_tiprack_300ul + position: + x: 66.531 + y: 27.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_G7 + name: opentrons_96_tiprack_300ul_G7 + parent: opentrons_96_tiprack_300ul + position: + x: 66.531 + y: 18.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_H7 + name: opentrons_96_tiprack_300ul_H7 + parent: opentrons_96_tiprack_300ul + position: + x: 66.531 + y: 9.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_A8 + name: opentrons_96_tiprack_300ul_A8 + parent: opentrons_96_tiprack_300ul + position: + x: 75.531 + y: 72.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_B8 + name: opentrons_96_tiprack_300ul_B8 + parent: opentrons_96_tiprack_300ul + position: + x: 75.531 + y: 63.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_C8 + name: opentrons_96_tiprack_300ul_C8 + parent: opentrons_96_tiprack_300ul + position: + x: 75.531 + y: 54.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_D8 + name: opentrons_96_tiprack_300ul_D8 + parent: opentrons_96_tiprack_300ul + position: + x: 75.531 + y: 45.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_E8 + name: opentrons_96_tiprack_300ul_E8 + parent: opentrons_96_tiprack_300ul + position: + x: 75.531 + y: 36.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_F8 + name: opentrons_96_tiprack_300ul_F8 + parent: opentrons_96_tiprack_300ul + position: + x: 75.531 + y: 27.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_G8 + name: opentrons_96_tiprack_300ul_G8 + parent: opentrons_96_tiprack_300ul + position: + x: 75.531 + y: 18.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_H8 + name: opentrons_96_tiprack_300ul_H8 + parent: opentrons_96_tiprack_300ul + position: + x: 75.531 + y: 9.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_A9 + name: opentrons_96_tiprack_300ul_A9 + parent: opentrons_96_tiprack_300ul + position: + x: 84.531 + y: 72.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_B9 + name: opentrons_96_tiprack_300ul_B9 + parent: opentrons_96_tiprack_300ul + position: + x: 84.531 + y: 63.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_C9 + name: opentrons_96_tiprack_300ul_C9 + parent: opentrons_96_tiprack_300ul + position: + x: 84.531 + y: 54.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_D9 + name: opentrons_96_tiprack_300ul_D9 + parent: opentrons_96_tiprack_300ul + position: + x: 84.531 + y: 45.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_E9 + name: opentrons_96_tiprack_300ul_E9 + parent: opentrons_96_tiprack_300ul + position: + x: 84.531 + y: 36.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_F9 + name: opentrons_96_tiprack_300ul_F9 + parent: opentrons_96_tiprack_300ul + position: + x: 84.531 + y: 27.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_G9 + name: opentrons_96_tiprack_300ul_G9 + parent: opentrons_96_tiprack_300ul + position: + x: 84.531 + y: 18.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_H9 + name: opentrons_96_tiprack_300ul_H9 + parent: opentrons_96_tiprack_300ul + position: + x: 84.531 + y: 9.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_A10 + name: opentrons_96_tiprack_300ul_A10 + parent: opentrons_96_tiprack_300ul + position: + x: 93.531 + y: 72.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_B10 + name: opentrons_96_tiprack_300ul_B10 + parent: opentrons_96_tiprack_300ul + position: + x: 93.531 + y: 63.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_C10 + name: opentrons_96_tiprack_300ul_C10 + parent: opentrons_96_tiprack_300ul + position: + x: 93.531 + y: 54.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_D10 + name: opentrons_96_tiprack_300ul_D10 + parent: opentrons_96_tiprack_300ul + position: + x: 93.531 + y: 45.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_E10 + name: opentrons_96_tiprack_300ul_E10 + parent: opentrons_96_tiprack_300ul + position: + x: 93.531 + y: 36.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_F10 + name: opentrons_96_tiprack_300ul_F10 + parent: opentrons_96_tiprack_300ul + position: + x: 93.531 + y: 27.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_G10 + name: opentrons_96_tiprack_300ul_G10 + parent: opentrons_96_tiprack_300ul + position: + x: 93.531 + y: 18.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_H10 + name: opentrons_96_tiprack_300ul_H10 + parent: opentrons_96_tiprack_300ul + position: + x: 93.531 + y: 9.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_A11 + name: opentrons_96_tiprack_300ul_A11 + parent: opentrons_96_tiprack_300ul + position: + x: 102.531 + y: 72.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_B11 + name: opentrons_96_tiprack_300ul_B11 + parent: opentrons_96_tiprack_300ul + position: + x: 102.531 + y: 63.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_C11 + name: opentrons_96_tiprack_300ul_C11 + parent: opentrons_96_tiprack_300ul + position: + x: 102.531 + y: 54.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_D11 + name: opentrons_96_tiprack_300ul_D11 + parent: opentrons_96_tiprack_300ul + position: + x: 102.531 + y: 45.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_E11 + name: opentrons_96_tiprack_300ul_E11 + parent: opentrons_96_tiprack_300ul + position: + x: 102.531 + y: 36.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_F11 + name: opentrons_96_tiprack_300ul_F11 + parent: opentrons_96_tiprack_300ul + position: + x: 102.531 + y: 27.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_G11 + name: opentrons_96_tiprack_300ul_G11 + parent: opentrons_96_tiprack_300ul + position: + x: 102.531 + y: 18.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_H11 + name: opentrons_96_tiprack_300ul_H11 + parent: opentrons_96_tiprack_300ul + position: + x: 102.531 + y: 9.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_A12 + name: opentrons_96_tiprack_300ul_A12 + parent: opentrons_96_tiprack_300ul + position: + x: 111.531 + y: 72.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_B12 + name: opentrons_96_tiprack_300ul_B12 + parent: opentrons_96_tiprack_300ul + position: + x: 111.531 + y: 63.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_C12 + name: opentrons_96_tiprack_300ul_C12 + parent: opentrons_96_tiprack_300ul + position: + x: 111.531 + y: 54.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_D12 + name: opentrons_96_tiprack_300ul_D12 + parent: opentrons_96_tiprack_300ul + position: + x: 111.531 + y: 45.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_E12 + name: opentrons_96_tiprack_300ul_E12 + parent: opentrons_96_tiprack_300ul + position: + x: 111.531 + y: 36.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_F12 + name: opentrons_96_tiprack_300ul_F12 + parent: opentrons_96_tiprack_300ul + position: + x: 111.531 + y: 27.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_G12 + name: opentrons_96_tiprack_300ul_G12 + parent: opentrons_96_tiprack_300ul + position: + x: 111.531 + y: 18.391 + z: 5.39 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.698 + size_y: 3.698 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip: + fitting_depth: 7.47 + has_filter: false + maximal_volume: 300.0 + total_tip_length: 59.3 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_tiprack_300ul_H12 + name: opentrons_96_tiprack_300ul_H12 + parent: opentrons_96_tiprack_300ul + position: + x: 111.531 + y: 9.391 + z: 5.39 + sample_id: null + type: container + description: Opentrons 96 tiprack 300ul + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tip_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +tipone_96_tiprack_200ul: + category: + - tip_racks + class: + module: pylabrobot.resources.opentrons.tip_racks:tipone_96_tiprack_200ul + type: pylabrobot + config_info: + - children: + - tipone_96_tiprack_200ul_A1 + - tipone_96_tiprack_200ul_B1 + - tipone_96_tiprack_200ul_C1 + - tipone_96_tiprack_200ul_D1 + - tipone_96_tiprack_200ul_E1 + - tipone_96_tiprack_200ul_F1 + - tipone_96_tiprack_200ul_G1 + - tipone_96_tiprack_200ul_H1 + - tipone_96_tiprack_200ul_A2 + - tipone_96_tiprack_200ul_B2 + - tipone_96_tiprack_200ul_C2 + - tipone_96_tiprack_200ul_D2 + - tipone_96_tiprack_200ul_E2 + - tipone_96_tiprack_200ul_F2 + - tipone_96_tiprack_200ul_G2 + - tipone_96_tiprack_200ul_H2 + - tipone_96_tiprack_200ul_A3 + - tipone_96_tiprack_200ul_B3 + - tipone_96_tiprack_200ul_C3 + - tipone_96_tiprack_200ul_D3 + - tipone_96_tiprack_200ul_E3 + - tipone_96_tiprack_200ul_F3 + - tipone_96_tiprack_200ul_G3 + - tipone_96_tiprack_200ul_H3 + - tipone_96_tiprack_200ul_A4 + - tipone_96_tiprack_200ul_B4 + - tipone_96_tiprack_200ul_C4 + - tipone_96_tiprack_200ul_D4 + - tipone_96_tiprack_200ul_E4 + - tipone_96_tiprack_200ul_F4 + - tipone_96_tiprack_200ul_G4 + - tipone_96_tiprack_200ul_H4 + - tipone_96_tiprack_200ul_A5 + - tipone_96_tiprack_200ul_B5 + - tipone_96_tiprack_200ul_C5 + - tipone_96_tiprack_200ul_D5 + - tipone_96_tiprack_200ul_E5 + - tipone_96_tiprack_200ul_F5 + - tipone_96_tiprack_200ul_G5 + - tipone_96_tiprack_200ul_H5 + - tipone_96_tiprack_200ul_A6 + - tipone_96_tiprack_200ul_B6 + - tipone_96_tiprack_200ul_C6 + - tipone_96_tiprack_200ul_D6 + - tipone_96_tiprack_200ul_E6 + - tipone_96_tiprack_200ul_F6 + - tipone_96_tiprack_200ul_G6 + - tipone_96_tiprack_200ul_H6 + - tipone_96_tiprack_200ul_A7 + - tipone_96_tiprack_200ul_B7 + - tipone_96_tiprack_200ul_C7 + - tipone_96_tiprack_200ul_D7 + - tipone_96_tiprack_200ul_E7 + - tipone_96_tiprack_200ul_F7 + - tipone_96_tiprack_200ul_G7 + - tipone_96_tiprack_200ul_H7 + - tipone_96_tiprack_200ul_A8 + - tipone_96_tiprack_200ul_B8 + - tipone_96_tiprack_200ul_C8 + - tipone_96_tiprack_200ul_D8 + - tipone_96_tiprack_200ul_E8 + - tipone_96_tiprack_200ul_F8 + - tipone_96_tiprack_200ul_G8 + - tipone_96_tiprack_200ul_H8 + - tipone_96_tiprack_200ul_A9 + - tipone_96_tiprack_200ul_B9 + - tipone_96_tiprack_200ul_C9 + - tipone_96_tiprack_200ul_D9 + - tipone_96_tiprack_200ul_E9 + - tipone_96_tiprack_200ul_F9 + - tipone_96_tiprack_200ul_G9 + - tipone_96_tiprack_200ul_H9 + - tipone_96_tiprack_200ul_A10 + - tipone_96_tiprack_200ul_B10 + - tipone_96_tiprack_200ul_C10 + - tipone_96_tiprack_200ul_D10 + - tipone_96_tiprack_200ul_E10 + - tipone_96_tiprack_200ul_F10 + - tipone_96_tiprack_200ul_G10 + - tipone_96_tiprack_200ul_H10 + - tipone_96_tiprack_200ul_A11 + - tipone_96_tiprack_200ul_B11 + - tipone_96_tiprack_200ul_C11 + - tipone_96_tiprack_200ul_D11 + - tipone_96_tiprack_200ul_E11 + - tipone_96_tiprack_200ul_F11 + - tipone_96_tiprack_200ul_G11 + - tipone_96_tiprack_200ul_H11 + - tipone_96_tiprack_200ul_A12 + - tipone_96_tiprack_200ul_B12 + - tipone_96_tiprack_200ul_C12 + - tipone_96_tiprack_200ul_D12 + - tipone_96_tiprack_200ul_E12 + - tipone_96_tiprack_200ul_F12 + - tipone_96_tiprack_200ul_G12 + - tipone_96_tiprack_200ul_H12 + class: '' + config: + barcode: null + category: tip_rack + model: TipOne 96 Tip Rack 200 µL + ordering: + A1: tipone_96_tiprack_200ul_A1 + B1: tipone_96_tiprack_200ul_B1 + C1: tipone_96_tiprack_200ul_C1 + D1: tipone_96_tiprack_200ul_D1 + E1: tipone_96_tiprack_200ul_E1 + F1: tipone_96_tiprack_200ul_F1 + G1: tipone_96_tiprack_200ul_G1 + H1: tipone_96_tiprack_200ul_H1 + A2: tipone_96_tiprack_200ul_A2 + B2: tipone_96_tiprack_200ul_B2 + C2: tipone_96_tiprack_200ul_C2 + D2: tipone_96_tiprack_200ul_D2 + E2: tipone_96_tiprack_200ul_E2 + F2: tipone_96_tiprack_200ul_F2 + G2: tipone_96_tiprack_200ul_G2 + H2: tipone_96_tiprack_200ul_H2 + A3: tipone_96_tiprack_200ul_A3 + B3: tipone_96_tiprack_200ul_B3 + C3: tipone_96_tiprack_200ul_C3 + D3: tipone_96_tiprack_200ul_D3 + E3: tipone_96_tiprack_200ul_E3 + F3: tipone_96_tiprack_200ul_F3 + G3: tipone_96_tiprack_200ul_G3 + H3: tipone_96_tiprack_200ul_H3 + A4: tipone_96_tiprack_200ul_A4 + B4: tipone_96_tiprack_200ul_B4 + C4: tipone_96_tiprack_200ul_C4 + D4: tipone_96_tiprack_200ul_D4 + E4: tipone_96_tiprack_200ul_E4 + F4: tipone_96_tiprack_200ul_F4 + G4: tipone_96_tiprack_200ul_G4 + H4: tipone_96_tiprack_200ul_H4 + A5: tipone_96_tiprack_200ul_A5 + B5: tipone_96_tiprack_200ul_B5 + C5: tipone_96_tiprack_200ul_C5 + D5: tipone_96_tiprack_200ul_D5 + E5: tipone_96_tiprack_200ul_E5 + F5: tipone_96_tiprack_200ul_F5 + G5: tipone_96_tiprack_200ul_G5 + H5: tipone_96_tiprack_200ul_H5 + A6: tipone_96_tiprack_200ul_A6 + B6: tipone_96_tiprack_200ul_B6 + C6: tipone_96_tiprack_200ul_C6 + D6: tipone_96_tiprack_200ul_D6 + E6: tipone_96_tiprack_200ul_E6 + F6: tipone_96_tiprack_200ul_F6 + G6: tipone_96_tiprack_200ul_G6 + H6: tipone_96_tiprack_200ul_H6 + A7: tipone_96_tiprack_200ul_A7 + B7: tipone_96_tiprack_200ul_B7 + C7: tipone_96_tiprack_200ul_C7 + D7: tipone_96_tiprack_200ul_D7 + E7: tipone_96_tiprack_200ul_E7 + F7: tipone_96_tiprack_200ul_F7 + G7: tipone_96_tiprack_200ul_G7 + H7: tipone_96_tiprack_200ul_H7 + A8: tipone_96_tiprack_200ul_A8 + B8: tipone_96_tiprack_200ul_B8 + C8: tipone_96_tiprack_200ul_C8 + D8: tipone_96_tiprack_200ul_D8 + E8: tipone_96_tiprack_200ul_E8 + F8: tipone_96_tiprack_200ul_F8 + G8: tipone_96_tiprack_200ul_G8 + H8: tipone_96_tiprack_200ul_H8 + A9: tipone_96_tiprack_200ul_A9 + B9: tipone_96_tiprack_200ul_B9 + C9: tipone_96_tiprack_200ul_C9 + D9: tipone_96_tiprack_200ul_D9 + E9: tipone_96_tiprack_200ul_E9 + F9: tipone_96_tiprack_200ul_F9 + G9: tipone_96_tiprack_200ul_G9 + H9: tipone_96_tiprack_200ul_H9 + A10: tipone_96_tiprack_200ul_A10 + B10: tipone_96_tiprack_200ul_B10 + C10: tipone_96_tiprack_200ul_C10 + D10: tipone_96_tiprack_200ul_D10 + E10: tipone_96_tiprack_200ul_E10 + F10: tipone_96_tiprack_200ul_F10 + G10: tipone_96_tiprack_200ul_G10 + H10: tipone_96_tiprack_200ul_H10 + A11: tipone_96_tiprack_200ul_A11 + B11: tipone_96_tiprack_200ul_B11 + C11: tipone_96_tiprack_200ul_C11 + D11: tipone_96_tiprack_200ul_D11 + E11: tipone_96_tiprack_200ul_E11 + F11: tipone_96_tiprack_200ul_F11 + G11: tipone_96_tiprack_200ul_G11 + H11: tipone_96_tiprack_200ul_H11 + A12: tipone_96_tiprack_200ul_A12 + B12: tipone_96_tiprack_200ul_B12 + C12: tipone_96_tiprack_200ul_C12 + D12: tipone_96_tiprack_200ul_D12 + E12: tipone_96_tiprack_200ul_E12 + F12: tipone_96_tiprack_200ul_F12 + G12: tipone_96_tiprack_200ul_G12 + H12: tipone_96_tiprack_200ul_H12 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.48 + size_z: 63.9 + type: TipRack + data: {} + id: tipone_96_tiprack_200ul + name: tipone_96_tiprack_200ul + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_A1 + name: tipone_96_tiprack_200ul_A1 + parent: tipone_96_tiprack_200ul + position: + x: 11.4275 + y: 69.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_B1 + name: tipone_96_tiprack_200ul_B1 + parent: tipone_96_tiprack_200ul + position: + x: 11.4275 + y: 60.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_C1 + name: tipone_96_tiprack_200ul_C1 + parent: tipone_96_tiprack_200ul + position: + x: 11.4275 + y: 51.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_D1 + name: tipone_96_tiprack_200ul_D1 + parent: tipone_96_tiprack_200ul + position: + x: 11.4275 + y: 42.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_E1 + name: tipone_96_tiprack_200ul_E1 + parent: tipone_96_tiprack_200ul + position: + x: 11.4275 + y: 33.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_F1 + name: tipone_96_tiprack_200ul_F1 + parent: tipone_96_tiprack_200ul + position: + x: 11.4275 + y: 24.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_G1 + name: tipone_96_tiprack_200ul_G1 + parent: tipone_96_tiprack_200ul + position: + x: 11.4275 + y: 15.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_H1 + name: tipone_96_tiprack_200ul_H1 + parent: tipone_96_tiprack_200ul + position: + x: 11.4275 + y: 6.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_A2 + name: tipone_96_tiprack_200ul_A2 + parent: tipone_96_tiprack_200ul + position: + x: 20.4275 + y: 69.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_B2 + name: tipone_96_tiprack_200ul_B2 + parent: tipone_96_tiprack_200ul + position: + x: 20.4275 + y: 60.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_C2 + name: tipone_96_tiprack_200ul_C2 + parent: tipone_96_tiprack_200ul + position: + x: 20.4275 + y: 51.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_D2 + name: tipone_96_tiprack_200ul_D2 + parent: tipone_96_tiprack_200ul + position: + x: 20.4275 + y: 42.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_E2 + name: tipone_96_tiprack_200ul_E2 + parent: tipone_96_tiprack_200ul + position: + x: 20.4275 + y: 33.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_F2 + name: tipone_96_tiprack_200ul_F2 + parent: tipone_96_tiprack_200ul + position: + x: 20.4275 + y: 24.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_G2 + name: tipone_96_tiprack_200ul_G2 + parent: tipone_96_tiprack_200ul + position: + x: 20.4275 + y: 15.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_H2 + name: tipone_96_tiprack_200ul_H2 + parent: tipone_96_tiprack_200ul + position: + x: 20.4275 + y: 6.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_A3 + name: tipone_96_tiprack_200ul_A3 + parent: tipone_96_tiprack_200ul + position: + x: 29.4275 + y: 69.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_B3 + name: tipone_96_tiprack_200ul_B3 + parent: tipone_96_tiprack_200ul + position: + x: 29.4275 + y: 60.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_C3 + name: tipone_96_tiprack_200ul_C3 + parent: tipone_96_tiprack_200ul + position: + x: 29.4275 + y: 51.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_D3 + name: tipone_96_tiprack_200ul_D3 + parent: tipone_96_tiprack_200ul + position: + x: 29.4275 + y: 42.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_E3 + name: tipone_96_tiprack_200ul_E3 + parent: tipone_96_tiprack_200ul + position: + x: 29.4275 + y: 33.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_F3 + name: tipone_96_tiprack_200ul_F3 + parent: tipone_96_tiprack_200ul + position: + x: 29.4275 + y: 24.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_G3 + name: tipone_96_tiprack_200ul_G3 + parent: tipone_96_tiprack_200ul + position: + x: 29.4275 + y: 15.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_H3 + name: tipone_96_tiprack_200ul_H3 + parent: tipone_96_tiprack_200ul + position: + x: 29.4275 + y: 6.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_A4 + name: tipone_96_tiprack_200ul_A4 + parent: tipone_96_tiprack_200ul + position: + x: 38.4275 + y: 69.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_B4 + name: tipone_96_tiprack_200ul_B4 + parent: tipone_96_tiprack_200ul + position: + x: 38.4275 + y: 60.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_C4 + name: tipone_96_tiprack_200ul_C4 + parent: tipone_96_tiprack_200ul + position: + x: 38.4275 + y: 51.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_D4 + name: tipone_96_tiprack_200ul_D4 + parent: tipone_96_tiprack_200ul + position: + x: 38.4275 + y: 42.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_E4 + name: tipone_96_tiprack_200ul_E4 + parent: tipone_96_tiprack_200ul + position: + x: 38.4275 + y: 33.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_F4 + name: tipone_96_tiprack_200ul_F4 + parent: tipone_96_tiprack_200ul + position: + x: 38.4275 + y: 24.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_G4 + name: tipone_96_tiprack_200ul_G4 + parent: tipone_96_tiprack_200ul + position: + x: 38.4275 + y: 15.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_H4 + name: tipone_96_tiprack_200ul_H4 + parent: tipone_96_tiprack_200ul + position: + x: 38.4275 + y: 6.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_A5 + name: tipone_96_tiprack_200ul_A5 + parent: tipone_96_tiprack_200ul + position: + x: 47.4275 + y: 69.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_B5 + name: tipone_96_tiprack_200ul_B5 + parent: tipone_96_tiprack_200ul + position: + x: 47.4275 + y: 60.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_C5 + name: tipone_96_tiprack_200ul_C5 + parent: tipone_96_tiprack_200ul + position: + x: 47.4275 + y: 51.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_D5 + name: tipone_96_tiprack_200ul_D5 + parent: tipone_96_tiprack_200ul + position: + x: 47.4275 + y: 42.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_E5 + name: tipone_96_tiprack_200ul_E5 + parent: tipone_96_tiprack_200ul + position: + x: 47.4275 + y: 33.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_F5 + name: tipone_96_tiprack_200ul_F5 + parent: tipone_96_tiprack_200ul + position: + x: 47.4275 + y: 24.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_G5 + name: tipone_96_tiprack_200ul_G5 + parent: tipone_96_tiprack_200ul + position: + x: 47.4275 + y: 15.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_H5 + name: tipone_96_tiprack_200ul_H5 + parent: tipone_96_tiprack_200ul + position: + x: 47.4275 + y: 6.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_A6 + name: tipone_96_tiprack_200ul_A6 + parent: tipone_96_tiprack_200ul + position: + x: 56.4275 + y: 69.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_B6 + name: tipone_96_tiprack_200ul_B6 + parent: tipone_96_tiprack_200ul + position: + x: 56.4275 + y: 60.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_C6 + name: tipone_96_tiprack_200ul_C6 + parent: tipone_96_tiprack_200ul + position: + x: 56.4275 + y: 51.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_D6 + name: tipone_96_tiprack_200ul_D6 + parent: tipone_96_tiprack_200ul + position: + x: 56.4275 + y: 42.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_E6 + name: tipone_96_tiprack_200ul_E6 + parent: tipone_96_tiprack_200ul + position: + x: 56.4275 + y: 33.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_F6 + name: tipone_96_tiprack_200ul_F6 + parent: tipone_96_tiprack_200ul + position: + x: 56.4275 + y: 24.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_G6 + name: tipone_96_tiprack_200ul_G6 + parent: tipone_96_tiprack_200ul + position: + x: 56.4275 + y: 15.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_H6 + name: tipone_96_tiprack_200ul_H6 + parent: tipone_96_tiprack_200ul + position: + x: 56.4275 + y: 6.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_A7 + name: tipone_96_tiprack_200ul_A7 + parent: tipone_96_tiprack_200ul + position: + x: 65.4275 + y: 69.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_B7 + name: tipone_96_tiprack_200ul_B7 + parent: tipone_96_tiprack_200ul + position: + x: 65.4275 + y: 60.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_C7 + name: tipone_96_tiprack_200ul_C7 + parent: tipone_96_tiprack_200ul + position: + x: 65.4275 + y: 51.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_D7 + name: tipone_96_tiprack_200ul_D7 + parent: tipone_96_tiprack_200ul + position: + x: 65.4275 + y: 42.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_E7 + name: tipone_96_tiprack_200ul_E7 + parent: tipone_96_tiprack_200ul + position: + x: 65.4275 + y: 33.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_F7 + name: tipone_96_tiprack_200ul_F7 + parent: tipone_96_tiprack_200ul + position: + x: 65.4275 + y: 24.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_G7 + name: tipone_96_tiprack_200ul_G7 + parent: tipone_96_tiprack_200ul + position: + x: 65.4275 + y: 15.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_H7 + name: tipone_96_tiprack_200ul_H7 + parent: tipone_96_tiprack_200ul + position: + x: 65.4275 + y: 6.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_A8 + name: tipone_96_tiprack_200ul_A8 + parent: tipone_96_tiprack_200ul + position: + x: 74.4275 + y: 69.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_B8 + name: tipone_96_tiprack_200ul_B8 + parent: tipone_96_tiprack_200ul + position: + x: 74.4275 + y: 60.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_C8 + name: tipone_96_tiprack_200ul_C8 + parent: tipone_96_tiprack_200ul + position: + x: 74.4275 + y: 51.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_D8 + name: tipone_96_tiprack_200ul_D8 + parent: tipone_96_tiprack_200ul + position: + x: 74.4275 + y: 42.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_E8 + name: tipone_96_tiprack_200ul_E8 + parent: tipone_96_tiprack_200ul + position: + x: 74.4275 + y: 33.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_F8 + name: tipone_96_tiprack_200ul_F8 + parent: tipone_96_tiprack_200ul + position: + x: 74.4275 + y: 24.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_G8 + name: tipone_96_tiprack_200ul_G8 + parent: tipone_96_tiprack_200ul + position: + x: 74.4275 + y: 15.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_H8 + name: tipone_96_tiprack_200ul_H8 + parent: tipone_96_tiprack_200ul + position: + x: 74.4275 + y: 6.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_A9 + name: tipone_96_tiprack_200ul_A9 + parent: tipone_96_tiprack_200ul + position: + x: 83.4275 + y: 69.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_B9 + name: tipone_96_tiprack_200ul_B9 + parent: tipone_96_tiprack_200ul + position: + x: 83.4275 + y: 60.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_C9 + name: tipone_96_tiprack_200ul_C9 + parent: tipone_96_tiprack_200ul + position: + x: 83.4275 + y: 51.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_D9 + name: tipone_96_tiprack_200ul_D9 + parent: tipone_96_tiprack_200ul + position: + x: 83.4275 + y: 42.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_E9 + name: tipone_96_tiprack_200ul_E9 + parent: tipone_96_tiprack_200ul + position: + x: 83.4275 + y: 33.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_F9 + name: tipone_96_tiprack_200ul_F9 + parent: tipone_96_tiprack_200ul + position: + x: 83.4275 + y: 24.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_G9 + name: tipone_96_tiprack_200ul_G9 + parent: tipone_96_tiprack_200ul + position: + x: 83.4275 + y: 15.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_H9 + name: tipone_96_tiprack_200ul_H9 + parent: tipone_96_tiprack_200ul + position: + x: 83.4275 + y: 6.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_A10 + name: tipone_96_tiprack_200ul_A10 + parent: tipone_96_tiprack_200ul + position: + x: 92.4275 + y: 69.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_B10 + name: tipone_96_tiprack_200ul_B10 + parent: tipone_96_tiprack_200ul + position: + x: 92.4275 + y: 60.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_C10 + name: tipone_96_tiprack_200ul_C10 + parent: tipone_96_tiprack_200ul + position: + x: 92.4275 + y: 51.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_D10 + name: tipone_96_tiprack_200ul_D10 + parent: tipone_96_tiprack_200ul + position: + x: 92.4275 + y: 42.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_E10 + name: tipone_96_tiprack_200ul_E10 + parent: tipone_96_tiprack_200ul + position: + x: 92.4275 + y: 33.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_F10 + name: tipone_96_tiprack_200ul_F10 + parent: tipone_96_tiprack_200ul + position: + x: 92.4275 + y: 24.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_G10 + name: tipone_96_tiprack_200ul_G10 + parent: tipone_96_tiprack_200ul + position: + x: 92.4275 + y: 15.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_H10 + name: tipone_96_tiprack_200ul_H10 + parent: tipone_96_tiprack_200ul + position: + x: 92.4275 + y: 6.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_A11 + name: tipone_96_tiprack_200ul_A11 + parent: tipone_96_tiprack_200ul + position: + x: 101.4275 + y: 69.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_B11 + name: tipone_96_tiprack_200ul_B11 + parent: tipone_96_tiprack_200ul + position: + x: 101.4275 + y: 60.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_C11 + name: tipone_96_tiprack_200ul_C11 + parent: tipone_96_tiprack_200ul + position: + x: 101.4275 + y: 51.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_D11 + name: tipone_96_tiprack_200ul_D11 + parent: tipone_96_tiprack_200ul + position: + x: 101.4275 + y: 42.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_E11 + name: tipone_96_tiprack_200ul_E11 + parent: tipone_96_tiprack_200ul + position: + x: 101.4275 + y: 33.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_F11 + name: tipone_96_tiprack_200ul_F11 + parent: tipone_96_tiprack_200ul + position: + x: 101.4275 + y: 24.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_G11 + name: tipone_96_tiprack_200ul_G11 + parent: tipone_96_tiprack_200ul + position: + x: 101.4275 + y: 15.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_H11 + name: tipone_96_tiprack_200ul_H11 + parent: tipone_96_tiprack_200ul + position: + x: 101.4275 + y: 6.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_A12 + name: tipone_96_tiprack_200ul_A12 + parent: tipone_96_tiprack_200ul + position: + x: 110.4275 + y: 69.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_B12 + name: tipone_96_tiprack_200ul_B12 + parent: tipone_96_tiprack_200ul + position: + x: 110.4275 + y: 60.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_C12 + name: tipone_96_tiprack_200ul_C12 + parent: tipone_96_tiprack_200ul + position: + x: 110.4275 + y: 51.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_D12 + name: tipone_96_tiprack_200ul_D12 + parent: tipone_96_tiprack_200ul + position: + x: 110.4275 + y: 42.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_E12 + name: tipone_96_tiprack_200ul_E12 + parent: tipone_96_tiprack_200ul + position: + x: 110.4275 + y: 33.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_F12 + name: tipone_96_tiprack_200ul_F12 + parent: tipone_96_tiprack_200ul + position: + x: 110.4275 + y: 24.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_G12 + name: tipone_96_tiprack_200ul_G12 + parent: tipone_96_tiprack_200ul + position: + x: 110.4275 + y: 15.9875 + z: 53.36 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tip_spot + model: null + prototype_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.525 + size_y: 4.525 + size_z: 0 + type: TipSpot + data: + pending_tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip: + fitting_depth: 6.1 + has_filter: false + maximal_volume: 200.0 + total_tip_length: 50.93 + type: Tip + tip_state: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: tipone_96_tiprack_200ul_H12 + name: tipone_96_tiprack_200ul_H12 + parent: tipone_96_tiprack_200ul + position: + x: 110.4275 + y: 6.9875 + z: 53.36 + sample_id: null + type: container + description: TipOne 96 tiprack 200ul + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tip_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 diff --git a/unilabos/registry/resources/opentrons/tube_racks.yaml b/unilabos/registry/resources/opentrons/tube_racks.yaml index 6a33d81..6d3a431 100644 --- a/unilabos/registry/resources/opentrons/tube_racks.yaml +++ b/unilabos/registry/resources/opentrons/tube_racks.yaml @@ -1,119 +1,16304 @@ -opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap: - description: Opentrons 24 tuberack eppendorf 2ml safelock snapcap - class: - module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap - type: pylabrobot - -opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic: - description: Opentrons 24 tuberack eppendorf 2ml safelock snapcap acrylic - class: - module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic - type: pylabrobot - -opentrons_6_tuberack_falcon_50ml_conical: - description: Opentrons 6 tuberack falcon 50ml conical - class: - module: pylabrobot.resources.opentrons.tube_racks:opentrons_6_tuberack_falcon_50ml_conical - type: pylabrobot - -opentrons_15_tuberack_nest_15ml_conical: - description: Opentrons 15 tuberack nest 15ml conical - class: - module: pylabrobot.resources.opentrons.tube_racks:opentrons_15_tuberack_nest_15ml_conical - type: pylabrobot - -opentrons_24_tuberack_nest_2ml_screwcap: - description: Opentrons 24 tuberack nest 2ml screwcap - class: - module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_nest_2ml_screwcap - type: pylabrobot - -opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic: - description: Opentrons 24 tuberack generic 0.75ml snapcap acrylic - class: - module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic - type: pylabrobot - -opentrons_10_tuberack_nest_4x50ml_6x15ml_conical: - description: Opentrons 10 tuberack nest 4x50ml 6x15ml conical - class: - module: pylabrobot.resources.opentrons.tube_racks:opentrons_10_tuberack_nest_4x50ml_6x15ml_conical - type: pylabrobot - -opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic: - description: Opentrons 10 tuberack falcon 4x50ml 6x15ml conical acrylic - class: - module: pylabrobot.resources.opentrons.tube_racks:opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic - type: pylabrobot - -opentrons_24_tuberack_nest_1point5ml_screwcap: - description: Opentrons 24 tuberack nest 1.5ml screwcap - class: - module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_nest_1point5ml_screwcap - type: pylabrobot - -opentrons_24_tuberack_nest_1point5ml_snapcap: - description: Opentrons 24 tuberack nest 1.5ml snapcap - class: - module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_nest_1point5ml_snapcap - type: pylabrobot - opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical: - description: Opentrons 10 tuberack falcon 4x50ml 6x15ml conical - class: + category: + - tube_racks + class: module: pylabrobot.resources.opentrons.tube_racks:opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical type: pylabrobot - -opentrons_24_tuberack_nest_2ml_snapcap: - description: Opentrons 24 tuberack nest 2ml snapcap - class: - module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_nest_2ml_snapcap + config_info: + - children: + - opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_A1 + - opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_B1 + - opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_C1 + - opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_A2 + - opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_B2 + - opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_C2 + - opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_A3 + - opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_B3 + - opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_A4 + - opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_B4 + class: '' + config: + barcode: null + category: null + model: Opentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical + ordering: + A1: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_A1 + B1: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_B1 + C1: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_C1 + A2: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_A2 + B2: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_B2 + C2: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_C2 + A3: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_A3 + B3: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_B3 + A4: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_A4 + B4: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_B4 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.75 + size_y: 85.5 + size_z: 124.35 + type: TubeRack + data: {} + id: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical + name: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.5 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_A1 + name: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_A1 + parent: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical + position: + x: 8.612 + y: 62.482 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.5 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_B1 + name: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_B1 + parent: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical + position: + x: 8.612 + y: 37.482 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.5 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_C1 + name: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_C1 + parent: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical + position: + x: 8.612 + y: 12.482 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.5 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_A2 + name: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_A2 + parent: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical + position: + x: 33.612 + y: 62.482 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.5 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_B2 + name: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_B2 + parent: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical + position: + x: 33.612 + y: 37.482 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.5 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_C2 + name: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_C2 + parent: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical + position: + x: 33.612 + y: 12.482 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 50000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 19.665 + size_y: 19.665 + size_z: 113 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_A3 + name: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_A3 + parent: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical + position: + x: 61.5475 + y: 50.4175 + z: 7.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 50000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 19.665 + size_y: 19.665 + size_z: 113 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_B3 + name: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_B3 + parent: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical + position: + x: 61.5475 + y: 15.4175 + z: 7.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 50000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 19.665 + size_y: 19.665 + size_z: 113 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_A4 + name: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_A4 + parent: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical + position: + x: 96.5475 + y: 50.4175 + z: 7.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 50000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 19.665 + size_y: 19.665 + size_z: 113 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_B4 + name: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_B4 + parent: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical + position: + x: 96.5475 + y: 15.4175 + z: 7.3 + sample_id: null + type: container + description: Opentrons 10 tuberack falcon 4x50ml 6x15ml conical + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tube_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic: + category: + - tube_racks + class: + module: pylabrobot.resources.opentrons.tube_racks:opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic type: pylabrobot - -opentrons_24_tuberack_nest_0point5ml_screwcap: - description: Opentrons 24 tuberack nest 0.5ml screwcap - class: - module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_nest_0point5ml_screwcap + config_info: + - children: + - opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_A1 + - opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_B1 + - opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_C1 + - opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_A2 + - opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_B2 + - opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_C2 + - opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_A3 + - opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_B3 + - opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_A4 + - opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_B4 + class: '' + config: + barcode: null + category: null + model: Opentrons 10 Tube Rack (Acrylic) with Falcon 4x50 mL, 6x15 mL Conical + ordering: + A1: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_A1 + B1: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_B1 + C1: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_C1 + A2: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_A2 + B2: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_B2 + C2: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_C2 + A3: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_A3 + B3: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_B3 + A4: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_A4 + B4: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_B4 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.75 + size_y: 85.5 + size_z: 123.76 + type: TubeRack + data: {} + id: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic + name: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.98 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_A1 + name: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_A1 + parent: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic + position: + x: 13.732 + y: 68.732 + z: 5.78 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.98 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_B1 + name: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_B1 + parent: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic + position: + x: 13.732 + y: 37.232 + z: 5.78 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.98 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_C1 + name: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_C1 + parent: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic + position: + x: 13.732 + y: 5.732 + z: 5.78 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.98 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_A2 + name: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_A2 + parent: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic + position: + x: 36.732 + y: 68.732 + z: 5.78 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.98 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_B2 + name: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_B2 + parent: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic + position: + x: 36.732 + y: 37.232 + z: 5.78 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.98 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_C2 + name: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_C2 + parent: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic + position: + x: 36.732 + y: 5.732 + z: 5.78 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 50000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 19.665 + size_y: 19.665 + size_z: 113.85 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_A3 + name: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_A3 + parent: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic + position: + x: 60.3675 + y: 52.3675 + z: 5.95 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 50000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 19.665 + size_y: 19.665 + size_z: 113.85 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_B3 + name: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_B3 + parent: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic + position: + x: 60.3675 + y: 6.9675 + z: 5.95 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 50000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 19.665 + size_y: 19.665 + size_z: 113.85 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_A4 + name: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_A4 + parent: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic + position: + x: 96.2675 + y: 52.3675 + z: 5.95 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 50000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 19.665 + size_y: 19.665 + size_z: 113.85 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_B4 + name: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic_B4 + parent: opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic + position: + x: 96.2675 + y: 6.9675 + z: 5.95 + sample_id: null + type: container + description: Opentrons 10 tuberack falcon 4x50ml 6x15ml conical acrylic + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tube_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +opentrons_10_tuberack_nest_4x50ml_6x15ml_conical: + category: + - tube_racks + class: + module: pylabrobot.resources.opentrons.tube_racks:opentrons_10_tuberack_nest_4x50ml_6x15ml_conical type: pylabrobot - -opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap: - description: Opentrons 24 tuberack eppendorf 1.5ml safelock snapcap - class: - module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap - type: pylabrobot - -opentrons_6_tuberack_nest_50ml_conical: - description: Opentrons 6 tuberack nest 50ml conical - class: - module: pylabrobot.resources.opentrons.tube_racks:opentrons_6_tuberack_nest_50ml_conical - type: pylabrobot - + config_info: + - children: + - opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_A1 + - opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_B1 + - opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_C1 + - opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_A2 + - opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_B2 + - opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_C2 + - opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_A3 + - opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_B3 + - opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_A4 + - opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_B4 + class: '' + config: + barcode: null + category: null + model: Opentrons 10 Tube Rack with NEST 4x50 mL, 6x15 mL Conical + ordering: + A1: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_A1 + B1: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_B1 + C1: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_C1 + A2: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_A2 + B2: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_B2 + C2: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_C2 + A3: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_A3 + B3: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_B3 + A4: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_A4 + B4: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_B4 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.48 + size_z: 124.65 + type: TubeRack + data: {} + id: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical + name: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.96 + size_y: 10.96 + size_z: 117.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_A1 + name: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_A1 + parent: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical + position: + x: 8.4 + y: 62.27 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.96 + size_y: 10.96 + size_z: 117.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_B1 + name: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_B1 + parent: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical + position: + x: 8.4 + y: 37.27 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.96 + size_y: 10.96 + size_z: 117.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_C1 + name: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_C1 + parent: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical + position: + x: 8.4 + y: 12.27 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.96 + size_y: 10.96 + size_z: 117.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_A2 + name: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_A2 + parent: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical + position: + x: 33.4 + y: 62.27 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.96 + size_y: 10.96 + size_z: 117.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_B2 + name: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_B2 + parent: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical + position: + x: 33.4 + y: 37.27 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.96 + size_y: 10.96 + size_z: 117.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_C2 + name: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_C2 + parent: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical + position: + x: 33.4 + y: 12.27 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 50000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 19.764 + size_y: 19.764 + size_z: 113.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_A3 + name: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_A3 + parent: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical + position: + x: 61.498 + y: 50.368 + z: 7.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 50000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 19.764 + size_y: 19.764 + size_z: 113.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_B3 + name: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_B3 + parent: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical + position: + x: 61.498 + y: 15.368 + z: 7.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 50000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 19.764 + size_y: 19.764 + size_z: 113.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_A4 + name: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_A4 + parent: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical + position: + x: 96.498 + y: 50.368 + z: 7.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 50000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 19.764 + size_y: 19.764 + size_z: 113.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_B4 + name: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical_B4 + parent: opentrons_10_tuberack_nest_4x50ml_6x15ml_conical + position: + x: 96.498 + y: 15.368 + z: 7.3 + sample_id: null + type: container + description: Opentrons 10 tuberack nest 4x50ml 6x15ml conical + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tube_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 opentrons_15_tuberack_falcon_15ml_conical: - description: Opentrons 15 tuberack falcon 15ml conical - class: + category: + - tube_racks + class: module: pylabrobot.resources.opentrons.tube_racks:opentrons_15_tuberack_falcon_15ml_conical type: pylabrobot - -opentrons_24_tuberack_generic_2ml_screwcap: - description: Opentrons 24 tuberack generic 2ml screwcap - class: - module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_generic_2ml_screwcap + config_info: + - children: + - opentrons_15_tuberack_falcon_15ml_conical_A1 + - opentrons_15_tuberack_falcon_15ml_conical_B1 + - opentrons_15_tuberack_falcon_15ml_conical_C1 + - opentrons_15_tuberack_falcon_15ml_conical_A2 + - opentrons_15_tuberack_falcon_15ml_conical_B2 + - opentrons_15_tuberack_falcon_15ml_conical_C2 + - opentrons_15_tuberack_falcon_15ml_conical_A3 + - opentrons_15_tuberack_falcon_15ml_conical_B3 + - opentrons_15_tuberack_falcon_15ml_conical_C3 + - opentrons_15_tuberack_falcon_15ml_conical_A4 + - opentrons_15_tuberack_falcon_15ml_conical_B4 + - opentrons_15_tuberack_falcon_15ml_conical_C4 + - opentrons_15_tuberack_falcon_15ml_conical_A5 + - opentrons_15_tuberack_falcon_15ml_conical_B5 + - opentrons_15_tuberack_falcon_15ml_conical_C5 + class: '' + config: + barcode: null + category: null + model: Opentrons 15 Tube Rack with Falcon 15 mL Conical + ordering: + A1: opentrons_15_tuberack_falcon_15ml_conical_A1 + B1: opentrons_15_tuberack_falcon_15ml_conical_B1 + C1: opentrons_15_tuberack_falcon_15ml_conical_C1 + A2: opentrons_15_tuberack_falcon_15ml_conical_A2 + B2: opentrons_15_tuberack_falcon_15ml_conical_B2 + C2: opentrons_15_tuberack_falcon_15ml_conical_C2 + A3: opentrons_15_tuberack_falcon_15ml_conical_A3 + B3: opentrons_15_tuberack_falcon_15ml_conical_B3 + C3: opentrons_15_tuberack_falcon_15ml_conical_C3 + A4: opentrons_15_tuberack_falcon_15ml_conical_A4 + B4: opentrons_15_tuberack_falcon_15ml_conical_B4 + C4: opentrons_15_tuberack_falcon_15ml_conical_C4 + A5: opentrons_15_tuberack_falcon_15ml_conical_A5 + B5: opentrons_15_tuberack_falcon_15ml_conical_B5 + C5: opentrons_15_tuberack_falcon_15ml_conical_C5 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.48 + size_z: 124.35 + type: TubeRack + data: {} + id: opentrons_15_tuberack_falcon_15ml_conical + name: opentrons_15_tuberack_falcon_15ml_conical + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.5 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_falcon_15ml_conical_A1 + name: opentrons_15_tuberack_falcon_15ml_conical_A1 + parent: opentrons_15_tuberack_falcon_15ml_conical + position: + x: 8.612 + y: 62.472 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.5 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_falcon_15ml_conical_B1 + name: opentrons_15_tuberack_falcon_15ml_conical_B1 + parent: opentrons_15_tuberack_falcon_15ml_conical + position: + x: 8.612 + y: 37.472 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.5 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_falcon_15ml_conical_C1 + name: opentrons_15_tuberack_falcon_15ml_conical_C1 + parent: opentrons_15_tuberack_falcon_15ml_conical + position: + x: 8.612 + y: 12.472 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.5 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_falcon_15ml_conical_A2 + name: opentrons_15_tuberack_falcon_15ml_conical_A2 + parent: opentrons_15_tuberack_falcon_15ml_conical + position: + x: 33.612 + y: 62.472 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.5 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_falcon_15ml_conical_B2 + name: opentrons_15_tuberack_falcon_15ml_conical_B2 + parent: opentrons_15_tuberack_falcon_15ml_conical + position: + x: 33.612 + y: 37.472 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.5 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_falcon_15ml_conical_C2 + name: opentrons_15_tuberack_falcon_15ml_conical_C2 + parent: opentrons_15_tuberack_falcon_15ml_conical + position: + x: 33.612 + y: 12.472 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.5 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_falcon_15ml_conical_A3 + name: opentrons_15_tuberack_falcon_15ml_conical_A3 + parent: opentrons_15_tuberack_falcon_15ml_conical + position: + x: 58.612 + y: 62.472 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.5 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_falcon_15ml_conical_B3 + name: opentrons_15_tuberack_falcon_15ml_conical_B3 + parent: opentrons_15_tuberack_falcon_15ml_conical + position: + x: 58.612 + y: 37.472 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.5 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_falcon_15ml_conical_C3 + name: opentrons_15_tuberack_falcon_15ml_conical_C3 + parent: opentrons_15_tuberack_falcon_15ml_conical + position: + x: 58.612 + y: 12.472 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.5 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_falcon_15ml_conical_A4 + name: opentrons_15_tuberack_falcon_15ml_conical_A4 + parent: opentrons_15_tuberack_falcon_15ml_conical + position: + x: 83.612 + y: 62.472 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.5 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_falcon_15ml_conical_B4 + name: opentrons_15_tuberack_falcon_15ml_conical_B4 + parent: opentrons_15_tuberack_falcon_15ml_conical + position: + x: 83.612 + y: 37.472 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.5 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_falcon_15ml_conical_C4 + name: opentrons_15_tuberack_falcon_15ml_conical_C4 + parent: opentrons_15_tuberack_falcon_15ml_conical + position: + x: 83.612 + y: 12.472 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.5 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_falcon_15ml_conical_A5 + name: opentrons_15_tuberack_falcon_15ml_conical_A5 + parent: opentrons_15_tuberack_falcon_15ml_conical + position: + x: 108.612 + y: 62.472 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.5 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_falcon_15ml_conical_B5 + name: opentrons_15_tuberack_falcon_15ml_conical_B5 + parent: opentrons_15_tuberack_falcon_15ml_conical + position: + x: 108.612 + y: 37.472 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.536 + size_y: 10.536 + size_z: 117.5 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_falcon_15ml_conical_C5 + name: opentrons_15_tuberack_falcon_15ml_conical_C5 + parent: opentrons_15_tuberack_falcon_15ml_conical + position: + x: 108.612 + y: 12.472 + z: 6.85 + sample_id: null + type: container + description: Opentrons 15 tuberack falcon 15ml conical + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tube_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +opentrons_15_tuberack_nest_15ml_conical: + category: + - tube_racks + class: + module: pylabrobot.resources.opentrons.tube_racks:opentrons_15_tuberack_nest_15ml_conical type: pylabrobot - -opentrons_96_well_aluminum_block: - description: Opentrons 96 well aluminum block - class: - module: pylabrobot.resources.opentrons.tube_racks:opentrons_96_well_aluminum_block - type: pylabrobot - + config_info: + - children: + - opentrons_15_tuberack_nest_15ml_conical_A1 + - opentrons_15_tuberack_nest_15ml_conical_B1 + - opentrons_15_tuberack_nest_15ml_conical_C1 + - opentrons_15_tuberack_nest_15ml_conical_A2 + - opentrons_15_tuberack_nest_15ml_conical_B2 + - opentrons_15_tuberack_nest_15ml_conical_C2 + - opentrons_15_tuberack_nest_15ml_conical_A3 + - opentrons_15_tuberack_nest_15ml_conical_B3 + - opentrons_15_tuberack_nest_15ml_conical_C3 + - opentrons_15_tuberack_nest_15ml_conical_A4 + - opentrons_15_tuberack_nest_15ml_conical_B4 + - opentrons_15_tuberack_nest_15ml_conical_C4 + - opentrons_15_tuberack_nest_15ml_conical_A5 + - opentrons_15_tuberack_nest_15ml_conical_B5 + - opentrons_15_tuberack_nest_15ml_conical_C5 + class: '' + config: + barcode: null + category: null + model: Opentrons 15 Tube Rack with NEST 15 mL Conical + ordering: + A1: opentrons_15_tuberack_nest_15ml_conical_A1 + B1: opentrons_15_tuberack_nest_15ml_conical_B1 + C1: opentrons_15_tuberack_nest_15ml_conical_C1 + A2: opentrons_15_tuberack_nest_15ml_conical_A2 + B2: opentrons_15_tuberack_nest_15ml_conical_B2 + C2: opentrons_15_tuberack_nest_15ml_conical_C2 + A3: opentrons_15_tuberack_nest_15ml_conical_A3 + B3: opentrons_15_tuberack_nest_15ml_conical_B3 + C3: opentrons_15_tuberack_nest_15ml_conical_C3 + A4: opentrons_15_tuberack_nest_15ml_conical_A4 + B4: opentrons_15_tuberack_nest_15ml_conical_B4 + C4: opentrons_15_tuberack_nest_15ml_conical_C4 + A5: opentrons_15_tuberack_nest_15ml_conical_A5 + B5: opentrons_15_tuberack_nest_15ml_conical_B5 + C5: opentrons_15_tuberack_nest_15ml_conical_C5 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.48 + size_z: 124.65 + type: TubeRack + data: {} + id: opentrons_15_tuberack_nest_15ml_conical + name: opentrons_15_tuberack_nest_15ml_conical + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.96 + size_y: 10.96 + size_z: 117.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_nest_15ml_conical_A1 + name: opentrons_15_tuberack_nest_15ml_conical_A1 + parent: opentrons_15_tuberack_nest_15ml_conical + position: + x: 8.4 + y: 62.26 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.96 + size_y: 10.96 + size_z: 117.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_nest_15ml_conical_B1 + name: opentrons_15_tuberack_nest_15ml_conical_B1 + parent: opentrons_15_tuberack_nest_15ml_conical + position: + x: 8.4 + y: 37.26 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.96 + size_y: 10.96 + size_z: 117.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_nest_15ml_conical_C1 + name: opentrons_15_tuberack_nest_15ml_conical_C1 + parent: opentrons_15_tuberack_nest_15ml_conical + position: + x: 8.4 + y: 12.26 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.96 + size_y: 10.96 + size_z: 117.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_nest_15ml_conical_A2 + name: opentrons_15_tuberack_nest_15ml_conical_A2 + parent: opentrons_15_tuberack_nest_15ml_conical + position: + x: 33.4 + y: 62.26 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.96 + size_y: 10.96 + size_z: 117.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_nest_15ml_conical_B2 + name: opentrons_15_tuberack_nest_15ml_conical_B2 + parent: opentrons_15_tuberack_nest_15ml_conical + position: + x: 33.4 + y: 37.26 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.96 + size_y: 10.96 + size_z: 117.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_nest_15ml_conical_C2 + name: opentrons_15_tuberack_nest_15ml_conical_C2 + parent: opentrons_15_tuberack_nest_15ml_conical + position: + x: 33.4 + y: 12.26 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.96 + size_y: 10.96 + size_z: 117.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_nest_15ml_conical_A3 + name: opentrons_15_tuberack_nest_15ml_conical_A3 + parent: opentrons_15_tuberack_nest_15ml_conical + position: + x: 58.4 + y: 62.26 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.96 + size_y: 10.96 + size_z: 117.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_nest_15ml_conical_B3 + name: opentrons_15_tuberack_nest_15ml_conical_B3 + parent: opentrons_15_tuberack_nest_15ml_conical + position: + x: 58.4 + y: 37.26 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.96 + size_y: 10.96 + size_z: 117.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_nest_15ml_conical_C3 + name: opentrons_15_tuberack_nest_15ml_conical_C3 + parent: opentrons_15_tuberack_nest_15ml_conical + position: + x: 58.4 + y: 12.26 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.96 + size_y: 10.96 + size_z: 117.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_nest_15ml_conical_A4 + name: opentrons_15_tuberack_nest_15ml_conical_A4 + parent: opentrons_15_tuberack_nest_15ml_conical + position: + x: 83.4 + y: 62.26 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.96 + size_y: 10.96 + size_z: 117.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_nest_15ml_conical_B4 + name: opentrons_15_tuberack_nest_15ml_conical_B4 + parent: opentrons_15_tuberack_nest_15ml_conical + position: + x: 83.4 + y: 37.26 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.96 + size_y: 10.96 + size_z: 117.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_nest_15ml_conical_C4 + name: opentrons_15_tuberack_nest_15ml_conical_C4 + parent: opentrons_15_tuberack_nest_15ml_conical + position: + x: 83.4 + y: 12.26 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.96 + size_y: 10.96 + size_z: 117.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_nest_15ml_conical_A5 + name: opentrons_15_tuberack_nest_15ml_conical_A5 + parent: opentrons_15_tuberack_nest_15ml_conical + position: + x: 108.4 + y: 62.26 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.96 + size_y: 10.96 + size_z: 117.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_nest_15ml_conical_B5 + name: opentrons_15_tuberack_nest_15ml_conical_B5 + parent: opentrons_15_tuberack_nest_15ml_conical + position: + x: 108.4 + y: 37.26 + z: 6.85 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 15000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 10.96 + size_y: 10.96 + size_z: 117.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_15_tuberack_nest_15ml_conical_C5 + name: opentrons_15_tuberack_nest_15ml_conical_C5 + parent: opentrons_15_tuberack_nest_15ml_conical + position: + x: 108.4 + y: 12.26 + z: 6.85 + sample_id: null + type: container + description: Opentrons 15 tuberack nest 15ml conical + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tube_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 opentrons_24_aluminumblock_generic_2ml_screwcap: - description: Opentrons 24 aluminumblock generic 2ml screwcap - class: + category: + - tube_racks + class: module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_aluminumblock_generic_2ml_screwcap type: pylabrobot - + config_info: + - children: + - opentrons_24_aluminumblock_generic_2ml_screwcap_A1 + - opentrons_24_aluminumblock_generic_2ml_screwcap_B1 + - opentrons_24_aluminumblock_generic_2ml_screwcap_C1 + - opentrons_24_aluminumblock_generic_2ml_screwcap_D1 + - opentrons_24_aluminumblock_generic_2ml_screwcap_A2 + - opentrons_24_aluminumblock_generic_2ml_screwcap_B2 + - opentrons_24_aluminumblock_generic_2ml_screwcap_C2 + - opentrons_24_aluminumblock_generic_2ml_screwcap_D2 + - opentrons_24_aluminumblock_generic_2ml_screwcap_A3 + - opentrons_24_aluminumblock_generic_2ml_screwcap_B3 + - opentrons_24_aluminumblock_generic_2ml_screwcap_C3 + - opentrons_24_aluminumblock_generic_2ml_screwcap_D3 + - opentrons_24_aluminumblock_generic_2ml_screwcap_A4 + - opentrons_24_aluminumblock_generic_2ml_screwcap_B4 + - opentrons_24_aluminumblock_generic_2ml_screwcap_C4 + - opentrons_24_aluminumblock_generic_2ml_screwcap_D4 + - opentrons_24_aluminumblock_generic_2ml_screwcap_A5 + - opentrons_24_aluminumblock_generic_2ml_screwcap_B5 + - opentrons_24_aluminumblock_generic_2ml_screwcap_C5 + - opentrons_24_aluminumblock_generic_2ml_screwcap_D5 + - opentrons_24_aluminumblock_generic_2ml_screwcap_A6 + - opentrons_24_aluminumblock_generic_2ml_screwcap_B6 + - opentrons_24_aluminumblock_generic_2ml_screwcap_C6 + - opentrons_24_aluminumblock_generic_2ml_screwcap_D6 + class: '' + config: + barcode: null + category: null + model: Opentrons 24 Well Aluminum Block with Generic 2 mL Screwcap + ordering: + A1: opentrons_24_aluminumblock_generic_2ml_screwcap_A1 + B1: opentrons_24_aluminumblock_generic_2ml_screwcap_B1 + C1: opentrons_24_aluminumblock_generic_2ml_screwcap_C1 + D1: opentrons_24_aluminumblock_generic_2ml_screwcap_D1 + A2: opentrons_24_aluminumblock_generic_2ml_screwcap_A2 + B2: opentrons_24_aluminumblock_generic_2ml_screwcap_B2 + C2: opentrons_24_aluminumblock_generic_2ml_screwcap_C2 + D2: opentrons_24_aluminumblock_generic_2ml_screwcap_D2 + A3: opentrons_24_aluminumblock_generic_2ml_screwcap_A3 + B3: opentrons_24_aluminumblock_generic_2ml_screwcap_B3 + C3: opentrons_24_aluminumblock_generic_2ml_screwcap_C3 + D3: opentrons_24_aluminumblock_generic_2ml_screwcap_D3 + A4: opentrons_24_aluminumblock_generic_2ml_screwcap_A4 + B4: opentrons_24_aluminumblock_generic_2ml_screwcap_B4 + C4: opentrons_24_aluminumblock_generic_2ml_screwcap_C4 + D4: opentrons_24_aluminumblock_generic_2ml_screwcap_D4 + A5: opentrons_24_aluminumblock_generic_2ml_screwcap_A5 + B5: opentrons_24_aluminumblock_generic_2ml_screwcap_B5 + C5: opentrons_24_aluminumblock_generic_2ml_screwcap_C5 + D5: opentrons_24_aluminumblock_generic_2ml_screwcap_D5 + A6: opentrons_24_aluminumblock_generic_2ml_screwcap_A6 + B6: opentrons_24_aluminumblock_generic_2ml_screwcap_B6 + C6: opentrons_24_aluminumblock_generic_2ml_screwcap_C6 + D6: opentrons_24_aluminumblock_generic_2ml_screwcap_D6 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.75 + size_y: 85.5 + size_z: 48.7 + type: TubeRack + data: {} + id: opentrons_24_aluminumblock_generic_2ml_screwcap + name: opentrons_24_aluminumblock_generic_2ml_screwcap + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_generic_2ml_screwcap_A1 + name: opentrons_24_aluminumblock_generic_2ml_screwcap_A1 + parent: opentrons_24_aluminumblock_generic_2ml_screwcap + position: + x: 17.745 + y: 65.625 + z: 6.7 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_generic_2ml_screwcap_B1 + name: opentrons_24_aluminumblock_generic_2ml_screwcap_B1 + parent: opentrons_24_aluminumblock_generic_2ml_screwcap + position: + x: 17.745 + y: 48.375 + z: 6.7 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_generic_2ml_screwcap_C1 + name: opentrons_24_aluminumblock_generic_2ml_screwcap_C1 + parent: opentrons_24_aluminumblock_generic_2ml_screwcap + position: + x: 17.745 + y: 31.125 + z: 6.7 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_generic_2ml_screwcap_D1 + name: opentrons_24_aluminumblock_generic_2ml_screwcap_D1 + parent: opentrons_24_aluminumblock_generic_2ml_screwcap + position: + x: 17.745 + y: 13.875 + z: 6.7 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_generic_2ml_screwcap_A2 + name: opentrons_24_aluminumblock_generic_2ml_screwcap_A2 + parent: opentrons_24_aluminumblock_generic_2ml_screwcap + position: + x: 34.995 + y: 65.625 + z: 6.7 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_generic_2ml_screwcap_B2 + name: opentrons_24_aluminumblock_generic_2ml_screwcap_B2 + parent: opentrons_24_aluminumblock_generic_2ml_screwcap + position: + x: 34.995 + y: 48.375 + z: 6.7 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_generic_2ml_screwcap_C2 + name: opentrons_24_aluminumblock_generic_2ml_screwcap_C2 + parent: opentrons_24_aluminumblock_generic_2ml_screwcap + position: + x: 34.995 + y: 31.125 + z: 6.7 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_generic_2ml_screwcap_D2 + name: opentrons_24_aluminumblock_generic_2ml_screwcap_D2 + parent: opentrons_24_aluminumblock_generic_2ml_screwcap + position: + x: 34.995 + y: 13.875 + z: 6.7 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_generic_2ml_screwcap_A3 + name: opentrons_24_aluminumblock_generic_2ml_screwcap_A3 + parent: opentrons_24_aluminumblock_generic_2ml_screwcap + position: + x: 52.245 + y: 65.625 + z: 6.7 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_generic_2ml_screwcap_B3 + name: opentrons_24_aluminumblock_generic_2ml_screwcap_B3 + parent: opentrons_24_aluminumblock_generic_2ml_screwcap + position: + x: 52.245 + y: 48.375 + z: 6.7 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_generic_2ml_screwcap_C3 + name: opentrons_24_aluminumblock_generic_2ml_screwcap_C3 + parent: opentrons_24_aluminumblock_generic_2ml_screwcap + position: + x: 52.245 + y: 31.125 + z: 6.7 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_generic_2ml_screwcap_D3 + name: opentrons_24_aluminumblock_generic_2ml_screwcap_D3 + parent: opentrons_24_aluminumblock_generic_2ml_screwcap + position: + x: 52.245 + y: 13.875 + z: 6.7 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_generic_2ml_screwcap_A4 + name: opentrons_24_aluminumblock_generic_2ml_screwcap_A4 + parent: opentrons_24_aluminumblock_generic_2ml_screwcap + position: + x: 69.495 + y: 65.625 + z: 6.7 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_generic_2ml_screwcap_B4 + name: opentrons_24_aluminumblock_generic_2ml_screwcap_B4 + parent: opentrons_24_aluminumblock_generic_2ml_screwcap + position: + x: 69.495 + y: 48.375 + z: 6.7 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_generic_2ml_screwcap_C4 + name: opentrons_24_aluminumblock_generic_2ml_screwcap_C4 + parent: opentrons_24_aluminumblock_generic_2ml_screwcap + position: + x: 69.495 + y: 31.125 + z: 6.7 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_generic_2ml_screwcap_D4 + name: opentrons_24_aluminumblock_generic_2ml_screwcap_D4 + parent: opentrons_24_aluminumblock_generic_2ml_screwcap + position: + x: 69.495 + y: 13.875 + z: 6.7 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_generic_2ml_screwcap_A5 + name: opentrons_24_aluminumblock_generic_2ml_screwcap_A5 + parent: opentrons_24_aluminumblock_generic_2ml_screwcap + position: + x: 86.745 + y: 65.625 + z: 6.7 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_generic_2ml_screwcap_B5 + name: opentrons_24_aluminumblock_generic_2ml_screwcap_B5 + parent: opentrons_24_aluminumblock_generic_2ml_screwcap + position: + x: 86.745 + y: 48.375 + z: 6.7 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_generic_2ml_screwcap_C5 + name: opentrons_24_aluminumblock_generic_2ml_screwcap_C5 + parent: opentrons_24_aluminumblock_generic_2ml_screwcap + position: + x: 86.745 + y: 31.125 + z: 6.7 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_generic_2ml_screwcap_D5 + name: opentrons_24_aluminumblock_generic_2ml_screwcap_D5 + parent: opentrons_24_aluminumblock_generic_2ml_screwcap + position: + x: 86.745 + y: 13.875 + z: 6.7 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_generic_2ml_screwcap_A6 + name: opentrons_24_aluminumblock_generic_2ml_screwcap_A6 + parent: opentrons_24_aluminumblock_generic_2ml_screwcap + position: + x: 103.995 + y: 65.625 + z: 6.7 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_generic_2ml_screwcap_B6 + name: opentrons_24_aluminumblock_generic_2ml_screwcap_B6 + parent: opentrons_24_aluminumblock_generic_2ml_screwcap + position: + x: 103.995 + y: 48.375 + z: 6.7 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_generic_2ml_screwcap_C6 + name: opentrons_24_aluminumblock_generic_2ml_screwcap_C6 + parent: opentrons_24_aluminumblock_generic_2ml_screwcap + position: + x: 103.995 + y: 31.125 + z: 6.7 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_generic_2ml_screwcap_D6 + name: opentrons_24_aluminumblock_generic_2ml_screwcap_D6 + parent: opentrons_24_aluminumblock_generic_2ml_screwcap + position: + x: 103.995 + y: 13.875 + z: 6.7 + sample_id: null + type: container + description: Opentrons 24 aluminumblock generic 2ml screwcap + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tube_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 opentrons_24_aluminumblock_nest_1point5ml_snapcap: - description: Opentrons 24 aluminumblock nest 1.5ml snapcap - class: + category: + - tube_racks + class: module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_aluminumblock_nest_1point5ml_snapcap type: pylabrobot + config_info: + - children: + - opentrons_24_aluminumblock_nest_1point5ml_snapcap_A1 + - opentrons_24_aluminumblock_nest_1point5ml_snapcap_B1 + - opentrons_24_aluminumblock_nest_1point5ml_snapcap_C1 + - opentrons_24_aluminumblock_nest_1point5ml_snapcap_D1 + - opentrons_24_aluminumblock_nest_1point5ml_snapcap_A2 + - opentrons_24_aluminumblock_nest_1point5ml_snapcap_B2 + - opentrons_24_aluminumblock_nest_1point5ml_snapcap_C2 + - opentrons_24_aluminumblock_nest_1point5ml_snapcap_D2 + - opentrons_24_aluminumblock_nest_1point5ml_snapcap_A3 + - opentrons_24_aluminumblock_nest_1point5ml_snapcap_B3 + - opentrons_24_aluminumblock_nest_1point5ml_snapcap_C3 + - opentrons_24_aluminumblock_nest_1point5ml_snapcap_D3 + - opentrons_24_aluminumblock_nest_1point5ml_snapcap_A4 + - opentrons_24_aluminumblock_nest_1point5ml_snapcap_B4 + - opentrons_24_aluminumblock_nest_1point5ml_snapcap_C4 + - opentrons_24_aluminumblock_nest_1point5ml_snapcap_D4 + - opentrons_24_aluminumblock_nest_1point5ml_snapcap_A5 + - opentrons_24_aluminumblock_nest_1point5ml_snapcap_B5 + - opentrons_24_aluminumblock_nest_1point5ml_snapcap_C5 + - opentrons_24_aluminumblock_nest_1point5ml_snapcap_D5 + - opentrons_24_aluminumblock_nest_1point5ml_snapcap_A6 + - opentrons_24_aluminumblock_nest_1point5ml_snapcap_B6 + - opentrons_24_aluminumblock_nest_1point5ml_snapcap_C6 + - opentrons_24_aluminumblock_nest_1point5ml_snapcap_D6 + class: '' + config: + barcode: null + category: null + model: Opentrons 24 Well Aluminum Block with NEST 1.5 mL Snapcap + ordering: + A1: opentrons_24_aluminumblock_nest_1point5ml_snapcap_A1 + B1: opentrons_24_aluminumblock_nest_1point5ml_snapcap_B1 + C1: opentrons_24_aluminumblock_nest_1point5ml_snapcap_C1 + D1: opentrons_24_aluminumblock_nest_1point5ml_snapcap_D1 + A2: opentrons_24_aluminumblock_nest_1point5ml_snapcap_A2 + B2: opentrons_24_aluminumblock_nest_1point5ml_snapcap_B2 + C2: opentrons_24_aluminumblock_nest_1point5ml_snapcap_C2 + D2: opentrons_24_aluminumblock_nest_1point5ml_snapcap_D2 + A3: opentrons_24_aluminumblock_nest_1point5ml_snapcap_A3 + B3: opentrons_24_aluminumblock_nest_1point5ml_snapcap_B3 + C3: opentrons_24_aluminumblock_nest_1point5ml_snapcap_C3 + D3: opentrons_24_aluminumblock_nest_1point5ml_snapcap_D3 + A4: opentrons_24_aluminumblock_nest_1point5ml_snapcap_A4 + B4: opentrons_24_aluminumblock_nest_1point5ml_snapcap_B4 + C4: opentrons_24_aluminumblock_nest_1point5ml_snapcap_C4 + D4: opentrons_24_aluminumblock_nest_1point5ml_snapcap_D4 + A5: opentrons_24_aluminumblock_nest_1point5ml_snapcap_A5 + B5: opentrons_24_aluminumblock_nest_1point5ml_snapcap_B5 + C5: opentrons_24_aluminumblock_nest_1point5ml_snapcap_C5 + D5: opentrons_24_aluminumblock_nest_1point5ml_snapcap_D5 + A6: opentrons_24_aluminumblock_nest_1point5ml_snapcap_A6 + B6: opentrons_24_aluminumblock_nest_1point5ml_snapcap_B6 + C6: opentrons_24_aluminumblock_nest_1point5ml_snapcap_C6 + D6: opentrons_24_aluminumblock_nest_1point5ml_snapcap_D6 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.75 + size_y: 85.5 + size_z: 43.7 + type: TubeRack + data: {} + id: opentrons_24_aluminumblock_nest_1point5ml_snapcap + name: opentrons_24_aluminumblock_nest_1point5ml_snapcap + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_nest_1point5ml_snapcap_A1 + name: opentrons_24_aluminumblock_nest_1point5ml_snapcap_A1 + parent: opentrons_24_aluminumblock_nest_1point5ml_snapcap + position: + x: 17.144 + y: 65.014 + z: 5.8 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_nest_1point5ml_snapcap_B1 + name: opentrons_24_aluminumblock_nest_1point5ml_snapcap_B1 + parent: opentrons_24_aluminumblock_nest_1point5ml_snapcap + position: + x: 17.144 + y: 47.764 + z: 5.8 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_nest_1point5ml_snapcap_C1 + name: opentrons_24_aluminumblock_nest_1point5ml_snapcap_C1 + parent: opentrons_24_aluminumblock_nest_1point5ml_snapcap + position: + x: 17.144 + y: 30.514 + z: 5.8 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_nest_1point5ml_snapcap_D1 + name: opentrons_24_aluminumblock_nest_1point5ml_snapcap_D1 + parent: opentrons_24_aluminumblock_nest_1point5ml_snapcap + position: + x: 17.144 + y: 13.264 + z: 5.8 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_nest_1point5ml_snapcap_A2 + name: opentrons_24_aluminumblock_nest_1point5ml_snapcap_A2 + parent: opentrons_24_aluminumblock_nest_1point5ml_snapcap + position: + x: 34.394 + y: 65.014 + z: 5.8 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_nest_1point5ml_snapcap_B2 + name: opentrons_24_aluminumblock_nest_1point5ml_snapcap_B2 + parent: opentrons_24_aluminumblock_nest_1point5ml_snapcap + position: + x: 34.394 + y: 47.764 + z: 5.8 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_nest_1point5ml_snapcap_C2 + name: opentrons_24_aluminumblock_nest_1point5ml_snapcap_C2 + parent: opentrons_24_aluminumblock_nest_1point5ml_snapcap + position: + x: 34.394 + y: 30.514 + z: 5.8 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_nest_1point5ml_snapcap_D2 + name: opentrons_24_aluminumblock_nest_1point5ml_snapcap_D2 + parent: opentrons_24_aluminumblock_nest_1point5ml_snapcap + position: + x: 34.394 + y: 13.264 + z: 5.8 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_nest_1point5ml_snapcap_A3 + name: opentrons_24_aluminumblock_nest_1point5ml_snapcap_A3 + parent: opentrons_24_aluminumblock_nest_1point5ml_snapcap + position: + x: 51.644 + y: 65.014 + z: 5.8 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_nest_1point5ml_snapcap_B3 + name: opentrons_24_aluminumblock_nest_1point5ml_snapcap_B3 + parent: opentrons_24_aluminumblock_nest_1point5ml_snapcap + position: + x: 51.644 + y: 47.764 + z: 5.8 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_nest_1point5ml_snapcap_C3 + name: opentrons_24_aluminumblock_nest_1point5ml_snapcap_C3 + parent: opentrons_24_aluminumblock_nest_1point5ml_snapcap + position: + x: 51.644 + y: 30.514 + z: 5.8 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_nest_1point5ml_snapcap_D3 + name: opentrons_24_aluminumblock_nest_1point5ml_snapcap_D3 + parent: opentrons_24_aluminumblock_nest_1point5ml_snapcap + position: + x: 51.644 + y: 13.264 + z: 5.8 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_nest_1point5ml_snapcap_A4 + name: opentrons_24_aluminumblock_nest_1point5ml_snapcap_A4 + parent: opentrons_24_aluminumblock_nest_1point5ml_snapcap + position: + x: 68.894 + y: 65.014 + z: 5.8 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_nest_1point5ml_snapcap_B4 + name: opentrons_24_aluminumblock_nest_1point5ml_snapcap_B4 + parent: opentrons_24_aluminumblock_nest_1point5ml_snapcap + position: + x: 68.894 + y: 47.764 + z: 5.8 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_nest_1point5ml_snapcap_C4 + name: opentrons_24_aluminumblock_nest_1point5ml_snapcap_C4 + parent: opentrons_24_aluminumblock_nest_1point5ml_snapcap + position: + x: 68.894 + y: 30.514 + z: 5.8 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_nest_1point5ml_snapcap_D4 + name: opentrons_24_aluminumblock_nest_1point5ml_snapcap_D4 + parent: opentrons_24_aluminumblock_nest_1point5ml_snapcap + position: + x: 68.894 + y: 13.264 + z: 5.8 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_nest_1point5ml_snapcap_A5 + name: opentrons_24_aluminumblock_nest_1point5ml_snapcap_A5 + parent: opentrons_24_aluminumblock_nest_1point5ml_snapcap + position: + x: 86.144 + y: 65.014 + z: 5.8 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_nest_1point5ml_snapcap_B5 + name: opentrons_24_aluminumblock_nest_1point5ml_snapcap_B5 + parent: opentrons_24_aluminumblock_nest_1point5ml_snapcap + position: + x: 86.144 + y: 47.764 + z: 5.8 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_nest_1point5ml_snapcap_C5 + name: opentrons_24_aluminumblock_nest_1point5ml_snapcap_C5 + parent: opentrons_24_aluminumblock_nest_1point5ml_snapcap + position: + x: 86.144 + y: 30.514 + z: 5.8 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_nest_1point5ml_snapcap_D5 + name: opentrons_24_aluminumblock_nest_1point5ml_snapcap_D5 + parent: opentrons_24_aluminumblock_nest_1point5ml_snapcap + position: + x: 86.144 + y: 13.264 + z: 5.8 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_nest_1point5ml_snapcap_A6 + name: opentrons_24_aluminumblock_nest_1point5ml_snapcap_A6 + parent: opentrons_24_aluminumblock_nest_1point5ml_snapcap + position: + x: 103.394 + y: 65.014 + z: 5.8 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_nest_1point5ml_snapcap_B6 + name: opentrons_24_aluminumblock_nest_1point5ml_snapcap_B6 + parent: opentrons_24_aluminumblock_nest_1point5ml_snapcap + position: + x: 103.394 + y: 47.764 + z: 5.8 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_nest_1point5ml_snapcap_C6 + name: opentrons_24_aluminumblock_nest_1point5ml_snapcap_C6 + parent: opentrons_24_aluminumblock_nest_1point5ml_snapcap + position: + x: 103.394 + y: 30.514 + z: 5.8 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_aluminumblock_nest_1point5ml_snapcap_D6 + name: opentrons_24_aluminumblock_nest_1point5ml_snapcap_D6 + parent: opentrons_24_aluminumblock_nest_1point5ml_snapcap + position: + x: 103.394 + y: 13.264 + z: 5.8 + sample_id: null + type: container + description: Opentrons 24 aluminumblock nest 1.5ml snapcap + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tube_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap: + category: + - tube_racks + class: + module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + type: pylabrobot + config_info: + - children: + - opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_A1 + - opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_B1 + - opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_C1 + - opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_D1 + - opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_A2 + - opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_B2 + - opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_C2 + - opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_D2 + - opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_A3 + - opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_B3 + - opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_C3 + - opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_D3 + - opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_A4 + - opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_B4 + - opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_C4 + - opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_D4 + - opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_A5 + - opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_B5 + - opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_C5 + - opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_D5 + - opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_A6 + - opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_B6 + - opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_C6 + - opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_D6 + class: '' + config: + barcode: null + category: null + model: Opentrons 24 Tube Rack with Eppendorf 1.5 mL Safe-Lock Snapcap + ordering: + A1: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_A1 + B1: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_B1 + C1: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_C1 + D1: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_D1 + A2: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_A2 + B2: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_B2 + C2: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_C2 + D2: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_D2 + A3: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_A3 + B3: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_B3 + C3: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_C3 + D3: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_D3 + A4: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_A4 + B4: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_B4 + C4: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_C4 + D4: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_D4 + A5: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_A5 + B5: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_B5 + C5: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_C5 + D5: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_D5 + A6: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_A6 + B6: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_B6 + C6: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_C6 + D6: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_D6 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.75 + size_y: 85.5 + size_z: 79.85 + type: TubeRack + data: {} + id: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + name: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.152 + size_y: 6.152 + size_z: 37.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_A1 + name: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_A1 + parent: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + position: + x: 15.134 + y: 72.354 + z: 42.05 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.152 + size_y: 6.152 + size_z: 37.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_B1 + name: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_B1 + parent: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + position: + x: 15.134 + y: 53.074 + z: 42.05 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.152 + size_y: 6.152 + size_z: 37.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_C1 + name: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_C1 + parent: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + position: + x: 15.134 + y: 33.794 + z: 42.05 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.152 + size_y: 6.152 + size_z: 37.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_D1 + name: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_D1 + parent: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + position: + x: 15.134 + y: 14.514 + z: 42.05 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.152 + size_y: 6.152 + size_z: 37.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_A2 + name: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_A2 + parent: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + position: + x: 35.024 + y: 72.354 + z: 42.05 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.152 + size_y: 6.152 + size_z: 37.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_B2 + name: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_B2 + parent: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + position: + x: 35.024 + y: 53.074 + z: 42.05 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.152 + size_y: 6.152 + size_z: 37.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_C2 + name: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_C2 + parent: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + position: + x: 35.024 + y: 33.794 + z: 42.05 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.152 + size_y: 6.152 + size_z: 37.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_D2 + name: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_D2 + parent: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + position: + x: 35.024 + y: 14.514 + z: 42.05 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.152 + size_y: 6.152 + size_z: 37.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_A3 + name: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_A3 + parent: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + position: + x: 54.914 + y: 72.354 + z: 42.05 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.152 + size_y: 6.152 + size_z: 37.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_B3 + name: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_B3 + parent: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + position: + x: 54.914 + y: 53.074 + z: 42.05 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.152 + size_y: 6.152 + size_z: 37.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_C3 + name: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_C3 + parent: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + position: + x: 54.914 + y: 33.794 + z: 42.05 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.152 + size_y: 6.152 + size_z: 37.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_D3 + name: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_D3 + parent: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + position: + x: 54.914 + y: 14.514 + z: 42.05 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.152 + size_y: 6.152 + size_z: 37.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_A4 + name: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_A4 + parent: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + position: + x: 74.804 + y: 72.354 + z: 42.05 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.152 + size_y: 6.152 + size_z: 37.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_B4 + name: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_B4 + parent: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + position: + x: 74.804 + y: 53.074 + z: 42.05 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.152 + size_y: 6.152 + size_z: 37.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_C4 + name: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_C4 + parent: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + position: + x: 74.804 + y: 33.794 + z: 42.05 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.152 + size_y: 6.152 + size_z: 37.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_D4 + name: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_D4 + parent: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + position: + x: 74.804 + y: 14.514 + z: 42.05 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.152 + size_y: 6.152 + size_z: 37.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_A5 + name: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_A5 + parent: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + position: + x: 94.694 + y: 72.354 + z: 42.05 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.152 + size_y: 6.152 + size_z: 37.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_B5 + name: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_B5 + parent: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + position: + x: 94.694 + y: 53.074 + z: 42.05 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.152 + size_y: 6.152 + size_z: 37.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_C5 + name: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_C5 + parent: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + position: + x: 94.694 + y: 33.794 + z: 42.05 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.152 + size_y: 6.152 + size_z: 37.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_D5 + name: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_D5 + parent: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + position: + x: 94.694 + y: 14.514 + z: 42.05 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.152 + size_y: 6.152 + size_z: 37.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_A6 + name: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_A6 + parent: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + position: + x: 114.584 + y: 72.354 + z: 42.05 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.152 + size_y: 6.152 + size_z: 37.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_B6 + name: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_B6 + parent: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + position: + x: 114.584 + y: 53.074 + z: 42.05 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.152 + size_y: 6.152 + size_z: 37.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_C6 + name: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_C6 + parent: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + position: + x: 114.584 + y: 33.794 + z: 42.05 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.152 + size_y: 6.152 + size_z: 37.8 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_D6 + name: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap_D6 + parent: opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap + position: + x: 114.584 + y: 14.514 + z: 42.05 + sample_id: null + type: container + description: Opentrons 24 tuberack eppendorf 1.5ml safelock snapcap + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tube_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap: + category: + - tube_racks + class: + module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + type: pylabrobot + config_info: + - children: + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_A1 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_B1 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_C1 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_D1 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_A2 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_B2 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_C2 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_D2 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_A3 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_B3 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_C3 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_D3 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_A4 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_B4 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_C4 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_D4 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_A5 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_B5 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_C5 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_D5 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_A6 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_B6 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_C6 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_D6 + class: '' + config: + barcode: null + category: null + model: Opentrons 24 Tube Rack with Eppendorf 2 mL Safe-Lock Snapcap + ordering: + A1: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_A1 + B1: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_B1 + C1: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_C1 + D1: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_D1 + A2: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_A2 + B2: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_B2 + C2: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_C2 + D2: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_D2 + A3: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_A3 + B3: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_B3 + C3: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_C3 + D3: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_D3 + A4: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_A4 + B4: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_B4 + C4: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_C4 + D4: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_D4 + A5: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_A5 + B5: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_B5 + C5: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_C5 + D5: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_D5 + A6: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_A6 + B6: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_B6 + C6: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_C6 + D6: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_D6 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.75 + size_y: 85.5 + size_z: 79.85 + type: TubeRack + data: {} + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 39.1 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_A1 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_A1 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + position: + x: 15.0985 + y: 72.3185 + z: 41.27 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 39.1 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_B1 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_B1 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + position: + x: 15.0985 + y: 53.0385 + z: 41.27 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 39.1 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_C1 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_C1 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + position: + x: 15.0985 + y: 33.7585 + z: 41.27 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 39.1 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_D1 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_D1 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + position: + x: 15.0985 + y: 14.4785 + z: 41.27 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 39.1 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_A2 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_A2 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + position: + x: 34.9885 + y: 72.3185 + z: 41.27 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 39.1 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_B2 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_B2 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + position: + x: 34.9885 + y: 53.0385 + z: 41.27 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 39.1 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_C2 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_C2 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + position: + x: 34.9885 + y: 33.7585 + z: 41.27 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 39.1 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_D2 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_D2 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + position: + x: 34.9885 + y: 14.4785 + z: 41.27 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 39.1 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_A3 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_A3 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + position: + x: 54.8785 + y: 72.3185 + z: 41.27 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 39.1 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_B3 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_B3 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + position: + x: 54.8785 + y: 53.0385 + z: 41.27 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 39.1 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_C3 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_C3 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + position: + x: 54.8785 + y: 33.7585 + z: 41.27 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 39.1 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_D3 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_D3 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + position: + x: 54.8785 + y: 14.4785 + z: 41.27 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 39.1 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_A4 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_A4 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + position: + x: 74.7685 + y: 72.3185 + z: 41.27 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 39.1 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_B4 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_B4 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + position: + x: 74.7685 + y: 53.0385 + z: 41.27 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 39.1 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_C4 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_C4 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + position: + x: 74.7685 + y: 33.7585 + z: 41.27 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 39.1 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_D4 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_D4 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + position: + x: 74.7685 + y: 14.4785 + z: 41.27 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 39.1 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_A5 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_A5 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + position: + x: 94.6585 + y: 72.3185 + z: 41.27 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 39.1 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_B5 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_B5 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + position: + x: 94.6585 + y: 53.0385 + z: 41.27 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 39.1 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_C5 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_C5 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + position: + x: 94.6585 + y: 33.7585 + z: 41.27 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 39.1 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_D5 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_D5 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + position: + x: 94.6585 + y: 14.4785 + z: 41.27 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 39.1 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_A6 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_A6 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + position: + x: 114.5485 + y: 72.3185 + z: 41.27 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 39.1 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_B6 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_B6 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + position: + x: 114.5485 + y: 53.0385 + z: 41.27 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 39.1 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_C6 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_C6 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + position: + x: 114.5485 + y: 33.7585 + z: 41.27 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.223 + size_y: 6.223 + size_z: 39.1 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_D6 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_D6 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap + position: + x: 114.5485 + y: 14.4785 + z: 41.27 + sample_id: null + type: container + description: Opentrons 24 tuberack eppendorf 2ml safelock snapcap + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tube_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic: + category: + - tube_racks + class: + module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + type: pylabrobot + config_info: + - children: + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_A1 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_B1 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_C1 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_D1 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_A2 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_B2 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_C2 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_D2 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_A3 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_B3 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_C3 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_D3 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_A4 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_B4 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_C4 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_D4 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_A5 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_B5 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_C5 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_D5 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_A6 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_B6 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_C6 + - opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_D6 + class: '' + config: + barcode: null + category: null + model: Opentrons 24 Tube Rack (Acrylic) with Eppendorf 2 mL Safe-Lock Snapcap + ordering: + A1: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_A1 + B1: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_B1 + C1: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_C1 + D1: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_D1 + A2: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_A2 + B2: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_B2 + C2: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_C2 + D2: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_D2 + A3: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_A3 + B3: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_B3 + C3: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_C3 + D3: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_D3 + A4: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_A4 + B4: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_B4 + C4: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_C4 + D4: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_D4 + A5: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_A5 + B5: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_B5 + C5: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_C5 + D5: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_D5 + A6: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_A6 + B6: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_B6 + C6: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_C6 + D6: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_D6 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.48 + size_z: 52 + type: TubeRack + data: {} + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.0 + size_y: 7.0 + size_z: 38.58 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_A1 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_A1 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + position: + x: 11.78 + y: 68.9 + z: 13.42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.0 + size_y: 7.0 + size_z: 38.58 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_B1 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_B1 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + position: + x: 11.78 + y: 49.4 + z: 13.42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.0 + size_y: 7.0 + size_z: 38.58 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_C1 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_C1 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + position: + x: 11.78 + y: 29.9 + z: 13.42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.0 + size_y: 7.0 + size_z: 38.58 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_D1 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_D1 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + position: + x: 11.78 + y: 10.4 + z: 13.42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.0 + size_y: 7.0 + size_z: 38.58 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_A2 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_A2 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + position: + x: 31.28 + y: 68.9 + z: 13.42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.0 + size_y: 7.0 + size_z: 38.58 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_B2 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_B2 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + position: + x: 31.28 + y: 49.4 + z: 13.42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.0 + size_y: 7.0 + size_z: 38.58 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_C2 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_C2 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + position: + x: 31.28 + y: 29.9 + z: 13.42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.0 + size_y: 7.0 + size_z: 38.58 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_D2 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_D2 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + position: + x: 31.28 + y: 10.4 + z: 13.42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.0 + size_y: 7.0 + size_z: 38.58 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_A3 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_A3 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + position: + x: 50.78 + y: 68.9 + z: 13.42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.0 + size_y: 7.0 + size_z: 38.58 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_B3 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_B3 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + position: + x: 50.78 + y: 49.4 + z: 13.42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.0 + size_y: 7.0 + size_z: 38.58 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_C3 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_C3 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + position: + x: 50.78 + y: 29.9 + z: 13.42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.0 + size_y: 7.0 + size_z: 38.58 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_D3 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_D3 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + position: + x: 50.78 + y: 10.4 + z: 13.42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.0 + size_y: 7.0 + size_z: 38.58 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_A4 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_A4 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + position: + x: 70.28 + y: 68.9 + z: 13.42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.0 + size_y: 7.0 + size_z: 38.58 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_B4 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_B4 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + position: + x: 70.28 + y: 49.4 + z: 13.42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.0 + size_y: 7.0 + size_z: 38.58 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_C4 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_C4 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + position: + x: 70.28 + y: 29.9 + z: 13.42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.0 + size_y: 7.0 + size_z: 38.58 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_D4 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_D4 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + position: + x: 70.28 + y: 10.4 + z: 13.42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.0 + size_y: 7.0 + size_z: 38.58 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_A5 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_A5 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + position: + x: 89.78 + y: 68.9 + z: 13.42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.0 + size_y: 7.0 + size_z: 38.58 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_B5 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_B5 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + position: + x: 89.78 + y: 49.4 + z: 13.42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.0 + size_y: 7.0 + size_z: 38.58 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_C5 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_C5 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + position: + x: 89.78 + y: 29.9 + z: 13.42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.0 + size_y: 7.0 + size_z: 38.58 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_D5 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_D5 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + position: + x: 89.78 + y: 10.4 + z: 13.42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.0 + size_y: 7.0 + size_z: 38.58 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_A6 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_A6 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + position: + x: 109.28 + y: 68.9 + z: 13.42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.0 + size_y: 7.0 + size_z: 38.58 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_B6 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_B6 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + position: + x: 109.28 + y: 49.4 + z: 13.42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.0 + size_y: 7.0 + size_z: 38.58 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_C6 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_C6 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + position: + x: 109.28 + y: 29.9 + z: 13.42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.0 + size_y: 7.0 + size_z: 38.58 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_D6 + name: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic_D6 + parent: opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic + position: + x: 109.28 + y: 10.4 + z: 13.42 + sample_id: null + type: container + description: Opentrons 24 tuberack eppendorf 2ml safelock snapcap acrylic + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tube_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic: + category: + - tube_racks + class: + module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + type: pylabrobot + config_info: + - children: + - opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_A1 + - opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_B1 + - opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_C1 + - opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_D1 + - opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_A2 + - opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_B2 + - opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_C2 + - opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_D2 + - opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_A3 + - opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_B3 + - opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_C3 + - opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_D3 + - opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_A4 + - opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_B4 + - opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_C4 + - opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_D4 + - opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_A5 + - opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_B5 + - opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_C5 + - opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_D5 + - opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_A6 + - opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_B6 + - opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_C6 + - opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_D6 + class: '' + config: + barcode: null + category: null + model: Opentrons 24 Tube Rack (Acrylic) with Generic 0.75 mL Snapcap + ordering: + A1: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_A1 + B1: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_B1 + C1: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_C1 + D1: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_D1 + A2: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_A2 + B2: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_B2 + C2: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_C2 + D2: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_D2 + A3: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_A3 + B3: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_B3 + C3: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_C3 + D3: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_D3 + A4: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_A4 + B4: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_B4 + C4: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_C4 + D4: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_D4 + A5: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_A5 + B5: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_B5 + C5: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_C5 + D5: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_D5 + A6: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_A6 + B6: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_B6 + C6: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_C6 + D6: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_D6 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.48 + size_z: 55 + type: TubeRack + data: {} + id: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + name: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 750 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 20 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_A1 + name: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_A1 + parent: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + position: + x: 14.6385 + y: 68.4985 + z: 35 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 750 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 20 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_B1 + name: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_B1 + parent: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + position: + x: 14.6385 + y: 48.9385 + z: 35 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 750 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 20 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_C1 + name: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_C1 + parent: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + position: + x: 14.6385 + y: 29.3785 + z: 35 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 750 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 20 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_D1 + name: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_D1 + parent: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + position: + x: 14.6385 + y: 9.8185 + z: 35 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 750 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 20 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_A2 + name: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_A2 + parent: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + position: + x: 34.1985 + y: 68.4985 + z: 35 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 750 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 20 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_B2 + name: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_B2 + parent: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + position: + x: 34.1985 + y: 48.9385 + z: 35 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 750 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 20 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_C2 + name: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_C2 + parent: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + position: + x: 34.1985 + y: 29.3785 + z: 35 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 750 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 20 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_D2 + name: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_D2 + parent: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + position: + x: 34.1985 + y: 9.8185 + z: 35 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 750 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 20 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_A3 + name: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_A3 + parent: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + position: + x: 53.7585 + y: 68.4985 + z: 35 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 750 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 20 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_B3 + name: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_B3 + parent: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + position: + x: 53.7585 + y: 48.9385 + z: 35 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 750 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 20 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_C3 + name: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_C3 + parent: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + position: + x: 53.7585 + y: 29.3785 + z: 35 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 750 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 20 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_D3 + name: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_D3 + parent: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + position: + x: 53.7585 + y: 9.8185 + z: 35 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 750 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 20 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_A4 + name: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_A4 + parent: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + position: + x: 73.3185 + y: 68.4985 + z: 35 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 750 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 20 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_B4 + name: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_B4 + parent: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + position: + x: 73.3185 + y: 48.9385 + z: 35 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 750 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 20 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_C4 + name: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_C4 + parent: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + position: + x: 73.3185 + y: 29.3785 + z: 35 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 750 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 20 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_D4 + name: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_D4 + parent: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + position: + x: 73.3185 + y: 9.8185 + z: 35 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 750 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 20 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_A5 + name: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_A5 + parent: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + position: + x: 92.8785 + y: 68.4985 + z: 35 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 750 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 20 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_B5 + name: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_B5 + parent: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + position: + x: 92.8785 + y: 48.9385 + z: 35 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 750 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 20 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_C5 + name: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_C5 + parent: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + position: + x: 92.8785 + y: 29.3785 + z: 35 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 750 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 20 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_D5 + name: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_D5 + parent: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + position: + x: 92.8785 + y: 9.8185 + z: 35 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 750 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 20 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_A6 + name: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_A6 + parent: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + position: + x: 112.4385 + y: 68.4985 + z: 35 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 750 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 20 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_B6 + name: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_B6 + parent: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + position: + x: 112.4385 + y: 48.9385 + z: 35 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 750 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 20 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_C6 + name: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_C6 + parent: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + position: + x: 112.4385 + y: 29.3785 + z: 35 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 750 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 4.243 + size_y: 4.243 + size_z: 20 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_D6 + name: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic_D6 + parent: opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic + position: + x: 112.4385 + y: 9.8185 + z: 35 + sample_id: null + type: container + description: Opentrons 24 tuberack generic 0.75ml snapcap acrylic + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tube_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +opentrons_24_tuberack_generic_2ml_screwcap: + category: + - tube_racks + class: + module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_generic_2ml_screwcap + type: pylabrobot + config_info: + - children: + - opentrons_24_tuberack_generic_2ml_screwcap_A1 + - opentrons_24_tuberack_generic_2ml_screwcap_B1 + - opentrons_24_tuberack_generic_2ml_screwcap_C1 + - opentrons_24_tuberack_generic_2ml_screwcap_D1 + - opentrons_24_tuberack_generic_2ml_screwcap_A2 + - opentrons_24_tuberack_generic_2ml_screwcap_B2 + - opentrons_24_tuberack_generic_2ml_screwcap_C2 + - opentrons_24_tuberack_generic_2ml_screwcap_D2 + - opentrons_24_tuberack_generic_2ml_screwcap_A3 + - opentrons_24_tuberack_generic_2ml_screwcap_B3 + - opentrons_24_tuberack_generic_2ml_screwcap_C3 + - opentrons_24_tuberack_generic_2ml_screwcap_D3 + - opentrons_24_tuberack_generic_2ml_screwcap_A4 + - opentrons_24_tuberack_generic_2ml_screwcap_B4 + - opentrons_24_tuberack_generic_2ml_screwcap_C4 + - opentrons_24_tuberack_generic_2ml_screwcap_D4 + - opentrons_24_tuberack_generic_2ml_screwcap_A5 + - opentrons_24_tuberack_generic_2ml_screwcap_B5 + - opentrons_24_tuberack_generic_2ml_screwcap_C5 + - opentrons_24_tuberack_generic_2ml_screwcap_D5 + - opentrons_24_tuberack_generic_2ml_screwcap_A6 + - opentrons_24_tuberack_generic_2ml_screwcap_B6 + - opentrons_24_tuberack_generic_2ml_screwcap_C6 + - opentrons_24_tuberack_generic_2ml_screwcap_D6 + class: '' + config: + barcode: null + category: null + model: Opentrons 24 Tube Rack with Generic 2 mL Screwcap + ordering: + A1: opentrons_24_tuberack_generic_2ml_screwcap_A1 + B1: opentrons_24_tuberack_generic_2ml_screwcap_B1 + C1: opentrons_24_tuberack_generic_2ml_screwcap_C1 + D1: opentrons_24_tuberack_generic_2ml_screwcap_D1 + A2: opentrons_24_tuberack_generic_2ml_screwcap_A2 + B2: opentrons_24_tuberack_generic_2ml_screwcap_B2 + C2: opentrons_24_tuberack_generic_2ml_screwcap_C2 + D2: opentrons_24_tuberack_generic_2ml_screwcap_D2 + A3: opentrons_24_tuberack_generic_2ml_screwcap_A3 + B3: opentrons_24_tuberack_generic_2ml_screwcap_B3 + C3: opentrons_24_tuberack_generic_2ml_screwcap_C3 + D3: opentrons_24_tuberack_generic_2ml_screwcap_D3 + A4: opentrons_24_tuberack_generic_2ml_screwcap_A4 + B4: opentrons_24_tuberack_generic_2ml_screwcap_B4 + C4: opentrons_24_tuberack_generic_2ml_screwcap_C4 + D4: opentrons_24_tuberack_generic_2ml_screwcap_D4 + A5: opentrons_24_tuberack_generic_2ml_screwcap_A5 + B5: opentrons_24_tuberack_generic_2ml_screwcap_B5 + C5: opentrons_24_tuberack_generic_2ml_screwcap_C5 + D5: opentrons_24_tuberack_generic_2ml_screwcap_D5 + A6: opentrons_24_tuberack_generic_2ml_screwcap_A6 + B6: opentrons_24_tuberack_generic_2ml_screwcap_B6 + C6: opentrons_24_tuberack_generic_2ml_screwcap_C6 + D6: opentrons_24_tuberack_generic_2ml_screwcap_D6 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.75 + size_y: 85.5 + size_z: 84 + type: TubeRack + data: {} + id: opentrons_24_tuberack_generic_2ml_screwcap + name: opentrons_24_tuberack_generic_2ml_screwcap + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_2ml_screwcap_A1 + name: opentrons_24_tuberack_generic_2ml_screwcap_A1 + parent: opentrons_24_tuberack_generic_2ml_screwcap + position: + x: 15.205 + y: 72.425 + z: 42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_2ml_screwcap_B1 + name: opentrons_24_tuberack_generic_2ml_screwcap_B1 + parent: opentrons_24_tuberack_generic_2ml_screwcap + position: + x: 15.205 + y: 53.145 + z: 42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_2ml_screwcap_C1 + name: opentrons_24_tuberack_generic_2ml_screwcap_C1 + parent: opentrons_24_tuberack_generic_2ml_screwcap + position: + x: 15.205 + y: 33.865 + z: 42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_2ml_screwcap_D1 + name: opentrons_24_tuberack_generic_2ml_screwcap_D1 + parent: opentrons_24_tuberack_generic_2ml_screwcap + position: + x: 15.205 + y: 14.585 + z: 42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_2ml_screwcap_A2 + name: opentrons_24_tuberack_generic_2ml_screwcap_A2 + parent: opentrons_24_tuberack_generic_2ml_screwcap + position: + x: 35.095 + y: 72.425 + z: 42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_2ml_screwcap_B2 + name: opentrons_24_tuberack_generic_2ml_screwcap_B2 + parent: opentrons_24_tuberack_generic_2ml_screwcap + position: + x: 35.095 + y: 53.145 + z: 42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_2ml_screwcap_C2 + name: opentrons_24_tuberack_generic_2ml_screwcap_C2 + parent: opentrons_24_tuberack_generic_2ml_screwcap + position: + x: 35.095 + y: 33.865 + z: 42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_2ml_screwcap_D2 + name: opentrons_24_tuberack_generic_2ml_screwcap_D2 + parent: opentrons_24_tuberack_generic_2ml_screwcap + position: + x: 35.095 + y: 14.585 + z: 42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_2ml_screwcap_A3 + name: opentrons_24_tuberack_generic_2ml_screwcap_A3 + parent: opentrons_24_tuberack_generic_2ml_screwcap + position: + x: 54.985 + y: 72.425 + z: 42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_2ml_screwcap_B3 + name: opentrons_24_tuberack_generic_2ml_screwcap_B3 + parent: opentrons_24_tuberack_generic_2ml_screwcap + position: + x: 54.985 + y: 53.145 + z: 42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_2ml_screwcap_C3 + name: opentrons_24_tuberack_generic_2ml_screwcap_C3 + parent: opentrons_24_tuberack_generic_2ml_screwcap + position: + x: 54.985 + y: 33.865 + z: 42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_2ml_screwcap_D3 + name: opentrons_24_tuberack_generic_2ml_screwcap_D3 + parent: opentrons_24_tuberack_generic_2ml_screwcap + position: + x: 54.985 + y: 14.585 + z: 42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_2ml_screwcap_A4 + name: opentrons_24_tuberack_generic_2ml_screwcap_A4 + parent: opentrons_24_tuberack_generic_2ml_screwcap + position: + x: 74.875 + y: 72.425 + z: 42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_2ml_screwcap_B4 + name: opentrons_24_tuberack_generic_2ml_screwcap_B4 + parent: opentrons_24_tuberack_generic_2ml_screwcap + position: + x: 74.875 + y: 53.145 + z: 42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_2ml_screwcap_C4 + name: opentrons_24_tuberack_generic_2ml_screwcap_C4 + parent: opentrons_24_tuberack_generic_2ml_screwcap + position: + x: 74.875 + y: 33.865 + z: 42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_2ml_screwcap_D4 + name: opentrons_24_tuberack_generic_2ml_screwcap_D4 + parent: opentrons_24_tuberack_generic_2ml_screwcap + position: + x: 74.875 + y: 14.585 + z: 42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_2ml_screwcap_A5 + name: opentrons_24_tuberack_generic_2ml_screwcap_A5 + parent: opentrons_24_tuberack_generic_2ml_screwcap + position: + x: 94.765 + y: 72.425 + z: 42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_2ml_screwcap_B5 + name: opentrons_24_tuberack_generic_2ml_screwcap_B5 + parent: opentrons_24_tuberack_generic_2ml_screwcap + position: + x: 94.765 + y: 53.145 + z: 42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_2ml_screwcap_C5 + name: opentrons_24_tuberack_generic_2ml_screwcap_C5 + parent: opentrons_24_tuberack_generic_2ml_screwcap + position: + x: 94.765 + y: 33.865 + z: 42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_2ml_screwcap_D5 + name: opentrons_24_tuberack_generic_2ml_screwcap_D5 + parent: opentrons_24_tuberack_generic_2ml_screwcap + position: + x: 94.765 + y: 14.585 + z: 42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_2ml_screwcap_A6 + name: opentrons_24_tuberack_generic_2ml_screwcap_A6 + parent: opentrons_24_tuberack_generic_2ml_screwcap + position: + x: 114.655 + y: 72.425 + z: 42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_2ml_screwcap_B6 + name: opentrons_24_tuberack_generic_2ml_screwcap_B6 + parent: opentrons_24_tuberack_generic_2ml_screwcap + position: + x: 114.655 + y: 53.145 + z: 42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_2ml_screwcap_C6 + name: opentrons_24_tuberack_generic_2ml_screwcap_C6 + parent: opentrons_24_tuberack_generic_2ml_screwcap + position: + x: 114.655 + y: 33.865 + z: 42 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.01 + size_y: 6.01 + size_z: 42 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_generic_2ml_screwcap_D6 + name: opentrons_24_tuberack_generic_2ml_screwcap_D6 + parent: opentrons_24_tuberack_generic_2ml_screwcap + position: + x: 114.655 + y: 14.585 + z: 42 + sample_id: null + type: container + description: Opentrons 24 tuberack generic 2ml screwcap + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tube_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +opentrons_24_tuberack_nest_0point5ml_screwcap: + category: + - tube_racks + class: + module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_nest_0point5ml_screwcap + type: pylabrobot + config_info: + - children: + - opentrons_24_tuberack_nest_0point5ml_screwcap_A1 + - opentrons_24_tuberack_nest_0point5ml_screwcap_B1 + - opentrons_24_tuberack_nest_0point5ml_screwcap_C1 + - opentrons_24_tuberack_nest_0point5ml_screwcap_D1 + - opentrons_24_tuberack_nest_0point5ml_screwcap_A2 + - opentrons_24_tuberack_nest_0point5ml_screwcap_B2 + - opentrons_24_tuberack_nest_0point5ml_screwcap_C2 + - opentrons_24_tuberack_nest_0point5ml_screwcap_D2 + - opentrons_24_tuberack_nest_0point5ml_screwcap_A3 + - opentrons_24_tuberack_nest_0point5ml_screwcap_B3 + - opentrons_24_tuberack_nest_0point5ml_screwcap_C3 + - opentrons_24_tuberack_nest_0point5ml_screwcap_D3 + - opentrons_24_tuberack_nest_0point5ml_screwcap_A4 + - opentrons_24_tuberack_nest_0point5ml_screwcap_B4 + - opentrons_24_tuberack_nest_0point5ml_screwcap_C4 + - opentrons_24_tuberack_nest_0point5ml_screwcap_D4 + - opentrons_24_tuberack_nest_0point5ml_screwcap_A5 + - opentrons_24_tuberack_nest_0point5ml_screwcap_B5 + - opentrons_24_tuberack_nest_0point5ml_screwcap_C5 + - opentrons_24_tuberack_nest_0point5ml_screwcap_D5 + - opentrons_24_tuberack_nest_0point5ml_screwcap_A6 + - opentrons_24_tuberack_nest_0point5ml_screwcap_B6 + - opentrons_24_tuberack_nest_0point5ml_screwcap_C6 + - opentrons_24_tuberack_nest_0point5ml_screwcap_D6 + class: '' + config: + barcode: null + category: null + model: Opentrons 24 Tube Rack with NEST 0.5 mL Screwcap + ordering: + A1: opentrons_24_tuberack_nest_0point5ml_screwcap_A1 + B1: opentrons_24_tuberack_nest_0point5ml_screwcap_B1 + C1: opentrons_24_tuberack_nest_0point5ml_screwcap_C1 + D1: opentrons_24_tuberack_nest_0point5ml_screwcap_D1 + A2: opentrons_24_tuberack_nest_0point5ml_screwcap_A2 + B2: opentrons_24_tuberack_nest_0point5ml_screwcap_B2 + C2: opentrons_24_tuberack_nest_0point5ml_screwcap_C2 + D2: opentrons_24_tuberack_nest_0point5ml_screwcap_D2 + A3: opentrons_24_tuberack_nest_0point5ml_screwcap_A3 + B3: opentrons_24_tuberack_nest_0point5ml_screwcap_B3 + C3: opentrons_24_tuberack_nest_0point5ml_screwcap_C3 + D3: opentrons_24_tuberack_nest_0point5ml_screwcap_D3 + A4: opentrons_24_tuberack_nest_0point5ml_screwcap_A4 + B4: opentrons_24_tuberack_nest_0point5ml_screwcap_B4 + C4: opentrons_24_tuberack_nest_0point5ml_screwcap_C4 + D4: opentrons_24_tuberack_nest_0point5ml_screwcap_D4 + A5: opentrons_24_tuberack_nest_0point5ml_screwcap_A5 + B5: opentrons_24_tuberack_nest_0point5ml_screwcap_B5 + C5: opentrons_24_tuberack_nest_0point5ml_screwcap_C5 + D5: opentrons_24_tuberack_nest_0point5ml_screwcap_D5 + A6: opentrons_24_tuberack_nest_0point5ml_screwcap_A6 + B6: opentrons_24_tuberack_nest_0point5ml_screwcap_B6 + C6: opentrons_24_tuberack_nest_0point5ml_screwcap_C6 + D6: opentrons_24_tuberack_nest_0point5ml_screwcap_D6 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.75 + size_y: 85.5 + size_z: 85.2 + type: TubeRack + data: {} + id: opentrons_24_tuberack_nest_0point5ml_screwcap + name: opentrons_24_tuberack_nest_0point5ml_screwcap + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 25.2 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_0point5ml_screwcap_A1 + name: opentrons_24_tuberack_nest_0point5ml_screwcap_A1 + parent: opentrons_24_tuberack_nest_0point5ml_screwcap + position: + x: 15.1375 + y: 72.3575 + z: 60 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 25.2 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_0point5ml_screwcap_B1 + name: opentrons_24_tuberack_nest_0point5ml_screwcap_B1 + parent: opentrons_24_tuberack_nest_0point5ml_screwcap + position: + x: 15.1375 + y: 53.0775 + z: 60 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 25.2 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_0point5ml_screwcap_C1 + name: opentrons_24_tuberack_nest_0point5ml_screwcap_C1 + parent: opentrons_24_tuberack_nest_0point5ml_screwcap + position: + x: 15.1375 + y: 33.7975 + z: 60 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 25.2 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_0point5ml_screwcap_D1 + name: opentrons_24_tuberack_nest_0point5ml_screwcap_D1 + parent: opentrons_24_tuberack_nest_0point5ml_screwcap + position: + x: 15.1375 + y: 14.5175 + z: 60 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 25.2 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_0point5ml_screwcap_A2 + name: opentrons_24_tuberack_nest_0point5ml_screwcap_A2 + parent: opentrons_24_tuberack_nest_0point5ml_screwcap + position: + x: 35.0275 + y: 72.3575 + z: 60 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 25.2 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_0point5ml_screwcap_B2 + name: opentrons_24_tuberack_nest_0point5ml_screwcap_B2 + parent: opentrons_24_tuberack_nest_0point5ml_screwcap + position: + x: 35.0275 + y: 53.0775 + z: 60 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 25.2 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_0point5ml_screwcap_C2 + name: opentrons_24_tuberack_nest_0point5ml_screwcap_C2 + parent: opentrons_24_tuberack_nest_0point5ml_screwcap + position: + x: 35.0275 + y: 33.7975 + z: 60 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 25.2 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_0point5ml_screwcap_D2 + name: opentrons_24_tuberack_nest_0point5ml_screwcap_D2 + parent: opentrons_24_tuberack_nest_0point5ml_screwcap + position: + x: 35.0275 + y: 14.5175 + z: 60 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 25.2 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_0point5ml_screwcap_A3 + name: opentrons_24_tuberack_nest_0point5ml_screwcap_A3 + parent: opentrons_24_tuberack_nest_0point5ml_screwcap + position: + x: 54.9175 + y: 72.3575 + z: 60 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 25.2 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_0point5ml_screwcap_B3 + name: opentrons_24_tuberack_nest_0point5ml_screwcap_B3 + parent: opentrons_24_tuberack_nest_0point5ml_screwcap + position: + x: 54.9175 + y: 53.0775 + z: 60 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 25.2 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_0point5ml_screwcap_C3 + name: opentrons_24_tuberack_nest_0point5ml_screwcap_C3 + parent: opentrons_24_tuberack_nest_0point5ml_screwcap + position: + x: 54.9175 + y: 33.7975 + z: 60 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 25.2 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_0point5ml_screwcap_D3 + name: opentrons_24_tuberack_nest_0point5ml_screwcap_D3 + parent: opentrons_24_tuberack_nest_0point5ml_screwcap + position: + x: 54.9175 + y: 14.5175 + z: 60 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 25.2 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_0point5ml_screwcap_A4 + name: opentrons_24_tuberack_nest_0point5ml_screwcap_A4 + parent: opentrons_24_tuberack_nest_0point5ml_screwcap + position: + x: 74.8075 + y: 72.3575 + z: 60 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 25.2 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_0point5ml_screwcap_B4 + name: opentrons_24_tuberack_nest_0point5ml_screwcap_B4 + parent: opentrons_24_tuberack_nest_0point5ml_screwcap + position: + x: 74.8075 + y: 53.0775 + z: 60 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 25.2 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_0point5ml_screwcap_C4 + name: opentrons_24_tuberack_nest_0point5ml_screwcap_C4 + parent: opentrons_24_tuberack_nest_0point5ml_screwcap + position: + x: 74.8075 + y: 33.7975 + z: 60 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 25.2 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_0point5ml_screwcap_D4 + name: opentrons_24_tuberack_nest_0point5ml_screwcap_D4 + parent: opentrons_24_tuberack_nest_0point5ml_screwcap + position: + x: 74.8075 + y: 14.5175 + z: 60 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 25.2 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_0point5ml_screwcap_A5 + name: opentrons_24_tuberack_nest_0point5ml_screwcap_A5 + parent: opentrons_24_tuberack_nest_0point5ml_screwcap + position: + x: 94.6975 + y: 72.3575 + z: 60 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 25.2 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_0point5ml_screwcap_B5 + name: opentrons_24_tuberack_nest_0point5ml_screwcap_B5 + parent: opentrons_24_tuberack_nest_0point5ml_screwcap + position: + x: 94.6975 + y: 53.0775 + z: 60 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 25.2 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_0point5ml_screwcap_C5 + name: opentrons_24_tuberack_nest_0point5ml_screwcap_C5 + parent: opentrons_24_tuberack_nest_0point5ml_screwcap + position: + x: 94.6975 + y: 33.7975 + z: 60 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 25.2 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_0point5ml_screwcap_D5 + name: opentrons_24_tuberack_nest_0point5ml_screwcap_D5 + parent: opentrons_24_tuberack_nest_0point5ml_screwcap + position: + x: 94.6975 + y: 14.5175 + z: 60 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 25.2 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_0point5ml_screwcap_A6 + name: opentrons_24_tuberack_nest_0point5ml_screwcap_A6 + parent: opentrons_24_tuberack_nest_0point5ml_screwcap + position: + x: 114.5875 + y: 72.3575 + z: 60 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 25.2 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_0point5ml_screwcap_B6 + name: opentrons_24_tuberack_nest_0point5ml_screwcap_B6 + parent: opentrons_24_tuberack_nest_0point5ml_screwcap + position: + x: 114.5875 + y: 53.0775 + z: 60 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 25.2 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_0point5ml_screwcap_C6 + name: opentrons_24_tuberack_nest_0point5ml_screwcap_C6 + parent: opentrons_24_tuberack_nest_0point5ml_screwcap + position: + x: 114.5875 + y: 33.7975 + z: 60 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 25.2 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_0point5ml_screwcap_D6 + name: opentrons_24_tuberack_nest_0point5ml_screwcap_D6 + parent: opentrons_24_tuberack_nest_0point5ml_screwcap + position: + x: 114.5875 + y: 14.5175 + z: 60 + sample_id: null + type: container + description: Opentrons 24 tuberack nest 0.5ml screwcap + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tube_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +opentrons_24_tuberack_nest_1point5ml_screwcap: + category: + - tube_racks + class: + module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_nest_1point5ml_screwcap + type: pylabrobot + config_info: + - children: + - opentrons_24_tuberack_nest_1point5ml_screwcap_A1 + - opentrons_24_tuberack_nest_1point5ml_screwcap_B1 + - opentrons_24_tuberack_nest_1point5ml_screwcap_C1 + - opentrons_24_tuberack_nest_1point5ml_screwcap_D1 + - opentrons_24_tuberack_nest_1point5ml_screwcap_A2 + - opentrons_24_tuberack_nest_1point5ml_screwcap_B2 + - opentrons_24_tuberack_nest_1point5ml_screwcap_C2 + - opentrons_24_tuberack_nest_1point5ml_screwcap_D2 + - opentrons_24_tuberack_nest_1point5ml_screwcap_A3 + - opentrons_24_tuberack_nest_1point5ml_screwcap_B3 + - opentrons_24_tuberack_nest_1point5ml_screwcap_C3 + - opentrons_24_tuberack_nest_1point5ml_screwcap_D3 + - opentrons_24_tuberack_nest_1point5ml_screwcap_A4 + - opentrons_24_tuberack_nest_1point5ml_screwcap_B4 + - opentrons_24_tuberack_nest_1point5ml_screwcap_C4 + - opentrons_24_tuberack_nest_1point5ml_screwcap_D4 + - opentrons_24_tuberack_nest_1point5ml_screwcap_A5 + - opentrons_24_tuberack_nest_1point5ml_screwcap_B5 + - opentrons_24_tuberack_nest_1point5ml_screwcap_C5 + - opentrons_24_tuberack_nest_1point5ml_screwcap_D5 + - opentrons_24_tuberack_nest_1point5ml_screwcap_A6 + - opentrons_24_tuberack_nest_1point5ml_screwcap_B6 + - opentrons_24_tuberack_nest_1point5ml_screwcap_C6 + - opentrons_24_tuberack_nest_1point5ml_screwcap_D6 + class: '' + config: + barcode: null + category: null + model: Opentrons 24 Tube Rack with NEST 1.5 mL Screwcap + ordering: + A1: opentrons_24_tuberack_nest_1point5ml_screwcap_A1 + B1: opentrons_24_tuberack_nest_1point5ml_screwcap_B1 + C1: opentrons_24_tuberack_nest_1point5ml_screwcap_C1 + D1: opentrons_24_tuberack_nest_1point5ml_screwcap_D1 + A2: opentrons_24_tuberack_nest_1point5ml_screwcap_A2 + B2: opentrons_24_tuberack_nest_1point5ml_screwcap_B2 + C2: opentrons_24_tuberack_nest_1point5ml_screwcap_C2 + D2: opentrons_24_tuberack_nest_1point5ml_screwcap_D2 + A3: opentrons_24_tuberack_nest_1point5ml_screwcap_A3 + B3: opentrons_24_tuberack_nest_1point5ml_screwcap_B3 + C3: opentrons_24_tuberack_nest_1point5ml_screwcap_C3 + D3: opentrons_24_tuberack_nest_1point5ml_screwcap_D3 + A4: opentrons_24_tuberack_nest_1point5ml_screwcap_A4 + B4: opentrons_24_tuberack_nest_1point5ml_screwcap_B4 + C4: opentrons_24_tuberack_nest_1point5ml_screwcap_C4 + D4: opentrons_24_tuberack_nest_1point5ml_screwcap_D4 + A5: opentrons_24_tuberack_nest_1point5ml_screwcap_A5 + B5: opentrons_24_tuberack_nest_1point5ml_screwcap_B5 + C5: opentrons_24_tuberack_nest_1point5ml_screwcap_C5 + D5: opentrons_24_tuberack_nest_1point5ml_screwcap_D5 + A6: opentrons_24_tuberack_nest_1point5ml_screwcap_A6 + B6: opentrons_24_tuberack_nest_1point5ml_screwcap_B6 + C6: opentrons_24_tuberack_nest_1point5ml_screwcap_C6 + D6: opentrons_24_tuberack_nest_1point5ml_screwcap_D6 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.75 + size_y: 85.5 + size_z: 85.2 + type: TubeRack + data: {} + id: opentrons_24_tuberack_nest_1point5ml_screwcap + name: opentrons_24_tuberack_nest_1point5ml_screwcap + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 43.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_screwcap_A1 + name: opentrons_24_tuberack_nest_1point5ml_screwcap_A1 + parent: opentrons_24_tuberack_nest_1point5ml_screwcap + position: + x: 15.1375 + y: 72.3575 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 43.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_screwcap_B1 + name: opentrons_24_tuberack_nest_1point5ml_screwcap_B1 + parent: opentrons_24_tuberack_nest_1point5ml_screwcap + position: + x: 15.1375 + y: 53.0775 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 43.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_screwcap_C1 + name: opentrons_24_tuberack_nest_1point5ml_screwcap_C1 + parent: opentrons_24_tuberack_nest_1point5ml_screwcap + position: + x: 15.1375 + y: 33.7975 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 43.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_screwcap_D1 + name: opentrons_24_tuberack_nest_1point5ml_screwcap_D1 + parent: opentrons_24_tuberack_nest_1point5ml_screwcap + position: + x: 15.1375 + y: 14.5175 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 43.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_screwcap_A2 + name: opentrons_24_tuberack_nest_1point5ml_screwcap_A2 + parent: opentrons_24_tuberack_nest_1point5ml_screwcap + position: + x: 35.0275 + y: 72.3575 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 43.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_screwcap_B2 + name: opentrons_24_tuberack_nest_1point5ml_screwcap_B2 + parent: opentrons_24_tuberack_nest_1point5ml_screwcap + position: + x: 35.0275 + y: 53.0775 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 43.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_screwcap_C2 + name: opentrons_24_tuberack_nest_1point5ml_screwcap_C2 + parent: opentrons_24_tuberack_nest_1point5ml_screwcap + position: + x: 35.0275 + y: 33.7975 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 43.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_screwcap_D2 + name: opentrons_24_tuberack_nest_1point5ml_screwcap_D2 + parent: opentrons_24_tuberack_nest_1point5ml_screwcap + position: + x: 35.0275 + y: 14.5175 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 43.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_screwcap_A3 + name: opentrons_24_tuberack_nest_1point5ml_screwcap_A3 + parent: opentrons_24_tuberack_nest_1point5ml_screwcap + position: + x: 54.9175 + y: 72.3575 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 43.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_screwcap_B3 + name: opentrons_24_tuberack_nest_1point5ml_screwcap_B3 + parent: opentrons_24_tuberack_nest_1point5ml_screwcap + position: + x: 54.9175 + y: 53.0775 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 43.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_screwcap_C3 + name: opentrons_24_tuberack_nest_1point5ml_screwcap_C3 + parent: opentrons_24_tuberack_nest_1point5ml_screwcap + position: + x: 54.9175 + y: 33.7975 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 43.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_screwcap_D3 + name: opentrons_24_tuberack_nest_1point5ml_screwcap_D3 + parent: opentrons_24_tuberack_nest_1point5ml_screwcap + position: + x: 54.9175 + y: 14.5175 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 43.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_screwcap_A4 + name: opentrons_24_tuberack_nest_1point5ml_screwcap_A4 + parent: opentrons_24_tuberack_nest_1point5ml_screwcap + position: + x: 74.8075 + y: 72.3575 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 43.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_screwcap_B4 + name: opentrons_24_tuberack_nest_1point5ml_screwcap_B4 + parent: opentrons_24_tuberack_nest_1point5ml_screwcap + position: + x: 74.8075 + y: 53.0775 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 43.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_screwcap_C4 + name: opentrons_24_tuberack_nest_1point5ml_screwcap_C4 + parent: opentrons_24_tuberack_nest_1point5ml_screwcap + position: + x: 74.8075 + y: 33.7975 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 43.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_screwcap_D4 + name: opentrons_24_tuberack_nest_1point5ml_screwcap_D4 + parent: opentrons_24_tuberack_nest_1point5ml_screwcap + position: + x: 74.8075 + y: 14.5175 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 43.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_screwcap_A5 + name: opentrons_24_tuberack_nest_1point5ml_screwcap_A5 + parent: opentrons_24_tuberack_nest_1point5ml_screwcap + position: + x: 94.6975 + y: 72.3575 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 43.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_screwcap_B5 + name: opentrons_24_tuberack_nest_1point5ml_screwcap_B5 + parent: opentrons_24_tuberack_nest_1point5ml_screwcap + position: + x: 94.6975 + y: 53.0775 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 43.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_screwcap_C5 + name: opentrons_24_tuberack_nest_1point5ml_screwcap_C5 + parent: opentrons_24_tuberack_nest_1point5ml_screwcap + position: + x: 94.6975 + y: 33.7975 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 43.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_screwcap_D5 + name: opentrons_24_tuberack_nest_1point5ml_screwcap_D5 + parent: opentrons_24_tuberack_nest_1point5ml_screwcap + position: + x: 94.6975 + y: 14.5175 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 43.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_screwcap_A6 + name: opentrons_24_tuberack_nest_1point5ml_screwcap_A6 + parent: opentrons_24_tuberack_nest_1point5ml_screwcap + position: + x: 114.5875 + y: 72.3575 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 43.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_screwcap_B6 + name: opentrons_24_tuberack_nest_1point5ml_screwcap_B6 + parent: opentrons_24_tuberack_nest_1point5ml_screwcap + position: + x: 114.5875 + y: 53.0775 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 43.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_screwcap_C6 + name: opentrons_24_tuberack_nest_1point5ml_screwcap_C6 + parent: opentrons_24_tuberack_nest_1point5ml_screwcap + position: + x: 114.5875 + y: 33.7975 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 43.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_screwcap_D6 + name: opentrons_24_tuberack_nest_1point5ml_screwcap_D6 + parent: opentrons_24_tuberack_nest_1point5ml_screwcap + position: + x: 114.5875 + y: 14.5175 + z: 41.3 + sample_id: null + type: container + description: Opentrons 24 tuberack nest 1.5ml screwcap + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tube_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +opentrons_24_tuberack_nest_1point5ml_snapcap: + category: + - tube_racks + class: + module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_nest_1point5ml_snapcap + type: pylabrobot + config_info: + - children: + - opentrons_24_tuberack_nest_1point5ml_snapcap_A1 + - opentrons_24_tuberack_nest_1point5ml_snapcap_B1 + - opentrons_24_tuberack_nest_1point5ml_snapcap_C1 + - opentrons_24_tuberack_nest_1point5ml_snapcap_D1 + - opentrons_24_tuberack_nest_1point5ml_snapcap_A2 + - opentrons_24_tuberack_nest_1point5ml_snapcap_B2 + - opentrons_24_tuberack_nest_1point5ml_snapcap_C2 + - opentrons_24_tuberack_nest_1point5ml_snapcap_D2 + - opentrons_24_tuberack_nest_1point5ml_snapcap_A3 + - opentrons_24_tuberack_nest_1point5ml_snapcap_B3 + - opentrons_24_tuberack_nest_1point5ml_snapcap_C3 + - opentrons_24_tuberack_nest_1point5ml_snapcap_D3 + - opentrons_24_tuberack_nest_1point5ml_snapcap_A4 + - opentrons_24_tuberack_nest_1point5ml_snapcap_B4 + - opentrons_24_tuberack_nest_1point5ml_snapcap_C4 + - opentrons_24_tuberack_nest_1point5ml_snapcap_D4 + - opentrons_24_tuberack_nest_1point5ml_snapcap_A5 + - opentrons_24_tuberack_nest_1point5ml_snapcap_B5 + - opentrons_24_tuberack_nest_1point5ml_snapcap_C5 + - opentrons_24_tuberack_nest_1point5ml_snapcap_D5 + - opentrons_24_tuberack_nest_1point5ml_snapcap_A6 + - opentrons_24_tuberack_nest_1point5ml_snapcap_B6 + - opentrons_24_tuberack_nest_1point5ml_snapcap_C6 + - opentrons_24_tuberack_nest_1point5ml_snapcap_D6 + class: '' + config: + barcode: null + category: null + model: Opentrons 24 Tube Rack with NEST 1.5 mL Snapcap + ordering: + A1: opentrons_24_tuberack_nest_1point5ml_snapcap_A1 + B1: opentrons_24_tuberack_nest_1point5ml_snapcap_B1 + C1: opentrons_24_tuberack_nest_1point5ml_snapcap_C1 + D1: opentrons_24_tuberack_nest_1point5ml_snapcap_D1 + A2: opentrons_24_tuberack_nest_1point5ml_snapcap_A2 + B2: opentrons_24_tuberack_nest_1point5ml_snapcap_B2 + C2: opentrons_24_tuberack_nest_1point5ml_snapcap_C2 + D2: opentrons_24_tuberack_nest_1point5ml_snapcap_D2 + A3: opentrons_24_tuberack_nest_1point5ml_snapcap_A3 + B3: opentrons_24_tuberack_nest_1point5ml_snapcap_B3 + C3: opentrons_24_tuberack_nest_1point5ml_snapcap_C3 + D3: opentrons_24_tuberack_nest_1point5ml_snapcap_D3 + A4: opentrons_24_tuberack_nest_1point5ml_snapcap_A4 + B4: opentrons_24_tuberack_nest_1point5ml_snapcap_B4 + C4: opentrons_24_tuberack_nest_1point5ml_snapcap_C4 + D4: opentrons_24_tuberack_nest_1point5ml_snapcap_D4 + A5: opentrons_24_tuberack_nest_1point5ml_snapcap_A5 + B5: opentrons_24_tuberack_nest_1point5ml_snapcap_B5 + C5: opentrons_24_tuberack_nest_1point5ml_snapcap_C5 + D5: opentrons_24_tuberack_nest_1point5ml_snapcap_D5 + A6: opentrons_24_tuberack_nest_1point5ml_snapcap_A6 + B6: opentrons_24_tuberack_nest_1point5ml_snapcap_B6 + C6: opentrons_24_tuberack_nest_1point5ml_snapcap_C6 + D6: opentrons_24_tuberack_nest_1point5ml_snapcap_D6 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.75 + size_y: 85.5 + size_z: 79.55 + type: TubeRack + data: {} + id: opentrons_24_tuberack_nest_1point5ml_snapcap + name: opentrons_24_tuberack_nest_1point5ml_snapcap + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_snapcap_A1 + name: opentrons_24_tuberack_nest_1point5ml_snapcap_A1 + parent: opentrons_24_tuberack_nest_1point5ml_snapcap + position: + x: 14.604 + y: 71.824 + z: 41.65 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_snapcap_B1 + name: opentrons_24_tuberack_nest_1point5ml_snapcap_B1 + parent: opentrons_24_tuberack_nest_1point5ml_snapcap + position: + x: 14.604 + y: 52.544 + z: 41.65 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_snapcap_C1 + name: opentrons_24_tuberack_nest_1point5ml_snapcap_C1 + parent: opentrons_24_tuberack_nest_1point5ml_snapcap + position: + x: 14.604 + y: 33.264 + z: 41.65 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_snapcap_D1 + name: opentrons_24_tuberack_nest_1point5ml_snapcap_D1 + parent: opentrons_24_tuberack_nest_1point5ml_snapcap + position: + x: 14.604 + y: 13.984 + z: 41.65 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_snapcap_A2 + name: opentrons_24_tuberack_nest_1point5ml_snapcap_A2 + parent: opentrons_24_tuberack_nest_1point5ml_snapcap + position: + x: 34.494 + y: 71.824 + z: 41.65 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_snapcap_B2 + name: opentrons_24_tuberack_nest_1point5ml_snapcap_B2 + parent: opentrons_24_tuberack_nest_1point5ml_snapcap + position: + x: 34.494 + y: 52.544 + z: 41.65 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_snapcap_C2 + name: opentrons_24_tuberack_nest_1point5ml_snapcap_C2 + parent: opentrons_24_tuberack_nest_1point5ml_snapcap + position: + x: 34.494 + y: 33.264 + z: 41.65 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_snapcap_D2 + name: opentrons_24_tuberack_nest_1point5ml_snapcap_D2 + parent: opentrons_24_tuberack_nest_1point5ml_snapcap + position: + x: 34.494 + y: 13.984 + z: 41.65 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_snapcap_A3 + name: opentrons_24_tuberack_nest_1point5ml_snapcap_A3 + parent: opentrons_24_tuberack_nest_1point5ml_snapcap + position: + x: 54.384 + y: 71.824 + z: 41.65 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_snapcap_B3 + name: opentrons_24_tuberack_nest_1point5ml_snapcap_B3 + parent: opentrons_24_tuberack_nest_1point5ml_snapcap + position: + x: 54.384 + y: 52.544 + z: 41.65 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_snapcap_C3 + name: opentrons_24_tuberack_nest_1point5ml_snapcap_C3 + parent: opentrons_24_tuberack_nest_1point5ml_snapcap + position: + x: 54.384 + y: 33.264 + z: 41.65 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_snapcap_D3 + name: opentrons_24_tuberack_nest_1point5ml_snapcap_D3 + parent: opentrons_24_tuberack_nest_1point5ml_snapcap + position: + x: 54.384 + y: 13.984 + z: 41.65 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_snapcap_A4 + name: opentrons_24_tuberack_nest_1point5ml_snapcap_A4 + parent: opentrons_24_tuberack_nest_1point5ml_snapcap + position: + x: 74.274 + y: 71.824 + z: 41.65 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_snapcap_B4 + name: opentrons_24_tuberack_nest_1point5ml_snapcap_B4 + parent: opentrons_24_tuberack_nest_1point5ml_snapcap + position: + x: 74.274 + y: 52.544 + z: 41.65 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_snapcap_C4 + name: opentrons_24_tuberack_nest_1point5ml_snapcap_C4 + parent: opentrons_24_tuberack_nest_1point5ml_snapcap + position: + x: 74.274 + y: 33.264 + z: 41.65 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_snapcap_D4 + name: opentrons_24_tuberack_nest_1point5ml_snapcap_D4 + parent: opentrons_24_tuberack_nest_1point5ml_snapcap + position: + x: 74.274 + y: 13.984 + z: 41.65 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_snapcap_A5 + name: opentrons_24_tuberack_nest_1point5ml_snapcap_A5 + parent: opentrons_24_tuberack_nest_1point5ml_snapcap + position: + x: 94.164 + y: 71.824 + z: 41.65 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_snapcap_B5 + name: opentrons_24_tuberack_nest_1point5ml_snapcap_B5 + parent: opentrons_24_tuberack_nest_1point5ml_snapcap + position: + x: 94.164 + y: 52.544 + z: 41.65 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_snapcap_C5 + name: opentrons_24_tuberack_nest_1point5ml_snapcap_C5 + parent: opentrons_24_tuberack_nest_1point5ml_snapcap + position: + x: 94.164 + y: 33.264 + z: 41.65 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_snapcap_D5 + name: opentrons_24_tuberack_nest_1point5ml_snapcap_D5 + parent: opentrons_24_tuberack_nest_1point5ml_snapcap + position: + x: 94.164 + y: 13.984 + z: 41.65 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_snapcap_A6 + name: opentrons_24_tuberack_nest_1point5ml_snapcap_A6 + parent: opentrons_24_tuberack_nest_1point5ml_snapcap + position: + x: 114.054 + y: 71.824 + z: 41.65 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_snapcap_B6 + name: opentrons_24_tuberack_nest_1point5ml_snapcap_B6 + parent: opentrons_24_tuberack_nest_1point5ml_snapcap + position: + x: 114.054 + y: 52.544 + z: 41.65 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_snapcap_C6 + name: opentrons_24_tuberack_nest_1point5ml_snapcap_C6 + parent: opentrons_24_tuberack_nest_1point5ml_snapcap + position: + x: 114.054 + y: 33.264 + z: 41.65 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 1500 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.212 + size_y: 7.212 + size_z: 37.9 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_1point5ml_snapcap_D6 + name: opentrons_24_tuberack_nest_1point5ml_snapcap_D6 + parent: opentrons_24_tuberack_nest_1point5ml_snapcap + position: + x: 114.054 + y: 13.984 + z: 41.65 + sample_id: null + type: container + description: Opentrons 24 tuberack nest 1.5ml snapcap + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tube_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +opentrons_24_tuberack_nest_2ml_screwcap: + category: + - tube_racks + class: + module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_nest_2ml_screwcap + type: pylabrobot + config_info: + - children: + - opentrons_24_tuberack_nest_2ml_screwcap_A1 + - opentrons_24_tuberack_nest_2ml_screwcap_B1 + - opentrons_24_tuberack_nest_2ml_screwcap_C1 + - opentrons_24_tuberack_nest_2ml_screwcap_D1 + - opentrons_24_tuberack_nest_2ml_screwcap_A2 + - opentrons_24_tuberack_nest_2ml_screwcap_B2 + - opentrons_24_tuberack_nest_2ml_screwcap_C2 + - opentrons_24_tuberack_nest_2ml_screwcap_D2 + - opentrons_24_tuberack_nest_2ml_screwcap_A3 + - opentrons_24_tuberack_nest_2ml_screwcap_B3 + - opentrons_24_tuberack_nest_2ml_screwcap_C3 + - opentrons_24_tuberack_nest_2ml_screwcap_D3 + - opentrons_24_tuberack_nest_2ml_screwcap_A4 + - opentrons_24_tuberack_nest_2ml_screwcap_B4 + - opentrons_24_tuberack_nest_2ml_screwcap_C4 + - opentrons_24_tuberack_nest_2ml_screwcap_D4 + - opentrons_24_tuberack_nest_2ml_screwcap_A5 + - opentrons_24_tuberack_nest_2ml_screwcap_B5 + - opentrons_24_tuberack_nest_2ml_screwcap_C5 + - opentrons_24_tuberack_nest_2ml_screwcap_D5 + - opentrons_24_tuberack_nest_2ml_screwcap_A6 + - opentrons_24_tuberack_nest_2ml_screwcap_B6 + - opentrons_24_tuberack_nest_2ml_screwcap_C6 + - opentrons_24_tuberack_nest_2ml_screwcap_D6 + class: '' + config: + barcode: null + category: null + model: Opentrons 24 Tube Rack with NEST 2 mL Screwcap + ordering: + A1: opentrons_24_tuberack_nest_2ml_screwcap_A1 + B1: opentrons_24_tuberack_nest_2ml_screwcap_B1 + C1: opentrons_24_tuberack_nest_2ml_screwcap_C1 + D1: opentrons_24_tuberack_nest_2ml_screwcap_D1 + A2: opentrons_24_tuberack_nest_2ml_screwcap_A2 + B2: opentrons_24_tuberack_nest_2ml_screwcap_B2 + C2: opentrons_24_tuberack_nest_2ml_screwcap_C2 + D2: opentrons_24_tuberack_nest_2ml_screwcap_D2 + A3: opentrons_24_tuberack_nest_2ml_screwcap_A3 + B3: opentrons_24_tuberack_nest_2ml_screwcap_B3 + C3: opentrons_24_tuberack_nest_2ml_screwcap_C3 + D3: opentrons_24_tuberack_nest_2ml_screwcap_D3 + A4: opentrons_24_tuberack_nest_2ml_screwcap_A4 + B4: opentrons_24_tuberack_nest_2ml_screwcap_B4 + C4: opentrons_24_tuberack_nest_2ml_screwcap_C4 + D4: opentrons_24_tuberack_nest_2ml_screwcap_D4 + A5: opentrons_24_tuberack_nest_2ml_screwcap_A5 + B5: opentrons_24_tuberack_nest_2ml_screwcap_B5 + C5: opentrons_24_tuberack_nest_2ml_screwcap_C5 + D5: opentrons_24_tuberack_nest_2ml_screwcap_D5 + A6: opentrons_24_tuberack_nest_2ml_screwcap_A6 + B6: opentrons_24_tuberack_nest_2ml_screwcap_B6 + C6: opentrons_24_tuberack_nest_2ml_screwcap_C6 + D6: opentrons_24_tuberack_nest_2ml_screwcap_D6 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.75 + size_y: 85.5 + size_z: 85.35 + type: TubeRack + data: {} + id: opentrons_24_tuberack_nest_2ml_screwcap + name: opentrons_24_tuberack_nest_2ml_screwcap + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 44.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_screwcap_A1 + name: opentrons_24_tuberack_nest_2ml_screwcap_A1 + parent: opentrons_24_tuberack_nest_2ml_screwcap + position: + x: 15.1375 + y: 72.3575 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 44.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_screwcap_B1 + name: opentrons_24_tuberack_nest_2ml_screwcap_B1 + parent: opentrons_24_tuberack_nest_2ml_screwcap + position: + x: 15.1375 + y: 53.0775 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 44.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_screwcap_C1 + name: opentrons_24_tuberack_nest_2ml_screwcap_C1 + parent: opentrons_24_tuberack_nest_2ml_screwcap + position: + x: 15.1375 + y: 33.7975 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 44.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_screwcap_D1 + name: opentrons_24_tuberack_nest_2ml_screwcap_D1 + parent: opentrons_24_tuberack_nest_2ml_screwcap + position: + x: 15.1375 + y: 14.5175 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 44.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_screwcap_A2 + name: opentrons_24_tuberack_nest_2ml_screwcap_A2 + parent: opentrons_24_tuberack_nest_2ml_screwcap + position: + x: 35.0275 + y: 72.3575 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 44.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_screwcap_B2 + name: opentrons_24_tuberack_nest_2ml_screwcap_B2 + parent: opentrons_24_tuberack_nest_2ml_screwcap + position: + x: 35.0275 + y: 53.0775 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 44.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_screwcap_C2 + name: opentrons_24_tuberack_nest_2ml_screwcap_C2 + parent: opentrons_24_tuberack_nest_2ml_screwcap + position: + x: 35.0275 + y: 33.7975 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 44.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_screwcap_D2 + name: opentrons_24_tuberack_nest_2ml_screwcap_D2 + parent: opentrons_24_tuberack_nest_2ml_screwcap + position: + x: 35.0275 + y: 14.5175 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 44.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_screwcap_A3 + name: opentrons_24_tuberack_nest_2ml_screwcap_A3 + parent: opentrons_24_tuberack_nest_2ml_screwcap + position: + x: 54.9175 + y: 72.3575 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 44.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_screwcap_B3 + name: opentrons_24_tuberack_nest_2ml_screwcap_B3 + parent: opentrons_24_tuberack_nest_2ml_screwcap + position: + x: 54.9175 + y: 53.0775 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 44.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_screwcap_C3 + name: opentrons_24_tuberack_nest_2ml_screwcap_C3 + parent: opentrons_24_tuberack_nest_2ml_screwcap + position: + x: 54.9175 + y: 33.7975 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 44.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_screwcap_D3 + name: opentrons_24_tuberack_nest_2ml_screwcap_D3 + parent: opentrons_24_tuberack_nest_2ml_screwcap + position: + x: 54.9175 + y: 14.5175 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 44.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_screwcap_A4 + name: opentrons_24_tuberack_nest_2ml_screwcap_A4 + parent: opentrons_24_tuberack_nest_2ml_screwcap + position: + x: 74.8075 + y: 72.3575 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 44.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_screwcap_B4 + name: opentrons_24_tuberack_nest_2ml_screwcap_B4 + parent: opentrons_24_tuberack_nest_2ml_screwcap + position: + x: 74.8075 + y: 53.0775 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 44.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_screwcap_C4 + name: opentrons_24_tuberack_nest_2ml_screwcap_C4 + parent: opentrons_24_tuberack_nest_2ml_screwcap + position: + x: 74.8075 + y: 33.7975 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 44.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_screwcap_D4 + name: opentrons_24_tuberack_nest_2ml_screwcap_D4 + parent: opentrons_24_tuberack_nest_2ml_screwcap + position: + x: 74.8075 + y: 14.5175 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 44.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_screwcap_A5 + name: opentrons_24_tuberack_nest_2ml_screwcap_A5 + parent: opentrons_24_tuberack_nest_2ml_screwcap + position: + x: 94.6975 + y: 72.3575 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 44.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_screwcap_B5 + name: opentrons_24_tuberack_nest_2ml_screwcap_B5 + parent: opentrons_24_tuberack_nest_2ml_screwcap + position: + x: 94.6975 + y: 53.0775 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 44.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_screwcap_C5 + name: opentrons_24_tuberack_nest_2ml_screwcap_C5 + parent: opentrons_24_tuberack_nest_2ml_screwcap + position: + x: 94.6975 + y: 33.7975 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 44.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_screwcap_D5 + name: opentrons_24_tuberack_nest_2ml_screwcap_D5 + parent: opentrons_24_tuberack_nest_2ml_screwcap + position: + x: 94.6975 + y: 14.5175 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 44.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_screwcap_A6 + name: opentrons_24_tuberack_nest_2ml_screwcap_A6 + parent: opentrons_24_tuberack_nest_2ml_screwcap + position: + x: 114.5875 + y: 72.3575 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 44.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_screwcap_B6 + name: opentrons_24_tuberack_nest_2ml_screwcap_B6 + parent: opentrons_24_tuberack_nest_2ml_screwcap + position: + x: 114.5875 + y: 53.0775 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 44.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_screwcap_C6 + name: opentrons_24_tuberack_nest_2ml_screwcap_C6 + parent: opentrons_24_tuberack_nest_2ml_screwcap + position: + x: 114.5875 + y: 33.7975 + z: 41.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 6.145 + size_y: 6.145 + size_z: 44.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_screwcap_D6 + name: opentrons_24_tuberack_nest_2ml_screwcap_D6 + parent: opentrons_24_tuberack_nest_2ml_screwcap + position: + x: 114.5875 + y: 14.5175 + z: 41.3 + sample_id: null + type: container + description: Opentrons 24 tuberack nest 2ml screwcap + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tube_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +opentrons_24_tuberack_nest_2ml_snapcap: + category: + - tube_racks + class: + module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_nest_2ml_snapcap + type: pylabrobot + config_info: + - children: + - opentrons_24_tuberack_nest_2ml_snapcap_A1 + - opentrons_24_tuberack_nest_2ml_snapcap_B1 + - opentrons_24_tuberack_nest_2ml_snapcap_C1 + - opentrons_24_tuberack_nest_2ml_snapcap_D1 + - opentrons_24_tuberack_nest_2ml_snapcap_A2 + - opentrons_24_tuberack_nest_2ml_snapcap_B2 + - opentrons_24_tuberack_nest_2ml_snapcap_C2 + - opentrons_24_tuberack_nest_2ml_snapcap_D2 + - opentrons_24_tuberack_nest_2ml_snapcap_A3 + - opentrons_24_tuberack_nest_2ml_snapcap_B3 + - opentrons_24_tuberack_nest_2ml_snapcap_C3 + - opentrons_24_tuberack_nest_2ml_snapcap_D3 + - opentrons_24_tuberack_nest_2ml_snapcap_A4 + - opentrons_24_tuberack_nest_2ml_snapcap_B4 + - opentrons_24_tuberack_nest_2ml_snapcap_C4 + - opentrons_24_tuberack_nest_2ml_snapcap_D4 + - opentrons_24_tuberack_nest_2ml_snapcap_A5 + - opentrons_24_tuberack_nest_2ml_snapcap_B5 + - opentrons_24_tuberack_nest_2ml_snapcap_C5 + - opentrons_24_tuberack_nest_2ml_snapcap_D5 + - opentrons_24_tuberack_nest_2ml_snapcap_A6 + - opentrons_24_tuberack_nest_2ml_snapcap_B6 + - opentrons_24_tuberack_nest_2ml_snapcap_C6 + - opentrons_24_tuberack_nest_2ml_snapcap_D6 + class: '' + config: + barcode: null + category: null + model: Opentrons 24 Tube Rack with NEST 2 mL Snapcap + ordering: + A1: opentrons_24_tuberack_nest_2ml_snapcap_A1 + B1: opentrons_24_tuberack_nest_2ml_snapcap_B1 + C1: opentrons_24_tuberack_nest_2ml_snapcap_C1 + D1: opentrons_24_tuberack_nest_2ml_snapcap_D1 + A2: opentrons_24_tuberack_nest_2ml_snapcap_A2 + B2: opentrons_24_tuberack_nest_2ml_snapcap_B2 + C2: opentrons_24_tuberack_nest_2ml_snapcap_C2 + D2: opentrons_24_tuberack_nest_2ml_snapcap_D2 + A3: opentrons_24_tuberack_nest_2ml_snapcap_A3 + B3: opentrons_24_tuberack_nest_2ml_snapcap_B3 + C3: opentrons_24_tuberack_nest_2ml_snapcap_C3 + D3: opentrons_24_tuberack_nest_2ml_snapcap_D3 + A4: opentrons_24_tuberack_nest_2ml_snapcap_A4 + B4: opentrons_24_tuberack_nest_2ml_snapcap_B4 + C4: opentrons_24_tuberack_nest_2ml_snapcap_C4 + D4: opentrons_24_tuberack_nest_2ml_snapcap_D4 + A5: opentrons_24_tuberack_nest_2ml_snapcap_A5 + B5: opentrons_24_tuberack_nest_2ml_snapcap_B5 + C5: opentrons_24_tuberack_nest_2ml_snapcap_C5 + D5: opentrons_24_tuberack_nest_2ml_snapcap_D5 + A6: opentrons_24_tuberack_nest_2ml_snapcap_A6 + B6: opentrons_24_tuberack_nest_2ml_snapcap_B6 + C6: opentrons_24_tuberack_nest_2ml_snapcap_C6 + D6: opentrons_24_tuberack_nest_2ml_snapcap_D6 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.75 + size_y: 85.5 + size_z: 79.45 + type: TubeRack + data: {} + id: opentrons_24_tuberack_nest_2ml_snapcap + name: opentrons_24_tuberack_nest_2ml_snapcap + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.198 + size_y: 7.198 + size_z: 39.28 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_snapcap_A1 + name: opentrons_24_tuberack_nest_2ml_snapcap_A1 + parent: opentrons_24_tuberack_nest_2ml_snapcap + position: + x: 14.611 + y: 71.831 + z: 40.17 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.198 + size_y: 7.198 + size_z: 39.28 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_snapcap_B1 + name: opentrons_24_tuberack_nest_2ml_snapcap_B1 + parent: opentrons_24_tuberack_nest_2ml_snapcap + position: + x: 14.611 + y: 52.551 + z: 40.17 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.198 + size_y: 7.198 + size_z: 39.28 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_snapcap_C1 + name: opentrons_24_tuberack_nest_2ml_snapcap_C1 + parent: opentrons_24_tuberack_nest_2ml_snapcap + position: + x: 14.611 + y: 33.271 + z: 40.17 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.198 + size_y: 7.198 + size_z: 39.28 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_snapcap_D1 + name: opentrons_24_tuberack_nest_2ml_snapcap_D1 + parent: opentrons_24_tuberack_nest_2ml_snapcap + position: + x: 14.611 + y: 13.991 + z: 40.17 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.198 + size_y: 7.198 + size_z: 39.28 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_snapcap_A2 + name: opentrons_24_tuberack_nest_2ml_snapcap_A2 + parent: opentrons_24_tuberack_nest_2ml_snapcap + position: + x: 34.501 + y: 71.831 + z: 40.17 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.198 + size_y: 7.198 + size_z: 39.28 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_snapcap_B2 + name: opentrons_24_tuberack_nest_2ml_snapcap_B2 + parent: opentrons_24_tuberack_nest_2ml_snapcap + position: + x: 34.501 + y: 52.551 + z: 40.17 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.198 + size_y: 7.198 + size_z: 39.28 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_snapcap_C2 + name: opentrons_24_tuberack_nest_2ml_snapcap_C2 + parent: opentrons_24_tuberack_nest_2ml_snapcap + position: + x: 34.501 + y: 33.271 + z: 40.17 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.198 + size_y: 7.198 + size_z: 39.28 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_snapcap_D2 + name: opentrons_24_tuberack_nest_2ml_snapcap_D2 + parent: opentrons_24_tuberack_nest_2ml_snapcap + position: + x: 34.501 + y: 13.991 + z: 40.17 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.198 + size_y: 7.198 + size_z: 39.28 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_snapcap_A3 + name: opentrons_24_tuberack_nest_2ml_snapcap_A3 + parent: opentrons_24_tuberack_nest_2ml_snapcap + position: + x: 54.391 + y: 71.831 + z: 40.17 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.198 + size_y: 7.198 + size_z: 39.28 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_snapcap_B3 + name: opentrons_24_tuberack_nest_2ml_snapcap_B3 + parent: opentrons_24_tuberack_nest_2ml_snapcap + position: + x: 54.391 + y: 52.551 + z: 40.17 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.198 + size_y: 7.198 + size_z: 39.28 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_snapcap_C3 + name: opentrons_24_tuberack_nest_2ml_snapcap_C3 + parent: opentrons_24_tuberack_nest_2ml_snapcap + position: + x: 54.391 + y: 33.271 + z: 40.17 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.198 + size_y: 7.198 + size_z: 39.28 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_snapcap_D3 + name: opentrons_24_tuberack_nest_2ml_snapcap_D3 + parent: opentrons_24_tuberack_nest_2ml_snapcap + position: + x: 54.391 + y: 13.991 + z: 40.17 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.198 + size_y: 7.198 + size_z: 39.28 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_snapcap_A4 + name: opentrons_24_tuberack_nest_2ml_snapcap_A4 + parent: opentrons_24_tuberack_nest_2ml_snapcap + position: + x: 74.281 + y: 71.831 + z: 40.17 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.198 + size_y: 7.198 + size_z: 39.28 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_snapcap_B4 + name: opentrons_24_tuberack_nest_2ml_snapcap_B4 + parent: opentrons_24_tuberack_nest_2ml_snapcap + position: + x: 74.281 + y: 52.551 + z: 40.17 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.198 + size_y: 7.198 + size_z: 39.28 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_snapcap_C4 + name: opentrons_24_tuberack_nest_2ml_snapcap_C4 + parent: opentrons_24_tuberack_nest_2ml_snapcap + position: + x: 74.281 + y: 33.271 + z: 40.17 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.198 + size_y: 7.198 + size_z: 39.28 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_snapcap_D4 + name: opentrons_24_tuberack_nest_2ml_snapcap_D4 + parent: opentrons_24_tuberack_nest_2ml_snapcap + position: + x: 74.281 + y: 13.991 + z: 40.17 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.198 + size_y: 7.198 + size_z: 39.28 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_snapcap_A5 + name: opentrons_24_tuberack_nest_2ml_snapcap_A5 + parent: opentrons_24_tuberack_nest_2ml_snapcap + position: + x: 94.171 + y: 71.831 + z: 40.17 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.198 + size_y: 7.198 + size_z: 39.28 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_snapcap_B5 + name: opentrons_24_tuberack_nest_2ml_snapcap_B5 + parent: opentrons_24_tuberack_nest_2ml_snapcap + position: + x: 94.171 + y: 52.551 + z: 40.17 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.198 + size_y: 7.198 + size_z: 39.28 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_snapcap_C5 + name: opentrons_24_tuberack_nest_2ml_snapcap_C5 + parent: opentrons_24_tuberack_nest_2ml_snapcap + position: + x: 94.171 + y: 33.271 + z: 40.17 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.198 + size_y: 7.198 + size_z: 39.28 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_snapcap_D5 + name: opentrons_24_tuberack_nest_2ml_snapcap_D5 + parent: opentrons_24_tuberack_nest_2ml_snapcap + position: + x: 94.171 + y: 13.991 + z: 40.17 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.198 + size_y: 7.198 + size_z: 39.28 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_snapcap_A6 + name: opentrons_24_tuberack_nest_2ml_snapcap_A6 + parent: opentrons_24_tuberack_nest_2ml_snapcap + position: + x: 114.061 + y: 71.831 + z: 40.17 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.198 + size_y: 7.198 + size_z: 39.28 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_snapcap_B6 + name: opentrons_24_tuberack_nest_2ml_snapcap_B6 + parent: opentrons_24_tuberack_nest_2ml_snapcap + position: + x: 114.061 + y: 52.551 + z: 40.17 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.198 + size_y: 7.198 + size_z: 39.28 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_snapcap_C6 + name: opentrons_24_tuberack_nest_2ml_snapcap_C6 + parent: opentrons_24_tuberack_nest_2ml_snapcap + position: + x: 114.061 + y: 33.271 + z: 40.17 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 2000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 7.198 + size_y: 7.198 + size_z: 39.28 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_24_tuberack_nest_2ml_snapcap_D6 + name: opentrons_24_tuberack_nest_2ml_snapcap_D6 + parent: opentrons_24_tuberack_nest_2ml_snapcap + position: + x: 114.061 + y: 13.991 + z: 40.17 + sample_id: null + type: container + description: Opentrons 24 tuberack nest 2ml snapcap + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tube_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +opentrons_6_tuberack_falcon_50ml_conical: + category: + - tube_racks + class: + module: pylabrobot.resources.opentrons.tube_racks:opentrons_6_tuberack_falcon_50ml_conical + type: pylabrobot + config_info: + - children: + - opentrons_6_tuberack_falcon_50ml_conical_A1 + - opentrons_6_tuberack_falcon_50ml_conical_B1 + - opentrons_6_tuberack_falcon_50ml_conical_A2 + - opentrons_6_tuberack_falcon_50ml_conical_B2 + - opentrons_6_tuberack_falcon_50ml_conical_A3 + - opentrons_6_tuberack_falcon_50ml_conical_B3 + class: '' + config: + barcode: null + category: null + model: Opentrons 6 Tube Rack with Falcon 50 mL Conical + ordering: + A1: opentrons_6_tuberack_falcon_50ml_conical_A1 + B1: opentrons_6_tuberack_falcon_50ml_conical_B1 + A2: opentrons_6_tuberack_falcon_50ml_conical_A2 + B2: opentrons_6_tuberack_falcon_50ml_conical_B2 + A3: opentrons_6_tuberack_falcon_50ml_conical_A3 + B3: opentrons_6_tuberack_falcon_50ml_conical_B3 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.48 + size_z: 120.3 + type: TubeRack + data: {} + id: opentrons_6_tuberack_falcon_50ml_conical + name: opentrons_6_tuberack_falcon_50ml_conical + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 50000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 19.665 + size_y: 19.665 + size_z: 113 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_6_tuberack_falcon_50ml_conical_A1 + name: opentrons_6_tuberack_falcon_50ml_conical_A1 + parent: opentrons_6_tuberack_falcon_50ml_conical + position: + x: 25.6675 + y: 50.4075 + z: 7.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 50000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 19.665 + size_y: 19.665 + size_z: 113 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_6_tuberack_falcon_50ml_conical_B1 + name: opentrons_6_tuberack_falcon_50ml_conical_B1 + parent: opentrons_6_tuberack_falcon_50ml_conical + position: + x: 25.6675 + y: 15.4075 + z: 7.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 50000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 19.665 + size_y: 19.665 + size_z: 113 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_6_tuberack_falcon_50ml_conical_A2 + name: opentrons_6_tuberack_falcon_50ml_conical_A2 + parent: opentrons_6_tuberack_falcon_50ml_conical + position: + x: 60.6675 + y: 50.4075 + z: 7.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 50000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 19.665 + size_y: 19.665 + size_z: 113 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_6_tuberack_falcon_50ml_conical_B2 + name: opentrons_6_tuberack_falcon_50ml_conical_B2 + parent: opentrons_6_tuberack_falcon_50ml_conical + position: + x: 60.6675 + y: 15.4075 + z: 7.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 50000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 19.665 + size_y: 19.665 + size_z: 113 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_6_tuberack_falcon_50ml_conical_A3 + name: opentrons_6_tuberack_falcon_50ml_conical_A3 + parent: opentrons_6_tuberack_falcon_50ml_conical + position: + x: 95.6675 + y: 50.4075 + z: 7.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 50000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 19.665 + size_y: 19.665 + size_z: 113 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_6_tuberack_falcon_50ml_conical_B3 + name: opentrons_6_tuberack_falcon_50ml_conical_B3 + parent: opentrons_6_tuberack_falcon_50ml_conical + position: + x: 95.6675 + y: 15.4075 + z: 7.3 + sample_id: null + type: container + description: Opentrons 6 tuberack falcon 50ml conical + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tube_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +opentrons_6_tuberack_nest_50ml_conical: + category: + - tube_racks + class: + module: pylabrobot.resources.opentrons.tube_racks:opentrons_6_tuberack_nest_50ml_conical + type: pylabrobot + config_info: + - children: + - opentrons_6_tuberack_nest_50ml_conical_A1 + - opentrons_6_tuberack_nest_50ml_conical_B1 + - opentrons_6_tuberack_nest_50ml_conical_A2 + - opentrons_6_tuberack_nest_50ml_conical_B2 + - opentrons_6_tuberack_nest_50ml_conical_A3 + - opentrons_6_tuberack_nest_50ml_conical_B3 + class: '' + config: + barcode: null + category: null + model: Opentrons 6 Tube Rack with NEST 50 mL Conical + ordering: + A1: opentrons_6_tuberack_nest_50ml_conical_A1 + B1: opentrons_6_tuberack_nest_50ml_conical_B1 + A2: opentrons_6_tuberack_nest_50ml_conical_A2 + B2: opentrons_6_tuberack_nest_50ml_conical_B2 + A3: opentrons_6_tuberack_nest_50ml_conical_A3 + B3: opentrons_6_tuberack_nest_50ml_conical_B3 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.48 + size_z: 120.35 + type: TubeRack + data: {} + id: opentrons_6_tuberack_nest_50ml_conical + name: opentrons_6_tuberack_nest_50ml_conical + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 50000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 19.764 + size_y: 19.764 + size_z: 113.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_6_tuberack_nest_50ml_conical_A1 + name: opentrons_6_tuberack_nest_50ml_conical_A1 + parent: opentrons_6_tuberack_nest_50ml_conical + position: + x: 25.618 + y: 50.358 + z: 7.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 50000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 19.764 + size_y: 19.764 + size_z: 113.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_6_tuberack_nest_50ml_conical_B1 + name: opentrons_6_tuberack_nest_50ml_conical_B1 + parent: opentrons_6_tuberack_nest_50ml_conical + position: + x: 25.618 + y: 15.358 + z: 7.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 50000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 19.764 + size_y: 19.764 + size_z: 113.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_6_tuberack_nest_50ml_conical_A2 + name: opentrons_6_tuberack_nest_50ml_conical_A2 + parent: opentrons_6_tuberack_nest_50ml_conical + position: + x: 60.618 + y: 50.358 + z: 7.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 50000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 19.764 + size_y: 19.764 + size_z: 113.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_6_tuberack_nest_50ml_conical_B2 + name: opentrons_6_tuberack_nest_50ml_conical_B2 + parent: opentrons_6_tuberack_nest_50ml_conical + position: + x: 60.618 + y: 15.358 + z: 7.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 50000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 19.764 + size_y: 19.764 + size_z: 113.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_6_tuberack_nest_50ml_conical_A3 + name: opentrons_6_tuberack_nest_50ml_conical_A3 + parent: opentrons_6_tuberack_nest_50ml_conical + position: + x: 95.618 + y: 50.358 + z: 7.3 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 50000 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 19.764 + size_y: 19.764 + size_z: 113.05 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_6_tuberack_nest_50ml_conical_B3 + name: opentrons_6_tuberack_nest_50ml_conical_B3 + parent: opentrons_6_tuberack_nest_50ml_conical + position: + x: 95.618 + y: 15.358 + z: 7.3 + sample_id: null + type: container + description: Opentrons 6 tuberack nest 50ml conical + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tube_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +opentrons_96_well_aluminum_block: + category: + - tube_racks + class: + module: pylabrobot.resources.opentrons.tube_racks:opentrons_96_well_aluminum_block + type: pylabrobot + config_info: + - children: + - opentrons_96_well_aluminum_block_A1 + - opentrons_96_well_aluminum_block_B1 + - opentrons_96_well_aluminum_block_C1 + - opentrons_96_well_aluminum_block_D1 + - opentrons_96_well_aluminum_block_E1 + - opentrons_96_well_aluminum_block_F1 + - opentrons_96_well_aluminum_block_G1 + - opentrons_96_well_aluminum_block_H1 + - opentrons_96_well_aluminum_block_A2 + - opentrons_96_well_aluminum_block_B2 + - opentrons_96_well_aluminum_block_C2 + - opentrons_96_well_aluminum_block_D2 + - opentrons_96_well_aluminum_block_E2 + - opentrons_96_well_aluminum_block_F2 + - opentrons_96_well_aluminum_block_G2 + - opentrons_96_well_aluminum_block_H2 + - opentrons_96_well_aluminum_block_A3 + - opentrons_96_well_aluminum_block_B3 + - opentrons_96_well_aluminum_block_C3 + - opentrons_96_well_aluminum_block_D3 + - opentrons_96_well_aluminum_block_E3 + - opentrons_96_well_aluminum_block_F3 + - opentrons_96_well_aluminum_block_G3 + - opentrons_96_well_aluminum_block_H3 + - opentrons_96_well_aluminum_block_A4 + - opentrons_96_well_aluminum_block_B4 + - opentrons_96_well_aluminum_block_C4 + - opentrons_96_well_aluminum_block_D4 + - opentrons_96_well_aluminum_block_E4 + - opentrons_96_well_aluminum_block_F4 + - opentrons_96_well_aluminum_block_G4 + - opentrons_96_well_aluminum_block_H4 + - opentrons_96_well_aluminum_block_A5 + - opentrons_96_well_aluminum_block_B5 + - opentrons_96_well_aluminum_block_C5 + - opentrons_96_well_aluminum_block_D5 + - opentrons_96_well_aluminum_block_E5 + - opentrons_96_well_aluminum_block_F5 + - opentrons_96_well_aluminum_block_G5 + - opentrons_96_well_aluminum_block_H5 + - opentrons_96_well_aluminum_block_A6 + - opentrons_96_well_aluminum_block_B6 + - opentrons_96_well_aluminum_block_C6 + - opentrons_96_well_aluminum_block_D6 + - opentrons_96_well_aluminum_block_E6 + - opentrons_96_well_aluminum_block_F6 + - opentrons_96_well_aluminum_block_G6 + - opentrons_96_well_aluminum_block_H6 + - opentrons_96_well_aluminum_block_A7 + - opentrons_96_well_aluminum_block_B7 + - opentrons_96_well_aluminum_block_C7 + - opentrons_96_well_aluminum_block_D7 + - opentrons_96_well_aluminum_block_E7 + - opentrons_96_well_aluminum_block_F7 + - opentrons_96_well_aluminum_block_G7 + - opentrons_96_well_aluminum_block_H7 + - opentrons_96_well_aluminum_block_A8 + - opentrons_96_well_aluminum_block_B8 + - opentrons_96_well_aluminum_block_C8 + - opentrons_96_well_aluminum_block_D8 + - opentrons_96_well_aluminum_block_E8 + - opentrons_96_well_aluminum_block_F8 + - opentrons_96_well_aluminum_block_G8 + - opentrons_96_well_aluminum_block_H8 + - opentrons_96_well_aluminum_block_A9 + - opentrons_96_well_aluminum_block_B9 + - opentrons_96_well_aluminum_block_C9 + - opentrons_96_well_aluminum_block_D9 + - opentrons_96_well_aluminum_block_E9 + - opentrons_96_well_aluminum_block_F9 + - opentrons_96_well_aluminum_block_G9 + - opentrons_96_well_aluminum_block_H9 + - opentrons_96_well_aluminum_block_A10 + - opentrons_96_well_aluminum_block_B10 + - opentrons_96_well_aluminum_block_C10 + - opentrons_96_well_aluminum_block_D10 + - opentrons_96_well_aluminum_block_E10 + - opentrons_96_well_aluminum_block_F10 + - opentrons_96_well_aluminum_block_G10 + - opentrons_96_well_aluminum_block_H10 + - opentrons_96_well_aluminum_block_A11 + - opentrons_96_well_aluminum_block_B11 + - opentrons_96_well_aluminum_block_C11 + - opentrons_96_well_aluminum_block_D11 + - opentrons_96_well_aluminum_block_E11 + - opentrons_96_well_aluminum_block_F11 + - opentrons_96_well_aluminum_block_G11 + - opentrons_96_well_aluminum_block_H11 + - opentrons_96_well_aluminum_block_A12 + - opentrons_96_well_aluminum_block_B12 + - opentrons_96_well_aluminum_block_C12 + - opentrons_96_well_aluminum_block_D12 + - opentrons_96_well_aluminum_block_E12 + - opentrons_96_well_aluminum_block_F12 + - opentrons_96_well_aluminum_block_G12 + - opentrons_96_well_aluminum_block_H12 + class: '' + config: + barcode: null + category: null + model: Opentrons 96 Well Aluminum Block + ordering: + A1: opentrons_96_well_aluminum_block_A1 + B1: opentrons_96_well_aluminum_block_B1 + C1: opentrons_96_well_aluminum_block_C1 + D1: opentrons_96_well_aluminum_block_D1 + E1: opentrons_96_well_aluminum_block_E1 + F1: opentrons_96_well_aluminum_block_F1 + G1: opentrons_96_well_aluminum_block_G1 + H1: opentrons_96_well_aluminum_block_H1 + A2: opentrons_96_well_aluminum_block_A2 + B2: opentrons_96_well_aluminum_block_B2 + C2: opentrons_96_well_aluminum_block_C2 + D2: opentrons_96_well_aluminum_block_D2 + E2: opentrons_96_well_aluminum_block_E2 + F2: opentrons_96_well_aluminum_block_F2 + G2: opentrons_96_well_aluminum_block_G2 + H2: opentrons_96_well_aluminum_block_H2 + A3: opentrons_96_well_aluminum_block_A3 + B3: opentrons_96_well_aluminum_block_B3 + C3: opentrons_96_well_aluminum_block_C3 + D3: opentrons_96_well_aluminum_block_D3 + E3: opentrons_96_well_aluminum_block_E3 + F3: opentrons_96_well_aluminum_block_F3 + G3: opentrons_96_well_aluminum_block_G3 + H3: opentrons_96_well_aluminum_block_H3 + A4: opentrons_96_well_aluminum_block_A4 + B4: opentrons_96_well_aluminum_block_B4 + C4: opentrons_96_well_aluminum_block_C4 + D4: opentrons_96_well_aluminum_block_D4 + E4: opentrons_96_well_aluminum_block_E4 + F4: opentrons_96_well_aluminum_block_F4 + G4: opentrons_96_well_aluminum_block_G4 + H4: opentrons_96_well_aluminum_block_H4 + A5: opentrons_96_well_aluminum_block_A5 + B5: opentrons_96_well_aluminum_block_B5 + C5: opentrons_96_well_aluminum_block_C5 + D5: opentrons_96_well_aluminum_block_D5 + E5: opentrons_96_well_aluminum_block_E5 + F5: opentrons_96_well_aluminum_block_F5 + G5: opentrons_96_well_aluminum_block_G5 + H5: opentrons_96_well_aluminum_block_H5 + A6: opentrons_96_well_aluminum_block_A6 + B6: opentrons_96_well_aluminum_block_B6 + C6: opentrons_96_well_aluminum_block_C6 + D6: opentrons_96_well_aluminum_block_D6 + E6: opentrons_96_well_aluminum_block_E6 + F6: opentrons_96_well_aluminum_block_F6 + G6: opentrons_96_well_aluminum_block_G6 + H6: opentrons_96_well_aluminum_block_H6 + A7: opentrons_96_well_aluminum_block_A7 + B7: opentrons_96_well_aluminum_block_B7 + C7: opentrons_96_well_aluminum_block_C7 + D7: opentrons_96_well_aluminum_block_D7 + E7: opentrons_96_well_aluminum_block_E7 + F7: opentrons_96_well_aluminum_block_F7 + G7: opentrons_96_well_aluminum_block_G7 + H7: opentrons_96_well_aluminum_block_H7 + A8: opentrons_96_well_aluminum_block_A8 + B8: opentrons_96_well_aluminum_block_B8 + C8: opentrons_96_well_aluminum_block_C8 + D8: opentrons_96_well_aluminum_block_D8 + E8: opentrons_96_well_aluminum_block_E8 + F8: opentrons_96_well_aluminum_block_F8 + G8: opentrons_96_well_aluminum_block_G8 + H8: opentrons_96_well_aluminum_block_H8 + A9: opentrons_96_well_aluminum_block_A9 + B9: opentrons_96_well_aluminum_block_B9 + C9: opentrons_96_well_aluminum_block_C9 + D9: opentrons_96_well_aluminum_block_D9 + E9: opentrons_96_well_aluminum_block_E9 + F9: opentrons_96_well_aluminum_block_F9 + G9: opentrons_96_well_aluminum_block_G9 + H9: opentrons_96_well_aluminum_block_H9 + A10: opentrons_96_well_aluminum_block_A10 + B10: opentrons_96_well_aluminum_block_B10 + C10: opentrons_96_well_aluminum_block_C10 + D10: opentrons_96_well_aluminum_block_D10 + E10: opentrons_96_well_aluminum_block_E10 + F10: opentrons_96_well_aluminum_block_F10 + G10: opentrons_96_well_aluminum_block_G10 + H10: opentrons_96_well_aluminum_block_H10 + A11: opentrons_96_well_aluminum_block_A11 + B11: opentrons_96_well_aluminum_block_B11 + C11: opentrons_96_well_aluminum_block_C11 + D11: opentrons_96_well_aluminum_block_D11 + E11: opentrons_96_well_aluminum_block_E11 + F11: opentrons_96_well_aluminum_block_F11 + G11: opentrons_96_well_aluminum_block_G11 + H11: opentrons_96_well_aluminum_block_H11 + A12: opentrons_96_well_aluminum_block_A12 + B12: opentrons_96_well_aluminum_block_B12 + C12: opentrons_96_well_aluminum_block_C12 + D12: opentrons_96_well_aluminum_block_D12 + E12: opentrons_96_well_aluminum_block_E12 + F12: opentrons_96_well_aluminum_block_F12 + G12: opentrons_96_well_aluminum_block_G12 + H12: opentrons_96_well_aluminum_block_H12 + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 127.76 + size_y: 85.48 + size_z: 18.16 + type: TubeRack + data: {} + id: opentrons_96_well_aluminum_block + name: opentrons_96_well_aluminum_block + parent: null + position: + x: 0 + y: 0 + z: 0 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_A1 + name: opentrons_96_well_aluminum_block_A1 + parent: opentrons_96_well_aluminum_block + position: + x: 12.492 + y: 72.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_B1 + name: opentrons_96_well_aluminum_block_B1 + parent: opentrons_96_well_aluminum_block + position: + x: 12.492 + y: 63.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_C1 + name: opentrons_96_well_aluminum_block_C1 + parent: opentrons_96_well_aluminum_block + position: + x: 12.492 + y: 54.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_D1 + name: opentrons_96_well_aluminum_block_D1 + parent: opentrons_96_well_aluminum_block + position: + x: 12.492 + y: 45.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_E1 + name: opentrons_96_well_aluminum_block_E1 + parent: opentrons_96_well_aluminum_block + position: + x: 12.492 + y: 36.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_F1 + name: opentrons_96_well_aluminum_block_F1 + parent: opentrons_96_well_aluminum_block + position: + x: 12.492 + y: 27.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_G1 + name: opentrons_96_well_aluminum_block_G1 + parent: opentrons_96_well_aluminum_block + position: + x: 12.492 + y: 18.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_H1 + name: opentrons_96_well_aluminum_block_H1 + parent: opentrons_96_well_aluminum_block + position: + x: 12.492 + y: 9.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_A2 + name: opentrons_96_well_aluminum_block_A2 + parent: opentrons_96_well_aluminum_block + position: + x: 21.492 + y: 72.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_B2 + name: opentrons_96_well_aluminum_block_B2 + parent: opentrons_96_well_aluminum_block + position: + x: 21.492 + y: 63.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_C2 + name: opentrons_96_well_aluminum_block_C2 + parent: opentrons_96_well_aluminum_block + position: + x: 21.492 + y: 54.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_D2 + name: opentrons_96_well_aluminum_block_D2 + parent: opentrons_96_well_aluminum_block + position: + x: 21.492 + y: 45.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_E2 + name: opentrons_96_well_aluminum_block_E2 + parent: opentrons_96_well_aluminum_block + position: + x: 21.492 + y: 36.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_F2 + name: opentrons_96_well_aluminum_block_F2 + parent: opentrons_96_well_aluminum_block + position: + x: 21.492 + y: 27.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_G2 + name: opentrons_96_well_aluminum_block_G2 + parent: opentrons_96_well_aluminum_block + position: + x: 21.492 + y: 18.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_H2 + name: opentrons_96_well_aluminum_block_H2 + parent: opentrons_96_well_aluminum_block + position: + x: 21.492 + y: 9.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_A3 + name: opentrons_96_well_aluminum_block_A3 + parent: opentrons_96_well_aluminum_block + position: + x: 30.492 + y: 72.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_B3 + name: opentrons_96_well_aluminum_block_B3 + parent: opentrons_96_well_aluminum_block + position: + x: 30.492 + y: 63.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_C3 + name: opentrons_96_well_aluminum_block_C3 + parent: opentrons_96_well_aluminum_block + position: + x: 30.492 + y: 54.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_D3 + name: opentrons_96_well_aluminum_block_D3 + parent: opentrons_96_well_aluminum_block + position: + x: 30.492 + y: 45.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_E3 + name: opentrons_96_well_aluminum_block_E3 + parent: opentrons_96_well_aluminum_block + position: + x: 30.492 + y: 36.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_F3 + name: opentrons_96_well_aluminum_block_F3 + parent: opentrons_96_well_aluminum_block + position: + x: 30.492 + y: 27.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_G3 + name: opentrons_96_well_aluminum_block_G3 + parent: opentrons_96_well_aluminum_block + position: + x: 30.492 + y: 18.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_H3 + name: opentrons_96_well_aluminum_block_H3 + parent: opentrons_96_well_aluminum_block + position: + x: 30.492 + y: 9.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_A4 + name: opentrons_96_well_aluminum_block_A4 + parent: opentrons_96_well_aluminum_block + position: + x: 39.492 + y: 72.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_B4 + name: opentrons_96_well_aluminum_block_B4 + parent: opentrons_96_well_aluminum_block + position: + x: 39.492 + y: 63.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_C4 + name: opentrons_96_well_aluminum_block_C4 + parent: opentrons_96_well_aluminum_block + position: + x: 39.492 + y: 54.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_D4 + name: opentrons_96_well_aluminum_block_D4 + parent: opentrons_96_well_aluminum_block + position: + x: 39.492 + y: 45.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_E4 + name: opentrons_96_well_aluminum_block_E4 + parent: opentrons_96_well_aluminum_block + position: + x: 39.492 + y: 36.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_F4 + name: opentrons_96_well_aluminum_block_F4 + parent: opentrons_96_well_aluminum_block + position: + x: 39.492 + y: 27.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_G4 + name: opentrons_96_well_aluminum_block_G4 + parent: opentrons_96_well_aluminum_block + position: + x: 39.492 + y: 18.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_H4 + name: opentrons_96_well_aluminum_block_H4 + parent: opentrons_96_well_aluminum_block + position: + x: 39.492 + y: 9.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_A5 + name: opentrons_96_well_aluminum_block_A5 + parent: opentrons_96_well_aluminum_block + position: + x: 48.492 + y: 72.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_B5 + name: opentrons_96_well_aluminum_block_B5 + parent: opentrons_96_well_aluminum_block + position: + x: 48.492 + y: 63.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_C5 + name: opentrons_96_well_aluminum_block_C5 + parent: opentrons_96_well_aluminum_block + position: + x: 48.492 + y: 54.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_D5 + name: opentrons_96_well_aluminum_block_D5 + parent: opentrons_96_well_aluminum_block + position: + x: 48.492 + y: 45.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_E5 + name: opentrons_96_well_aluminum_block_E5 + parent: opentrons_96_well_aluminum_block + position: + x: 48.492 + y: 36.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_F5 + name: opentrons_96_well_aluminum_block_F5 + parent: opentrons_96_well_aluminum_block + position: + x: 48.492 + y: 27.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_G5 + name: opentrons_96_well_aluminum_block_G5 + parent: opentrons_96_well_aluminum_block + position: + x: 48.492 + y: 18.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_H5 + name: opentrons_96_well_aluminum_block_H5 + parent: opentrons_96_well_aluminum_block + position: + x: 48.492 + y: 9.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_A6 + name: opentrons_96_well_aluminum_block_A6 + parent: opentrons_96_well_aluminum_block + position: + x: 57.492 + y: 72.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_B6 + name: opentrons_96_well_aluminum_block_B6 + parent: opentrons_96_well_aluminum_block + position: + x: 57.492 + y: 63.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_C6 + name: opentrons_96_well_aluminum_block_C6 + parent: opentrons_96_well_aluminum_block + position: + x: 57.492 + y: 54.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_D6 + name: opentrons_96_well_aluminum_block_D6 + parent: opentrons_96_well_aluminum_block + position: + x: 57.492 + y: 45.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_E6 + name: opentrons_96_well_aluminum_block_E6 + parent: opentrons_96_well_aluminum_block + position: + x: 57.492 + y: 36.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_F6 + name: opentrons_96_well_aluminum_block_F6 + parent: opentrons_96_well_aluminum_block + position: + x: 57.492 + y: 27.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_G6 + name: opentrons_96_well_aluminum_block_G6 + parent: opentrons_96_well_aluminum_block + position: + x: 57.492 + y: 18.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_H6 + name: opentrons_96_well_aluminum_block_H6 + parent: opentrons_96_well_aluminum_block + position: + x: 57.492 + y: 9.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_A7 + name: opentrons_96_well_aluminum_block_A7 + parent: opentrons_96_well_aluminum_block + position: + x: 66.492 + y: 72.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_B7 + name: opentrons_96_well_aluminum_block_B7 + parent: opentrons_96_well_aluminum_block + position: + x: 66.492 + y: 63.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_C7 + name: opentrons_96_well_aluminum_block_C7 + parent: opentrons_96_well_aluminum_block + position: + x: 66.492 + y: 54.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_D7 + name: opentrons_96_well_aluminum_block_D7 + parent: opentrons_96_well_aluminum_block + position: + x: 66.492 + y: 45.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_E7 + name: opentrons_96_well_aluminum_block_E7 + parent: opentrons_96_well_aluminum_block + position: + x: 66.492 + y: 36.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_F7 + name: opentrons_96_well_aluminum_block_F7 + parent: opentrons_96_well_aluminum_block + position: + x: 66.492 + y: 27.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_G7 + name: opentrons_96_well_aluminum_block_G7 + parent: opentrons_96_well_aluminum_block + position: + x: 66.492 + y: 18.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_H7 + name: opentrons_96_well_aluminum_block_H7 + parent: opentrons_96_well_aluminum_block + position: + x: 66.492 + y: 9.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_A8 + name: opentrons_96_well_aluminum_block_A8 + parent: opentrons_96_well_aluminum_block + position: + x: 75.492 + y: 72.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_B8 + name: opentrons_96_well_aluminum_block_B8 + parent: opentrons_96_well_aluminum_block + position: + x: 75.492 + y: 63.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_C8 + name: opentrons_96_well_aluminum_block_C8 + parent: opentrons_96_well_aluminum_block + position: + x: 75.492 + y: 54.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_D8 + name: opentrons_96_well_aluminum_block_D8 + parent: opentrons_96_well_aluminum_block + position: + x: 75.492 + y: 45.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_E8 + name: opentrons_96_well_aluminum_block_E8 + parent: opentrons_96_well_aluminum_block + position: + x: 75.492 + y: 36.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_F8 + name: opentrons_96_well_aluminum_block_F8 + parent: opentrons_96_well_aluminum_block + position: + x: 75.492 + y: 27.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_G8 + name: opentrons_96_well_aluminum_block_G8 + parent: opentrons_96_well_aluminum_block + position: + x: 75.492 + y: 18.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_H8 + name: opentrons_96_well_aluminum_block_H8 + parent: opentrons_96_well_aluminum_block + position: + x: 75.492 + y: 9.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_A9 + name: opentrons_96_well_aluminum_block_A9 + parent: opentrons_96_well_aluminum_block + position: + x: 84.492 + y: 72.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_B9 + name: opentrons_96_well_aluminum_block_B9 + parent: opentrons_96_well_aluminum_block + position: + x: 84.492 + y: 63.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_C9 + name: opentrons_96_well_aluminum_block_C9 + parent: opentrons_96_well_aluminum_block + position: + x: 84.492 + y: 54.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_D9 + name: opentrons_96_well_aluminum_block_D9 + parent: opentrons_96_well_aluminum_block + position: + x: 84.492 + y: 45.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_E9 + name: opentrons_96_well_aluminum_block_E9 + parent: opentrons_96_well_aluminum_block + position: + x: 84.492 + y: 36.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_F9 + name: opentrons_96_well_aluminum_block_F9 + parent: opentrons_96_well_aluminum_block + position: + x: 84.492 + y: 27.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_G9 + name: opentrons_96_well_aluminum_block_G9 + parent: opentrons_96_well_aluminum_block + position: + x: 84.492 + y: 18.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_H9 + name: opentrons_96_well_aluminum_block_H9 + parent: opentrons_96_well_aluminum_block + position: + x: 84.492 + y: 9.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_A10 + name: opentrons_96_well_aluminum_block_A10 + parent: opentrons_96_well_aluminum_block + position: + x: 93.492 + y: 72.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_B10 + name: opentrons_96_well_aluminum_block_B10 + parent: opentrons_96_well_aluminum_block + position: + x: 93.492 + y: 63.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_C10 + name: opentrons_96_well_aluminum_block_C10 + parent: opentrons_96_well_aluminum_block + position: + x: 93.492 + y: 54.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_D10 + name: opentrons_96_well_aluminum_block_D10 + parent: opentrons_96_well_aluminum_block + position: + x: 93.492 + y: 45.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_E10 + name: opentrons_96_well_aluminum_block_E10 + parent: opentrons_96_well_aluminum_block + position: + x: 93.492 + y: 36.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_F10 + name: opentrons_96_well_aluminum_block_F10 + parent: opentrons_96_well_aluminum_block + position: + x: 93.492 + y: 27.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_G10 + name: opentrons_96_well_aluminum_block_G10 + parent: opentrons_96_well_aluminum_block + position: + x: 93.492 + y: 18.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_H10 + name: opentrons_96_well_aluminum_block_H10 + parent: opentrons_96_well_aluminum_block + position: + x: 93.492 + y: 9.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_A11 + name: opentrons_96_well_aluminum_block_A11 + parent: opentrons_96_well_aluminum_block + position: + x: 102.492 + y: 72.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_B11 + name: opentrons_96_well_aluminum_block_B11 + parent: opentrons_96_well_aluminum_block + position: + x: 102.492 + y: 63.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_C11 + name: opentrons_96_well_aluminum_block_C11 + parent: opentrons_96_well_aluminum_block + position: + x: 102.492 + y: 54.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_D11 + name: opentrons_96_well_aluminum_block_D11 + parent: opentrons_96_well_aluminum_block + position: + x: 102.492 + y: 45.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_E11 + name: opentrons_96_well_aluminum_block_E11 + parent: opentrons_96_well_aluminum_block + position: + x: 102.492 + y: 36.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_F11 + name: opentrons_96_well_aluminum_block_F11 + parent: opentrons_96_well_aluminum_block + position: + x: 102.492 + y: 27.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_G11 + name: opentrons_96_well_aluminum_block_G11 + parent: opentrons_96_well_aluminum_block + position: + x: 102.492 + y: 18.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_H11 + name: opentrons_96_well_aluminum_block_H11 + parent: opentrons_96_well_aluminum_block + position: + x: 102.492 + y: 9.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_A12 + name: opentrons_96_well_aluminum_block_A12 + parent: opentrons_96_well_aluminum_block + position: + x: 111.492 + y: 72.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_B12 + name: opentrons_96_well_aluminum_block_B12 + parent: opentrons_96_well_aluminum_block + position: + x: 111.492 + y: 63.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_C12 + name: opentrons_96_well_aluminum_block_C12 + parent: opentrons_96_well_aluminum_block + position: + x: 111.492 + y: 54.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_D12 + name: opentrons_96_well_aluminum_block_D12 + parent: opentrons_96_well_aluminum_block + position: + x: 111.492 + y: 45.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_E12 + name: opentrons_96_well_aluminum_block_E12 + parent: opentrons_96_well_aluminum_block + position: + x: 111.492 + y: 36.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_F12 + name: opentrons_96_well_aluminum_block_F12 + parent: opentrons_96_well_aluminum_block + position: + x: 111.492 + y: 27.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_G12 + name: opentrons_96_well_aluminum_block_G12 + parent: opentrons_96_well_aluminum_block + position: + x: 111.492 + y: 18.352 + z: 3.38 + sample_id: null + type: container + - children: [] + class: '' + config: + barcode: null + category: tube + compute_height_from_volume: null + compute_volume_from_height: null + material_z_thickness: null + max_volume: 210.73584127999996 + model: null + rotation: + type: Rotation + x: 0 + y: 0 + z: 0 + size_x: 3.776 + size_y: 3.776 + size_z: 14.78 + type: Tube + data: + liquid_history: [] + liquids: [] + pending_liquids: [] + id: opentrons_96_well_aluminum_block_H12 + name: opentrons_96_well_aluminum_block_H12 + parent: opentrons_96_well_aluminum_block + position: + x: 111.492 + y: 9.352 + z: 3.38 + sample_id: null + type: container + description: Opentrons 96 well aluminum block + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/opentrons/tube_racks.yaml + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 diff --git a/unilabos/registry/resources/organic/container.yaml b/unilabos/registry/resources/organic/container.yaml index 2186b70..2860098 100644 --- a/unilabos/registry/resources/organic/container.yaml +++ b/unilabos/registry/resources/organic/container.yaml @@ -1,28 +1,35 @@ container: - description: regular organic container - icon: Flask.webp - class: + category: + - container + class: module: unilabos.resources.container:RegularContainer type: unilabos + config_info: [] + description: regular organic container + file_path: C:/Users/10230/PycharmProjects/Uni-Lab-OS/unilabos/registry/resources/organic/container.yaml handles: - - handler_key: top - label: top - io_type: target - data_type: fluid - side: NORTH - data_source: handle - data_key: fluid_in - - handler_key: bottom - label: bottom - io_type: source - data_type: fluid - side: SOUTH - data_source: handle - data_key: fluid_out - - handler_key: bind - label: bind - io_type: target - data_type: mechanical - side: SOUTH - data_source: handle - data_key: mechanical_port \ No newline at end of file + - data_key: fluid_in + data_source: handle + data_type: fluid + handler_key: top + io_type: target + label: top + side: NORTH + - data_key: fluid_out + data_source: handle + data_type: fluid + handler_key: bottom + io_type: source + label: bottom + side: SOUTH + - data_key: mechanical_port + data_source: handle + data_type: mechanical + handler_key: bind + io_type: target + label: bind + side: SOUTH + icon: Flask.webp + init_param_schema: {} + registry_type: resource + version: 1.0.0 diff --git a/unilabos/resources/graphio.py b/unilabos/resources/graphio.py index 3ed2e36..3e3ece3 100644 --- a/unilabos/resources/graphio.py +++ b/unilabos/resources/graphio.py @@ -248,7 +248,7 @@ def dict_to_nested_dict(nodes: dict, devices_only: bool = False) -> dict: root_nodes = { node["id"]: node for node in nodes_list - if node.get("parent", node.get("parent_name")) in [None, "", "None", np.nan] + if node.get("parent", node.get("parent_name")) in [None, "", "None", np.nan] or len(nodes_list) == 1 } # 如果存在多个根节点,返回所有根节点 @@ -429,6 +429,20 @@ def resource_ulab_to_plr(resource: dict, plr_model=False) -> "ResourcePLR": def resource_plr_to_ulab(resource_plr: "ResourcePLR", parent_name: str = None): + def replace_plr_type_to_ulab(source: str): + replace_info = { + "plate": "plate", + "well": "well", + "tip_spot": "container", + "trash": "container", + "deck": "deck", + "tip_rack": "container", + } + if source in replace_info: + return replace_info[source] + else: + print("转换pylabrobot的时候,出现未知类型", source) + return "container" def resource_plr_to_ulab_inner(d: dict, all_states: dict) -> dict: r = { "id": d["name"], @@ -436,7 +450,7 @@ def resource_plr_to_ulab(resource_plr: "ResourcePLR", parent_name: str = None): "sample_id": None, "children": [resource_plr_to_ulab_inner(child, all_states) for child in d["children"]], "parent": d["parent_name"] if d["parent_name"] else parent_name if parent_name else None, - "type": "device", # FIXME plr自带的type是python class name + "type": replace_plr_type_to_ulab(d.get("category")), # FIXME plr自带的type是python class name "class": d.get("class", ""), "position": ( {"x": d["location"]["x"], "y": d["location"]["y"], "z": d["location"]["z"]} @@ -447,7 +461,6 @@ def resource_plr_to_ulab(resource_plr: "ResourcePLR", parent_name: str = None): "data": all_states[d["name"]], } return r - d = resource_plr.serialize() all_states = resource_plr.serialize_all_state() r = resource_plr_to_ulab_inner(d, all_states) diff --git a/unilabos/ros/device_node_wrapper.py b/unilabos/ros/device_node_wrapper.py index f6d071f..51ff217 100644 --- a/unilabos/ros/device_node_wrapper.py +++ b/unilabos/ros/device_node_wrapper.py @@ -55,7 +55,7 @@ def ros2_device_node( "read": "read_data", "extra_info": [], } - + # FIXME 后面要删除 for k, v in cls.__dict__.items(): if not k.startswith("_") and isinstance(v, property): # noinspection PyUnresolvedReferences diff --git a/unilabos/ros/msgs/message_converter.py b/unilabos/ros/msgs/message_converter.py index 2bcaadb..b0716aa 100644 --- a/unilabos/ros/msgs/message_converter.py +++ b/unilabos/ros/msgs/message_converter.py @@ -132,7 +132,11 @@ _msg_converter: Dict[Type, Any] = { Bool: lambda x: Bool(data=bool(x)), str: str, String: lambda x: String(data=str(x)), - Point: lambda x: Point(x=x.x, y=x.y, z=x.z) if not isinstance(x, dict) else Point(x=x.get("x", 0.0), y=x.get("y", 0.0), z=x.get("z", 0.0)), + Point: lambda x: ( + Point(x=x.x, y=x.y, z=x.z) + if not isinstance(x, dict) + else Point(x=float(x.get("x", 0.0)), y=float(x.get("y", 0.0)), z=float(x.get("z", 0.0))) + ), Resource: lambda x: Resource( id=x.get("id", ""), name=x.get("name", ""), @@ -142,7 +146,13 @@ _msg_converter: Dict[Type, Any] = { type=x.get("type", ""), category=x.get("class", "") or x.get("type", ""), pose=( - Pose(position=Point(x=float(x.get("position", {}).get("x", 0.0)), y=float(x.get("position", {}).get("y", 0.0)), z=float(x.get("position", {}).get("z", 0.0)))) + Pose( + position=Point( + x=float(x.get("position", {}).get("x", 0.0)), + y=float(x.get("position", {}).get("y", 0.0)), + z=float(x.get("position", {}).get("z", 0.0)), + ) + ) if x.get("position", None) is not None else Pose() ), @@ -151,6 +161,7 @@ _msg_converter: Dict[Type, Any] = { ), } + def json_or_yaml_loads(data: str) -> Any: try: return json.loads(data) @@ -161,6 +172,7 @@ def json_or_yaml_loads(data: str) -> Any: pass raise e + # ROS消息到Python转换器 _msg_converter_back: Dict[Type, Any] = { float: float, @@ -343,7 +355,7 @@ def convert_to_ros_msg(ros_msg_type: Union[Type, Any], obj: Any) -> Any: if hasattr(ros_msg, key): attr = getattr(ros_msg, key) if isinstance(attr, (float, int, str, bool)): - setattr(ros_msg, key, value) + setattr(ros_msg, key, type(attr)(value)) elif isinstance(attr, (list, tuple)) and isinstance(value, Iterable): td = ros_msg.SLOT_TYPES[ind].value_type if isinstance(td, NamespacedType): @@ -355,7 +367,7 @@ def convert_to_ros_msg(ros_msg_type: Union[Type, Any], obj: Any) -> Any: logger.warning(f"Not Supported type: {td}") setattr(ros_msg, key, []) # FIXME elif "array.array" in str(type(attr)): - if attr.typecode == "f": + if attr.typecode == "f" or attr.typecode == "d": setattr(ros_msg, key, [float(i) for i in value]) else: setattr(ros_msg, key, value) @@ -496,47 +508,90 @@ def convert_from_ros_msg_with_mapping(ros_msg: Any, value_mapping: Dict[str, str Python字典 """ data: Dict[str, Any] = {} + + # # 🔧 添加调试信息 + # print(f"🔍 convert_from_ros_msg_with_mapping 开始") + # print(f"🔍 ros_msg 类型: {type(ros_msg)}") + # print(f"🔍 ros_msg 内容: {ros_msg}") + # print(f"🔍 value_mapping: {value_mapping}") + # print("-" * 60) for msg_name, attr_name in value_mapping.items(): + # print(f"🔍 处理映射: {msg_name} -> {attr_name}") + msg_path = msg_name.split(".") current = ros_msg - + + # print(f"🔍 msg_path: {msg_path}") + # print(f"🔍 current 初始值: {current} (类型: {type(current)})") + try: if not attr_name.endswith("[]"): # 处理单值映射 - for name in msg_path: - current = getattr(current, name) - data[attr_name] = convert_from_ros_msg(current) + # print(f"🔍 处理单值映射") + for i, name in enumerate(msg_path): + # print(f"🔍 步骤 {i}: 获取属性 '{name}' 从 {type(current)}") + if hasattr(current, name): + current = getattr(current, name) + # print(f"🔍 获取到: {current} (类型: {type(current)})") + else: + # print(f"❌ 属性 '{name}' 不存在于 {type(current)}") + break + + converted_value = convert_from_ros_msg(current) + # print(f"🔍 转换后的值: {converted_value} (类型: {type(converted_value)})") + data[attr_name] = converted_value + # print(f"✅ 设置 data['{attr_name}'] = {converted_value}") else: # 处理列表值映射 - for name in msg_path: + # print(f"🔍 处理列表值映射") + for i, name in enumerate(msg_path): + # print(f"🔍 列表步骤 {i}: 处理 '{name}' 从 {type(current)}") if name.endswith("[]"): base_name = name[:-2] + # print(f"🔍 数组字段 base_name: '{base_name}'") if hasattr(current, base_name): current = list(getattr(current, base_name)) + # print(f"🔍 获取数组: {current} (长度: {len(current)})") else: + # print(f"❌ 数组字段 '{base_name}' 不存在") current = [] break else: if isinstance(current, list): + # print(f"🔍 从列表中获取属性 '{name}'") next_level = [] for item in current: if hasattr(item, name): next_level.append(getattr(item, name)) current = next_level + # print(f"🔍 列表处理结果: {current} (长度: {len(current)})") elif hasattr(current, name): current = getattr(current, name) + # print(f"🔍 获取到属性: {current} (类型: {type(current)})") else: + # print(f"❌ 属性 '{name}' 不存在") current = [] break attr_key = attr_name[:-2] if current: - data[attr_key] = [convert_from_ros_msg(item) for item in current] - except (AttributeError, TypeError): + converted_list = [convert_from_ros_msg(item) for item in current] + data[attr_key] = converted_list + # print(f"✅ 设置 data['{attr_key}'] = {converted_list}") + else: + print(f"⚠️ 列表为空,跳过 '{attr_key}'") + except (AttributeError, TypeError) as e: + # print(f"❌ 映射转换错误 {msg_name} -> {attr_name}: {e}") logger.debug(f"Mapping conversion error for {msg_name} -> {attr_name}") continue + + # print(f"🔍 当前 data 状态: {data}") + # print("-" * 40) + #print(f"🔍 convert_from_ros_msg_with_mapping 结束") + #print(f"🔍 最终 data: {data}") + #print("=" * 60) return data @@ -571,30 +626,30 @@ from unilabos.utils.import_manager import ImportManager from unilabos.config.config import ROSConfig basic_type_map = { - 'bool': {'type': 'boolean'}, - 'int8': {'type': 'integer', 'minimum': -128, 'maximum': 127}, - 'uint8': {'type': 'integer', 'minimum': 0, 'maximum': 255}, - 'int16': {'type': 'integer', 'minimum': -32768, 'maximum': 32767}, - 'uint16': {'type': 'integer', 'minimum': 0, 'maximum': 65535}, - 'int32': {'type': 'integer', 'minimum': -2147483648, 'maximum': 2147483647}, - 'uint32': {'type': 'integer', 'minimum': 0, 'maximum': 4294967295}, - 'int64': {'type': 'integer'}, - 'uint64': {'type': 'integer', 'minimum': 0}, - 'double': {'type': 'number'}, - 'float': {'type': 'number'}, - 'float32': {'type': 'number'}, - 'float64': {'type': 'number'}, - 'string': {'type': 'string'}, - 'boolean': {'type': 'boolean'}, - 'char': {'type': 'string', 'maxLength': 1}, - 'byte': {'type': 'integer', 'minimum': 0, 'maximum': 255}, + "bool": {"type": "boolean"}, + "int8": {"type": "integer", "minimum": -128, "maximum": 127}, + "uint8": {"type": "integer", "minimum": 0, "maximum": 255}, + "int16": {"type": "integer", "minimum": -32768, "maximum": 32767}, + "uint16": {"type": "integer", "minimum": 0, "maximum": 65535}, + "int32": {"type": "integer", "minimum": -2147483648, "maximum": 2147483647}, + "uint32": {"type": "integer", "minimum": 0, "maximum": 4294967295}, + "int64": {"type": "integer"}, + "uint64": {"type": "integer", "minimum": 0}, + "double": {"type": "number"}, + "float": {"type": "number"}, + "float32": {"type": "number"}, + "float64": {"type": "number"}, + "string": {"type": "string"}, + "boolean": {"type": "boolean"}, + "char": {"type": "string", "maxLength": 1}, + "byte": {"type": "integer", "minimum": 0, "maximum": 255}, } -def ros_field_type_to_json_schema(type_info: Type | str, slot_type: str=None) -> Dict[str, Any]: +def ros_field_type_to_json_schema(type_info: Type | str, slot_type: str = None) -> Dict[str, Any]: """ 将 ROS 字段类型转换为 JSON Schema 类型定义 - + Args: type_info: ROS 类型 slot_type: ROS 类型 @@ -603,10 +658,7 @@ def ros_field_type_to_json_schema(type_info: Type | str, slot_type: str=None) -> 对应的 JSON Schema 类型定义 """ if isinstance(type_info, UnboundedSequence): - return { - 'type': 'array', - 'items': ros_field_type_to_json_schema(type_info.value_type) - } + return {"type": "array", "items": ros_field_type_to_json_schema(type_info.value_type)} if isinstance(type_info, NamespacedType): cls_name = ".".join(type_info.namespaces) + ":" + type_info.name type_class = msg_converter_manager.get_class(cls_name) @@ -614,20 +666,20 @@ def ros_field_type_to_json_schema(type_info: Type | str, slot_type: str=None) -> elif isinstance(type_info, BasicType): return ros_field_type_to_json_schema(type_info.typename) elif isinstance(type_info, UnboundedString): - return basic_type_map['string'] + return basic_type_map["string"] elif isinstance(type_info, str): if type_info in basic_type_map: return basic_type_map[type_info] # 处理时间和持续时间类型 - if type_info in ('time', 'duration', 'builtin_interfaces/Time', 'builtin_interfaces/Duration'): + if type_info in ("time", "duration", "builtin_interfaces/Time", "builtin_interfaces/Duration"): return { - 'type': 'object', - 'properties': { - 'sec': {'type': 'integer', 'description': '秒'}, - 'nanosec': {'type': 'integer', 'description': '纳秒'} + "type": "object", + "properties": { + "sec": {"type": "integer", "description": "秒"}, + "nanosec": {"type": "integer", "description": "纳秒"}, }, - 'required': ['sec', 'nanosec'] + "required": ["sec", "nanosec"], } else: return ros_message_to_json_schema(type_info) @@ -638,9 +690,7 @@ def ros_field_type_to_json_schema(type_info: Type | str, slot_type: str=None) -> # 'type': 'array', # 'items': ros_field_type_to_json_schema(item_type) # } - - # # 处理复杂类型(尝试加载并处理) # try: # # 如果它是一个完整的消息类型规范 (包名/msg/类型名) @@ -655,34 +705,31 @@ def ros_field_type_to_json_schema(type_info: Type | str, slot_type: str=None) -> # logger.debug(f"无法解析类型 {field_type}: {str(e)}") # return {'type': 'object', 'description': f'未知类型: {field_type}'} + def ros_message_to_json_schema(msg_class: Any) -> Dict[str, Any]: """ 将 ROS 消息类转换为 JSON Schema - + Args: msg_class: ROS 消息类 - + Returns: 对应的 JSON Schema 定义 """ - schema = { - 'type': 'object', - 'properties': {}, - 'required': [] - } - + schema = {"type": "object", "properties": {}, "required": []} + # 获取类名作为标题 - if hasattr(msg_class, '__name__'): - schema['title'] = msg_class.__name__ - + if hasattr(msg_class, "__name__"): + schema["title"] = msg_class.__name__ + # 获取消息的字段和字段类型 try: for ind, slot_info in enumerate(msg_class._fields_and_field_types.items()): slot_name, slot_type = slot_info type_info = msg_class.SLOT_TYPES[ind] field_schema = ros_field_type_to_json_schema(type_info, slot_type) - schema['properties'][slot_name] = field_schema - schema['required'].append(slot_name) + schema["properties"][slot_name] = field_schema + schema["required"].append(slot_name) # if hasattr(msg_class, 'get_fields_and_field_types'): # fields_and_types = msg_class.get_fields_and_field_types() # @@ -707,62 +754,66 @@ def ros_message_to_json_schema(msg_class: Any) -> Dict[str, Any]: # schema['required'].append(clean_name) except Exception as e: # 如果获取字段类型失败,添加错误信息 - schema['description'] = f"解析消息字段时出错: {str(e)}" + schema["description"] = f"解析消息字段时出错: {str(e)}" logger.error(f"解析 {msg_class.__name__} 消息字段失败: {str(e)}") - + return schema -def ros_action_to_json_schema(action_class: Any) -> Dict[str, Any]: + +def ros_action_to_json_schema(action_class: Any, description="") -> Dict[str, Any]: """ 将 ROS Action 类转换为 JSON Schema - + Args: action_class: ROS Action 类 - + description: 描述 + Returns: 完整的 JSON Schema 定义 """ - if not hasattr(action_class, 'Goal') or not hasattr(action_class, 'Feedback') or not hasattr(action_class, 'Result'): + if ( + not hasattr(action_class, "Goal") + or not hasattr(action_class, "Feedback") + or not hasattr(action_class, "Result") + ): raise ValueError(f"{action_class.__name__} 不是有效的 ROS Action 类") - + # 创建基础 schema schema = { - '$schema': 'http://json-schema.org/draft-07/schema#', - 'title': action_class.__name__, - 'description': f"ROS Action {action_class.__name__} 的 JSON Schema", - 'type': 'object', - 'properties': { - 'goal': { - 'description': 'Action 目标 - 从客户端发送到服务器', + "title": action_class.__name__, + "description": description, + "type": "object", + "properties": { + "goal": { + # 'description': 'Action 目标 - 从客户端发送到服务器', **ros_message_to_json_schema(action_class.Goal) }, - 'feedback': { - 'description': 'Action 反馈 - 执行过程中从服务器发送到客户端', + "feedback": { + # 'description': 'Action 反馈 - 执行过程中从服务器发送到客户端', **ros_message_to_json_schema(action_class.Feedback) }, - 'result': { - 'description': 'Action 结果 - 完成后从服务器发送到客户端', + "result": { + # 'description': 'Action 结果 - 完成后从服务器发送到客户端', **ros_message_to_json_schema(action_class.Result) - } + }, }, - 'required': ['goal'] + "required": ["goal"], } - + return schema + def convert_ros_action_to_jsonschema( - action_name_or_type: Union[str, Type], - output_file: Optional[str] = None, - format: str = 'json' + action_name_or_type: Union[str, Type], output_file: Optional[str] = None, format: str = "json" ) -> Dict[str, Any]: """ 将 ROS Action 类型转换为 JSON Schema,并可选地保存到文件 - + Args: action_name_or_type: ROS Action 类型名称或类 output_file: 可选,输出 JSON Schema 的文件路径 format: 输出格式,'json' 或 'yaml' - + Returns: JSON Schema 定义(字典) """ @@ -772,21 +823,21 @@ def convert_ros_action_to_jsonschema( action_type = get_ros_type_by_msgname(action_name_or_type) else: action_type = action_name_or_type - + # 生成 JSON Schema schema = ros_action_to_json_schema(action_type) - + # 如果指定了输出文件,将 Schema 保存到文件 if output_file: - if format.lower() == 'json': - with open(output_file, 'w', encoding='utf-8') as f: + if format.lower() == "json": + with open(output_file, "w", encoding="utf-8") as f: json.dump(schema, f, indent=2, ensure_ascii=False) - elif format.lower() == 'yaml': - with open(output_file, 'w', encoding='utf-8') as f: + elif format.lower() == "yaml": + with open(output_file, "w", encoding="utf-8") as f: yaml.safe_dump(schema, f, default_flow_style=False, allow_unicode=True) else: raise ValueError(f"不支持的格式: {format},请使用 'json' 或 'yaml'") - + return schema @@ -795,14 +846,14 @@ if __name__ == "__main__": # 示例:转换 NavigateToPose action try: from nav2_msgs.action import NavigateToPose - + # 转换为 JSON Schema 并打印 schema = convert_ros_action_to_jsonschema(NavigateToPose) print(json.dumps(schema, indent=2, ensure_ascii=False)) - + # 保存到文件 # convert_ros_action_to_jsonschema(NavigateToPose, "navigate_to_pose_schema.json") - + # 或者使用字符串形式的 action 名称 # schema = convert_ros_action_to_jsonschema("nav2_msgs/action/NavigateToPose") except ImportError: diff --git a/unilabos/ros/nodes/base_device_node.py b/unilabos/ros/nodes/base_device_node.py index e119e21..eebaf59 100644 --- a/unilabos/ros/nodes/base_device_node.py +++ b/unilabos/ros/nodes/base_device_node.py @@ -1,4 +1,5 @@ import copy +import io import json import threading import time @@ -10,6 +11,7 @@ from concurrent.futures import ThreadPoolExecutor import asyncio import rclpy +import yaml from rclpy.node import Node from rclpy.action import ActionServer, ActionClient from rclpy.action.server import ServerGoalHandle @@ -166,7 +168,10 @@ class PropertyPublisher: self.print_publish = print_publish self._value = None - self.publisher_ = node.create_publisher(msg_type, f"{name}", 10) + try: + self.publisher_ = node.create_publisher(msg_type, f"{name}", 10) + except AttributeError as ex: + logger.error(f"创建发布者失败,可能由于注册表有误,类型: {msg_type},错误: {ex}\n{traceback.format_exc()}") self.timer = node.create_timer(self.timer_period, self.publish_property) self.__loop = get_event_loop() str_msg_type = str(msg_type)[8:-2] @@ -302,6 +307,8 @@ class BaseROS2DeviceNode(Node, Generic[T]): # 创建动作服务 if self.create_action_server: for action_name, action_value_mapping in self._action_value_mappings.items(): + if action_name.startswith("auto-") or str(action_value_mapping.get("type", "")).startswith("UniLabJsonCommand"): + continue self.create_ros_action_server(action_name, action_value_mapping) # 创建线程池执行器 @@ -622,7 +629,7 @@ class BaseROS2DeviceNode(Node, Generic[T]): execution_success = False action_return_value = None - self.lab_logger().info(f"执行动作: {action_name}") + ##### self.lab_logger().info(f"执行动作: {action_name}") goal = goal_handle.request # 从目标消息中提取参数, 并调用对应的方法 @@ -649,15 +656,18 @@ class BaseROS2DeviceNode(Node, Generic[T]): if v in ["unilabos_msgs/Resource", "sequence"]: self.lab_logger().info(f"查询资源状态: Key: {k} Type: {v}") current_resources = [] + # TODO: resource后面需要分组 + only_one_resource = False try: if len(action_kwargs[k]) > 1: for i in action_kwargs[k]: r = ResourceGet.Request() - r.id = i["id"] + r.id = i["id"] # splash optional r.with_children = True response = await self._resource_clients["resource_get"].call_async(r) current_resources.extend(response.resources) else: + only_one_resource = True r = ResourceGet.Request() r.id = ( action_kwargs[k]["id"] @@ -675,17 +685,20 @@ class BaseROS2DeviceNode(Node, Generic[T]): type_hint = action_paramtypes[k] final_type = get_type_class(type_hint) # 判断 ACTION 是否需要特殊的物料类型如 pylabrobot.resources.Resource,并做转换 - final_resource = [convert_resources_to_type([i], final_type)[0] for i in resources_list] + if only_one_resource: + final_resource = convert_resources_to_type(resources_list, final_type) + else: + final_resource = [convert_resources_to_type([i], final_type)[0] for i in resources_list] action_kwargs[k] = self.resource_tracker.figure_resource(final_resource) - self.lab_logger().info(f"准备执行: {action_kwargs}, 函数: {ACTION.__name__}") + ##### self.lab_logger().info(f"准备执行: {action_kwargs}, 函数: {ACTION.__name__}") time_start = time.time() time_overall = 100 # 将阻塞操作放入线程池执行 if asyncio.iscoroutinefunction(ACTION): try: - self.lab_logger().info(f"异步执行动作 {ACTION}") + ##### self.lab_logger().info(f"异步执行动作 {ACTION}") future = ROS2DeviceNode.run_async_func(ACTION, trace_error=False, **action_kwargs) def _handle_future_exception(fut): @@ -695,7 +708,7 @@ class BaseROS2DeviceNode(Node, Generic[T]): execution_success = True except Exception as e: execution_error = traceback.format_exc() - error(f"异步任务 {ACTION.__name__} 报错了") + ##### error(f"异步任务 {ACTION.__name__} 报错了") error(traceback.format_exc()) future.add_done_callback(_handle_future_exception) @@ -703,7 +716,7 @@ class BaseROS2DeviceNode(Node, Generic[T]): self.lab_logger().error(f"创建异步任务失败: {traceback.format_exc()}") raise e else: - self.lab_logger().info(f"同步执行动作 {ACTION}") + ##### self.lab_logger().info(f"同步执行动作 {ACTION}") future = self._executor.submit(ACTION, **action_kwargs) def _handle_future_exception(fut): @@ -758,7 +771,7 @@ class BaseROS2DeviceNode(Node, Generic[T]): self.lab_logger().info(f"动作 {action_name} 已取消") return action_type.Result() - self.lab_logger().info(f"动作执行完成: {action_name}") + ##### self.lab_logger().info(f"动作执行完成: {action_name}") del future # 向Host更新物料当前状态 @@ -794,7 +807,7 @@ class BaseROS2DeviceNode(Node, Generic[T]): # 发布结果 goal_handle.succeed() - self.lab_logger().info(f"设置动作成功: {action_name}") + ##### self.lab_logger().info(f"设置动作成功: {action_name}") result_values = {} for msg_name, attr_name in action_value_mapping["result"].items(): @@ -813,7 +826,7 @@ class BaseROS2DeviceNode(Node, Generic[T]): elif attr_name == "return_info": setattr(result_msg, attr_name, serialize_result_info(execution_error, execution_success, action_return_value)) - self.lab_logger().info(f"动作 {action_name} 完成并返回结果") + ##### self.lab_logger().info(f"动作 {action_name} 完成并返回结果") return result_msg return execute_callback @@ -838,6 +851,8 @@ class BaseROS2DeviceNode(Node, Generic[T]): class DeviceInitError(Exception): pass +class JsonCommandInitError(Exception): + pass class ROS2DeviceNode: """ @@ -914,11 +929,18 @@ class ROS2DeviceNode: driver_class.__module__.startswith("pylabrobot") or driver_class.__name__ == "LiquidHandlerAbstract" or driver_class.__name__ == "LiquidHandlerBiomek" + or driver_class.__name__ == "PRCXI9300Handler" ) # TODO: 要在创建之前预先请求服务器是否有当前id的物料,放到resource_tracker中,让pylabrobot进行创建 # 创建设备类实例 if use_pylabrobot_creator: + # 先对pylabrobot的子资源进行加载,不然subclass无法认出 + # 在下方对于加载Deck等Resource要手动import + # noinspection PyUnresolvedReferences + from unilabos.devices.liquid_handling.prcxi.prcxi import PRCXI9300Deck + # noinspection PyUnresolvedReferences + from unilabos.devices.liquid_handling.prcxi.prcxi import PRCXI9300Container self._driver_creator = PyLabRobotCreator( driver_class, children=children, resource_tracker=self.resource_tracker ) @@ -954,12 +976,51 @@ class ROS2DeviceNode: self._ros_node: BaseROS2DeviceNode self._ros_node.lab_logger().info(f"初始化完成 {self._ros_node.uuid} {self.driver_is_ros}") self.driver_instance._ros_node = self._ros_node # type: ignore + self.driver_instance._execute_driver_command = self._execute_driver_command # type: ignore + self.driver_instance._execute_driver_command_async = self._execute_driver_command_async # type: ignore if hasattr(self.driver_instance, "post_init"): try: self.driver_instance.post_init(self._ros_node) # type: ignore except Exception as e: self._ros_node.lab_logger().error(f"设备后初始化失败: {e}") + def _execute_driver_command(self, string: str): + try: + target = json.loads(string) + except Exception as ex: + try: + target = yaml.safe_load(io.StringIO(string)) + except Exception as ex2: + raise JsonCommandInitError(f"执行动作时JSON/YAML解析失败: \n{ex}\n{ex2}\n原内容: {string}\n{traceback.format_exc()}") + try: + function_name = target["function_name"] + function_args = target["function_args"] + assert isinstance(function_args, dict), "执行动作时JSON必须为dict类型\n原JSON: {string}" + function = getattr(self.driver_instance, function_name) + assert callable(function), f"执行动作时JSON中的function_name对应的函数不可调用: {function_name}\n原JSON: {string}" + return function(**function_args) + except KeyError as ex: + raise JsonCommandInitError(f"执行动作时JSON缺少function_name或function_args: {ex}\n原JSON: {string}\n{traceback.format_exc()}") + + async def _execute_driver_command_async(self, string: str): + try: + target = json.loads(string) + except Exception as ex: + try: + target = yaml.safe_load(io.StringIO(string)) + except Exception as ex2: + raise JsonCommandInitError(f"执行动作时JSON/YAML解析失败: \n{ex}\n{ex2}\n原内容: {string}\n{traceback.format_exc()}") + try: + function_name = target["function_name"] + function_args = target["function_args"] + assert isinstance(function_args, dict), "执行动作时JSON必须为dict类型\n原JSON: {string}" + function = getattr(self.driver_instance, function_name) + assert callable(function), f"执行动作时JSON中的function_name对应的函数不可调用: {function_name}\n原JSON: {string}" + assert asyncio.iscoroutinefunction(function), f"执行动作时JSON中的function并非异步: {function_name}\n原JSON: {string}" + return await function(**function_args) + except KeyError as ex: + raise JsonCommandInitError(f"执行动作时JSON缺少function_name或function_args: {ex}\n原JSON: {string}\n{traceback.format_exc()}") + def _start_loop(self): def run_event_loop(): loop = asyncio.new_event_loop() diff --git a/unilabos/ros/nodes/presets/camera.py b/unilabos/ros/nodes/presets/camera.py new file mode 100644 index 0000000..e161671 --- /dev/null +++ b/unilabos/ros/nodes/presets/camera.py @@ -0,0 +1,61 @@ +import rclpy +from rclpy.node import Node +import cv2 +from sensor_msgs.msg import Image +from cv_bridge import CvBridge +from unilabos.ros.nodes.base_device_node import BaseROS2DeviceNode, DeviceNodeResourceTracker + +class VideoPublisher(BaseROS2DeviceNode): + def __init__(self, device_id='video_publisher', camera_index=0, period: float = 0.1, resource_tracker: DeviceNodeResourceTracker = None): + # 初始化BaseROS2DeviceNode,使用自身作为driver_instance + BaseROS2DeviceNode.__init__( + self, + driver_instance=self, + device_id=device_id, + status_types={}, + action_value_mappings={}, + hardware_interface="camera", + print_publish=False, + resource_tracker=resource_tracker, + ) + # 创建一个发布者,发布到 /video 话题,消息类型为 sensor_msgs/Image,队列长度设为 10 + self.publisher_ = self.create_publisher(Image, f'/{device_id}/video', 10) + # 初始化摄像头(默认设备索引为 0) + self.cap = cv2.VideoCapture(camera_index) + if not self.cap.isOpened(): + self.get_logger().error("无法打开摄像头") + # 用于将 OpenCV 的图像转换为 ROS 图像消息 + self.bridge = CvBridge() + # 设置定时器,10 Hz 发布一次 + timer_period = period # 单位:秒 + self.timer = self.create_timer(timer_period, self.timer_callback) + + def timer_callback(self): + ret, frame = self.cap.read() + if not ret: + self.get_logger().error("读取视频帧失败") + return + # 将 OpenCV 图像转换为 ROS Image 消息,注意图像编码需与摄像头数据匹配,这里使用 bgr8 + img_msg = self.bridge.cv2_to_imgmsg(frame, encoding="bgr8") + self.publisher_.publish(img_msg) + # self.get_logger().info("已发布视频帧") + + def destroy_node(self): + # 释放摄像头资源 + if self.cap.isOpened(): + self.cap.release() + super().destroy_node() + +def main(args=None): + rclpy.init(args=args) + node = VideoPublisher() + try: + rclpy.spin(node) + except KeyboardInterrupt: + pass + finally: + node.destroy_node() + rclpy.shutdown() + +if __name__ == '__main__': + main() diff --git a/unilabos/ros/nodes/presets/host_node.py b/unilabos/ros/nodes/presets/host_node.py index 6665165..8356563 100644 --- a/unilabos/ros/nodes/presets/host_node.py +++ b/unilabos/ros/nodes/presets/host_node.py @@ -459,6 +459,8 @@ class HostNode(BaseROS2DeviceNode): self.devices_instances[device_id] = d # noinspection PyProtectedMember for action_name, action_value_mapping in d._ros_node._action_value_mappings.items(): + if action_name.startswith("auto-") or str(action_value_mapping.get("type", "")).startswith("UniLabJsonCommand"): + continue action_id = f"/devices/{device_id}/{action_name}" if action_id not in self._action_clients: action_type = action_value_mapping["type"] @@ -561,12 +563,13 @@ class HostNode(BaseROS2DeviceNode): if hasattr(bridge, "publish_device_status"): bridge.publish_device_status(self.device_status, device_id, property_name) self.lab_logger().debug( - f"[Host Node] Status updated: {device_id}.{property_name} = {msg.data}" + f"[Host Node] Status updated: {device_id}.{property_name} = {msg.data}" ) def send_goal( self, device_id: str, + action_type: str, action_name: str, action_kwargs: Dict[str, Any], goal_uuid: Optional[str] = None, @@ -577,16 +580,30 @@ class HostNode(BaseROS2DeviceNode): Args: device_id: 设备ID + action_type: 动作类型 action_name: 动作名称 action_kwargs: 动作参数 goal_uuid: 目标UUID,如果为None则自动生成 + server_info: 服务器发送信息,包含发送时间戳等 """ - action_id = f"/devices/{device_id}/{action_name}" + if action_type.startswith("UniLabJsonCommand"): + if action_name.startswith("auto-"): + action_name = action_name[5:] + action_id = f"/devices/{device_id}/_execute_driver_command" + action_kwargs = { + "string": json.dumps({ + "function_name": action_name, + "function_args": action_kwargs, + }) + } + if action_type.startswith("UniLabJsonCommandAsync"): + action_id = f"/devices/{device_id}/_execute_driver_command_async" + else: + action_id = f"/devices/{device_id}/{action_name}" if action_name == "test_latency" and server_info is not None: self.server_latest_timestamp = server_info.get("send_timestamp", 0.0) if action_id not in self._action_clients: - self.lab_logger().error(f"[Host Node] ActionClient {action_id} not found.") - return + raise ValueError(f"ActionClient {action_id} not found.") action_client: ActionClient = self._action_clients[action_id] diff --git a/unilabos/ros/nodes/presets/protocol_node.py b/unilabos/ros/nodes/presets/protocol_node.py index 4da8c62..72e3d65 100644 --- a/unilabos/ros/nodes/presets/protocol_node.py +++ b/unilabos/ros/nodes/presets/protocol_node.py @@ -1,7 +1,5 @@ import time -import asyncio import traceback -from types import MethodType from typing import Union import rclpy @@ -19,9 +17,11 @@ from unilabos.ros.msgs.message_converter import ( get_action_type, convert_to_ros_msg, convert_from_ros_msg, - convert_from_ros_msg_with_mapping, + convert_from_ros_msg_with_mapping, String, ) from unilabos.ros.nodes.base_device_node import BaseROS2DeviceNode, DeviceNodeResourceTracker, ROS2DeviceNode +from unilabos.utils.log import error +from unilabos.utils.type_check import serialize_result_info class ROS2ProtocolNode(BaseROS2DeviceNode): @@ -33,7 +33,15 @@ class ROS2ProtocolNode(BaseROS2DeviceNode): # create_action_server = False # Action Server要自己创建 - def __init__(self, device_id: str, children: dict, protocol_type: Union[str, list[str]], resource_tracker: DeviceNodeResourceTracker, *args, **kwargs): + def __init__( + self, + device_id: str, + children: dict, + protocol_type: Union[str, list[str]], + resource_tracker: DeviceNodeResourceTracker, + *args, + **kwargs, + ): self._setup_protocol_names(protocol_type) # 初始化其它属性 @@ -60,12 +68,14 @@ class ROS2ProtocolNode(BaseROS2DeviceNode): for device_id, device_config in self.children.items(): if device_config.get("type", "device") != "device": - self.lab_logger().debug(f"[Protocol Node] Skipping type {device_config['type']} {device_id} already existed, skipping.") + self.lab_logger().debug( + f"[Protocol Node] Skipping type {device_config['type']} {device_id} already existed, skipping." + ) continue try: d = self.initialize_device(device_id, device_config) except Exception as ex: - self.lab_logger().error(f"[Protocol Node] Failed to initialize device {device_id}: {ex}") + self.lab_logger().error(f"[Protocol Node] Failed to initialize device {device_id}: {ex}\n{traceback.format_exc()}") d = None if d is None: continue @@ -76,22 +86,27 @@ class ROS2ProtocolNode(BaseROS2DeviceNode): # 设置硬件接口代理 if d: + hardware_interface = d.ros_node_instance._hardware_interface if ( - hasattr(d.driver_instance, d.ros_node_instance._hardware_interface["name"]) - and hasattr(d.driver_instance, d.ros_node_instance._hardware_interface["write"]) - and (d.ros_node_instance._hardware_interface["read"] is None or hasattr(d.driver_instance, d.ros_node_instance._hardware_interface["read"])) + hasattr(d.driver_instance, hardware_interface["name"]) + and hasattr(d.driver_instance, hardware_interface["write"]) + and (hardware_interface["read"] is None or hasattr(d.driver_instance, hardware_interface["read"])) ): - name = getattr(d.driver_instance, d.ros_node_instance._hardware_interface["name"]) - read = d.ros_node_instance._hardware_interface.get("read", None) - write = d.ros_node_instance._hardware_interface.get("write", None) + name = getattr(d.driver_instance, hardware_interface["name"]) + read = hardware_interface.get("read", None) + write = hardware_interface.get("write", None) # 如果硬件接口是字符串,通过通信设备提供 if isinstance(name, str) and name in self.sub_devices: communicate_device = self.sub_devices[name] communicate_hardware_info = communicate_device.ros_node_instance._hardware_interface self._setup_hardware_proxy(d, self.sub_devices[name], read, write) - self.lab_logger().info(f"\n通信代理:为子设备{device_id}\n 添加了{read}方法(来源:{name} {communicate_hardware_info['write']}) \n 添加了{write}方法(来源:{name} {communicate_hardware_info['read']})") + self.lab_logger().info( + f"\n通信代理:为子设备{device_id}\n " + f"添加了{read}方法(来源:{name} {communicate_hardware_info['write']}) \n " + f"添加了{write}方法(来源:{name} {communicate_hardware_info['read']})" + ) def _setup_protocol_names(self, protocol_type): # 处理协议类型 @@ -119,11 +134,17 @@ class ROS2ProtocolNode(BaseROS2DeviceNode): if d is not None and hasattr(d, "ros_node_instance"): node = d.ros_node_instance for action_name, action_mapping in node._action_value_mappings.items(): + if action_name.startswith("auto-") or str(action_mapping.get("type", "")).startswith("UniLabJsonCommand"): + continue action_id = f"/devices/{device_id_abs}/{action_name}" if action_id not in self._action_clients: - self._action_clients[action_id] = ActionClient( - self, action_mapping["type"], action_id, callback_group=self.callback_group - ) + try: + self._action_clients[action_id] = ActionClient( + self, action_mapping["type"], action_id, callback_group=self.callback_group + ) + except Exception as ex: + self.lab_logger().error(f"创建动作客户端失败: {action_id}, 错误: {ex}") + continue self.lab_logger().debug(f"为子设备 {device_id} 创建动作客户端: {action_name}") return d @@ -149,63 +170,135 @@ class ROS2ProtocolNode(BaseROS2DeviceNode): def _create_protocol_execute_callback(self, protocol_name, protocol_steps_generator): async def execute_protocol(goal_handle: ServerGoalHandle): """执行完整的工作流""" - self.get_logger().info(f'Executing {protocol_name} action...') + # 初始化结果信息变量 + execution_error = "" + execution_success = False + protocol_return_value = None + self.get_logger().info(f"Executing {protocol_name} action...") action_value_mapping = self._action_value_mappings[protocol_name] - print('+'*30) - print(protocol_steps_generator) - # 从目标消息中提取参数, 并调用Protocol生成器(根据设备连接图)生成action步骤 - goal = goal_handle.request - protocol_kwargs = convert_from_ros_msg_with_mapping(goal, action_value_mapping["goal"]) + try: + print("+" * 30) + print(protocol_steps_generator) + # 从目标消息中提取参数, 并调用Protocol生成器(根据设备连接图)生成action步骤 + goal = goal_handle.request + protocol_kwargs = convert_from_ros_msg_with_mapping(goal, action_value_mapping["goal"]) + + # # 🔧 添加调试信息 + # print(f"🔍 转换后的 protocol_kwargs: {protocol_kwargs}") + # print(f"🔍 vessel 在转换后: {protocol_kwargs.get('vessel', 'NOT_FOUND')}") - # 向Host查询物料当前状态 - for k, v in goal.get_fields_and_field_types().items(): - if v in ["unilabos_msgs/Resource", "sequence"]: - r = ResourceGet.Request() - r.id = protocol_kwargs[k]["id"] if v == "unilabos_msgs/Resource" else protocol_kwargs[k][0]["id"] - r.with_children = True - response = await self._resource_clients["resource_get"].call_async(r) - protocol_kwargs[k] = list_to_nested_dict([convert_from_ros_msg(rs) for rs in response.resources]) + # # 🔧 完全禁用Host查询,直接使用转换后的数据 + # print(f"🔧 跳过Host查询,直接使用转换后的数据") + # 向Host查询物料当前状态 + for k, v in goal.get_fields_and_field_types().items(): + if v in ["unilabos_msgs/Resource", "sequence"]: + r = ResourceGet.Request() + resource_id = ( + protocol_kwargs[k]["id"] if v == "unilabos_msgs/Resource" else protocol_kwargs[k][0]["id"] + ) + r.id = resource_id + r.with_children = True + response = await self._resource_clients["resource_get"].call_async(r) + protocol_kwargs[k] = list_to_nested_dict( + [convert_from_ros_msg(rs) for rs in response.resources] + ) - from unilabos.resources.graphio import physical_setup_graph - self.get_logger().info(f'Working on physical setup: {physical_setup_graph}') - protocol_steps = protocol_steps_generator(G=physical_setup_graph, **protocol_kwargs) + self.lab_logger().info(f"🔍 最终传递给协议的 protocol_kwargs: {protocol_kwargs}") + self.lab_logger().info(f"🔍 最终的 vessel: {protocol_kwargs.get('vessel', 'NOT_FOUND')}") - self.get_logger().info(f'Goal received: {protocol_kwargs}, running steps: \n{protocol_steps}') + from unilabos.resources.graphio import physical_setup_graph - time_start = time.time() - time_overall = 100 - self._busy = True + self.lab_logger().info(f"Working on physical setup: {physical_setup_graph}") + protocol_steps = protocol_steps_generator(G=physical_setup_graph, **protocol_kwargs) + + self.lab_logger().info(f"Goal received: {protocol_kwargs}, running steps: \n{protocol_steps}") - # 逐步执行工作流 - for i, action in enumerate(protocol_steps): - self.get_logger().info(f'Running step {i+1}: {action}') - if type(action) == dict: - # 如果是单个动作,直接执行 - if action["action_name"] == "wait": - time.sleep(action["action_kwargs"]["time"]) - else: - result = await self.execute_single_action(**action) - elif type(action) == list: - # 如果是并行动作,同时执行 - actions = action - futures = [rclpy.get_global_executor().create_task(self.execute_single_action(**a)) for a in actions] - results = [await f for f in futures] + time_start = time.time() + time_overall = 100 + self._busy = True - # 向Host更新物料当前状态 - for k, v in goal.get_fields_and_field_types().items(): - if v in ["unilabos_msgs/Resource", "sequence"]: - r = ResourceUpdate.Request() - r.resources = [ - convert_to_ros_msg(Resource, rs) for rs in nested_dict_to_list(protocol_kwargs[k]) - ] - response = await self._resource_clients["resource_update"].call_async(r) + # 逐步执行工作流 + step_results = [] + for i, action in enumerate(protocol_steps): + # self.get_logger().info(f"Running step {i + 1}: {action}") + if isinstance(action, dict): + # 如果是单个动作,直接执行 + if action["action_name"] == "wait": + time.sleep(action["action_kwargs"]["time"]) + step_results.append({"step": i + 1, "action": "wait", "result": "completed"}) + else: + result = await self.execute_single_action(**action) + step_results.append({"step": i + 1, "action": action["action_name"], "result": result}) + elif isinstance(action, list): + # 如果是并行动作,同时执行 + actions = action + futures = [ + rclpy.get_global_executor().create_task(self.execute_single_action(**a)) for a in actions + ] + results = [await f for f in futures] + step_results.append( + { + "step": i + 1, + "parallel_actions": [a["action_name"] for a in actions], + "results": results, + } + ) - goal_handle.succeed() + # 向Host更新物料当前状态 + for k, v in goal.get_fields_and_field_types().items(): + if v in ["unilabos_msgs/Resource", "sequence"]: + r = ResourceUpdate.Request() + r.resources = [ + convert_to_ros_msg(Resource, rs) for rs in nested_dict_to_list(protocol_kwargs[k]) + ] + response = await self._resource_clients["resource_update"].call_async(r) + + # 设置成功状态和返回值 + execution_success = True + protocol_return_value = { + "protocol_name": protocol_name, + "steps_executed": len(protocol_steps), + "step_results": step_results, + "total_time": time.time() - time_start, + } + + goal_handle.succeed() + + except Exception as e: + # 捕获并记录错误信息 + execution_error = traceback.format_exc() + execution_success = False + error(f"协议 {protocol_name} 执行失败") + error(traceback.format_exc()) + self.lab_logger().error(f"协议执行出错: {str(e)}") + + # 设置动作失败 + goal_handle.abort() + + finally: + self._busy = False + + # 创建结果消息 result = action_value_mapping["type"].Result() - result.success = True + result.success = execution_success - self._busy = False + # 获取结果消息类型信息,检查是否有return_info字段 + result_msg_types = action_value_mapping["type"].Result.get_fields_and_field_types() + + # 设置return_info字段(如果存在) + for attr_name in result_msg_types.keys(): + if attr_name in ["success", "reached_goal"]: + setattr(result, attr_name, execution_success) + elif attr_name == "return_info": + setattr( + result, + attr_name, + serialize_result_info(execution_error, execution_success, protocol_return_value), + ) + + self.lab_logger().info(f"🤩🤩🤩🤩🤩🤩协议 {protocol_name} 完成并返回结果😎😎😎😎😎😎") return result + return execute_protocol async def execute_single_action(self, device_id, action_name, action_kwargs): @@ -225,7 +318,7 @@ class ROS2ProtocolNode(BaseROS2DeviceNode): action_client = self._action_clients[action_id] goal_msg = convert_to_ros_msg(action_client._action_type.Goal(), action_kwargs) - self.lab_logger().info(f"发送动作请求到: {action_id}") + ##### self.lab_logger().info(f"发送动作请求到: {action_id}") action_client.wait_for_server() # 等待动作完成 @@ -237,18 +330,23 @@ class ROS2ProtocolNode(BaseROS2DeviceNode): return None result_future = await handle.get_result_async() - self.lab_logger().info(f"动作完成: {action_name}") + ##### self.lab_logger().info(f"动作完成: {action_name}") return result_future.result - """还没有改过的部分""" - def _setup_hardware_proxy(self, device: ROS2DeviceNode, communication_device: ROS2DeviceNode, read_method, write_method): + def _setup_hardware_proxy( + self, device: ROS2DeviceNode, communication_device: ROS2DeviceNode, read_method, write_method + ): """为设备设置硬件接口代理""" # extra_info = [getattr(device.driver_instance, info) for info in communication_device.ros_node_instance._hardware_interface.get("extra_info", [])] - write_func = getattr(communication_device.driver_instance, communication_device.ros_node_instance._hardware_interface["write"]) - read_func = getattr(communication_device.driver_instance, communication_device.ros_node_instance._hardware_interface["read"]) + write_func = getattr( + communication_device.driver_instance, communication_device.ros_node_instance._hardware_interface["write"] + ) + read_func = getattr( + communication_device.driver_instance, communication_device.ros_node_instance._hardware_interface["read"] + ) def _read(*args, **kwargs): return read_func(*args, **kwargs) @@ -264,7 +362,6 @@ class ROS2ProtocolNode(BaseROS2DeviceNode): # bound_write = MethodType(_write, device.driver_instance) setattr(device.driver_instance, write_method, _write) - async def _update_resources(self, goal, protocol_kwargs): """更新资源状态""" for k, v in goal.get_fields_and_field_types().items(): diff --git a/unilabos/ros/nodes/resource_tracker.py b/unilabos/ros/nodes/resource_tracker.py index 10cc4bc..e6054ef 100644 --- a/unilabos/ros/nodes/resource_tracker.py +++ b/unilabos/ros/nodes/resource_tracker.py @@ -10,6 +10,15 @@ class DeviceNodeResourceTracker(object): self.resource2parent_resource = {} pass + def prefix_path(self, resource): + resource_prefix_path = "/" + resource_parent = getattr(resource, "parent", None) + while resource_parent is not None: + resource_prefix_path = f"/{resource_parent.name}" + resource_prefix_path + resource_parent = resource_parent.parent + + return resource_prefix_path + def parent_resource(self, resource): if id(resource) in self.resource2parent_resource: return self.resource2parent_resource[id(resource)] diff --git a/unilabos/ros/utils/driver_creator.py b/unilabos/ros/utils/driver_creator.py index 7fd726b..c76cc3b 100644 --- a/unilabos/ros/utils/driver_creator.py +++ b/unilabos/ros/utils/driver_creator.py @@ -148,7 +148,7 @@ class PyLabRobotCreator(DeviceClassCreator[T]): contain_model = not issubclass(target_type, Deck) resource, target_type = self._process_resource_mapping(resource, target_type) resource_instance: Resource = resource_ulab_to_plr(resource, contain_model) - + states[prefix_path] = resource_instance.serialize_all_state() # 使用 prefix_path 作为 key 存储资源状态 if to_dict: serialized = resource_instance.serialize() @@ -199,7 +199,7 @@ class PyLabRobotCreator(DeviceClassCreator[T]): spect = inspect.signature(deserialize_method) spec_args = spect.parameters for param_name, param_value in data.copy().items(): - if "_resource_child_name" in param_value and "_resource_type" not in param_value: + if isinstance(param_value, dict) and "_resource_child_name" in param_value and "_resource_type" not in param_value: arg_value = spec_args[param_name].annotation data[param_name]["_resource_type"] = self.device_cls.__module__ + ":" + arg_value logger.debug(f"自动补充 _resource_type: {data[param_name]['_resource_type']}") @@ -230,7 +230,7 @@ class PyLabRobotCreator(DeviceClassCreator[T]): spect = inspect.signature(self.device_cls.__init__) spec_args = spect.parameters for param_name, param_value in data.copy().items(): - if "_resource_child_name" in param_value and "_resource_type" not in param_value: + if isinstance(param_value, dict) and "_resource_child_name" in param_value and "_resource_type" not in param_value: arg_value = spec_args[param_name].annotation data[param_name]["_resource_type"] = self.device_cls.__module__ + ":" + arg_value logger.debug(f"自动补充 _resource_type: {data[param_name]['_resource_type']}") diff --git a/unilabos/utils/import_manager.py b/unilabos/utils/import_manager.py index 17c69d2..7a3066f 100644 --- a/unilabos/utils/import_manager.py +++ b/unilabos/utils/import_manager.py @@ -7,7 +7,11 @@ import builtins import importlib import inspect +import sys import traceback +import ast +import os +from pathlib import Path from typing import Dict, List, Any, Optional, Callable, Type @@ -18,8 +22,12 @@ __all__ = [ "get_class", "get_module", "init_from_list", + "get_class_info_static", + "get_registry_class_info", ] +from ast import Constant + from unilabos.utils import logger @@ -114,15 +122,16 @@ class ImportManager: # 尝试动态导入 if ":" in class_name: module_path, cls_name = class_name.rsplit(":", 1) - # 如果cls_name是builtins中的关键字,则返回对应类 - if cls_name in builtins.__dict__: - return builtins.__dict__[cls_name] module = self.load_module(module_path) if hasattr(module, cls_name): cls = getattr(module, cls_name) self._classes[class_name] = cls self._classes[cls_name] = cls return cls + else: + # 如果cls_name是builtins中的关键字,则返回对应类 + if class_name in builtins.__dict__: + return builtins.__dict__[class_name] raise KeyError(f"找不到类: {class_name}") @@ -149,6 +158,9 @@ class ImportManager: Returns: 找到的类对象,如果未找到则返回None """ + # 如果cls_name是builtins中的关键字,则返回对应类 + if class_name in builtins.__dict__: + return builtins.__dict__[class_name] # 首先在已索引的类中查找 if class_name in self._classes: return self._classes[class_name] @@ -161,7 +173,9 @@ class ImportManager: # 遍历所有已加载的模块进行搜索 for module_path, module in self._modules.items(): for name, obj in inspect.getmembers(module): - if inspect.isclass(obj) and ((name.lower() == class_name.lower()) if search_lower else (name == class_name)): + if inspect.isclass(obj) and ( + (name.lower() == class_name.lower()) if search_lower else (name == class_name) + ): # 将找到的类添加到索引中 self._classes[name] = obj self._classes[f"{module_path}:{name}"] = obj @@ -169,6 +183,562 @@ class ImportManager: return None + def get_enhanced_class_info(self, module_path: str, use_dynamic: bool = True) -> Dict[str, Any]: + """ + 获取增强的类信息,支持动态导入和静态分析 + + Args: + module_path: 模块路径,格式为 "module.path" 或 "module.path:ClassName" + use_dynamic: 是否优先使用动态导入 + + Returns: + 包含详细类信息的字典 + """ + result = { + "module_path": module_path, + "dynamic_import_success": False, + "static_analysis_success": False, + "init_params": {}, + "status_methods": {}, # get_ 开头和 @property 方法 + "action_methods": {}, # set_ 开头和其他非_开头方法 + } + + # 尝试动态导入 + dynamic_info = None + static_info = None + if use_dynamic: + try: + dynamic_info = self._get_dynamic_class_info(module_path) + result["dynamic_import_success"] = True + logger.debug(f"[ImportManager] 动态导入类 {module_path} 成功") + except Exception as e: + logger.warning( + f"[UniLab Registry] 在补充注册表时,动态导入类 " + f"{module_path} 失败(将使用静态分析," + f"建议修复导入错误,以实现更好的注册表识别效果!): {e}" + ) + use_dynamic = False + if not use_dynamic: + # 尝试静态分析 + try: + static_info = self._get_static_class_info(module_path) + result["static_analysis_success"] = True + logger.debug(f"[ImportManager] 静态分析类 {module_path} 成功") + except Exception as e: + logger.warning(f"[ImportManager] 静态分析类 {module_path} 失败: {e}") + + # 合并信息(优先使用动态导入的信息) + if dynamic_info: + result.update(dynamic_info) + elif static_info: + result.update(static_info) + + return result + + def _get_dynamic_class_info(self, class_path: str) -> Dict[str, Any]: + """使用inspect模块动态获取类信息""" + cls = get_class(class_path) + class_name = cls.__name__ + + result = {"class_name": class_name, "init_params": self._analyze_method_signature(cls.__init__)["args"], + "status_methods": {}, "action_methods": {}} + # 分析类的所有成员 + for name, method in cls.__dict__.items(): + if name.startswith("_"): + continue + + # 检查是否是property + if isinstance(method, property): + # @property 装饰的方法 + # noinspection PyTypeChecker + return_type = self._get_return_type_from_method(method.fget) if method.fget else "Any" + prop_info = { + "name": name, + "return_type": return_type, + } + result["status_methods"][name] = prop_info + + # 检查是否有对应的setter + if method.fset: + setter_info = self._analyze_method_signature(method.fset) + result["action_methods"][name] = setter_info + + elif inspect.ismethod(method) or inspect.isfunction(method): + if name.startswith("get_"): + actual_name = name[4:] # 去掉get_前缀 + if actual_name in result["status_methods"]: + continue + # get_ 开头的方法归类为status + method_info = self._analyze_method_signature(method) + result["status_methods"][actual_name] = method_info + elif not name.startswith("_"): + # 其他非_开头的方法归类为action + method_info = self._analyze_method_signature(method) + result["action_methods"][name] = method_info + + return result + + def _get_static_class_info(self, module_path: str) -> Dict[str, Any]: + """使用AST静态分析获取类信息""" + module_name, class_name = module_path.rsplit(":", 1) + # 将模块路径转换为文件路径 + file_path = self._module_path_to_file_path(module_name) + if not file_path or not os.path.exists(file_path): + raise FileNotFoundError(f"找不到模块文件: {module_name} -> {file_path}") + + with open(file_path, "r", encoding="utf-8") as f: + source_code = f.read() + + tree = ast.parse(source_code) + + # 查找目标类 + target_class = None + for node in ast.walk(tree): + if isinstance(node, ast.ClassDef): + if node.name == class_name: + target_class = node + break + + if target_class is None: + raise AttributeError(f"在文件 {file_path} 中找不到类 {class_name}") + + result = { + "class_name": class_name, + "init_params": {}, + "status_methods": {}, + "action_methods": {}, + } + + # 分析类的方法 + for node in target_class.body: + if isinstance(node, ast.FunctionDef): + method_info = self._analyze_method_node(node) + method_name = node.name + if method_name == "__init__": + result["init_params"] = method_info["args"] + elif method_name.startswith("_"): + continue + elif self._is_property_method(node): + # @property 装饰的方法 + result["status_methods"][method_name] = method_info + elif method_name.startswith("get_"): + # get_ 开头的方法归类为status + actual_name = method_name[4:] # 去掉get_前缀 + if actual_name not in result["status_methods"]: + result["status_methods"][actual_name] = method_info + else: + # 其他非_开头的方法归类为action + result["action_methods"][method_name] = method_info + return result + + def _analyze_method_signature(self, method) -> Dict[str, Any]: + """ + 分析方法签名,提取具体的命名参数信息 + + 注意:此方法会跳过*args和**kwargs,只提取具体的命名参数 + 这样可以确保通过**dict方式传参时的准确性 + + 示例用法: + method_info = self._analyze_method_signature(some_method) + params = {"param1": "value1", "param2": "value2"} + result = some_method(**params) # 安全的参数传递 + """ + signature = inspect.signature(method) + args = [] + num_required = 0 + + for param_name, param in signature.parameters.items(): + # 跳过self参数 + if param_name == "self": + continue + + # 跳过*args和**kwargs参数 + if param.kind == param.VAR_POSITIONAL: # *args + continue + if param.kind == param.VAR_KEYWORD: # **kwargs + continue + + is_required = param.default == inspect.Parameter.empty + if is_required: + num_required += 1 + + args.append( + { + "name": param_name, + "type": self._get_type_string(param.annotation), + "required": is_required, + "default": None if param.default == inspect.Parameter.empty else param.default, + } + ) + + return { + "name": method.__name__, + "args": args, + "return_type": self._get_type_string(signature.return_annotation), + "is_async": inspect.iscoroutinefunction(method), + } + + def _get_return_type_from_method(self, method) -> str: + """从方法中获取返回类型""" + signature = inspect.signature(method) + return self._get_type_string(signature.return_annotation) + + def _get_type_string(self, annotation) -> str: + """将类型注解转换为Class Library中可搜索的类名""" + if annotation == inspect.Parameter.empty: + return "Any" # 如果没有注解,返回Any + if annotation is None: + return "None" # 明确的None类型 + if hasattr(annotation, "__origin__"): + # 处理typing模块的类型 + origin = annotation.__origin__ + if origin in (list, set, tuple): + if hasattr(annotation, "__args__") and annotation.__args__: + if len(annotation.__args__): + arg0 = annotation.__args__[0] + if isinstance(arg0, int): + return "Int64MultiArray" + elif isinstance(arg0, float): + return "Float64MultiArray" + return "list" + elif origin is dict: + return "dict" + elif origin is Optional: + return "Unknown" + return f"Unknown" + annotation_str = str(annotation) + # 处理typing模块的复杂类型 + if "typing." in annotation_str: + # 简化typing类型显示 + return ( + annotation_str.replace("typing.", "") + if getattr(annotation, "_name", None) is None + else annotation._name.lower() + ) + # 如果是类型对象 + if hasattr(annotation, "__name__"): + # 如果是内置类型 + if annotation.__module__ == "builtins": + return annotation.__name__ + else: + # 如果是自定义类,返回完整路径 + return f"{annotation.__module__}:{annotation.__name__}" + # 如果是typing模块的类型 + elif hasattr(annotation, "_name"): + return annotation._name + # 如果是字符串形式的类型注解 + elif isinstance(annotation, str): + return annotation + else: + return annotation_str + + def _is_property_method(self, node: ast.FunctionDef) -> bool: + """检查是否是@property装饰的方法""" + for decorator in node.decorator_list: + if isinstance(decorator, ast.Name) and decorator.id == "property": + return True + return False + + def _is_setter_method(self, node: ast.FunctionDef) -> bool: + """检查是否是@xxx.setter装饰的方法""" + for decorator in node.decorator_list: + if isinstance(decorator, ast.Attribute) and decorator.attr == "setter": + return True + return False + + def _get_property_name_from_setter(self, node: ast.FunctionDef) -> str: + """从setter装饰器中获取属性名""" + for decorator in node.decorator_list: + if isinstance(decorator, ast.Attribute) and decorator.attr == "setter": + if isinstance(decorator.value, ast.Name): + return decorator.value.id + return node.name + + def get_class_info_static(self, module_class_path: str) -> Dict[str, Any]: + """ + 静态分析获取类的方法信息,不需要实际导入模块 + + Args: + module_class_path: 格式为 "module.path:ClassName" 的字符串 + + Returns: + 包含类方法信息的字典 + """ + try: + if ":" not in module_class_path: + raise ValueError("module_class_path必须是 'module.path:ClassName' 格式") + + module_path, class_name = module_class_path.rsplit(":", 1) + + # 将模块路径转换为文件路径 + file_path = self._module_path_to_file_path(module_path) + if not file_path or not os.path.exists(file_path): + logger.warning(f"找不到模块文件: {module_path} -> {file_path}") + return {} + + # 解析源码 + with open(file_path, "r", encoding="utf-8") as f: + source_code = f.read() + + tree = ast.parse(source_code) + + # 查找目标类 + class_node = None + for node in ast.walk(tree): + if isinstance(node, ast.ClassDef) and node.name == class_name: + class_node = node + break + + if not class_node: + logger.warning(f"在模块 {module_path} 中找不到类 {class_name}") + return {} + + # 分析类的方法 + methods_info = {} + for node in class_node.body: + if isinstance(node, ast.FunctionDef): + method_info = self._analyze_method_node(node) + methods_info[node.name] = method_info + + return { + "class_name": class_name, + "module_path": module_path, + "file_path": file_path, + "methods": methods_info, + } + + except Exception as e: + logger.error(f"静态分析类 {module_class_path} 时出错: {str(e)}") + return {} + + def _module_path_to_file_path(self, module_path: str) -> Optional[str]: + for path in sys.path: + potential_path = Path(path) / module_path.replace(".", "/") + + # 检查是否为包 + if (potential_path / "__init__.py").exists(): + return str(potential_path / "__init__.py") + + # 检查是否为模块文件 + if (potential_path.parent / f"{potential_path.name}.py").exists(): + return str(potential_path.parent / f"{potential_path.name}.py") + + return None + + def _analyze_method_node(self, node: ast.FunctionDef) -> Dict[str, Any]: + """分析方法节点,提取参数和返回类型信息""" + method_info = { + "name": node.name, + "args": [], + "return_type": None, + "is_async": isinstance(node, ast.AsyncFunctionDef), + } + # 获取默认值列表 + defaults = node.args.defaults + num_defaults = len(defaults) + + # 计算必需参数数量 + total_args = len(node.args.args) + num_required = total_args - num_defaults + + # 提取参数信息 + for i, arg in enumerate(node.args.args): + if arg.arg == "self": + continue + arg_info = { + "name": arg.arg, + "type": None, + "default": None, + "required": i < num_required, + } + + # 提取类型注解 + if arg.annotation: + arg_info["type"] = ast.unparse(arg.annotation) if hasattr(ast, "unparse") else str(arg.annotation) + + # 提取默认值并推断类型 + if i >= num_required: + default_index = i - num_required + if default_index < len(defaults): + default_value: Constant = defaults[default_index] # type: ignore + assert isinstance(default_value, Constant), "暂不支持对非常量类型进行推断,可反馈开源仓库" + arg_info["default"] = default_value.value + # 如果没有类型注解,尝试从默认值推断类型 + if not arg_info["type"]: + arg_info["type"] = self._get_type_string(type(arg_info["default"])) + method_info["args"].append(arg_info) + + # 提取返回类型 + if node.returns: + method_info["return_type"] = ast.unparse(node.returns) if hasattr(ast, "unparse") else str(node.returns) + + return method_info + + def _infer_type_from_default(self, node: ast.AST) -> Optional[str]: + """从默认值推断参数类型""" + if isinstance(node, ast.Constant): + value = node.value + if isinstance(value, bool): + return "bool" + elif isinstance(value, int): + return "int" + elif isinstance(value, float): + return "float" + elif isinstance(value, str): + return "str" + elif value is None: + return "Optional[Any]" + elif isinstance(node, ast.List): + return "List" + elif isinstance(node, ast.Dict): + return "Dict" + elif isinstance(node, ast.Tuple): + return "Tuple" + elif isinstance(node, ast.Set): + return "Set" + elif isinstance(node, ast.Name): + # 常见的默认值模式 + if node.id in ["None"]: + return "Optional[Any]" + elif node.id in ["True", "False"]: + return "bool" + + return None + + def _infer_types_from_docstring(self, method_info: Dict[str, Any]) -> None: + """从docstring中推断参数类型""" + docstring = method_info.get("docstring", "") + if not docstring: + return + + lines = docstring.split("\n") + in_args_section = False + + for line in lines: + line = line.strip() + + # 检测Args或Arguments段落 + if line.lower().startswith(("args:", "arguments:")): + in_args_section = True + continue + elif line.startswith(("returns:", "return:", "yields:", "raises:")): + in_args_section = False + continue + elif not line or not in_args_section: + continue + + # 解析参数行,格式通常是: param_name (type): description 或 param_name: description + if ":" in line: + parts = line.split(":", 1) + param_part = parts[0].strip() + + # 提取参数名和类型 + param_name = None + param_type = None + + if "(" in param_part and ")" in param_part: + # 格式: param_name (type) + param_name = param_part.split("(")[0].strip() + type_part = param_part.split("(")[1].split(")")[0].strip() + param_type = type_part + else: + # 格式: param_name + param_name = param_part + + # 更新对应参数的类型信息 + if param_name: + for arg_info in method_info["args"]: + if arg_info["name"] == param_name and not arg_info["type"]: + if param_type: + arg_info["inferred_type"] = param_type + elif not arg_info["inferred_type"]: + # 从描述中推断类型 + description = parts[1].strip().lower() + if any(word in description for word in ["path", "file", "directory", "filename"]): + arg_info["inferred_type"] = "str" + elif any( + word in description for word in ["port", "number", "count", "size", "length"] + ): + arg_info["inferred_type"] = "int" + elif any( + word in description for word in ["rate", "ratio", "percentage", "temperature"] + ): + arg_info["inferred_type"] = "float" + elif any(word in description for word in ["flag", "enable", "disable", "option"]): + arg_info["inferred_type"] = "bool" + + def get_registry_class_info(self, module_class_path: str) -> Dict[str, Any]: + """ + 获取适用于注册表的类信息,包含完整的类型推断 + + Args: + module_class_path: 格式为 "module.path:ClassName" 的字符串 + + Returns: + 适用于注册表的类信息字典 + """ + class_info = self.get_class_info_static(module_class_path) + if not class_info: + return {} + + registry_info = { + "class_name": class_info["class_name"], + "module_path": class_info["module_path"], + "file_path": class_info["file_path"], + "methods": {}, + "properties": [], + "init_params": {}, + "action_methods": {}, + } + + for method_name, method_info in class_info["methods"].items(): + # 分类处理不同类型的方法 + if method_info["is_property"]: + registry_info["properties"].append( + { + "name": method_name, + "return_type": method_info.get("return_type"), + "docstring": method_info.get("docstring"), + } + ) + elif method_name == "__init__": + # 处理初始化参数 + init_params = {} + for arg in method_info["args"]: + if arg["name"] != "self": + param_info = { + "name": arg["name"], + "type": arg.get("type") or arg.get("inferred_type"), + "required": arg.get("is_required", True), + "default": arg.get("default"), + } + init_params[arg["name"]] = param_info + registry_info["init_params"] = init_params + elif not method_name.startswith("_"): + # 处理公共方法(可能的action方法) + action_info = { + "name": method_name, + "params": {}, + "return_type": method_info.get("return_type"), + "docstring": method_info.get("docstring"), + "num_required": method_info.get("num_required", 0) - 1, # 减去self + "num_defaults": method_info.get("num_defaults", 0), + } + + for arg in method_info["args"]: + if arg["name"] != "self": + param_info = { + "name": arg["name"], + "type": arg.get("type") or arg.get("inferred_type"), + "required": arg.get("is_required", True), + "default": arg.get("default"), + } + action_info["params"][arg["name"]] = param_info + + registry_info["action_methods"][method_name] = action_info + + return registry_info + # 全局实例,便于直接使用 default_manager = ImportManager() @@ -193,3 +763,18 @@ def init_from_list(module_list: List[str]) -> None: """从模块列表初始化默认管理器""" global default_manager default_manager = ImportManager(module_list) + + +def get_class_info_static(module_class_path: str) -> Dict[str, Any]: + """静态分析获取类信息的便捷函数""" + return default_manager.get_class_info_static(module_class_path) + + +def get_registry_class_info(module_class_path: str) -> Dict[str, Any]: + """获取适用于注册表的类信息的便捷函数""" + return default_manager.get_registry_class_info(module_class_path) + + +def get_enhanced_class_info(module_path: str, use_dynamic: bool = True) -> Dict[str, Any]: + """获取增强的类信息的便捷函数""" + return default_manager.get_enhanced_class_info(module_path, use_dynamic) diff --git a/unilabos/utils/type_check.py b/unilabos/utils/type_check.py index 578eb93..c22de3c 100644 --- a/unilabos/utils/type_check.py +++ b/unilabos/utils/type_check.py @@ -1,7 +1,10 @@ import collections.abc import json +from collections import OrderedDict from typing import get_origin, get_args +import yaml + def get_type_class(type_hint): origin = get_origin(type_hint) @@ -22,6 +25,20 @@ class TypeEncoder(json.JSONEncoder): return super().default(obj) +class NoAliasDumper(yaml.SafeDumper): + def ignore_aliases(self, data): + return True + + +# 为NoAliasDumper添加OrderedDict的representation方法 +def represent_ordereddict(dumper, data): + return dumper.represent_mapping("tag:yaml.org,2002:map", data.items()) + + +# 注册OrderedDict的representer +NoAliasDumper.add_representer(OrderedDict, represent_ordereddict) + + class ResultInfoEncoder(json.JSONEncoder): """专门用于处理任务执行结果信息的JSON编码器""" diff --git a/unilabos_msgs/CMakeLists.txt b/unilabos_msgs/CMakeLists.txt index db64116..1c37139 100644 --- a/unilabos_msgs/CMakeLists.txt +++ b/unilabos_msgs/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.5) +cmake_minimum_required(VERSION 3.16) project(unilabos_msgs) # Default to C99 @@ -28,7 +28,11 @@ set(action_files "action/HeatChill.action" "action/HeatChillStart.action" "action/HeatChillStop.action" - + "action/AdjustPH.action" + "action/ResetHandling.action" + "action/Dry.action" + "action/Hydrogenate.action" + "action/Recrystallize.action" "action/CleanVessel.action" "action/Dissolve.action" "action/FilterThrough.action" @@ -37,9 +41,9 @@ set(action_files "action/WashSolid.action" "action/Filter.action" "action/Add.action" + "action/AddSolid.action" "action/Centrifuge.action" "action/Crystallize.action" - "action/Dry.action" "action/Purge.action" "action/StartPurge.action" "action/StartStir.action" @@ -60,6 +64,8 @@ set(action_files "action/LiquidHandlerPickUpTips96.action" "action/LiquidHandlerReturnTips.action" "action/LiquidHandlerReturnTips96.action" + "action/LiquidHandlerSetLiquid.action" + "action/LiquidHandlerSetTipRack.action" "action/LiquidHandlerStamp.action" "action/LiquidHandlerTransfer.action" diff --git a/unilabos_msgs/action/Add.action b/unilabos_msgs/action/Add.action index de06c6a..609e9f2 100644 --- a/unilabos_msgs/action/Add.action +++ b/unilabos_msgs/action/Add.action @@ -1,14 +1,19 @@ # Goal - 添加试剂的目标参数 -string vessel # 目标容器 -string reagent # 试剂名称 -float64 volume # 体积 (可选) -float64 mass # 质量 (可选) -string amount # 数量描述 (可选) -float64 time # 添加时间 (可选) -bool stir # 是否搅拌 -float64 stir_speed # 搅拌速度 (可选) -bool viscous # 是否为粘性液体 -string purpose # 添加目的 (可选) +Resource vessel # 目标容器(必需) +string reagent # 试剂名称(必需) +string volume # 体积(如 "2.7 mL",可选) +string mass # 质量(如 "19.3 g",可选) +string amount # 数量描述(可选) +string time # 添加时间(如 "1 h", "20 min",可选) +bool stir # 是否搅拌(可选) +float64 stir_speed # 搅拌速度 (RPM,可选) +bool viscous # 是否为粘性液体(可选) +string purpose # 添加目的(可选) +string event # 事件标识(如 'A', 'B',可选) +string mol # 摩尔数(如 '0.28 mol', '16.2 mmol',可选) +string rate_spec # 速率规格(如 'portionwise', 'dropwise',可选) +string equiv # 当量(如 '1.1',可选) +string ratio # 比例(如 '1:1',可选) --- # Result - 操作结果 bool success # 操作是否成功 diff --git a/unilabos_msgs/action/AddSolid.action b/unilabos_msgs/action/AddSolid.action new file mode 100644 index 0000000..c5fc7ce --- /dev/null +++ b/unilabos_msgs/action/AddSolid.action @@ -0,0 +1,15 @@ +# Goal - 固体加样操作的目标参数 +Resource vessel # 目标容器(必需) +string reagent # 试剂名称(必需) +string mass # 质量字符串(如 "2.9 g",可选) +string mol # 摩尔数字符串(如 "0.12 mol",可选) +string purpose # 添加目的(可选) +--- +# Result - 操作结果 +bool success # 操作是否成功 +string message # 结果消息 +string return_info # 返回信息 +--- +# Feedback - 实时反馈 +string current_status # 当前状态描述 +float64 progress # 进度百分比 (0-100) \ No newline at end of file diff --git a/unilabos_msgs/action/AdjustPH.action b/unilabos_msgs/action/AdjustPH.action new file mode 100644 index 0000000..33e2f4d --- /dev/null +++ b/unilabos_msgs/action/AdjustPH.action @@ -0,0 +1,13 @@ +# Request - 与您的 AdjustPHProtocol 类匹配 +Resource vessel +float64 ph_value +string reagent +--- +# Result - 标准结果格式 +bool success +string message +string return_info +--- +# Feedback - 标准反馈格式 +string status +float64 progress \ No newline at end of file diff --git a/unilabos_msgs/action/Centrifuge.action b/unilabos_msgs/action/Centrifuge.action index 356ccb9..755b6d1 100644 --- a/unilabos_msgs/action/Centrifuge.action +++ b/unilabos_msgs/action/Centrifuge.action @@ -1,5 +1,5 @@ # Goal - 离心操作的目标参数 -string vessel # 离心容器 +Resource vessel # 离心容器 float64 speed # 离心速度 (rpm) float64 time # 离心时间 (秒) float64 temp # 温度 (可选,摄氏度) diff --git a/unilabos_msgs/action/Clean.action b/unilabos_msgs/action/Clean.action index 8fb9be1..7318296 100644 --- a/unilabos_msgs/action/Clean.action +++ b/unilabos_msgs/action/Clean.action @@ -1,5 +1,5 @@ # Organic -string vessel # Vessel to clean. +Resource vessel # Vessel to clean. string solvent # Solvent to clean vessel with. float64 volume # Optional. Volume of solvent to clean vessel with. float64 temp # Optional. Temperature to heat vessel to while cleaning. diff --git a/unilabos_msgs/action/CleanVessel.action b/unilabos_msgs/action/CleanVessel.action index cba232a..950e9e2 100644 --- a/unilabos_msgs/action/CleanVessel.action +++ b/unilabos_msgs/action/CleanVessel.action @@ -1,4 +1,4 @@ -string vessel # 要清洗的容器名称 +Resource vessel # 要清洗的容器名称 string solvent # 用于清洗容器的溶剂名称 float64 volume # 清洗溶剂的体积,可选参数 float64 temp # 清洗时的温度,可选参数 diff --git a/unilabos_msgs/action/Crystallize.action b/unilabos_msgs/action/Crystallize.action index 50d26cf..6b0f537 100644 --- a/unilabos_msgs/action/Crystallize.action +++ b/unilabos_msgs/action/Crystallize.action @@ -1,5 +1,5 @@ # Goal - 结晶操作的目标参数 -string vessel # 结晶容器 +Resource vessel # 结晶容器 float64 ramp_time # 升温/降温时间 (可选,秒) float64 ramp_temp # 目标温度 (可选,摄氏度) --- diff --git a/unilabos_msgs/action/Dissolve.action b/unilabos_msgs/action/Dissolve.action index 6b860d0..be2cc46 100644 --- a/unilabos_msgs/action/Dissolve.action +++ b/unilabos_msgs/action/Dissolve.action @@ -1,14 +1,21 @@ -string vessel # 装有要溶解物质的容器名称 -string solvent # 用于溶解物质的溶剂名称 -float64 volume # 溶剂的体积,可选参数 -string amount # 要溶解物质的量,可选参数 -float64 temp # 溶解时的温度,可选参数 -float64 time # 溶解的时间,可选参数 -float64 stir_speed # 搅拌速度,可选参数 +# Goal - 溶解操作的目标参数 +Resource vessel # 装有要溶解物质的容器名称(必需) +string solvent # 用于溶解物质的溶剂名称(可选) +string volume # 溶剂的体积(如 "10 mL",可选) +string amount # 要溶解物质的量描述(可选) +string temp # 溶解时的温度(如 "60 °C", "room temperature",可选) +string time # 溶解的时间(如 "30 min", "1 h",可选) +float64 stir_speed # 搅拌速度(可选,默认300 RPM) +string mass # 物质质量(如 "2.9 g",可选) +string mol # 物质摩尔数(如 "0.12 mol",可选) +string reagent # 试剂名称(可选) +string event # 事件标识(如 'A', 'B',可选) --- +# Result - 操作结果 bool success # 操作是否成功 string message # 结果消息 string return_info --- +# Feedback - 实时反馈 string status # 当前状态描述 float64 progress # 进度百分比 (0-100) \ No newline at end of file diff --git a/unilabos_msgs/action/Dry.action b/unilabos_msgs/action/Dry.action index 5692ef2..224b21e 100644 --- a/unilabos_msgs/action/Dry.action +++ b/unilabos_msgs/action/Dry.action @@ -1,17 +1,12 @@ -# Goal - 干燥操作的目标参数 -string vessel # 干燥容器 -float64 time # 干燥时间 (可选,秒) -float64 pressure # 压力 (可选,Pa) -float64 temp # 温度 (可选,摄氏度) -bool continue_heatchill # 是否继续加热冷却 +# Request +string compound # 化合物 +Resource vessel # 干燥容器 --- -# Result - 操作结果 +# Result bool success # 操作是否成功 string message # 结果消息 string return_info --- -# Feedback - 实时反馈 -float64 progress # 进度百分比 (0-100) -float64 current_temp # 当前温度 -float64 current_pressure # 当前压力 -string current_status # 当前状态描述 \ No newline at end of file +# Feedback +string status # 当前状态描述 +float64 progress # 进度百分比 (0-100) \ No newline at end of file diff --git a/unilabos_msgs/action/EvacuateAndRefill.action b/unilabos_msgs/action/EvacuateAndRefill.action index 22ffc65..9e33855 100644 --- a/unilabos_msgs/action/EvacuateAndRefill.action +++ b/unilabos_msgs/action/EvacuateAndRefill.action @@ -1,7 +1,6 @@ -# Organic -string vessel +# Organic Synthesis Station EvacuateAndRefill Action +Resource vessel string gas -int32 repeats --- string return_info bool success diff --git a/unilabos_msgs/action/Evaporate.action b/unilabos_msgs/action/Evaporate.action index 45887f2..1a3973c 100644 --- a/unilabos_msgs/action/Evaporate.action +++ b/unilabos_msgs/action/Evaporate.action @@ -1,9 +1,10 @@ -# Organic -string vessel -float64 pressure -float64 temp -float64 time -float64 stir_speed +# Organic Synthesis Station Evaporate Action +Resource vessel # 目标容器 +float64 pressure # 真空度 +float64 temp # 温度 +string time # 🔧 蒸发时间(支持带单位,如"3 min","180",默认秒) +float64 stir_speed # 旋转速度 +string solvent # 溶剂名称 --- string return_info bool success diff --git a/unilabos_msgs/action/Filter.action b/unilabos_msgs/action/Filter.action index 564df1a..916697b 100644 --- a/unilabos_msgs/action/Filter.action +++ b/unilabos_msgs/action/Filter.action @@ -1,11 +1,11 @@ # Goal - 过滤操作的目标参数 -string vessel # 过滤容器 -string filtrate_vessel # 滤液容器 (可选) -bool stir # 是否搅拌 -float64 stir_speed # 搅拌速度 (可选) -float64 temp # 温度 (可选,摄氏度) -bool continue_heatchill # 是否继续加热冷却 -float64 volume # 过滤体积 (可选) +Resource vessel # 过滤容器(必需) +Resource filtrate_vessel # 滤液容器(可选) +bool stir # 是否搅拌(默认false) +float64 stir_speed # 搅拌速度(默认0.0) +float64 temp # 温度(默认25.0) +bool continue_heatchill # 是否继续加热冷却(默认false) +float64 volume # 过滤体积(默认0.0) --- # Result - 操作结果 bool success # 操作是否成功 diff --git a/unilabos_msgs/action/FilterThrough.action b/unilabos_msgs/action/FilterThrough.action index dbabd12..0d9de9b 100644 --- a/unilabos_msgs/action/FilterThrough.action +++ b/unilabos_msgs/action/FilterThrough.action @@ -1,6 +1,6 @@ -string from_vessel # 源容器的名称,即物质起始所在的容器 -string to_vessel # 目标容器的名称,物质过滤后要到达的容器 -string filter_through # 过滤时所通过的介质,如滤纸、柱子等 +Resource from_vessel # 源容器的名称,即物质起始所在的容器 +Resource to_vessel # 目标容器的名称,物质过滤后要到达的容器 +Resource filter_through # 过滤时所通过的介质,如滤纸、柱子等 string eluting_solvent # 洗脱溶剂的名称,可选参数 float64 eluting_volume # 洗脱溶剂的体积,可选参数 int32 eluting_repeats # 洗脱操作的重复次数,默认为 0 diff --git a/unilabos_msgs/action/HeatChill.action b/unilabos_msgs/action/HeatChill.action index 87ebf52..ace7508 100644 --- a/unilabos_msgs/action/HeatChill.action +++ b/unilabos_msgs/action/HeatChill.action @@ -1,12 +1,19 @@ -# Organic -string vessel -float64 temp -float64 time -bool stir -float64 stir_speed -string purpose +# Goal - 加热冷却操作的目标参数 +Resource vessel # 加热容器名称(必需) +float64 temp # 目标温度(可选,默认25.0) +string time # 🔧 加热时间(支持带单位,如"5 min","300",默认秒) +string temp_spec # 温度规格(可选) +string time_spec # 时间规格(可选) +string pressure # 压力规格(可选,不做特殊处理) +string reflux_solvent # 回流溶剂名称(可选,不做特殊处理) +bool stir # 是否搅拌(可选,默认false) +float64 stir_speed # 搅拌速度(可选,默认300.0) +string purpose # 操作目的(可选) --- +# Result - 操作结果 +bool success # 操作是否成功 +string message # 结果消息 string return_info -bool success --- -string status \ No newline at end of file +# Feedback - 实时反馈 +string status # 当前状态描述 \ No newline at end of file diff --git a/unilabos_msgs/action/HeatChillStart.action b/unilabos_msgs/action/HeatChillStart.action index 565bad1..4a9947c 100644 --- a/unilabos_msgs/action/HeatChillStart.action +++ b/unilabos_msgs/action/HeatChillStart.action @@ -1,5 +1,5 @@ # Organic -string vessel +Resource vessel float64 temp string purpose --- diff --git a/unilabos_msgs/action/HeatChillStop.action b/unilabos_msgs/action/HeatChillStop.action index 280ca15..1855448 100644 --- a/unilabos_msgs/action/HeatChillStop.action +++ b/unilabos_msgs/action/HeatChillStop.action @@ -1,5 +1,5 @@ # Organic -string vessel +Resource vessel --- string return_info bool success diff --git a/unilabos_msgs/action/Hydrogenate.action b/unilabos_msgs/action/Hydrogenate.action new file mode 100644 index 0000000..4fa7fa9 --- /dev/null +++ b/unilabos_msgs/action/Hydrogenate.action @@ -0,0 +1,13 @@ +# Request +string temp +string time +Resource vessel +--- +# Result +bool success +string message +string return_info +--- +# Feedback +string status +float64 progress \ No newline at end of file diff --git a/unilabos_msgs/action/LiquidHandlerSetLiquid.action b/unilabos_msgs/action/LiquidHandlerSetLiquid.action new file mode 100644 index 0000000..ca4827c --- /dev/null +++ b/unilabos_msgs/action/LiquidHandlerSetLiquid.action @@ -0,0 +1,6 @@ +Resource[] wells +string[] liquid_names +float64[] volumes +--- +string return_info +--- \ No newline at end of file diff --git a/unilabos_msgs/action/LiquidHandlerSetTipRack.action b/unilabos_msgs/action/LiquidHandlerSetTipRack.action new file mode 100644 index 0000000..eb34fee --- /dev/null +++ b/unilabos_msgs/action/LiquidHandlerSetTipRack.action @@ -0,0 +1,5 @@ +Resource[] tip_racks +--- +string return_info +bool success +--- diff --git a/unilabos_msgs/action/PumpTransfer.action b/unilabos_msgs/action/PumpTransfer.action index 69d22b6..c551139 100644 --- a/unilabos_msgs/action/PumpTransfer.action +++ b/unilabos_msgs/action/PumpTransfer.action @@ -1,6 +1,6 @@ # Organic -string from_vessel -string to_vessel +Resource from_vessel +Resource to_vessel float64 volume string amount float64 time @@ -9,6 +9,11 @@ string rinsing_solvent float64 rinsing_volume int32 rinsing_repeats bool solid +float64 flowrate +float64 transfer_flowrate +string rate_spec +string event +string through --- string return_info bool success diff --git a/unilabos_msgs/action/Purge.action b/unilabos_msgs/action/Purge.action index 00d76b3..8928619 100644 --- a/unilabos_msgs/action/Purge.action +++ b/unilabos_msgs/action/Purge.action @@ -1,5 +1,5 @@ # Goal - 清洗/吹扫操作的目标参数 -string vessel # 清洗容器 +Resource vessel # 清洗容器 string gas # 清洗气体 (可选) float64 time # 清洗时间 (可选,秒) float64 pressure # 压力 (可选,Pa) diff --git a/unilabos_msgs/action/Recrystallize.action b/unilabos_msgs/action/Recrystallize.action new file mode 100644 index 0000000..0b41746 --- /dev/null +++ b/unilabos_msgs/action/Recrystallize.action @@ -0,0 +1,15 @@ +# Request +string ratio # 溶剂比例(如"1:1","3:7") +string solvent1 # 第一种溶剂 +string solvent2 # 第二种溶剂 +Resource vessel # 目标容器 +string volume # 🔧 总体积(支持带单位,如"100 mL","50",默认mL) +--- +# Result +bool success +string message +string return_info +--- +# Feedback +string status +float64 progress \ No newline at end of file diff --git a/unilabos_msgs/action/ResetHandling.action b/unilabos_msgs/action/ResetHandling.action new file mode 100644 index 0000000..e29c488 --- /dev/null +++ b/unilabos_msgs/action/ResetHandling.action @@ -0,0 +1,12 @@ +# Request +string solvent +Resource vessel +--- +# Result +bool success +string message +string return_info +--- +# Feedback +string status +float64 progress \ No newline at end of file diff --git a/unilabos_msgs/action/RunColumn.action b/unilabos_msgs/action/RunColumn.action index 3fba948..a22928d 100644 --- a/unilabos_msgs/action/RunColumn.action +++ b/unilabos_msgs/action/RunColumn.action @@ -1,10 +1,19 @@ -string from_vessel # 源容器的名称,即样品起始所在的容器 -string to_vessel # 目标容器的名称,分离后的样品要到达的容器 -string column # 所使用的柱子的名称 +# Goal - 柱层析操作的目标参数 +Resource from_vessel # 源容器的名称,即样品起始所在的容器(必需) +Resource to_vessel # 目标容器的名称,分离后的样品要到达的容器(必需) +string column # 所使用的柱子的名称(必需) +string rf # Rf值(可选) +string pct1 # 第一种溶剂百分比(如 "40 %",可选) +string pct2 # 第二种溶剂百分比(如 "50 %",可选) +string solvent1 # 第一种溶剂名称(可选) +string solvent2 # 第二种溶剂名称(可选) +string ratio # 溶剂比例(如 "5:95",可选) --- +# Result - 操作结果 bool success # 操作是否成功 string message # 结果消息 string return_info --- +# Feedback - 实时反馈 string status # 当前状态描述 float64 progress # 进度百分比 (0-100) \ No newline at end of file diff --git a/unilabos_msgs/action/Separate.action b/unilabos_msgs/action/Separate.action index fe8976a..83436d5 100644 --- a/unilabos_msgs/action/Separate.action +++ b/unilabos_msgs/action/Separate.action @@ -1,22 +1,27 @@ -# Organic -string purpose # 'wash' or 'extract'. 'wash' means that product phase will not be the added solvent phase, 'extract' means product phase will be the added solvent phase. If no solvent is added just use 'extract'. -string product_phase # 'top' or 'bottom'. Phase that product will be in. -string from_vessel #Contents of from_vessel are transferred to separation_vessel and separation is performed. -string separation_vessel # Vessel in which separation of phases will be carried out. -string to_vessel # Vessel to send product phase to. -string waste_phase_to_vessel # Optional. Vessel to send waste phase to. -string solvent # Optional. Solvent to add to separation vessel after contents of from_vessel has been transferred to create two phases. -float64 solvent_volume # Optional. Volume of solvent to add. -string through # Optional. Solid chemical to send product phase through on way to to_vessel, e.g. 'celite'. -int32 repeats # Optional. Number of separations to perform. -float64 stir_time # Optional. Time stir for after adding solvent, before separation of phases. -float64 stir_speed # Optional. Speed to stir at after adding solvent, before separation of phases. -float64 settling_time # Optional. Time +# Goal - 分离操作的目标参数 +Resource vessel # 分离容器名称(XDL参数,必需) +string purpose # 分离目的 ('wash', 'extract', 'separate',可选) +string product_phase # 产物相 ('top', 'bottom',可选) +Resource from_vessel # 源容器(可选) +Resource separation_vessel # 分离容器(与vessel同义,可选) +Resource to_vessel # 目标容器(可选) +Resource waste_phase_to_vessel # 废相目标容器(可选) +Resource product_vessel # 产物收集容器(XDL参数,可选) +Resource waste_vessel # 废液收集容器(XDL参数,可选) +string solvent # 溶剂名称(可选) +string solvent_volume # 溶剂体积(如 "200 mL",可选) +string volume # 体积规格(XDL参数,如 "?",可选) +string through # 通过材料(如 'celite',可选) +int32 repeats # 重复次数(可选,默认1) +float64 stir_time # 搅拌时间(可选,默认30秒) +float64 stir_speed # 搅拌速度(可选,默认300 RPM) +float64 settling_time # 沉降时间(可选,默认300秒) --- +# Result - 操作结果 +bool success # 操作是否成功 +string message # 结果消息 string return_info -bool success --- -string status -string current_device -builtin_interfaces/Duration time_spent -builtin_interfaces/Duration time_remaining +# Feedback - 实时反馈 +string status # 当前状态描述 +float64 progress # 进度百分比 (0-100) diff --git a/unilabos_msgs/action/StartPurge.action b/unilabos_msgs/action/StartPurge.action index f5500a6..207019c 100644 --- a/unilabos_msgs/action/StartPurge.action +++ b/unilabos_msgs/action/StartPurge.action @@ -1,5 +1,5 @@ # Goal - 启动清洗/吹扫操作的目标参数 -string vessel # 清洗容器 +Resource vessel # 清洗容器 string gas # 清洗气体 (可选) float64 pressure # 压力 (可选,Pa) float64 flow_rate # 流速 (可选,mL/min) diff --git a/unilabos_msgs/action/StartStir.action b/unilabos_msgs/action/StartStir.action index 534c9f3..30c8301 100644 --- a/unilabos_msgs/action/StartStir.action +++ b/unilabos_msgs/action/StartStir.action @@ -1,5 +1,5 @@ # Goal - 启动搅拌操作的目标参数 -string vessel # 搅拌容器 +Resource vessel # 搅拌容器 float64 stir_speed # 搅拌速度 (可选,rpm) string purpose # 搅拌目的 (可选) --- diff --git a/unilabos_msgs/action/Stir.action b/unilabos_msgs/action/Stir.action index 9542f9d..0760672 100644 --- a/unilabos_msgs/action/Stir.action +++ b/unilabos_msgs/action/Stir.action @@ -1,9 +1,16 @@ -# Organic -float64 stir_time -float64 stir_speed -float64 settling_time +# Goal - 搅拌操作的目标参数 +Resource vessel # 搅拌容器名称(必需) +string time # 🔧 搅拌时间(如 "0.5 h", "30 min", "300",默认秒) +string event # 事件标识(如 "A", "B") +string time_spec # 时间规格(如 "several minutes") +float64 stir_time # 解析后的搅拌时间(秒) +float64 stir_speed # 搅拌速度(默认200.0) +string settling_time # 🔧 沉降时间(支持带单位,默认秒) --- +# Result - 操作结果 +bool success # 操作是否成功 +string message # 结果消息 string return_info -bool success --- -string status \ No newline at end of file +# Feedback - 实时反馈 +string status # 当前状态描述 \ No newline at end of file diff --git a/unilabos_msgs/action/StopPurge.action b/unilabos_msgs/action/StopPurge.action index b7db891..123fa35 100644 --- a/unilabos_msgs/action/StopPurge.action +++ b/unilabos_msgs/action/StopPurge.action @@ -1,5 +1,5 @@ # Goal - 停止清洗/吹扫操作的目标参数 -string vessel # 清洗容器 +Resource vessel # 清洗容器 --- # Result - 操作结果 bool success # 操作是否成功 diff --git a/unilabos_msgs/action/StopStir.action b/unilabos_msgs/action/StopStir.action index a320598..135d0b7 100644 --- a/unilabos_msgs/action/StopStir.action +++ b/unilabos_msgs/action/StopStir.action @@ -1,5 +1,5 @@ # Goal - 停止搅拌操作的目标参数 -string vessel # 搅拌容器 +Resource vessel # 搅拌容器 --- # Result - 操作结果 bool success # 操作是否成功 diff --git a/unilabos_msgs/action/WashSolid.action b/unilabos_msgs/action/WashSolid.action index cb57e5c..99ba297 100644 --- a/unilabos_msgs/action/WashSolid.action +++ b/unilabos_msgs/action/WashSolid.action @@ -1,16 +1,23 @@ -string vessel # 装有固体物质的容器名称 -string solvent # 用于清洗固体的溶剂名称 -float64 volume # 清洗溶剂的体积 -string filtrate_vessel # 滤液要收集到的容器名称,可选参数 -float64 temp # 清洗时的温度,可选参数 -bool stir # 是否在清洗过程中搅拌,默认为 False -float64 stir_speed # 搅拌速度,可选参数 -float64 time # 清洗的时间,可选参数 -int32 repeats # 清洗操作的重复次数,默认为 1 +# Goal - 固体清洗操作的目标参数 +Resource vessel # 装有固体的容器名称(必需) +string solvent # 清洗溶剂名称(必需) +string volume # 🔧 体积(支持数字和带单位的字符串,如"100 mL","?") +Resource filtrate_vessel # 滤液收集容器(可选,默认"") +float64 temp # 清洗温度(可选,默认25.0) +bool stir # 是否搅拌(可选,默认false) +float64 stir_speed # 搅拌速度(可选,默认0.0) +string time # 🔧 清洗时间(支持带单位,如"5 min","300 s",默认秒) +int32 repeats # 重复次数(与repeats_spec二选一) +string volume_spec # 体积规格(优先级高于volume) +string repeats_spec # 重复次数规格(优先级高于repeats) +string mass # 固体质量描述(可选) +string event # 事件标识符(可选) --- -bool success # 操作是否成功 -string message # 结果消息 +# Result - 操作结果 +bool success # 操作是否成功 +string message # 结果消息 string return_info --- -string status # 当前状态描述 -float64 progress # 进度百分比 (0-100) \ No newline at end of file +# Feedback - 实时反馈 +string status # 当前状态描述 +float64 progress # 进度百分比 (0-100) \ No newline at end of file